Skip to content

Commit

Permalink
Revert "Honor -fuse-init-array when os is not specified on x86"
Browse files Browse the repository at this point in the history
This reverts commit aa5ee8f.

This change broke the sanitizer buildbots. See comments at the patchset
(https://reviews.llvm.org/D71360) for more information.
  • Loading branch information
hctim committed Dec 17, 2019
1 parent 9ab15f3 commit 2423774
Show file tree
Hide file tree
Showing 13 changed files with 64 additions and 8 deletions.
1 change: 0 additions & 1 deletion llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
Expand Up @@ -97,7 +97,6 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
TM = &TgtM;

CodeModel::Model CM = TgtM.getCodeModel();
InitializeELF(TgtM.Options.UseInitArray);

switch (TgtM.getTargetTriple().getArch()) {
case Triple::arm:
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
Expand Up @@ -20,6 +20,7 @@ using namespace dwarf;
void AArch64_ELFTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);
// AARCH64 ELF ABI does not define static relocation type for TLS offset
// within a module. Do not generate AT_location for TLS variables.
SupportDebugThreadLocalLocation = false;
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
Expand Up @@ -112,6 +112,7 @@ static const char *getSectionSuffixForSize(unsigned Size) {
void HexagonTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);

SmallDataSection =
getContext().getELFSection(".sdata", ELF::SHT_PROGBITS,
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp
Expand Up @@ -28,6 +28,7 @@ static cl::opt<unsigned> SSThreshold(
void LanaiTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);

SmallDataSection = getContext().getELFSection(
".sdata", ELF::SHT_PROGBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC);
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Target/Mips/MipsTargetObjectFile.cpp
Expand Up @@ -44,6 +44,7 @@ EmbeddedData("membedded-data", cl::Hidden,

void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);

SmallDataSection = getContext().getELFSection(
".sdata", ELF::SHT_PROGBITS,
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp
Expand Up @@ -18,6 +18,7 @@ void
PPC64LinuxTargetObjectFile::
Initialize(MCContext &Ctx, const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);
}

MCSection *PPC64LinuxTargetObjectFile::SelectSectionForGlobal(
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp
Expand Up @@ -17,6 +17,7 @@ using namespace llvm;
void RISCVELFTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);

SmallDataSection = getContext().getELFSection(
".sdata", ELF::SHT_PROGBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC);
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
Expand Up @@ -17,6 +17,7 @@ using namespace llvm;
void SparcELFTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);
}

const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
Expand Down
12 changes: 11 additions & 1 deletion llvm/lib/Target/X86/X86TargetMachine.cpp
Expand Up @@ -92,9 +92,19 @@ static std::unique_ptr<TargetLoweringObjectFile> createTLOF(const Triple &TT) {
return std::make_unique<TargetLoweringObjectFileMachO>();
}

if (TT.isOSFreeBSD())
return std::make_unique<X86FreeBSDTargetObjectFile>();
if (TT.isOSLinux() || TT.isOSNaCl() || TT.isOSIAMCU())
return std::make_unique<X86LinuxNaClTargetObjectFile>();
if (TT.isOSSolaris())
return std::make_unique<X86SolarisTargetObjectFile>();
if (TT.isOSFuchsia())
return std::make_unique<X86FuchsiaTargetObjectFile>();
if (TT.isOSBinFormatELF())
return std::make_unique<X86ELFTargetObjectFile>();
if (TT.isOSBinFormatCOFF())
return std::make_unique<TargetLoweringObjectFileCOFF>();
return std::make_unique<X86ELFTargetObjectFile>();
llvm_unreachable("unknown subtarget type");
}

static std::string computeDataLayout(const Triple &TT) {
Expand Down
23 changes: 22 additions & 1 deletion llvm/lib/Target/X86/X86TargetObjectFile.cpp
Expand Up @@ -65,7 +65,28 @@ const MCExpr *X86ELFTargetObjectFile::getDebugThreadLocalSymbol(
}

void
X86ELFTargetObjectFile::Initialize(MCContext &Ctx,
X86FreeBSDTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);
}

void
X86FuchsiaTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);
}

void
X86LinuxNaClTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);
}

void X86SolarisTargetObjectFile::Initialize(MCContext &Ctx,
const TargetMachine &TM) {
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
InitializeELF(TM.Options.UseInitArray);
}
24 changes: 23 additions & 1 deletion llvm/lib/Target/X86/X86TargetObjectFile.h
Expand Up @@ -44,11 +44,33 @@ namespace llvm {
X86ELFTargetObjectFile() {
PLTRelativeVariantKind = MCSymbolRefExpr::VK_PLT;
}
void Initialize(MCContext &Ctx, const TargetMachine &TM) override;

/// Describe a TLS variable address within debug info.
const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override;
};

/// X86FreeBSDTargetObjectFile - This implementation is used for FreeBSD
/// on x86 and x86-64.
class X86FreeBSDTargetObjectFile : public X86ELFTargetObjectFile {
void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
};

/// This implementation is used for Fuchsia on x86-64.
class X86FuchsiaTargetObjectFile : public X86ELFTargetObjectFile {
void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
};

/// X86LinuxNaClTargetObjectFile - This implementation is used for linux and
/// Native Client on x86 and x86-64.
class X86LinuxNaClTargetObjectFile : public X86ELFTargetObjectFile {
void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
};

/// This implementation is used for Solaris on x86/x86-64.
class X86SolarisTargetObjectFile : public X86ELFTargetObjectFile {
void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
};

} // end namespace llvm

#endif
3 changes: 0 additions & 3 deletions llvm/test/CodeGen/X86/constructor.ll
Expand Up @@ -8,7 +8,6 @@
; RUN: llc -mtriple i586-intel-elfiamcu -use-ctors < %s | FileCheck %s --check-prefix=MCU-CTORS
; RUN: llc -mtriple i586-intel-elfiamcu < %s | FileCheck %s --check-prefix=MCU-INIT-ARRAY
; RUN: llc -mtriple x86_64-win32-gnu < %s | FileCheck --check-prefix=COFF-CTOR %s
; RUN: llc -mtriple x86_64 -use-ctors=false < %s | FileCheck %s
@llvm.global_ctors = appending global [3 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @f, i8* null}, { i32, void ()*, i8* } { i32 15, void ()* @g, i8* @v }, { i32, void ()*, i8* } { i32 55555, void ()* @h, i8* @v }]

@v = weak_odr global i8 0
Expand Down Expand Up @@ -70,5 +69,3 @@ entry:
; COFF-CTOR-NEXT: .section .ctors,"dw"
; COFF-CTOR-NEXT: .p2align 3
; COFF-CTOR-NEXT: .quad f

; CHECK: .init_array
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/init-priority.ll
@@ -1,4 +1,4 @@
; RUN: llc < %s -mtriple=x86_64-netbsd -use-ctors | FileCheck %s
; RUN: llc < %s -mtriple=x86_64-netbsd | FileCheck %s

; Check that our compiler never emits global constructors
; inside the .init_array section when building for a non supported target.
Expand Down

0 comments on commit 2423774

Please sign in to comment.