<div dir="ltr">Hi Ray,<div><br></div><div>I temporarily reverted this as it was causing msan errors. Feel free to reach out if you'd like an easy reproduction :)</div><div><br></div><div>-eric</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Mar 20, 2020 at 11:18 AM Fangrui Song via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Fangrui Song<br>
Date: 2020-03-20T11:18:36-07:00<br>
New Revision: 7899fe9da8d8df6f19ddcbbb877ea124d711c54b<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/7899fe9da8d8df6f19ddcbbb877ea124d711c54b" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/7899fe9da8d8df6f19ddcbbb877ea124d711c54b</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/7899fe9da8d8df6f19ddcbbb877ea124d711c54b.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/7899fe9da8d8df6f19ddcbbb877ea124d711c54b.diff</a><br>
<br>
LOG: [X86] Reland D71360 Clean up UseInitArray initialization for X86ELFTargetObjectFile<br>
<br>
UseInitArray is now the CC1 default but TargetLoweringObjectFileELF::UseInitArray still defaults to false.<br>
The following two unknown OS target triples continue using .ctors/.dtors because InitializeELF is not called.<br>
<br>
clang -target i386 -c a.c<br>
clang -target x86_64 -c a.c<br>
<br>
This cleanup fixes this as a bonus.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D71360" rel="noreferrer" target="_blank">https://reviews.llvm.org/D71360</a><br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp<br>
llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp<br>
llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp<br>
llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp<br>
llvm/lib/Target/Mips/MipsTargetObjectFile.cpp<br>
llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp<br>
llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp<br>
llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp<br>
llvm/lib/Target/X86/X86TargetMachine.cpp<br>
llvm/lib/Target/X86/X86TargetObjectFile.cpp<br>
llvm/lib/Target/X86/X86TargetObjectFile.h<br>
llvm/test/CodeGen/X86/constructor.ll<br>
llvm/test/CodeGen/X86/init-priority.ll<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp<br>
index 8f1c342202d6..dedb6735b470 100644<br>
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp<br>
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp<br>
@@ -108,6 +108,7 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,<br>
TM = &TgtM;<br>
<br>
CodeModel::Model CM = TgtM.getCodeModel();<br>
+ InitializeELF(TgtM.Options.UseInitArray);<br>
<br>
switch (TgtM.getTargetTriple().getArch()) {<br>
case Triple::arm:<br>
<br>
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp<br>
index cf049ec274f2..dfc66f0cb4c1 100644<br>
--- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp<br>
+++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp<br>
@@ -20,7 +20,6 @@ using namespace dwarf;<br>
void AArch64_ELFTargetObjectFile::Initialize(MCContext &Ctx,<br>
const TargetMachine &TM) {<br>
TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
// AARCH64 ELF ABI does not define static relocation type for TLS offset<br>
// within a module. Do not generate AT_location for TLS variables.<br>
SupportDebugThreadLocalLocation = false;<br>
<br>
diff --git a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp<br>
index fdcc41a4ca41..1dc1a783e6da 100644<br>
--- a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp<br>
+++ b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp<br>
@@ -112,7 +112,6 @@ static const char *getSectionSuffixForSize(unsigned Size) {<br>
void HexagonTargetObjectFile::Initialize(MCContext &Ctx,<br>
const TargetMachine &TM) {<br>
TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
<br>
SmallDataSection =<br>
getContext().getELFSection(".sdata", ELF::SHT_PROGBITS,<br>
<br>
diff --git a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp<br>
index b0f7c090bb8e..d47306c55bad 100644<br>
--- a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp<br>
+++ b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp<br>
@@ -28,7 +28,6 @@ static cl::opt<unsigned> SSThreshold(<br>
void LanaiTargetObjectFile::Initialize(MCContext &Ctx,<br>
const TargetMachine &TM) {<br>
TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
<br>
SmallDataSection = getContext().getELFSection(<br>
".sdata", ELF::SHT_PROGBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC);<br>
<br>
diff --git a/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp b/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp<br>
index 0852b5a18c68..ffd7a057bf05 100644<br>
--- a/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp<br>
+++ b/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp<br>
@@ -44,7 +44,6 @@ EmbeddedData("membedded-data", cl::Hidden,<br>
<br>
void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){<br>
TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
<br>
SmallDataSection = getContext().getELFSection(<br>
".sdata", ELF::SHT_PROGBITS,<br>
<br>
diff --git a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp<br>
index e237fab1b267..168630f55b24 100644<br>
--- a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp<br>
+++ b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp<br>
@@ -18,7 +18,6 @@ void<br>
PPC64LinuxTargetObjectFile::<br>
Initialize(MCContext &Ctx, const TargetMachine &TM) {<br>
TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
}<br>
<br>
MCSection *PPC64LinuxTargetObjectFile::SelectSectionForGlobal(<br>
<br>
diff --git a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp<br>
index bbd45c970d3d..0d1480170fda 100644<br>
--- a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp<br>
+++ b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp<br>
@@ -17,7 +17,6 @@ using namespace llvm;<br>
void RISCVELFTargetObjectFile::Initialize(MCContext &Ctx,<br>
const TargetMachine &TM) {<br>
TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
<br>
SmallDataSection = getContext().getELFSection(<br>
".sdata", ELF::SHT_PROGBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC);<br>
<br>
diff --git a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp<br>
index e6ad4d2d67aa..022ee4e9503e 100644<br>
--- a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp<br>
+++ b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp<br>
@@ -17,7 +17,6 @@ using namespace llvm;<br>
void SparcELFTargetObjectFile::Initialize(MCContext &Ctx,<br>
const TargetMachine &TM) {<br>
TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
}<br>
<br>
const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(<br>
<br>
diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp<br>
index 0cfa7bb04771..0404b4313a02 100644<br>
--- a/llvm/lib/Target/X86/X86TargetMachine.cpp<br>
+++ b/llvm/lib/Target/X86/X86TargetMachine.cpp<br>
@@ -92,19 +92,9 @@ static std::unique_ptr<TargetLoweringObjectFile> createTLOF(const Triple &TT) {<br>
return std::make_unique<TargetLoweringObjectFileMachO>();<br>
}<br>
<br>
- if (TT.isOSFreeBSD())<br>
- return std::make_unique<X86FreeBSDTargetObjectFile>();<br>
- if (TT.isOSLinux() || TT.isOSNaCl() || TT.isOSIAMCU())<br>
- return std::make_unique<X86LinuxNaClTargetObjectFile>();<br>
- if (TT.isOSSolaris())<br>
- return std::make_unique<X86SolarisTargetObjectFile>();<br>
- if (TT.isOSFuchsia())<br>
- return std::make_unique<X86FuchsiaTargetObjectFile>();<br>
- if (TT.isOSBinFormatELF())<br>
- return std::make_unique<X86ELFTargetObjectFile>();<br>
if (TT.isOSBinFormatCOFF())<br>
return std::make_unique<TargetLoweringObjectFileCOFF>();<br>
- llvm_unreachable("unknown subtarget type");<br>
+ return std::make_unique<X86ELFTargetObjectFile>();<br>
}<br>
<br>
static std::string computeDataLayout(const Triple &TT) {<br>
<br>
diff --git a/llvm/lib/Target/X86/X86TargetObjectFile.cpp b/llvm/lib/Target/X86/X86TargetObjectFile.cpp<br>
index 44185957686b..9096649a2207 100644<br>
--- a/llvm/lib/Target/X86/X86TargetObjectFile.cpp<br>
+++ b/llvm/lib/Target/X86/X86TargetObjectFile.cpp<br>
@@ -64,29 +64,7 @@ const MCExpr *X86ELFTargetObjectFile::getDebugThreadLocalSymbol(<br>
return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_DTPOFF, getContext());<br>
}<br>
<br>
-void<br>
-X86FreeBSDTargetObjectFile::Initialize(MCContext &Ctx,<br>
- const TargetMachine &TM) {<br>
+void X86ELFTargetObjectFile::Initialize(MCContext &Ctx,<br>
+ const TargetMachine &TM) {<br>
TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
-}<br>
-<br>
-void<br>
-X86FuchsiaTargetObjectFile::Initialize(MCContext &Ctx,<br>
- const TargetMachine &TM) {<br>
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
-}<br>
-<br>
-void<br>
-X86LinuxNaClTargetObjectFile::Initialize(MCContext &Ctx,<br>
- const TargetMachine &TM) {<br>
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
-}<br>
-<br>
-void X86SolarisTargetObjectFile::Initialize(MCContext &Ctx,<br>
- const TargetMachine &TM) {<br>
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);<br>
- InitializeELF(TM.Options.UseInitArray);<br>
}<br>
<br>
diff --git a/llvm/lib/Target/X86/X86TargetObjectFile.h b/llvm/lib/Target/X86/X86TargetObjectFile.h<br>
index 1fd0bbf56b19..46d41ccc9b33 100644<br>
--- a/llvm/lib/Target/X86/X86TargetObjectFile.h<br>
+++ b/llvm/lib/Target/X86/X86TargetObjectFile.h<br>
@@ -44,33 +44,11 @@ namespace llvm {<br>
X86ELFTargetObjectFile() {<br>
PLTRelativeVariantKind = MCSymbolRefExpr::VK_PLT;<br>
}<br>
-<br>
+ void Initialize(MCContext &Ctx, const TargetMachine &TM) override;<br>
/// Describe a TLS variable address within debug info.<br>
const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override;<br>
};<br>
<br>
- /// X86FreeBSDTargetObjectFile - This implementation is used for FreeBSD<br>
- /// on x86 and x86-64.<br>
- class X86FreeBSDTargetObjectFile : public X86ELFTargetObjectFile {<br>
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;<br>
- };<br>
-<br>
- /// This implementation is used for Fuchsia on x86-64.<br>
- class X86FuchsiaTargetObjectFile : public X86ELFTargetObjectFile {<br>
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;<br>
- };<br>
-<br>
- /// X86LinuxNaClTargetObjectFile - This implementation is used for linux and<br>
- /// Native Client on x86 and x86-64.<br>
- class X86LinuxNaClTargetObjectFile : public X86ELFTargetObjectFile {<br>
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;<br>
- };<br>
-<br>
- /// This implementation is used for Solaris on x86/x86-64.<br>
- class X86SolarisTargetObjectFile : public X86ELFTargetObjectFile {<br>
- void Initialize(MCContext &Ctx, const TargetMachine &TM) override;<br>
- };<br>
-<br>
} // end namespace llvm<br>
<br>
#endif<br>
<br>
diff --git a/llvm/test/CodeGen/X86/constructor.ll b/llvm/test/CodeGen/X86/constructor.ll<br>
index d4518f19b7e6..534c452d6548 100644<br>
--- a/llvm/test/CodeGen/X86/constructor.ll<br>
+++ b/llvm/test/CodeGen/X86/constructor.ll<br>
@@ -1,3 +1,4 @@<br>
+; RUN: llc -mtriple x86_64 < %s | FileCheck --check-prefix=INIT-ARRAY %s<br>
; RUN: llc -mtriple x86_64-pc-linux -use-ctors < %s | FileCheck --check-prefix=CTOR %s<br>
; RUN: llc -mtriple x86_64-unknown-freebsd -use-ctors < %s | FileCheck --check-prefix=CTOR %s<br>
; RUN: llc -mtriple x86_64-pc-solaris2.11 -use-ctors < %s | FileCheck --check-prefix=CTOR %s<br>
<br>
diff --git a/llvm/test/CodeGen/X86/init-priority.ll b/llvm/test/CodeGen/X86/init-priority.ll<br>
index 30e94841f793..47f548cf0238 100644<br>
--- a/llvm/test/CodeGen/X86/init-priority.ll<br>
+++ b/llvm/test/CodeGen/X86/init-priority.ll<br>
@@ -1,4 +1,4 @@<br>
-; RUN: llc < %s -mtriple=x86_64-netbsd | FileCheck %s<br>
+; RUN: llc < %s -mtriple=x86_64-netbsd -use-ctors | FileCheck %s<br>
<br>
; Check that our compiler never emits global constructors<br>
; inside the .init_array section when building for a non supported target.<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>