From cfc74b78b13cd839c49f1f2b0b7033f32c5c1109 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 18 Nov 2015 06:02:15 +0000 Subject: [PATCH] Stop producing .data.rel sections. If a section is rw, it is irrelevant if the dynamic linker will write to it or not. It looks like llvm implemented this because gcc was doing it. It looks like gcc implemented this in the hope that it would put all the relocated items close together and speed up the dynamic linker. There are two problem with this: * It doesn't work. Both bfd and gold will map .data.rel to .data and concatenate the input sections in the order they are seen. * If we want a feature like that, it can be implemented directly in the linker since it knowns where the dynamic relocations are. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253436 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCObjectFileInfo.h | 2 - include/llvm/MC/SectionKind.h | 22 ++---- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 9 +-- lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 8 +-- lib/MC/MCObjectFileInfo.cpp | 69 ++++++++----------- lib/MC/MCParser/COFFAsmParser.cpp | 11 ++- lib/MC/MCParser/DarwinAsmParser.cpp | 10 ++- lib/MC/MCParser/ELFAsmParser.cpp | 14 ++-- lib/MC/MCWinEH.cpp | 8 +-- .../ARM/MCTargetDesc/ARMELFStreamer.cpp | 13 ++-- .../Hexagon/HexagonTargetObjectFile.cpp | 4 +- lib/Target/Mips/MipsTargetObjectFile.cpp | 4 +- lib/Target/NVPTX/NVPTXTargetObjectFile.h | 3 +- lib/Target/TargetLoweringObjectFile.cpp | 6 +- lib/Target/XCore/XCoreTargetObjectFile.cpp | 6 +- test/CodeGen/AArch64/emutls_generic.ll | 2 +- test/CodeGen/AArch64/pic-eh-stubs.ll | 2 +- test/CodeGen/ARM/emutls_generic.ll | 4 +- test/CodeGen/Mips/emutls_generic.ll | 6 +- test/CodeGen/X86/emutls-pic.ll | 8 +-- test/CodeGen/X86/emutls-pie.ll | 4 +- test/CodeGen/X86/emutls_generic.ll | 6 +- test/CodeGen/X86/rodata-relocs.ll | 2 +- test/DebugInfo/X86/arange-and-stub.ll | 4 +- 24 files changed, 93 insertions(+), 134 deletions(-) diff --git a/include/llvm/MC/MCObjectFileInfo.h b/include/llvm/MC/MCObjectFileInfo.h index 2ba945f9d35..eaca3833dc8 100644 --- a/include/llvm/MC/MCObjectFileInfo.h +++ b/include/llvm/MC/MCObjectFileInfo.h @@ -149,7 +149,6 @@ protected: MCSection *EHFrameSection; // ELF specific sections. - MCSection *DataRelSection; MCSection *DataRelROSection; MCSection *MergeableConst4Section; MCSection *MergeableConst8Section; @@ -276,7 +275,6 @@ public: MCSection *getFaultMapSection() const { return FaultMapSection; } // ELF specific sections. - MCSection *getDataRelSection() const { return DataRelSection; } MCSection *getDataRelROSection() const { return DataRelROSection; } const MCSection *getMergeableConst4Section() const { return MergeableConst4Section; diff --git a/include/llvm/MC/SectionKind.h b/include/llvm/MC/SectionKind.h index 7a5e7d99e26..ff329cdaaa7 100644 --- a/include/llvm/MC/SectionKind.h +++ b/include/llvm/MC/SectionKind.h @@ -99,15 +99,8 @@ class SectionKind { /// marked 'constant'. Common, - /// DataRel - This is the most general form of data that is written - /// to by the program, it can have random relocations to arbitrary - /// globals. - DataRel, - - /// DataNoRel - This is writeable data that has a non-zero - /// initializer, but whose initializer is known to have no - /// relocations. - DataNoRel, + /// This is writeable data that has a non-zero initializer. + Data, /// ReadOnlyWithRel - These are global variables that are never /// written to by the program, but that have relocations, so they @@ -155,7 +148,7 @@ public: bool isThreadData() const { return K == ThreadData; } bool isGlobalWriteableData() const { - return isBSS() || isCommon() || isDataRel() || isReadOnlyWithRel(); + return isBSS() || isCommon() || isData() || isReadOnlyWithRel(); } bool isBSS() const { return K == BSS || K == BSSLocal || K == BSSExtern; } @@ -164,11 +157,7 @@ public: bool isCommon() const { return K == Common; } - bool isDataRel() const { - return K == DataRel || K == DataNoRel; - } - - bool isDataNoRel() const { return K == DataNoRel; } + bool isData() const { return K == Data; } bool isReadOnlyWithRel() const { return K == ReadOnlyWithRel; @@ -202,8 +191,7 @@ public: static SectionKind getBSSLocal() { return get(BSSLocal); } static SectionKind getBSSExtern() { return get(BSSExtern); } static SectionKind getCommon() { return get(Common); } - static SectionKind getDataRel() { return get(DataRel); } - static SectionKind getDataNoRel() { return get(DataNoRel); } + static SectionKind getData() { return get(Data); } static SectionKind getReadOnlyWithRel() { return get(ReadOnlyWithRel); } }; diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index fabae38950f..9ffd830a9f5 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -355,12 +355,7 @@ static MCSymbol *getOrCreateEmuTLSInitSym(MCSymbol *GVSym, MCContext &C) { void AsmPrinter::EmitEmulatedTLSControlVariable(const GlobalVariable *GV, MCSymbol *EmittedSym, bool AllZeroInitValue) { - // If there is init value, use .data.rel.local section; - // otherwise use the .data section. - MCSection *TLSVarSection = - const_cast((GV->hasInitializer() && !AllZeroInitValue) - ? getObjFileLowering().getDataRelSection() - : getObjFileLowering().getDataSection()); + MCSection *TLSVarSection = getObjFileLowering().getDataSection(); OutStreamer->SwitchSection(TLSVarSection); MCSymbol *GVSym = getSymbol(GV); EmitLinkage(GV, EmittedSym); // same linkage as GV @@ -1139,7 +1134,7 @@ bool AsmPrinter::doFinalization(Module &M) { // Output stubs for external and common global variables. MachineModuleInfoELF::SymbolListTy Stubs = MMIELF.GetGVStubList(); if (!Stubs.empty()) { - OutStreamer->SwitchSection(TLOF.getDataRelSection()); + OutStreamer->SwitchSection(TLOF.getDataSection()); const DataLayout &DL = M.getDataLayout(); for (const auto &Stub : Stubs) { diff --git a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 7043f7911a3..58ae9cc53bd 100644 --- a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -233,10 +233,8 @@ static StringRef getSectionPrefixForGlobal(SectionKind Kind) { return ".tdata"; if (Kind.isThreadBSS()) return ".tbss"; - if (Kind.isDataNoRel()) + if (Kind.isData()) return ".data"; - if (Kind.isDataRel()) - return ".data.rel"; assert(Kind.isReadOnlyWithRel() && "Unknown section kind"); return ".data.rel.ro"; } @@ -502,7 +500,7 @@ emitModuleFlags(MCStreamer &Streamer, // Get the section. MCSectionMachO *S = getContext().getMachOSection( - Segment, Section, TAA, StubSize, SectionKind::getDataNoRel()); + Segment, Section, TAA, StubSize, SectionKind::getData()); Streamer.SwitchSection(S); Streamer.EmitLabel(getContext(). getOrCreateSymbol(StringRef("L_OBJC_IMAGE_INFO"))); @@ -635,7 +633,7 @@ MCSection *TargetLoweringObjectFileMachO::getSectionForConstant( const DataLayout &DL, SectionKind Kind, const Constant *C) const { // If this constant requires a relocation, we have to put it in the data // segment, not in the text segment. - if (Kind.isDataRel() || Kind.isReadOnlyWithRel()) + if (Kind.isData() || Kind.isReadOnlyWithRel()) return ConstDataSection; if (Kind.isMergeableConst4()) diff --git a/lib/MC/MCObjectFileInfo.cpp b/lib/MC/MCObjectFileInfo.cpp index 943eaef0386..8b75457a246 100644 --- a/lib/MC/MCObjectFileInfo.cpp +++ b/lib/MC/MCObjectFileInfo.cpp @@ -76,16 +76,15 @@ void MCObjectFileInfo::initMachOMCObjectFileInfo(Triple T) { MachO::S_ATTR_PURE_INSTRUCTIONS, SectionKind::getText()); DataSection // .data - = Ctx->getMachOSection("__DATA", "__data", 0, - SectionKind::getDataRel()); + = Ctx->getMachOSection("__DATA", "__data", 0, SectionKind::getData()); // BSSSection might not be expected initialized on msvc. BSSSection = nullptr; TLSDataSection // .tdata - = Ctx->getMachOSection("__DATA", "__thread_data", - MachO::S_THREAD_LOCAL_REGULAR, - SectionKind::getDataRel()); + = Ctx->getMachOSection("__DATA", "__thread_data", + MachO::S_THREAD_LOCAL_REGULAR, + SectionKind::getData()); TLSBSSSection // .tbss = Ctx->getMachOSection("__DATA", "__thread_bss", MachO::S_THREAD_LOCAL_ZEROFILL, @@ -93,14 +92,13 @@ void MCObjectFileInfo::initMachOMCObjectFileInfo(Triple T) { // TODO: Verify datarel below. TLSTLVSection // .tlv - = Ctx->getMachOSection("__DATA", "__thread_vars", - MachO::S_THREAD_LOCAL_VARIABLES, - SectionKind::getDataRel()); + = Ctx->getMachOSection("__DATA", "__thread_vars", + MachO::S_THREAD_LOCAL_VARIABLES, + SectionKind::getData()); - TLSThreadInitSection - = Ctx->getMachOSection("__DATA", "__thread_init", - MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS, - SectionKind::getDataRel()); + TLSThreadInitSection = Ctx->getMachOSection( + "__DATA", "__thread_init", MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS, + SectionKind::getData()); CStringSection // .cstring = Ctx->getMachOSection("__TEXT", "__cstring", @@ -145,10 +143,8 @@ void MCObjectFileInfo::initMachOMCObjectFileInfo(Triple T) { = Ctx->getMachOSection("__TEXT", "__const_coal", MachO::S_COALESCED, SectionKind::getReadOnly()); - DataCoalSection - = Ctx->getMachOSection("__DATA","__datacoal_nt", - MachO::S_COALESCED, - SectionKind::getDataRel()); + DataCoalSection = Ctx->getMachOSection( + "__DATA", "__datacoal_nt", MachO::S_COALESCED, SectionKind::getData()); } else { TextCoalSection = TextSection; ConstTextCoalSection = ReadOnlySection; @@ -177,21 +173,17 @@ void MCObjectFileInfo::initMachOMCObjectFileInfo(Triple T) { SectionKind::getMetadata()); if (RelocM == Reloc::Static) { - StaticCtorSection - = Ctx->getMachOSection("__TEXT", "__constructor", 0, - SectionKind::getDataRel()); - StaticDtorSection - = Ctx->getMachOSection("__TEXT", "__destructor", 0, - SectionKind::getDataRel()); + StaticCtorSection = Ctx->getMachOSection("__TEXT", "__constructor", 0, + SectionKind::getData()); + StaticDtorSection = Ctx->getMachOSection("__TEXT", "__destructor", 0, + SectionKind::getData()); } else { - StaticCtorSection - = Ctx->getMachOSection("__DATA", "__mod_init_func", - MachO::S_MOD_INIT_FUNC_POINTERS, - SectionKind::getDataRel()); - StaticDtorSection - = Ctx->getMachOSection("__DATA", "__mod_term_func", - MachO::S_MOD_TERM_FUNC_POINTERS, - SectionKind::getDataRel()); + StaticCtorSection = Ctx->getMachOSection("__DATA", "__mod_init_func", + MachO::S_MOD_INIT_FUNC_POINTERS, + SectionKind::getData()); + StaticDtorSection = Ctx->getMachOSection("__DATA", "__mod_term_func", + MachO::S_MOD_TERM_FUNC_POINTERS, + SectionKind::getData()); } // Exception Handling. @@ -452,9 +444,6 @@ void MCObjectFileInfo::initELFMCObjectFileInfo(Triple T) { TLSBSSSection = Ctx->getELFSection( ".tbss", ELF::SHT_NOBITS, ELF::SHF_ALLOC | ELF::SHF_TLS | ELF::SHF_WRITE); - DataRelSection = Ctx->getELFSection(".data.rel", ELF::SHT_PROGBITS, - ELF::SHF_ALLOC | ELF::SHF_WRITE); - DataRelROSection = Ctx->getELFSection(".data.rel.ro", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_WRITE); @@ -556,7 +545,7 @@ void MCObjectFileInfo::initCOFFMCObjectFileInfo(Triple T) { EHFrameSection = Ctx->getCOFFSection( ".eh_frame", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_MEM_WRITE, - SectionKind::getDataRel()); + SectionKind::getData()); bool IsWoA = T.getArch() == Triple::arm || T.getArch() == Triple::thumb; @@ -576,7 +565,7 @@ void MCObjectFileInfo::initCOFFMCObjectFileInfo(Triple T) { DataSection = Ctx->getCOFFSection( ".data", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_MEM_WRITE, - SectionKind::getDataRel()); + SectionKind::getData()); ReadOnlySection = Ctx->getCOFFSection( ".rdata", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ, SectionKind::getReadOnly()); @@ -594,11 +583,11 @@ void MCObjectFileInfo::initCOFFMCObjectFileInfo(Triple T) { StaticCtorSection = Ctx->getCOFFSection( ".ctors", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_MEM_WRITE, - SectionKind::getDataRel()); + SectionKind::getData()); StaticDtorSection = Ctx->getCOFFSection( ".dtors", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_MEM_WRITE, - SectionKind::getDataRel()); + SectionKind::getData()); } // FIXME: We're emitting LSDA info into a readonly section on COFF, even @@ -751,11 +740,11 @@ void MCObjectFileInfo::initCOFFMCObjectFileInfo(Triple T) { PDataSection = Ctx->getCOFFSection( ".pdata", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ, - SectionKind::getDataRel()); + SectionKind::getData()); XDataSection = Ctx->getCOFFSection( ".xdata", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ, - SectionKind::getDataRel()); + SectionKind::getData()); SXDataSection = Ctx->getCOFFSection(".sxdata", COFF::IMAGE_SCN_LNK_INFO, SectionKind::getMetadata()); @@ -763,7 +752,7 @@ void MCObjectFileInfo::initCOFFMCObjectFileInfo(Triple T) { TLSDataSection = Ctx->getCOFFSection( ".tls$", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_MEM_WRITE, - SectionKind::getDataRel()); + SectionKind::getData()); StackMapSection = Ctx->getCOFFSection(".llvm_stackmaps", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | diff --git a/lib/MC/MCParser/COFFAsmParser.cpp b/lib/MC/MCParser/COFFAsmParser.cpp index f09bce005d6..a4b2b195f71 100644 --- a/lib/MC/MCParser/COFFAsmParser.cpp +++ b/lib/MC/MCParser/COFFAsmParser.cpp @@ -98,11 +98,10 @@ class COFFAsmParser : public MCAsmParserExtension { SectionKind::getText()); } bool ParseSectionDirectiveData(StringRef, SMLoc) { - return ParseSectionSwitch(".data", - COFF::IMAGE_SCN_CNT_INITIALIZED_DATA - | COFF::IMAGE_SCN_MEM_READ - | COFF::IMAGE_SCN_MEM_WRITE, - SectionKind::getDataRel()); + return ParseSectionSwitch(".data", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | + COFF::IMAGE_SCN_MEM_READ | + COFF::IMAGE_SCN_MEM_WRITE, + SectionKind::getData()); } bool ParseSectionDirectiveBSS(StringRef, SMLoc) { return ParseSectionSwitch(".bss", @@ -153,7 +152,7 @@ static SectionKind computeSectionKind(unsigned Flags) { if (Flags & COFF::IMAGE_SCN_MEM_READ && (Flags & COFF::IMAGE_SCN_MEM_WRITE) == 0) return SectionKind::getReadOnly(); - return SectionKind::getDataRel(); + return SectionKind::getData(); } bool COFFAsmParser::ParseSectionFlags(StringRef FlagsString, unsigned* Flags) { diff --git a/lib/MC/MCParser/DarwinAsmParser.cpp b/lib/MC/MCParser/DarwinAsmParser.cpp index 582d43623e8..b3bb3cc4e16 100644 --- a/lib/MC/MCParser/DarwinAsmParser.cpp +++ b/lib/MC/MCParser/DarwinAsmParser.cpp @@ -390,9 +390,8 @@ bool DarwinAsmParser::parseSectionSwitch(const char *Segment, // FIXME: Arch specific. bool isText = TAA & MachO::S_ATTR_PURE_INSTRUCTIONS; getStreamer().SwitchSection(getContext().getMachOSection( - Segment, Section, TAA, StubSize, - isText ? SectionKind::getText() - : SectionKind::getDataRel())); + Segment, Section, TAA, StubSize, + isText ? SectionKind::getText() : SectionKind::getData())); // Set the implicit alignment, if any. // @@ -614,9 +613,8 @@ bool DarwinAsmParser::parseDirectiveSection(StringRef, SMLoc) { // FIXME: Arch specific. bool isText = Segment == "__TEXT"; // FIXME: Hack. getStreamer().SwitchSection(getContext().getMachOSection( - Segment, Section, TAA, StubSize, - isText ? SectionKind::getText() - : SectionKind::getDataRel())); + Segment, Section, TAA, StubSize, + isText ? SectionKind::getText() : SectionKind::getData())); return false; } diff --git a/lib/MC/MCParser/ELFAsmParser.cpp b/lib/MC/MCParser/ELFAsmParser.cpp index e00a1afc0e4..6cbcdec5e27 100644 --- a/lib/MC/MCParser/ELFAsmParser.cpp +++ b/lib/MC/MCParser/ELFAsmParser.cpp @@ -79,8 +79,8 @@ public: // the best way for us to get access to it? bool ParseSectionDirectiveData(StringRef, SMLoc) { return ParseSectionSwitch(".data", ELF::SHT_PROGBITS, - ELF::SHF_WRITE |ELF::SHF_ALLOC, - SectionKind::getDataRel()); + ELF::SHF_WRITE | ELF::SHF_ALLOC, + SectionKind::getData()); } bool ParseSectionDirectiveText(StringRef, SMLoc) { return ParseSectionSwitch(".text", ELF::SHT_PROGBITS, @@ -111,9 +111,8 @@ public: } bool ParseSectionDirectiveDataRel(StringRef, SMLoc) { return ParseSectionSwitch(".data.rel", ELF::SHT_PROGBITS, - ELF::SHF_ALLOC | - ELF::SHF_WRITE, - SectionKind::getDataRel()); + ELF::SHF_ALLOC | ELF::SHF_WRITE, + SectionKind::getData()); } bool ParseSectionDirectiveDataRelRo(StringRef, SMLoc) { return ParseSectionSwitch(".data.rel.ro", ELF::SHT_PROGBITS, @@ -123,9 +122,8 @@ public: } bool ParseSectionDirectiveEhFrame(StringRef, SMLoc) { return ParseSectionSwitch(".eh_frame", ELF::SHT_PROGBITS, - ELF::SHF_ALLOC | - ELF::SHF_WRITE, - SectionKind::getDataRel()); + ELF::SHF_ALLOC | ELF::SHF_WRITE, + SectionKind::getData()); } bool ParseDirectivePushSection(StringRef, SMLoc); bool ParseDirectivePopSection(StringRef, SMLoc); diff --git a/lib/MC/MCWinEH.cpp b/lib/MC/MCWinEH.cpp index d5d9eadf39a..83af203c7ac 100644 --- a/lib/MC/MCWinEH.cpp +++ b/lib/MC/MCWinEH.cpp @@ -49,10 +49,10 @@ static MCSection *getUnwindInfoSection(StringRef SecName, if (CodeSecName.startswith(".text$")) CodeSecName = CodeSecName.substr(6); - return Context.getCOFFSection( - (SecName + Twine('$') + CodeSecName).str(), - COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ, - SectionKind::getDataRel()); + return Context.getCOFFSection((SecName + Twine('$') + CodeSecName).str(), + COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | + COFF::IMAGE_SCN_MEM_READ, + SectionKind::getData()); } } diff --git a/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp index 6c8cf7ba14f..7fee704c35b 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp @@ -1079,19 +1079,14 @@ inline void ARMELFStreamer::SwitchToEHSection(const char *Prefix, } inline void ARMELFStreamer::SwitchToExTabSection(const MCSymbol &FnStart) { - SwitchToEHSection(".ARM.extab", - ELF::SHT_PROGBITS, - ELF::SHF_ALLOC, - SectionKind::getDataRel(), - FnStart); + SwitchToEHSection(".ARM.extab", ELF::SHT_PROGBITS, ELF::SHF_ALLOC, + SectionKind::getData(), FnStart); } inline void ARMELFStreamer::SwitchToExIdxSection(const MCSymbol &FnStart) { - SwitchToEHSection(".ARM.exidx", - ELF::SHT_ARM_EXIDX, + SwitchToEHSection(".ARM.exidx", ELF::SHT_ARM_EXIDX, ELF::SHF_ALLOC | ELF::SHF_LINK_ORDER, - SectionKind::getDataRel(), - FnStart); + SectionKind::getData(), FnStart); } void ARMELFStreamer::EmitFixup(const MCExpr *Expr, MCFixupKind Kind) { MCDataFragment *Frag = getOrCreateDataFragment(); diff --git a/lib/Target/Hexagon/HexagonTargetObjectFile.cpp b/lib/Target/Hexagon/HexagonTargetObjectFile.cpp index f6983aa1251..ccca62021f5 100644 --- a/lib/Target/Hexagon/HexagonTargetObjectFile.cpp +++ b/lib/Target/Hexagon/HexagonTargetObjectFile.cpp @@ -73,7 +73,7 @@ IsGlobalInSmallSection(const GlobalValue *GV, const TargetMachine &TM, if (!GVA) return false; - if (Kind.isBSS() || Kind.isDataNoRel() || Kind.isCommon()) { + if (Kind.isBSS() || Kind.isData() || Kind.isCommon()) { Type *Ty = GV->getType()->getElementType(); return IsInSmallSection( GV->getParent()->getDataLayout().getTypeAllocSize(Ty)); @@ -90,7 +90,7 @@ HexagonTargetObjectFile::SelectSectionForGlobal(const GlobalValue *GV, // Handle Small Section classification here. if (Kind.isBSS() && IsGlobalInSmallSection(GV, TM, Kind)) return SmallBSSSection; - if (Kind.isDataNoRel() && IsGlobalInSmallSection(GV, TM, Kind)) + if (Kind.isData() && IsGlobalInSmallSection(GV, TM, Kind)) return SmallDataSection; // Otherwise, we work the same as ELF. diff --git a/lib/Target/Mips/MipsTargetObjectFile.cpp b/lib/Target/Mips/MipsTargetObjectFile.cpp index 205926622fc..146f33bda24 100644 --- a/lib/Target/Mips/MipsTargetObjectFile.cpp +++ b/lib/Target/Mips/MipsTargetObjectFile.cpp @@ -76,7 +76,7 @@ bool MipsTargetObjectFile:: IsGlobalInSmallSection(const GlobalValue *GV, const TargetMachine &TM, SectionKind Kind) const { return (IsGlobalInSmallSectionImpl(GV, TM) && - (Kind.isDataRel() || Kind.isBSS() || Kind.isCommon())); + (Kind.isData() || Kind.isBSS() || Kind.isCommon())); } /// Return true if this global address should be placed into small data/bss @@ -121,7 +121,7 @@ MipsTargetObjectFile::SelectSectionForGlobal(const GlobalValue *GV, // Handle Small Section classification here. if (Kind.isBSS() && IsGlobalInSmallSection(GV, TM, Kind)) return SmallBSSSection; - if (Kind.isDataRel() && IsGlobalInSmallSection(GV, TM, Kind)) + if (Kind.isData() && IsGlobalInSmallSection(GV, TM, Kind)) return SmallDataSection; // Otherwise, we work the same as ELF. diff --git a/lib/Target/NVPTX/NVPTXTargetObjectFile.h b/lib/Target/NVPTX/NVPTXTargetObjectFile.h index a17d1b9fdae..0f88ddfaa93 100644 --- a/lib/Target/NVPTX/NVPTXTargetObjectFile.h +++ b/lib/Target/NVPTX/NVPTXTargetObjectFile.h @@ -48,8 +48,7 @@ public: void Initialize(MCContext &ctx, const TargetMachine &TM) override { TargetLoweringObjectFile::Initialize(ctx, TM); TextSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getText()); - DataSection = - new NVPTXSection(MCSection::SV_ELF, SectionKind::getDataRel()); + DataSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getData()); BSSSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getBSS()); ReadOnlySection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getReadOnly()); diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp index 5ccdae42024..a0b0d8f2404 100644 --- a/lib/Target/TargetLoweringObjectFile.cpp +++ b/lib/Target/TargetLoweringObjectFile.cpp @@ -227,11 +227,11 @@ SectionKind TargetLoweringObjectFile::getKindForGlobal(const GlobalValue *GV, // globals together onto fewer pages, improving the locality of the dynamic // linker. if (ReloModel == Reloc::Static) - return SectionKind::getDataNoRel(); + return SectionKind::getData(); if (C->needsRelocation()) - return SectionKind::getDataRel(); - return SectionKind::getDataNoRel(); + return SectionKind::getData(); + return SectionKind::getData(); } /// This method computes the appropriate section to emit the specified global diff --git a/lib/Target/XCore/XCoreTargetObjectFile.cpp b/lib/Target/XCore/XCoreTargetObjectFile.cpp index eb3072195dc..aa16ecc148d 100644 --- a/lib/Target/XCore/XCoreTargetObjectFile.cpp +++ b/lib/Target/XCore/XCoreTargetObjectFile.cpp @@ -129,13 +129,15 @@ XCoreTargetObjectFile::SelectSectionForGlobal(const GlobalValue *GV, if (Kind.isReadOnly()) return UseCPRel? ReadOnlySection : DataRelROSection; if (Kind.isBSS() || Kind.isCommon())return BSSSection; - if (Kind.isDataRel()) return DataSection; + if (Kind.isData()) + return DataSection; if (Kind.isReadOnlyWithRel()) return DataRelROSection; } else { if (Kind.isReadOnly()) return UseCPRel? ReadOnlySectionLarge : DataRelROSectionLarge; if (Kind.isBSS() || Kind.isCommon())return BSSSectionLarge; - if (Kind.isDataRel()) return DataSectionLarge; + if (Kind.isData()) + return DataSectionLarge; if (Kind.isReadOnlyWithRel()) return DataRelROSectionLarge; } diff --git a/test/CodeGen/AArch64/emutls_generic.ll b/test/CodeGen/AArch64/emutls_generic.ll index b06c647d341..7664db3df8d 100644 --- a/test/CodeGen/AArch64/emutls_generic.ll +++ b/test/CodeGen/AArch64/emutls_generic.ll @@ -47,7 +47,7 @@ entry: ; ARM_64: .section .rodata, ; ARM_64-LABEL: __emutls_t.external_y: ; ARM_64-NEXT: .byte 7 -; ARM_64: .section .data.rel +; ARM_64: .data ; ARM_64: .align 3 ; ARM_64-LABEL: __emutls_v.internal_y: ; ARM_64-NEXT: .xword 8 diff --git a/test/CodeGen/AArch64/pic-eh-stubs.ll b/test/CodeGen/AArch64/pic-eh-stubs.ll index 143558f7b2c..c59a5b6743d 100644 --- a/test/CodeGen/AArch64/pic-eh-stubs.ll +++ b/test/CodeGen/AArch64/pic-eh-stubs.ll @@ -15,7 +15,7 @@ ; CHECK-NEXT: .xword .L_ZTIi.DW.stub-[[TYPEINFO_LBL]] ; .. and which is properly defined (in a writable section for the dynamic loader) later. -; CHECK: .section .data.rel,"aw" +; CHECK: .data ; CHECK: .L_ZTIi.DW.stub: ; CHECK-NEXT: .xword _ZTIi diff --git a/test/CodeGen/ARM/emutls_generic.ll b/test/CodeGen/ARM/emutls_generic.ll index b6f745d8cb8..0fada88fb5d 100644 --- a/test/CodeGen/ARM/emutls_generic.ll +++ b/test/CodeGen/ARM/emutls_generic.ll @@ -39,7 +39,7 @@ entry: ; ARM_32: .long __emutls_v.internal_y ; ARM_32-NOT: __emutls_t.external_x ; ARM_32-NOT: __emutls_v.external_x: -; ARM_32: .section .data.rel +; ARM_32: .data ; ARM_32: .align 2 ; ARM_32-LABEL: __emutls_v.external_y: ; ARM_32-NEXT: .long 1 @@ -49,7 +49,7 @@ entry: ; ARM_32: .section .rodata, ; ARM_32-LABEL: __emutls_t.external_y: ; ARM_32-NEXT: .byte 7 -; ARM_32: .section .data.rel +; ARM_32: .data ; ARM_32: .align 2 ; ARM_32-LABEL: __emutls_v.internal_y: ; ARM_32-NEXT: .long 8 diff --git a/test/CodeGen/Mips/emutls_generic.ll b/test/CodeGen/Mips/emutls_generic.ll index 6d0bb33b06b..a6cf23aa67f 100644 --- a/test/CodeGen/Mips/emutls_generic.ll +++ b/test/CodeGen/Mips/emutls_generic.ll @@ -30,13 +30,13 @@ entry: ; MIPS_32: lw {{.+}}call16(__emutls_get_address ; MIPS_32-NOT: __emutls_t.external_x ; MIPS_32-NOT: __emutls_v.external_x: -; MIPS_32: .section .data.rel +; MIPS_32: .data ; MIPS_32: .align 2 ; MIPS_32-LABEL: __emutls_v.external_y: ; MIPS_32: .section .rodata, ; MIPS_32-LABEL: __emutls_t.external_y: ; MIPS_32-NEXT: .byte 7 -; MIPS_32: .section .data.rel +; MIPS_32: .data ; MIPS_32: .align 2 ; MIPS_32-LABEL: __emutls_v.internal_y: ; MIPS_32-NEXT: .4byte 8 @@ -58,7 +58,7 @@ entry: ; MIPS_64: .section .rodata, ; MIPS_64-LABEL: __emutls_t.external_y: ; MIPS_64-NEXT: .byte 7 -; MIPS_64: .section .data.rel +; MIPS_64: .data ; MIPS_64: .align 3 ; MIPS_64-LABEL: __emutls_v.internal_y: ; MIPS_64-NEXT: .8byte 8 diff --git a/test/CodeGen/X86/emutls-pic.ll b/test/CodeGen/X86/emutls-pic.ll index 1c4d83728e6..11676aff189 100644 --- a/test/CodeGen/X86/emutls-pic.ll +++ b/test/CodeGen/X86/emutls-pic.ll @@ -103,7 +103,7 @@ entry: ;;;;; 32-bit targets -; X32: .section .data.rel, +; X32: .data ; X32-LABEL: __emutls_v.i: ; X32-NEXT: .long 4 ; X32-NEXT: .long 4 @@ -114,7 +114,7 @@ entry: ; X32-LABEL: __emutls_t.i: ; X32-NEXT: .long 15 -; X32: .section .data.rel, +; X32: .data ; X32-LABEL: __emutls_v.j: ; X32-NEXT: .long 4 ; X32-NEXT: .long 4 @@ -136,7 +136,7 @@ entry: ;;;;; 64-bit targets -; X64: .section .data.rel, +; X64: .data ; X64-LABEL: __emutls_v.i: ; X64-NEXT: .quad 4 ; X64-NEXT: .quad 4 @@ -147,7 +147,7 @@ entry: ; X64-LABEL: __emutls_t.i: ; X64-NEXT: .long 15 -; X64: .section .data.rel, +; X64: .data ; X64-LABEL: __emutls_v.j: ; X64-NEXT: .quad 4 ; X64-NEXT: .quad 4 diff --git a/test/CodeGen/X86/emutls-pie.ll b/test/CodeGen/X86/emutls-pie.ll index 92a7b16887e..4970b14838c 100644 --- a/test/CodeGen/X86/emutls-pie.ll +++ b/test/CodeGen/X86/emutls-pie.ll @@ -100,7 +100,7 @@ entry: ;;;;; 32-bit targets -; X32: .section .data.rel, +; X32: .data ; X32-LABEL: __emutls_v.i: ; X32-NEXT: .long 4 ; X32-NEXT: .long 4 @@ -116,7 +116,7 @@ entry: ;;;;; 64-bit targets -; X64: .section .data.rel, +; X64: .data ; X64-LABEL: __emutls_v.i: ; X64-NEXT: .quad 4 ; X64-NEXT: .quad 4 diff --git a/test/CodeGen/X86/emutls_generic.ll b/test/CodeGen/X86/emutls_generic.ll index 480543dd43f..b99a195426c 100644 --- a/test/CodeGen/X86/emutls_generic.ll +++ b/test/CodeGen/X86/emutls_generic.ll @@ -55,7 +55,7 @@ entry: ; X86_32: calll __emutls_get_address ; X86_32-NOT: __emutls_t.external_x ; X86_32-NOT: __emutls_v.external_x: -; X86_32: .section .data.rel +; X86_32: .data ; X86_32: .align 4 ; X86_32-LABEL: __emutls_v.external_y: ; X86_32-NEXT: .long 1 @@ -65,7 +65,7 @@ entry: ; X86_32: .section .rodata, ; X86_32-LABEL: __emutls_t.external_y: ; X86_32-NEXT: .byte 7 -; X86_32: .section .data.rel +; X86_32: .data ; X86_32: .align 4 ; X86_32-LABEL: __emutls_v.internal_y: ; X86_32-NEXT: .long 8 @@ -95,7 +95,7 @@ entry: ; X86_64: .section .rodata, ; X86_64-LABEL: __emutls_t.external_y: ; X86_64-NEXT: .byte 7 -; X86_64: .section .data.rel +; X86_64: .data ; X86_64: .align 8 ; X86_64-LABEL: __emutls_v.internal_y: ; X86_64-NEXT: .quad 8 diff --git a/test/CodeGen/X86/rodata-relocs.ll b/test/CodeGen/X86/rodata-relocs.ll index 7bd129b7fe9..6379ef1bf73 100644 --- a/test/CodeGen/X86/rodata-relocs.ll +++ b/test/CodeGen/X86/rodata-relocs.ll @@ -38,7 +38,7 @@ target triple = "x86_64-unknown-linux-gnu" ; PIC-NOT: .section ; PIC: p1: ; PIC: t1: -; PIC: .section .data.rel,"aw",@progbits +; PIC: .data ; PIC: p2: ; PIC: t2: ; PIC-NOT: .section diff --git a/test/DebugInfo/X86/arange-and-stub.ll b/test/DebugInfo/X86/arange-and-stub.ll index 599c1e5a2bc..39727753b8f 100644 --- a/test/DebugInfo/X86/arange-and-stub.ll +++ b/test/DebugInfo/X86/arange-and-stub.ll @@ -1,10 +1,10 @@ ; RUN: llc -generate-arange-section -relocation-model=pic < %s | FileCheck %s -; CHECK: .section .data.rel,"aw",@progbits +; CHECK: .data ; CHECK-NOT: .section ; CHECK: .L_ZTId.DW.stub: -; CHECK: .section .data.rel,"aw",@progbits +; CHECK: .data ; CHECK-NEXT: .Lsec_end0: target triple = "x86_64-linux-gnu" -- 2.34.1