[llvm-branch-commits] [llvm] CodeGen: Merge TargetLoweringObjectFile::getModuleMetadata into Initialize (PR #226837)
Matt Arsenault via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Sep 27 14:07:40 PDT 2026
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/226837
getModuleMetadata had a single caller, which invoked it immediately after
Initialize. Pass the module to Initialize and fold it in.
Co-Authored-By: Claude Opus 5 <noreply at anthropic.com>
>From e10e760418d7e791832474a1139f684810570f7e Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Sun, 27 Sep 2026 10:15:08 +0200
Subject: [PATCH] CodeGen: Merge TargetLoweringObjectFile::getModuleMetadata
into Initialize
getModuleMetadata had a single caller, which invoked it immediately after
Initialize. Pass the module to Initialize and fold it in.
Co-Authored-By: Claude Opus 5 <noreply at anthropic.com>
---
.../CodeGen/TargetLoweringObjectFileImpl.h | 35 +++++++-----
.../llvm/Target/TargetLoweringObjectFile.h | 19 +++----
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 2 -
llvm/lib/CodeGen/MachineModuleInfo.cpp | 4 +-
.../CodeGen/TargetLoweringObjectFileImpl.cpp | 54 +++++++++++--------
.../AArch64/AArch64TargetObjectFile.cpp | 5 +-
.../Target/AArch64/AArch64TargetObjectFile.h | 3 +-
llvm/lib/Target/ARM/ARMTargetObjectFile.cpp | 11 ++--
llvm/lib/Target/ARM/ARMTargetObjectFile.h | 5 +-
llvm/lib/Target/AVR/AVRTargetObjectFile.cpp | 5 +-
llvm/lib/Target/AVR/AVRTargetObjectFile.h | 3 +-
llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp | 5 +-
llvm/lib/Target/CSKY/CSKYTargetObjectFile.h | 3 +-
.../Hexagon/HexagonTargetObjectFile.cpp | 5 +-
.../Target/Hexagon/HexagonTargetObjectFile.h | 3 +-
.../Target/Lanai/LanaiTargetObjectFile.cpp | 6 +--
llvm/lib/Target/Lanai/LanaiTargetObjectFile.h | 3 +-
llvm/lib/Target/M68k/M68kTargetObjectFile.cpp | 5 +-
llvm/lib/Target/M68k/M68kTargetObjectFile.h | 3 +-
llvm/lib/Target/Mips/MipsTargetObjectFile.cpp | 5 +-
llvm/lib/Target/Mips/MipsTargetObjectFile.h | 3 +-
.../Target/PowerPC/PPCTargetObjectFile.cpp | 8 +--
llvm/lib/Target/PowerPC/PPCTargetObjectFile.h | 3 +-
.../Target/RISCV/RISCVTargetObjectFile.cpp | 30 +++++------
llvm/lib/Target/RISCV/RISCVTargetObjectFile.h | 5 +-
.../Target/Sparc/SparcTargetObjectFile.cpp | 5 +-
llvm/lib/Target/Sparc/SparcTargetObjectFile.h | 3 +-
llvm/lib/Target/TargetLoweringObjectFile.cpp | 7 +--
llvm/lib/Target/VE/VETargetMachine.cpp | 5 +-
.../WebAssemblyTargetObjectFile.cpp | 5 +-
.../WebAssembly/WebAssemblyTargetObjectFile.h | 3 +-
.../Target/XCore/XCoreTargetObjectFile.cpp | 8 +--
llvm/lib/Target/XCore/XCoreTargetObjectFile.h | 3 +-
llvm/unittests/CodeGen/TestAsmPrinter.cpp | 3 +-
llvm/unittests/CodeGen/TestAsmPrinter.h | 4 ++
llvm/unittests/CodeGen/X86MCInstLowerTest.cpp | 4 +-
.../DebugInfo/DWARF/DwarfGenerator.cpp | 3 +-
.../DebugInfo/DWARF/DwarfGenerator.h | 4 ++
38 files changed, 164 insertions(+), 126 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
index e76a1ac1720579..72a10441842cb1 100644
--- a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
+++ b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
@@ -47,12 +47,11 @@ class LLVM_ABI TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
public:
~TargetLoweringObjectFileELF() override = default;
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
-
- void getModuleMetadata(Module &M) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
/// Emit Obj-C garbage collection and linker options.
- void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
+ void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override;
void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &DL,
const MCSymbol *Sym,
@@ -63,7 +62,8 @@ class LLVM_ABI TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
const MCSymbol *Sym,
const MachineModuleInfo *MMI) const;
- void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override;
+ void emitLinkerDirectives(MCStreamer &Streamer,
+ const Module &M) const override;
/// Given a constant with the SectionKind, return a section that it should be
/// placed in.
@@ -141,15 +141,17 @@ class LLVM_ABI TargetLoweringObjectFileMachO : public TargetLoweringObjectFile {
TargetLoweringObjectFileMachO();
~TargetLoweringObjectFileMachO() override = default;
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
MCSection *getStaticDtorSection(unsigned Priority,
const MCSymbol *KeySym) const override;
/// Emit the module flags that specify the garbage collection information.
- void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
+ void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override;
- void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override;
+ void emitLinkerDirectives(MCStreamer &Streamer,
+ const Module &M) const override;
MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
const TargetMachine &TM) const override;
@@ -192,7 +194,8 @@ class LLVM_ABI TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile {
public:
~TargetLoweringObjectFileCOFF() override = default;
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind,
const TargetMachine &TM) const override;
@@ -209,9 +212,10 @@ class LLVM_ABI TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile {
const Function &F) const override;
/// Emit Obj-C garbage collection and linker options.
- void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
+ void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override;
- void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override;
+ void emitLinkerDirectives(MCStreamer &Streamer,
+ const Module &M) const override;
MCSection *getStaticCtorSection(unsigned Priority,
const MCSymbol *KeySym) const override;
@@ -238,7 +242,8 @@ class LLVM_ABI TargetLoweringObjectFileWasm : public TargetLoweringObjectFile {
TargetLoweringObjectFileWasm() = default;
~TargetLoweringObjectFileWasm() override = default;
- void getModuleMetadata(Module &M) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind,
const TargetMachine &TM) const override;
@@ -266,7 +271,8 @@ class LLVM_ABI TargetLoweringObjectFileXCOFF : public TargetLoweringObjectFile {
static MCSymbol *getEHInfoTableSymbol(const MachineFunction *MF);
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference,
const Function &F) const override;
@@ -328,7 +334,8 @@ class LLVM_ABI TargetLoweringObjectFileGOFF : public TargetLoweringObjectFile {
TargetLoweringObjectFileGOFF();
~TargetLoweringObjectFileGOFF() override = default;
- void getModuleMetadata(Module &M) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference,
const Function &F) const override;
diff --git a/llvm/include/llvm/Target/TargetLoweringObjectFile.h b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
index 3cce5974e67057..3ac4663b8d4c7d 100644
--- a/llvm/include/llvm/Target/TargetLoweringObjectFile.h
+++ b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
@@ -80,29 +80,30 @@ class LLVM_ABI TargetLoweringObjectFile : public MCObjectFileInfo {
/// This method must be called before any actual lowering is done. This
/// specifies the current context for codegen, and gives the lowering
- /// implementations a chance to set up their default sections.
- virtual void Initialize(MCContext &ctx, const TargetMachine &TM);
+ /// implementations a chance to set up their default sections and to inspect
+ /// the module-level metadata the platform cares about.
+ virtual void Initialize(MCContext &ctx, const TargetMachine &TM,
+ const Module &M);
virtual void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &TM,
const MCSymbol *Sym,
const MachineModuleInfo *MMI) const;
/// Emit the module-level metadata that the platform cares about.
- virtual void emitModuleMetadata(MCStreamer &Streamer, Module &M) const {}
+ virtual void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const {
+ }
/// Emit Call Graph Profile metadata.
- void emitCGProfileMetadata(MCStreamer &Streamer, Module &M) const;
+ void emitCGProfileMetadata(MCStreamer &Streamer, const Module &M) const;
/// Emit pseudo_probe_desc metadata.
- void emitPseudoProbeDescMetadata(MCStreamer &Streamer, Module &M,
+ void emitPseudoProbeDescMetadata(MCStreamer &Streamer, const Module &M,
std::function<void(MCStreamer &Streamer)>
COMDATSymEmitter = nullptr) const;
/// Process linker options metadata and emit platform-specific bits.
- virtual void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const {}
-
- /// Get the module-level metadata that the platform cares about.
- virtual void getModuleMetadata(Module &M) {}
+ virtual void emitLinkerDirectives(MCStreamer &Streamer,
+ const Module &M) const {}
/// Given a constant with the SectionKind, return a section that it should be
/// placed in.
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index bd929901612f97..750e5e756e0ee0 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -531,8 +531,6 @@ bool AsmPrinter::doInitialization(Module &M) {
AddrLabelSymbols = nullptr;
- TM.getObjFileLowering()->getModuleMetadata(M);
-
// On AIX, we delay emitting any section information until
// after emitting the .file pseudo-op. This allows additional
// information (such as the embedded command line) to be associated
diff --git a/llvm/lib/CodeGen/MachineModuleInfo.cpp b/llvm/lib/CodeGen/MachineModuleInfo.cpp
index cc7958e59f6809..d5c091f62cb587 100644
--- a/llvm/lib/CodeGen/MachineModuleInfo.cpp
+++ b/llvm/lib/CodeGen/MachineModuleInfo.cpp
@@ -220,7 +220,7 @@ bool MachineModuleInfoWrapperPass::doInitialization(Module &M) {
});
MMI.getTarget().verifyOptionsConsistency(M);
MMI.getTarget().getObjFileLowering()->Initialize(MMI.getContext(),
- MMI.getTarget());
+ MMI.getTarget(), M);
return false;
}
@@ -247,6 +247,6 @@ MachineModuleAnalysis::run(Module &M, ModuleAnalysisManager &) {
});
MMI.getTarget().verifyOptionsConsistency(M);
MMI.getTarget().getObjFileLowering()->Initialize(MMI.getContext(),
- MMI.getTarget());
+ MMI.getTarget(), M);
return Result(MMI);
}
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 68ff80ae1d376d..79f0b3e8c620f2 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -82,8 +82,8 @@ static cl::opt<bool> JumpTableInFunctionSection(
"jumptable-in-function-section", cl::Hidden, cl::init(false),
cl::desc("Putting Jump Table in function section"));
-static void GetObjCImageInfo(Module &M, unsigned &Version, unsigned &Flags,
- StringRef &Section) {
+static void GetObjCImageInfo(const Module &M, unsigned &Version,
+ unsigned &Flags, StringRef &Section) {
SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
M.getModuleFlagsMetadata(ModuleFlags);
@@ -121,8 +121,9 @@ static void GetObjCImageInfo(Module &M, unsigned &Version, unsigned &Flags,
//===----------------------------------------------------------------------===//
void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
- const TargetMachine &TgtM) {
- TargetLoweringObjectFile::Initialize(Ctx, TgtM);
+ const TargetMachine &TgtM,
+ const Module &M) {
+ TargetLoweringObjectFile::Initialize(Ctx, TgtM, M);
const CodeModel::Model CM = TgtM.getCodeModel();
InitializeELF(TgtM.Options.UseInitArray);
@@ -306,9 +307,7 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
default:
break;
}
-}
-void TargetLoweringObjectFileELF::getModuleMetadata(Module &M) {
SmallVector<GlobalValue *, 4> Vec;
collectUsedGlobalVariables(M, Vec, false);
for (GlobalValue *GV : Vec)
@@ -317,7 +316,7 @@ void TargetLoweringObjectFileELF::getModuleMetadata(Module &M) {
}
void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer,
- Module &M) const {
+ const Module &M) const {
auto &C = getContext();
emitLinkerDirectives(Streamer, M);
@@ -380,7 +379,7 @@ void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer,
}
void TargetLoweringObjectFileELF::emitLinkerDirectives(MCStreamer &Streamer,
- Module &M) const {
+ const Module &M) const {
auto &C = getContext();
if (NamedMDNode *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) {
auto *S = C.getELFSection(".linker-options", ELF::SHT_LLVM_LINKER_OPTIONS,
@@ -1314,8 +1313,9 @@ TargetLoweringObjectFileMachO::TargetLoweringObjectFileMachO() {
}
void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFile::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFile::Initialize(Ctx, TM, M);
if (TM.getRelocationModel() == Reloc::Static) {
StaticCtorSection = Ctx.getMachOSection("__TEXT", "__constructor", 0,
SectionKind::getData());
@@ -1348,7 +1348,7 @@ MCSection *TargetLoweringObjectFileMachO::getStaticDtorSection(
}
void TargetLoweringObjectFileMachO::emitModuleMetadata(MCStreamer &Streamer,
- Module &M) const {
+ const Module &M) const {
// Emit the linker options if present.
emitLinkerDirectives(Streamer, M);
@@ -1386,8 +1386,8 @@ void TargetLoweringObjectFileMachO::emitModuleMetadata(MCStreamer &Streamer,
Streamer.addBlankLine();
}
-void TargetLoweringObjectFileMachO::emitLinkerDirectives(MCStreamer &Streamer,
- Module &M) const {
+void TargetLoweringObjectFileMachO::emitLinkerDirectives(
+ MCStreamer &Streamer, const Module &M) const {
if (auto *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) {
for (const auto *Option : LinkerOptions->operands()) {
SmallVector<std::string, 4> StrOptions;
@@ -1948,7 +1948,7 @@ bool TargetLoweringObjectFileCOFF::shouldPutJumpTableInFunctionSection(
}
void TargetLoweringObjectFileCOFF::emitModuleMetadata(MCStreamer &Streamer,
- Module &M) const {
+ const Module &M) const {
emitLinkerDirectives(Streamer, M);
unsigned Version = 0;
@@ -1980,8 +1980,8 @@ void TargetLoweringObjectFileCOFF::emitModuleMetadata(MCStreamer &Streamer,
});
}
-void TargetLoweringObjectFileCOFF::emitLinkerDirectives(
- MCStreamer &Streamer, Module &M) const {
+void TargetLoweringObjectFileCOFF::emitLinkerDirectives(MCStreamer &Streamer,
+ const Module &M) const {
if (NamedMDNode *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) {
// Emit the linker options to the linker .drectve section. According to the
// spec, this section is a space-separated string containing flags for
@@ -2040,8 +2040,9 @@ void TargetLoweringObjectFileCOFF::emitLinkerDirectives(
}
void TargetLoweringObjectFileCOFF::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFile::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFile::Initialize(Ctx, TM, M);
const Triple &T = TM.getTargetTriple();
if (T.isWindowsMSVCEnvironment() || T.isWindowsItaniumEnvironment()) {
StaticCtorSection =
@@ -2298,7 +2299,11 @@ static unsigned getWasmSectionFlags(SectionKind K, bool Retain) {
return Flags;
}
-void TargetLoweringObjectFileWasm::getModuleMetadata(Module &M) {
+void TargetLoweringObjectFileWasm::Initialize(MCContext &Ctx,
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFile::Initialize(Ctx, TM, M);
+
SmallVector<GlobalValue *, 4> Vec;
collectUsedGlobalVariables(M, Vec, false);
for (GlobalValue *GV : Vec)
@@ -2711,8 +2716,9 @@ MCSection *TargetLoweringObjectFileXCOFF::getSectionForConstant(
}
void TargetLoweringObjectFileXCOFF::Initialize(MCContext &Ctx,
- const TargetMachine &TgtM) {
- TargetLoweringObjectFile::Initialize(Ctx, TgtM);
+ const TargetMachine &TgtM,
+ const Module &M) {
+ TargetLoweringObjectFile::Initialize(Ctx, TgtM, M);
TTypeEncoding =
dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_datarel |
(TgtM.getTargetTriple().isArch32Bit() ? dwarf::DW_EH_PE_sdata4
@@ -2858,7 +2864,11 @@ MCSection *TargetLoweringObjectFileXCOFF::getSectionForLSDA(
//===----------------------------------------------------------------------===//
TargetLoweringObjectFileGOFF::TargetLoweringObjectFileGOFF() = default;
-void TargetLoweringObjectFileGOFF::getModuleMetadata(Module &M) {
+void TargetLoweringObjectFileGOFF::Initialize(MCContext &Ctx,
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFile::Initialize(Ctx, TM, M);
+
// Construct the default names for the root SD and the ADA PR symbol.
StringRef FileName = sys::path::stem(M.getSourceFileName());
if (FileName.size() > 1 && FileName.starts_with('<') &&
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
index 2d01b321ce013a..b94e46a7445ef1 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
@@ -28,8 +28,9 @@ static cl::opt<bool> EmitAArch64DebugTLSLocation(
cl::Hidden);
void AArch64_ELFTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
PLTPCRelativeSpecifier = AArch64::S_PLT;
SupportIndirectSymViaGOTPCRel = true;
SupportDebugThreadLocalLocation = EmitAArch64DebugTLSLocation;
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
index 78c0c22da8d1b7..70263ff29ff16c 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
+++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
@@ -17,7 +17,8 @@ namespace llvm {
/// This implementation is used for AArch64 ELF targets (Linux in particular).
class AArch64_ELFTargetObjectFile : public TargetLoweringObjectFileELF {
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
public:
const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV,
diff --git a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
index 44040be9c8db9e..f9a1db871902d4 100644
--- a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
+++ b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
@@ -33,14 +33,14 @@ ARMElfTargetObjectFile::ARMElfTargetObjectFile() {
SupportIndirectSymViaGOTPCRel = true;
}
-void ARMElfTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
+void ARMElfTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) {
const ARMBaseTargetMachine &ARM_TM =
static_cast<const ARMBaseTargetMachine &>(TM);
bool genExecuteOnly =
ARM_TM.getMCSubtargetInfo().hasFeature(ARM::FeatureExecuteOnly);
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
// Make code section unreadable when in execute-only mode
if (genExecuteOnly) {
@@ -53,12 +53,7 @@ void ARMElfTargetObjectFile::Initialize(MCContext &Ctx,
TextSection =
Ctx.getELFSection(".text", Type, Flags, 0, "", false, 0U, nullptr);
}
-}
-
-void ARMElfTargetObjectFile::getModuleMetadata(Module &M) {
- TargetLoweringObjectFileELF::getModuleMetadata(M);
- const auto &ARM_TM = static_cast<const ARMBaseTargetMachine &>(*TM);
bool isAAPCS_ABI = ARM_TM.getEffectiveABI(M) == ARM::ARMABI::ARM_ABI_AAPCS;
InitializeELF(isAAPCS_ABI);
diff --git a/llvm/lib/Target/ARM/ARMTargetObjectFile.h b/llvm/lib/Target/ARM/ARMTargetObjectFile.h
index 02cd138cf5c04d..eab097978a7942 100644
--- a/llvm/lib/Target/ARM/ARMTargetObjectFile.h
+++ b/llvm/lib/Target/ARM/ARMTargetObjectFile.h
@@ -18,9 +18,8 @@ namespace llvm {
class ARMElfTargetObjectFile : public TargetLoweringObjectFileELF {
public:
ARMElfTargetObjectFile();
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
-
- void getModuleMetadata(Module &M) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
MCRegister getStaticBase() const override;
diff --git a/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp b/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp
index 8cab0f3ba95b4b..c67de44ccf37eb 100644
--- a/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp
+++ b/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp
@@ -18,8 +18,9 @@
#include "AVR.h"
namespace llvm {
-void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) {
- Base::Initialize(Ctx, TM);
+void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) {
+ Base::Initialize(Ctx, TM, M);
ProgmemDataSection =
Ctx.getELFSection(".progmem.data", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
Progmem1DataSection =
diff --git a/llvm/lib/Target/AVR/AVRTargetObjectFile.h b/llvm/lib/Target/AVR/AVRTargetObjectFile.h
index 609849b4402957..10034bd39f4b6e 100644
--- a/llvm/lib/Target/AVR/AVRTargetObjectFile.h
+++ b/llvm/lib/Target/AVR/AVRTargetObjectFile.h
@@ -18,7 +18,8 @@ class AVRTargetObjectFile : public TargetLoweringObjectFileELF {
typedef TargetLoweringObjectFileELF Base;
public:
- void Initialize(MCContext &ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &ctx, const TargetMachine &TM,
+ const Module &M) override;
MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
const TargetMachine &TM) const override;
diff --git a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp
index b5592d34ca54b1..b5c9d2d4508bcb 100644
--- a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp
+++ b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp
@@ -14,8 +14,9 @@
using namespace llvm;
void CSKYELFTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
PersonalityEncoding =
diff --git a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h
index a82f2681c12aef..387580c00ce00b 100644
--- a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h
+++ b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h
@@ -16,7 +16,8 @@ namespace llvm {
class CSKYELFTargetObjectFile : public TargetLoweringObjectFileELF {
public:
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
};
} // namespace llvm
diff --git a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
index 0212dffa386457..dac3786b213ad4 100644
--- a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
@@ -110,8 +110,9 @@ static const char *getSectionSuffixForSize(unsigned Size) {
}
void HexagonTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
SmallDataSection =
getContext().getELFSection(".sdata", ELF::SHT_PROGBITS,
diff --git a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h
index 550aac72346f3d..aed5b649f6b99b 100644
--- a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h
+++ b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h
@@ -17,7 +17,8 @@ namespace llvm {
class HexagonTargetObjectFile : public TargetLoweringObjectFileELF {
public:
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
const TargetMachine &TM) const override;
diff --git a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp
index 472ee41b35599d..243653493b08c2 100644
--- a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp
+++ b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp
@@ -22,9 +22,9 @@ static cl::opt<unsigned> SSThreshold(
cl::desc("Small data and bss section threshold size (default=0)"),
cl::init(0));
-void LanaiTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+void LanaiTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
SmallDataSection = getContext().getELFSection(
".sdata", ELF::SHT_PROGBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC);
diff --git a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h
index ade56f9d6bccf5..083823d13491b1 100644
--- a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h
+++ b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h
@@ -22,7 +22,8 @@ class LanaiTargetObjectFile : public TargetLoweringObjectFileELF {
const TargetMachine &TM) const;
public:
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
/// Return true if this global address should be placed into small data/bss
/// section.
diff --git a/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp b/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp
index 5aed6b8fe38e1c..8dd91c83c35d3e 100644
--- a/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp
+++ b/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp
@@ -32,8 +32,9 @@ static cl::opt<unsigned> SSThreshold(
cl::init(8));
void M68kELFTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
InitializeELF(TM.Options.UseInitArray);
// FIXME do we need `.sdata` and `.sbss` explicitly?
diff --git a/llvm/lib/Target/M68k/M68kTargetObjectFile.h b/llvm/lib/Target/M68k/M68kTargetObjectFile.h
index 3d145aa434750b..0df600a3e3e726 100644
--- a/llvm/lib/Target/M68k/M68kTargetObjectFile.h
+++ b/llvm/lib/Target/M68k/M68kTargetObjectFile.h
@@ -22,7 +22,8 @@ class M68kELFTargetObjectFile : public TargetLoweringObjectFileELF {
MCSection *SmallBSSSection;
public:
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
};
} // end namespace llvm
diff --git a/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp b/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp
index 3ca44a2ab3e378..3caa2fa731756b 100644
--- a/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp
+++ b/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp
@@ -40,8 +40,9 @@ EmbeddedData("membedded-data", cl::Hidden,
" sections if possible: .rodata, .sdata, .data ."),
cl::init(false));
-void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
SmallDataSection = getContext().getELFSection(
".sdata", ELF::SHT_PROGBITS,
diff --git a/llvm/lib/Target/Mips/MipsTargetObjectFile.h b/llvm/lib/Target/Mips/MipsTargetObjectFile.h
index 09ec2a9f920958..2618b18c5c5c4e 100644
--- a/llvm/lib/Target/Mips/MipsTargetObjectFile.h
+++ b/llvm/lib/Target/Mips/MipsTargetObjectFile.h
@@ -24,7 +24,8 @@ class MipsTargetObjectFile : public TargetLoweringObjectFileELF {
explicit MipsTargetObjectFile(bool UseSmallSection)
: UseSmallSection(UseSmallSection) {}
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
/// Return true if this global address should be placed into small data/bss
/// section.
diff --git a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp
index 29e4286cf4adab..6df78f6bdec589 100644
--- a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp
+++ b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp
@@ -14,10 +14,10 @@
using namespace llvm;
-void
-PPC64LinuxTargetObjectFile::
-Initialize(MCContext &Ctx, const TargetMachine &TM) {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+void PPC64LinuxTargetObjectFile::Initialize(MCContext &Ctx,
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
}
MCSection *PPC64LinuxTargetObjectFile::SelectSectionForGlobal(
diff --git a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h
index 78a5840c87c721..75e23d714fcb80 100644
--- a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h
+++ b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h
@@ -19,7 +19,8 @@ namespace llvm {
/// 64-bit PowerPC Linux.
class PPC64LinuxTargetObjectFile : public TargetLoweringObjectFileELF {
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
const TargetMachine &TM) const override;
diff --git a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp
index 9f3666f1a2ff69..0df0189b681bac 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp
@@ -24,8 +24,9 @@ unsigned RISCVELFTargetObjectFile::getTextSectionAlignment() const {
}
void RISCVELFTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
PLTPCRelativeSpecifier = ELF::R_RISCV_PLT32;
SupportIndirectSymViaGOTPCRel = true;
@@ -44,6 +45,17 @@ void RISCVELFTargetObjectFile::Initialize(MCContext &Ctx,
".srodata.cst16", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 16);
SmallROData32Section = getContext().getELFSection(
".srodata.cst32", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 32);
+
+ SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
+ M.getModuleFlagsMetadata(ModuleFlags);
+
+ for (const auto &MFE : ModuleFlags) {
+ StringRef Key = MFE.Key->getString();
+ if (Key == "SmallDataLimit") {
+ SSThreshold = mdconst::extract<ConstantInt>(MFE.Val)->getZExtValue();
+ break;
+ }
+ }
}
const MCExpr *RISCVELFTargetObjectFile::getIndirectSymViaGOTPCRel(
@@ -139,20 +151,6 @@ MCSection *RISCVELFTargetObjectFile::SelectSectionForGlobal(
return TargetLoweringObjectFileELF::SelectSectionForGlobal(GO, Kind, TM);
}
-void RISCVELFTargetObjectFile::getModuleMetadata(Module &M) {
- TargetLoweringObjectFileELF::getModuleMetadata(M);
- SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
- M.getModuleFlagsMetadata(ModuleFlags);
-
- for (const auto &MFE : ModuleFlags) {
- StringRef Key = MFE.Key->getString();
- if (Key == "SmallDataLimit") {
- SSThreshold = mdconst::extract<ConstantInt>(MFE.Val)->getZExtValue();
- break;
- }
- }
-}
-
/// Return true if this constant should be placed into small data section.
bool RISCVELFTargetObjectFile::isConstantInSmallSection(
const DataLayout &DL, const Constant *CN) const {
diff --git a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
index db03a0546079da..902f6b5a342ac5 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
+++ b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
@@ -27,7 +27,8 @@ class RISCVELFTargetObjectFile : public TargetLoweringObjectFileELF {
public:
unsigned getTextSectionAlignment() const override;
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
/// Return true if this global address should be placed into small data/bss
/// section.
@@ -44,8 +45,6 @@ class RISCVELFTargetObjectFile : public TargetLoweringObjectFileELF {
const Constant *C, Align &Alignment,
const Function *F) const override;
- void getModuleMetadata(Module &M) override;
-
bool isInSmallSection(uint64_t Size) const;
const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV,
diff --git a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
index b1919647590828..507319a8dbc367 100644
--- a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
+++ b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
@@ -16,8 +16,9 @@
using namespace llvm;
void SparcELFTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
}
const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
diff --git a/llvm/lib/Target/Sparc/SparcTargetObjectFile.h b/llvm/lib/Target/Sparc/SparcTargetObjectFile.h
index 28ab139180423c..54202c8f92e2fd 100644
--- a/llvm/lib/Target/Sparc/SparcTargetObjectFile.h
+++ b/llvm/lib/Target/Sparc/SparcTargetObjectFile.h
@@ -20,7 +20,8 @@ class SparcELFTargetObjectFile : public TargetLoweringObjectFileELF {
public:
SparcELFTargetObjectFile() = default;
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
const MCExpr *getTTypeGlobalReference(const GlobalValue *GV,
unsigned Encoding,
diff --git a/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp
index b94c374e1dbd59..a596a645a56eaf 100644
--- a/llvm/lib/Target/TargetLoweringObjectFile.cpp
+++ b/llvm/lib/Target/TargetLoweringObjectFile.cpp
@@ -40,7 +40,8 @@ using namespace llvm;
/// done. This specifies the current context for codegen, and gives the
/// lowering implementations a chance to set up their default sections.
void TargetLoweringObjectFile::Initialize(MCContext &ctx,
- const TargetMachine &TM) {
+ const TargetMachine &TM,
+ const Module &M) {
// `Initialize` can be called more than once.
delete Mang;
Mang = new Mangler();
@@ -148,7 +149,7 @@ void TargetLoweringObjectFile::emitPersonalityValue(
const MachineModuleInfo *MMI) const {}
void TargetLoweringObjectFile::emitCGProfileMetadata(MCStreamer &Streamer,
- Module &M) const {
+ const Module &M) const {
MCContext &C = getContext();
SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
M.getModuleFlagsMetadata(ModuleFlags);
@@ -194,7 +195,7 @@ void TargetLoweringObjectFile::emitCGProfileMetadata(MCStreamer &Streamer,
}
void TargetLoweringObjectFile::emitPseudoProbeDescMetadata(
- MCStreamer &Streamer, Module &M,
+ MCStreamer &Streamer, const Module &M,
std::function<void(MCStreamer &Streamer)> COMDATSymEmitter) const {
NamedMDNode *FuncInfo = M.getNamedMetadata(PseudoProbeDescMetadataName);
if (!FuncInfo)
diff --git a/llvm/lib/Target/VE/VETargetMachine.cpp b/llvm/lib/Target/VE/VETargetMachine.cpp
index ae61da2fb441bf..af561ae1b5ba31 100644
--- a/llvm/lib/Target/VE/VETargetMachine.cpp
+++ b/llvm/lib/Target/VE/VETargetMachine.cpp
@@ -41,8 +41,9 @@ static Reloc::Model getEffectiveRelocModel(std::optional<Reloc::Model> RM) {
namespace {
class VEELFTargetObjectFile : public TargetLoweringObjectFileELF {
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override {
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
InitializeELF(TM.Options.UseInitArray);
}
};
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp
index 22dee6e874ada0..af428bdeade323 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp
@@ -17,7 +17,8 @@
using namespace llvm;
void WebAssemblyTargetObjectFile::Initialize(MCContext &Ctx,
- const TargetMachine &TM) {
- TargetLoweringObjectFileWasm::Initialize(Ctx, TM);
+ const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileWasm::Initialize(Ctx, TM, M);
InitializeWasm();
}
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h
index f46bb2040a7d4b..c87f30fe23d7f9 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h
@@ -21,7 +21,8 @@ namespace llvm {
class WebAssemblyTargetObjectFile final : public TargetLoweringObjectFileWasm {
public:
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
};
} // end namespace llvm
diff --git a/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp b/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
index 5a8a4d396a1da9..68babb7dcba0a6 100644
--- a/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
+++ b/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
@@ -16,9 +16,9 @@
using namespace llvm;
-
-void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) {
+ TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
BSSSection = Ctx.getELFSection(".dp.bss", ELF::SHT_NOBITS,
ELF::SHF_ALLOC | ELF::SHF_WRITE |
@@ -60,7 +60,7 @@ void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
// TextSection - see MObjectFileInfo.cpp
// StaticCtorSection - see MObjectFileInfo.cpp
// StaticDtorSection - see MObjectFileInfo.cpp
- }
+}
static unsigned getXCoreSectionType(SectionKind K) {
if (K.isBSS())
diff --git a/llvm/lib/Target/XCore/XCoreTargetObjectFile.h b/llvm/lib/Target/XCore/XCoreTargetObjectFile.h
index f9b895795c94a1..1fe571e4b295a9 100644
--- a/llvm/lib/Target/XCore/XCoreTargetObjectFile.h
+++ b/llvm/lib/Target/XCore/XCoreTargetObjectFile.h
@@ -22,7 +22,8 @@ static const unsigned CodeModelLargeSize = 256;
MCSection *DataRelROSectionLarge;
public:
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+ void Initialize(MCContext &Ctx, const TargetMachine &TM,
+ const Module &M) override;
MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind,
const TargetMachine &TM) const override;
diff --git a/llvm/unittests/CodeGen/TestAsmPrinter.cpp b/llvm/unittests/CodeGen/TestAsmPrinter.cpp
index 8d30e457178fc4..f39ad8c089a3fe 100644
--- a/llvm/unittests/CodeGen/TestAsmPrinter.cpp
+++ b/llvm/unittests/CodeGen/TestAsmPrinter.cpp
@@ -59,7 +59,8 @@ llvm::Error TestAsmPrinter::init(const Target *TheTarget, StringRef TripleName,
MC.reset(new MCContext(TheTriple, TM->getMCAsmInfo(), TM->getMCRegisterInfo(),
TM->getMCSubtargetInfo()));
- TM->getObjFileLowering()->Initialize(*MC, *TM);
+ M = std::make_unique<Module>("TestAsmPrinter", Context);
+ TM->getObjFileLowering()->Initialize(*MC, *TM, *M);
MC->setObjectFileInfo(TM->getObjFileLowering());
MS = new StrictMock<MockMCStreamer>(MC.get());
diff --git a/llvm/unittests/CodeGen/TestAsmPrinter.h b/llvm/unittests/CodeGen/TestAsmPrinter.h
index 372214a55fcfeb..3f859f95bcd51a 100644
--- a/llvm/unittests/CodeGen/TestAsmPrinter.h
+++ b/llvm/unittests/CodeGen/TestAsmPrinter.h
@@ -10,6 +10,8 @@
#define LLVM_UNITTESTS_CODEGEN_TESTASMPRINTER_H
#include "llvm/BinaryFormat/Dwarf.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
#include "llvm/MC/MCStreamer.h"
#include "gmock/gmock.h"
@@ -51,6 +53,8 @@ class TestAsmPrinter {
std::unique_ptr<MCContext> MC;
MockMCStreamer *MS = nullptr; // Owned by AsmPrinter
std::unique_ptr<TargetMachine> TM;
+ LLVMContext Context;
+ std::unique_ptr<Module> M;
std::unique_ptr<AsmPrinter> Asm;
/// Private constructor; call TestAsmPrinter::create(...)
diff --git a/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp b/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp
index 32d77d16c32728..e6073cf84996d3 100644
--- a/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp
+++ b/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp
@@ -55,7 +55,7 @@ class X86MCInstLowerTest : public testing::Test {
MC.reset(new MCContext(TM->getTargetTriple(), TM->getMCAsmInfo(),
TM->getMCRegisterInfo(), TM->getMCSubtargetInfo()));
MC->setObjectFileInfo(TM->getObjFileLowering());
- TM->getObjFileLowering()->Initialize(*MC, *TM);
+ TM->getObjFileLowering()->Initialize(*MC, *TM, *M);
MC->setObjectFileInfo(TM->getObjFileLowering());
// Use a new MCContext for AsmPrinter for testing.
@@ -131,7 +131,7 @@ class X86MCInstLowerTest : public testing::Test {
TM->getMCRegisterInfo(),
TM->getMCSubtargetInfo()));
MCFoo->setObjectFileInfo(TM->getObjFileLowering());
- TM->getObjFileLowering()->Initialize(*MCFoo, *TM);
+ TM->getObjFileLowering()->Initialize(*MCFoo, *TM, *M);
MCFoo->setObjectFileInfo(TM->getObjFileLowering());
}
diff --git a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp
index 65e3fc234b8d66..e5a03ef6b0a671 100644
--- a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp
+++ b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp
@@ -489,8 +489,9 @@ llvm::Error dwarfgen::Generator::init(Triple TheTriple, uint16_t V) {
inconvertibleErrorCode());
MC.reset(new MCContext(TheTriple, *MAI, *MRI, *MSTI));
+ M = std::make_unique<Module>("dwarfgen", Context);
TLOF = TM->getObjFileLowering();
- TLOF->Initialize(*MC, *TM);
+ TLOF->Initialize(*MC, *TM, *M);
MC->setObjectFileInfo(TLOF);
MCE = TheTarget->createMCCodeEmitter(*MII, *MC);
diff --git a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h
index c617c67ee98b30..3d2d255015b5bc 100644
--- a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h
+++ b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h
@@ -17,6 +17,8 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/CodeGen/DIE.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugLine.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
#include "llvm/MC/MCTargetOptions.h"
#include "llvm/Support/Error.h"
@@ -255,6 +257,8 @@ class Generator {
MCCodeEmitter *MCE; // Owned by MCStreamer
MCStreamer *MS; // Owned by AsmPrinter
std::unique_ptr<TargetMachine> TM;
+ LLVMContext Context;
+ std::unique_ptr<Module> M;
TargetLoweringObjectFile *TLOF; // Owned by TargetMachine;
std::unique_ptr<AsmPrinter> Asm;
BumpPtrAllocator Allocator;
More information about the llvm-branch-commits
mailing list