Revert a series of commits starting at r228886 which is triggering some
authorChandler Carruth <chandlerc@gmail.com>
Fri, 13 Feb 2015 07:52:39 +0000 (07:52 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 13 Feb 2015 07:52:39 +0000 (07:52 +0000)
regressions for LLDB on Linux. Rafael indicated on lldb-dev that we
should just go ahead and revert these but that he wasn't at a computer.
The patches backed out are as follows:

r228980: Add support for having multiple sections with the name and ...
r228889: Invert the section relocation map.
r228888: Use the existing SymbolTableIndex intsead of doing a lookup.
r228886: Create the Section -> Rel Section map when it is first needed.

These patches look pretty nice to me, so hoping its not too hard to get
them re-instated. =D

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229080 91177308-0d34-0410-b5e6-96231b3b80d8

12 files changed:
include/llvm/CodeGen/CommandFlags.h
include/llvm/MC/MCContext.h
include/llvm/MC/MCSectionELF.h
include/llvm/Target/TargetMachine.h
include/llvm/Target/TargetOptions.h
lib/CodeGen/TargetLoweringObjectFileImpl.cpp
lib/MC/ELFObjectWriter.cpp
lib/MC/MCContext.cpp
lib/MC/MCParser/ELFAsmParser.cpp
lib/MC/MCSectionELF.cpp
test/CodeGen/X86/non-unique-sections.ll [deleted file]
test/MC/ELF/section-unique.s [deleted file]

index 9f86429cbf1e10da9cfc4793954b05d11706f769..973c5954f9ad3a9c34e2cff5ced84cb605012e9a 100644 (file)
@@ -207,10 +207,6 @@ FunctionSections("function-sections",
                  cl::desc("Emit functions into separate sections"),
                  cl::init(false));
 
-cl::opt<bool> UniqueSectionNames("unique-section-names",
-                                 cl::desc("Give unique names to every section"),
-                                 cl::init(true));
-
 cl::opt<llvm::JumpTable::JumpTableType>
 JTableType("jump-table-type",
           cl::desc("Choose the type of Jump-Instruction Table for jumptable."),
@@ -288,7 +284,6 @@ static inline TargetOptions InitTargetOptionsFromCodeGenFlags() {
   Options.UseInitArray = !UseCtors;
   Options.DataSections = DataSections;
   Options.FunctionSections = FunctionSections;
-  Options.UniqueSectionNames = UniqueSectionNames;
 
   Options.MCOptions = InitMCTargetOptionsFromFlags();
   Options.JTType = JTableType;
index 8bacbb8cd8ffe65ebe51f0a9e01cc4933ea99b7c..44ee424f827b89bea033c5fa962f19630d09ab69 100644 (file)
@@ -277,10 +277,6 @@ namespace llvm {
                                       unsigned Flags, unsigned EntrySize,
                                       StringRef Group);
 
-    const MCSectionELF *getELFSection(StringRef Section, unsigned Type,
-                                      unsigned Flags, unsigned EntrySize,
-                                      StringRef Group, bool Unique);
-
     void renameELFSection(const MCSectionELF *Section, StringRef Name);
 
     const MCSectionELF *CreateELFGroupSection();
index 6d864b4a45be310f6d0a8c55faa71dd51cbd06ef..0500c30f1698960e36a323201802b8707f195b0a 100644 (file)
@@ -39,8 +39,6 @@ class MCSectionELF : public MCSection {
   /// below.
   unsigned Flags;
 
-  bool Unique;
-
   /// EntrySize - The size of each entry in this section. This size only
   /// makes sense for sections that contain fixed-sized entries. If a
   /// section does not contain fixed-sized entries 'EntrySize' will be 0.
@@ -50,10 +48,10 @@ class MCSectionELF : public MCSection {
 
 private:
   friend class MCContext;
-  MCSectionELF(StringRef Section, unsigned type, unsigned flags, SectionKind K,
-               unsigned entrySize, const MCSymbol *group, bool Unique)
-      : MCSection(SV_ELF, K), SectionName(Section), Type(type), Flags(flags),
-        Unique(Unique), EntrySize(entrySize), Group(group) {}
+  MCSectionELF(StringRef Section, unsigned type, unsigned flags,
+               SectionKind K, unsigned entrySize, const MCSymbol *group)
+    : MCSection(SV_ELF, K), SectionName(Section), Type(type), Flags(flags),
+      EntrySize(entrySize), Group(group) {}
   ~MCSectionELF();
 
   void setSectionName(StringRef Name) { SectionName = Name; }
index 669cef5c3d2af576be5e173e87d8e5cc22fc9c58..028f9e2347ba182d9c72328f3f52f8db59627799 100644 (file)
@@ -171,8 +171,6 @@ public:
     return Options.MCOptions.AsmVerbose;
   }
 
-  bool getUniqueSectionNames() const { return Options.UniqueSectionNames; }
-
   /// Return true if data objects should be emitted into their own section,
   /// corresponds to -fdata-sections.
   bool getDataSections() const {
index f447fd601105504103f5bb3f2c9f401c35c58eb9..9ab8242578fd0f6f85c0ffe24e534b4e5dee234b 100644 (file)
@@ -78,8 +78,8 @@ namespace llvm {
           EnableFastISel(false), PositionIndependentExecutable(false),
           UseInitArray(false), DisableIntegratedAS(false),
           CompressDebugSections(false), FunctionSections(false),
-          DataSections(false), UniqueSectionNames(true), TrapUnreachable(false),
-          TrapFuncName(), FloatABIType(FloatABI::Default),
+          DataSections(false), TrapUnreachable(false), TrapFuncName(),
+          FloatABIType(FloatABI::Default),
           AllowFPOpFusion(FPOpFusion::Standard), JTType(JumpTable::Single),
           FCFI(false), ThreadModel(ThreadModel::POSIX),
           CFIType(CFIntegrity::Sub), CFIEnforcing(false), CFIFuncName() {}
@@ -198,8 +198,6 @@ namespace llvm {
     /// Emit data into separate sections.
     unsigned DataSections : 1;
 
-    unsigned UniqueSectionNames : 1;
-
     /// Emit target-specific trap instruction for 'unreachable' IR instructions.
     unsigned TrapUnreachable : 1;
 
index 8aa66531b3d8970b65a510f0b900be3ca2db6ee9..4f46e37d39c711108787133a53d5f576e276a911 100644 (file)
@@ -228,25 +228,25 @@ const MCSection *TargetLoweringObjectFileELF::getExplicitSectionGlobal(
 /// DataSections.
 static StringRef getSectionPrefixForGlobal(SectionKind Kind) {
   if (Kind.isText())
-    return ".text";
+    return ".text.";
   if (Kind.isReadOnly())
-    return ".rodata";
+    return ".rodata.";
   if (Kind.isBSS())
-    return ".bss";
+    return ".bss.";
   if (Kind.isThreadData())
-    return ".tdata";
+    return ".tdata.";
   if (Kind.isThreadBSS())
-    return ".tbss";
+    return ".tbss.";
   if (Kind.isDataNoRel())
-    return ".data";
+    return ".data.";
   if (Kind.isDataRelLocal())
-    return ".data.rel.local";
+    return ".data.rel.local.";
   if (Kind.isDataRel())
-    return ".data.rel";
+    return ".data.rel.";
   if (Kind.isReadOnlyWithRelLocal())
-    return ".data.rel.ro.local";
+    return ".data.rel.ro.local.";
   assert(Kind.isReadOnlyWithRel() && "Unknown section kind");
-  return ".data.rel.ro";
+  return ".data.rel.ro.";
 }
 
 const MCSection *TargetLoweringObjectFileELF::
@@ -268,19 +268,16 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
     StringRef Prefix = getSectionPrefixForGlobal(Kind);
 
     SmallString<128> Name(Prefix);
-    bool UniqueSectionNames = TM.getUniqueSectionNames();
-    if (UniqueSectionNames) {
-      Name.push_back('.');
-      TM.getNameWithPrefix(Name, GV, Mang, true);
-    }
+    TM.getNameWithPrefix(Name, GV, Mang, true);
+
     StringRef Group = "";
     if (const Comdat *C = getELFComdat(GV)) {
       Flags |= ELF::SHF_GROUP;
       Group = C->getName();
     }
 
-    return getContext().getELFSection(Name, getELFSectionType(Name, Kind),
-                                      Flags, 0, Group, !UniqueSectionNames);
+    return getContext().getELFSection(
+        Name.str(), getELFSectionType(Name.str(), Kind), Flags, 0, Group);
   }
 
   if (Kind.isText()) return TextSection;
index b4948e659fbe62781d4f009aeb50483ad7ec3df7..600d06472fc6671b8d7da20bca89d78a53890956 100644 (file)
@@ -247,12 +247,11 @@ class ELFObjectWriter : public MCObjectWriter {
                             const RevGroupMapTy &RevGroupMap,
                             unsigned NumRegularSections);
 
-    void computeIndexMap(MCAssembler &Asm,
+    void ComputeIndexMap(MCAssembler &Asm,
                          SectionIndexMapTy &SectionIndexMap,
-                         RelMapTy &RelMap);
+                         const RelMapTy &RelMap);
 
-    MCSectionData *createRelocationSection(MCAssembler &Asm,
-                                           const MCSectionData &SD);
+    void CreateRelocationSections(MCAssembler &Asm, RelMapTy &RelMap);
 
     void CompressDebugSections(MCAssembler &Asm, MCAsmLayout &Layout);
 
@@ -264,19 +263,18 @@ class ELFObjectWriter : public MCObjectWriter {
 
     // Create the sections that show up in the symbol table. Currently
     // those are the .note.GNU-stack section and the group sections.
-    void createIndexedSections(MCAssembler &Asm, MCAsmLayout &Layout,
+    void CreateIndexedSections(MCAssembler &Asm, MCAsmLayout &Layout,
                                GroupMapTy &GroupMap,
                                RevGroupMapTy &RevGroupMap,
                                SectionIndexMapTy &SectionIndexMap,
-                               RelMapTy &RelMap);
+                               const RelMapTy &RelMap);
 
     void ExecutePostLayoutBinding(MCAssembler &Asm,
                                   const MCAsmLayout &Layout) override;
 
-    void writeSectionHeader(MCAssembler &Asm, const GroupMapTy &GroupMap,
+    void WriteSectionHeader(MCAssembler &Asm, const GroupMapTy &GroupMap,
                             const MCAsmLayout &Layout,
                             const SectionIndexMapTy &SectionIndexMap,
-                            const RelMapTy &RelMap,
                             const SectionOffsetMapTy &SectionOffsetMap);
 
     void ComputeSectionOrder(MCAssembler &Asm,
@@ -299,9 +297,8 @@ class ELFObjectWriter : public MCObjectWriter {
                                            bool IsPCRel) const override;
 
     void WriteObject(MCAssembler &Asm, const MCAsmLayout &Layout) override;
-    void writeSection(MCAssembler &Asm,
+    void WriteSection(MCAssembler &Asm,
                       const SectionIndexMapTy &SectionIndexMap,
-                      const RelMapTy &RelMap,
                       uint32_t GroupSymbolIndex,
                       uint64_t Offset, uint64_t Size, uint64_t Alignment,
                       const MCSectionELF &Section);
@@ -944,9 +941,9 @@ bool ELFObjectWriter::isLocal(const MCSymbolData &Data, bool isUsedInReloc) {
   return true;
 }
 
-void ELFObjectWriter::computeIndexMap(MCAssembler &Asm,
+void ELFObjectWriter::ComputeIndexMap(MCAssembler &Asm,
                                       SectionIndexMapTy &SectionIndexMap,
-                                      RelMapTy &RelMap) {
+                                      const RelMapTy &RelMap) {
   unsigned Index = 1;
   for (MCAssembler::iterator it = Asm.begin(),
          ie = Asm.end(); it != ie; ++it) {
@@ -959,20 +956,16 @@ void ELFObjectWriter::computeIndexMap(MCAssembler &Asm,
 
   for (MCAssembler::iterator it = Asm.begin(),
          ie = Asm.end(); it != ie; ++it) {
-    const MCSectionData &SD = *it;
     const MCSectionELF &Section =
-      static_cast<const MCSectionELF &>(SD.getSection());
+      static_cast<const MCSectionELF &>(it->getSection());
     if (Section.getType() == ELF::SHT_GROUP ||
         Section.getType() == ELF::SHT_REL ||
         Section.getType() == ELF::SHT_RELA)
       continue;
     SectionIndexMap[&Section] = Index++;
-    if (MCSectionData *RelSD = createRelocationSection(Asm, SD)) {
-      const MCSectionELF *RelSection =
-          static_cast<const MCSectionELF *>(&RelSD->getSection());
-      RelMap[RelSection] = &Section;
+    const MCSectionELF *RelSection = RelMap.lookup(&Section);
+    if (RelSection)
       SectionIndexMap[RelSection] = Index++;
-    }
   }
 }
 
@@ -1122,37 +1115,42 @@ ELFObjectWriter::computeSymbolTable(MCAssembler &Asm, const MCAsmLayout &Layout,
     UndefinedSymbolData[i].SymbolData->setIndex(Index++);
 }
 
-MCSectionData *
-ELFObjectWriter::createRelocationSection(MCAssembler &Asm,
-                                         const MCSectionData &SD) {
-  if (Relocations[&SD].empty())
-    return nullptr;
+void ELFObjectWriter::CreateRelocationSections(MCAssembler &Asm,
+                                               RelMapTy &RelMap) {
+  for (MCAssembler::const_iterator it = Asm.begin(),
+         ie = Asm.end(); it != ie; ++it) {
+    const MCSectionData &SD = *it;
+    if (Relocations[&SD].empty())
+      continue;
 
-  MCContext &Ctx = Asm.getContext();
-  const MCSectionELF &Section =
-      static_cast<const MCSectionELF &>(SD.getSection());
+    MCContext &Ctx = Asm.getContext();
+    const MCSectionELF &Section =
+      static_cast<const MCSectionELF&>(SD.getSection());
 
-  const StringRef SectionName = Section.getSectionName();
-  std::string RelaSectionName = hasRelocationAddend() ? ".rela" : ".rel";
-  RelaSectionName += SectionName;
+    const StringRef SectionName = Section.getSectionName();
+    std::string RelaSectionName = hasRelocationAddend() ? ".rela" : ".rel";
+    RelaSectionName += SectionName;
 
-  unsigned EntrySize;
-  if (hasRelocationAddend())
-    EntrySize = is64Bit() ? sizeof(ELF::Elf64_Rela) : sizeof(ELF::Elf32_Rela);
-  else
-    EntrySize = is64Bit() ? sizeof(ELF::Elf64_Rel) : sizeof(ELF::Elf32_Rel);
+    unsigned EntrySize;
+    if (hasRelocationAddend())
+      EntrySize = is64Bit() ? sizeof(ELF::Elf64_Rela) : sizeof(ELF::Elf32_Rela);
+    else
+      EntrySize = is64Bit() ? sizeof(ELF::Elf64_Rel) : sizeof(ELF::Elf32_Rel);
 
-  unsigned Flags = 0;
-  StringRef Group = "";
-  if (Section.getFlags() & ELF::SHF_GROUP) {
-    Flags = ELF::SHF_GROUP;
-    Group = Section.getGroup()->getName();
-  }
+    unsigned Flags = 0;
+    StringRef Group = "";
+    if (Section.getFlags() & ELF::SHF_GROUP) {
+      Flags = ELF::SHF_GROUP;
+      Group = Section.getGroup()->getName();
+    }
 
-  const MCSectionELF *RelaSection = Ctx.getELFSection(
-      RelaSectionName, hasRelocationAddend() ? ELF::SHT_RELA : ELF::SHT_REL,
-      Flags, EntrySize, Group, true);
-  return &Asm.getOrCreateSectionData(*RelaSection);
+    const MCSectionELF *RelaSection =
+      Ctx.getELFSection(RelaSectionName, hasRelocationAddend() ?
+                        ELF::SHT_RELA : ELF::SHT_REL, Flags,
+                        EntrySize, Group);
+    RelMap[&Section] = RelaSection;
+    Asm.getOrCreateSectionData(*RelaSection);
+  }
 }
 
 static SmallVector<char, 128>
@@ -1302,21 +1300,20 @@ void ELFObjectWriter::CompressDebugSections(MCAssembler &Asm,
 
 void ELFObjectWriter::WriteRelocations(MCAssembler &Asm, MCAsmLayout &Layout,
                                        const RelMapTy &RelMap) {
-  for (MCAssembler::iterator it = Asm.begin(), ie = Asm.end(); it != ie; ++it) {
-    MCSectionData &RelSD = *it;
-    const MCSectionELF &RelSection =
-        static_cast<const MCSectionELF &>(RelSD.getSection());
+  for (MCAssembler::const_iterator it = Asm.begin(),
+         ie = Asm.end(); it != ie; ++it) {
+    const MCSectionData &SD = *it;
+    const MCSectionELF &Section =
+      static_cast<const MCSectionELF&>(SD.getSection());
 
-    unsigned Type = RelSection.getType();
-    if (Type != ELF::SHT_REL && Type != ELF::SHT_RELA)
+    const MCSectionELF *RelaSection = RelMap.lookup(&Section);
+    if (!RelaSection)
       continue;
+    MCSectionData &RelaSD = Asm.getOrCreateSectionData(*RelaSection);
+    RelaSD.setAlignment(is64Bit() ? 8 : 4);
 
-    const MCSectionELF *Section = RelMap.lookup(&RelSection);
-    MCSectionData &SD = Asm.getOrCreateSectionData(*Section);
-    RelSD.setAlignment(is64Bit() ? 8 : 4);
-
-    MCDataFragment *F = new MCDataFragment(&RelSD);
-    WriteRelocationsFragment(Asm, F, &SD);
+    MCDataFragment *F = new MCDataFragment(&RelaSD);
+    WriteRelocationsFragment(Asm, F, &*it);
   }
 }
 
@@ -1448,12 +1445,12 @@ void ELFObjectWriter::CreateMetadataSections(
                           ShStrTabBuilder.data().end());
 }
 
-void ELFObjectWriter::createIndexedSections(MCAssembler &Asm,
+void ELFObjectWriter::CreateIndexedSections(MCAssembler &Asm,
                                             MCAsmLayout &Layout,
                                             GroupMapTy &GroupMap,
                                             RevGroupMapTy &RevGroupMap,
                                             SectionIndexMapTy &SectionIndexMap,
-                                            RelMapTy &RelMap) {
+                                            const RelMapTy &RelMap) {
   MCContext &Ctx = Asm.getContext();
 
   // Build the groups
@@ -1477,7 +1474,7 @@ void ELFObjectWriter::createIndexedSections(MCAssembler &Asm,
     GroupMap[Group] = SignatureSymbol;
   }
 
-  computeIndexMap(Asm, SectionIndexMap, RelMap);
+  ComputeIndexMap(Asm, SectionIndexMap, RelMap);
 
   // Add sections to the groups
   for (MCAssembler::const_iterator it = Asm.begin(), ie = Asm.end();
@@ -1495,9 +1492,8 @@ void ELFObjectWriter::createIndexedSections(MCAssembler &Asm,
   }
 }
 
-void ELFObjectWriter::writeSection(MCAssembler &Asm,
+void ELFObjectWriter::WriteSection(MCAssembler &Asm,
                                    const SectionIndexMapTy &SectionIndexMap,
-                                   const RelMapTy &RelMap,
                                    uint32_t GroupSymbolIndex,
                                    uint64_t Offset, uint64_t Size,
                                    uint64_t Alignment,
@@ -1513,9 +1509,21 @@ void ELFObjectWriter::writeSection(MCAssembler &Asm,
 
   case ELF::SHT_REL:
   case ELF::SHT_RELA: {
-    sh_link = SymbolTableIndex;
+    const MCSectionELF *SymtabSection;
+    const MCSectionELF *InfoSection;
+    SymtabSection =
+        Asm.getContext().getELFSection(".symtab", ELF::SHT_SYMTAB, 0);
+    sh_link = SectionIndexMap.lookup(SymtabSection);
     assert(sh_link && ".symtab not found");
-    const MCSectionELF *InfoSection = RelMap.find(&Section)->second;
+
+    // Remove ".rel" and ".rela" prefixes.
+    unsigned SecNameLen = (Section.getType() == ELF::SHT_REL) ? 4 : 5;
+    StringRef SectionName = Section.getSectionName().substr(SecNameLen);
+    StringRef GroupName =
+        Section.getGroup() ? Section.getGroup()->getName() : "";
+
+    InfoSection = Asm.getContext().getELFSection(SectionName, ELF::SHT_PROGBITS,
+                                                 0, 0, GroupName);
     sh_info = SectionIndexMap.lookup(InfoSection);
     break;
   }
@@ -1626,10 +1634,11 @@ void ELFObjectWriter::WriteDataSectionData(MCAssembler &Asm,
   }
 }
 
-void ELFObjectWriter::writeSectionHeader(
-    MCAssembler &Asm, const GroupMapTy &GroupMap, const MCAsmLayout &Layout,
-    const SectionIndexMapTy &SectionIndexMap, const RelMapTy &RelMap,
-    const SectionOffsetMapTy &SectionOffsetMap) {
+void ELFObjectWriter::WriteSectionHeader(MCAssembler &Asm,
+                                         const GroupMapTy &GroupMap,
+                                         const MCAsmLayout &Layout,
+                                      const SectionIndexMapTy &SectionIndexMap,
+                                   const SectionOffsetMapTy &SectionOffsetMap) {
   const unsigned NumSections = Asm.size() + 1;
 
   std::vector<const MCSectionELF*> Sections;
@@ -1660,7 +1669,7 @@ void ELFObjectWriter::writeSectionHeader(
 
     uint64_t Size = GetSectionAddressSize(Layout, SD);
 
-    writeSection(Asm, SectionIndexMap, RelMap, GroupSymbolIndex,
+    WriteSection(Asm, SectionIndexMap, GroupSymbolIndex,
                  SectionOffsetMap.lookup(&Section), Size,
                  SD.getAlignment(), Section);
   }
@@ -1707,8 +1716,10 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm,
   CompressDebugSections(Asm, const_cast<MCAsmLayout &>(Layout));
 
   DenseMap<const MCSectionELF*, const MCSectionELF*> RelMap;
+  CreateRelocationSections(Asm, RelMap);
+
   const unsigned NumUserAndRelocSections = Asm.size();
-  createIndexedSections(Asm, const_cast<MCAsmLayout&>(Layout), GroupMap,
+  CreateIndexedSections(Asm, const_cast<MCAsmLayout&>(Layout), GroupMap,
                         RevGroupMap, SectionIndexMap, RelMap);
   const unsigned AllSections = Asm.size();
   const unsigned NumIndexedSections = AllSections - NumUserAndRelocSections;
@@ -1780,7 +1791,7 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm,
   WriteZeros(Padding);
 
   // ... then the section header table ...
-  writeSectionHeader(Asm, GroupMap, Layout, SectionIndexMap, RelMap,
+  WriteSectionHeader(Asm, GroupMap, Layout, SectionIndexMap,
                      SectionOffsetMap);
 
   // ... and then the remaining sections ...
index 721edd451ee659bb78e8dd0a693091c58685a268..35609893e2866448f136f98975ebb47b6efb4bd2 100644 (file)
@@ -272,13 +272,12 @@ void MCContext::renameELFSection(const MCSectionELF *Section, StringRef Name) {
 
 const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type,
                                              unsigned Flags, unsigned EntrySize,
-                                             StringRef Group, bool Unique) {
+                                             StringRef Group) {
   // Do the lookup, if we have a hit, return it.
   auto IterBool = ELFUniquingMap.insert(
       std::make_pair(SectionGroupPair(Section, Group), nullptr));
   auto &Entry = *IterBool.first;
-  if (!IterBool.second && !Unique)
-    return Entry.second;
+  if (!IterBool.second) return Entry.second;
 
   MCSymbol *GroupSym = nullptr;
   if (!Group.empty())
@@ -293,22 +292,15 @@ const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type,
     Kind = SectionKind::getReadOnly();
 
   MCSectionELF *Result = new (*this)
-      MCSectionELF(CachedName, Type, Flags, Kind, EntrySize, GroupSym, Unique);
-  if (!Unique)
-    Entry.second = Result;
+      MCSectionELF(CachedName, Type, Flags, Kind, EntrySize, GroupSym);
+  Entry.second = Result;
   return Result;
 }
 
-const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type,
-                                             unsigned Flags, unsigned EntrySize,
-                                             StringRef Group) {
-  return getELFSection(Section, Type, Flags, EntrySize, Group, false);
-}
-
 const MCSectionELF *MCContext::CreateELFGroupSection() {
   MCSectionELF *Result =
-      new (*this) MCSectionELF(".group", ELF::SHT_GROUP, 0,
-                               SectionKind::getReadOnly(), 4, nullptr, false);
+    new (*this) MCSectionELF(".group", ELF::SHT_GROUP, 0,
+                             SectionKind::getReadOnly(), 4, nullptr);
   return Result;
 }
 
index 7a120a105d2bd96d507c9e635dbae2aed83c36e9..21c65ce0b830199ec86d1cbd717f98a3382061d3 100644 (file)
@@ -378,8 +378,6 @@ bool ELFAsmParser::ParseSectionArguments(bool IsPush, SMLoc loc) {
   unsigned Flags = 0;
   const MCExpr *Subsection = nullptr;
   bool UseLastGroup = false;
-  StringRef UniqueStr;
-  bool Unique = false;
 
   // Set the defaults first.
   if (SectionName == ".fini" || SectionName == ".init" ||
@@ -464,14 +462,6 @@ bool ELFAsmParser::ParseSectionArguments(bool IsPush, SMLoc loc) {
             return TokError("Linkage must be 'comdat'");
         }
       }
-      if (getLexer().is(AsmToken::Comma)) {
-        Lex();
-        if (getParser().parseIdentifier(UniqueStr))
-          return TokError("expected identifier in directive");
-        if (UniqueStr != "unique")
-          return TokError("expected 'unique'");
-        Unique = true;
-      }
     }
   }
 
@@ -519,8 +509,8 @@ EndStmt:
       }
   }
 
-  const MCSection *ELFSection = getContext().getELFSection(
-      SectionName, Type, Flags, Size, GroupName, Unique);
+  const MCSection *ELFSection =
+      getContext().getELFSection(SectionName, Type, Flags, Size, GroupName);
   getStreamer().SwitchSection(ELFSection, Subsection);
 
   if (getContext().getGenDwarfForAssembly()) {
index da3868273a7759a1ab8e318f430b67a567aedff1..fb364c87a034dd15ebf42cf7e225dc326ffb42e3 100644 (file)
@@ -24,9 +24,6 @@ MCSectionELF::~MCSectionELF() {} // anchor.
 bool MCSectionELF::ShouldOmitSectionDirective(StringRef Name,
                                               const MCAsmInfo &MAI) const {
 
-  if (Unique)
-    return false;
-
   // FIXME: Does .section .bss/.data/.text work everywhere??
   if (Name == ".text" || Name == ".data" ||
       (Name == ".bss" && !MAI.usesELFSectionDirectiveForBSS()))
@@ -147,10 +144,6 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
     printName(OS, Group->getName());
     OS << ",comdat";
   }
-
-  if (Unique)
-    OS << ",unique";
-
   OS << '\n';
 
   if (Subsection)
diff --git a/test/CodeGen/X86/non-unique-sections.ll b/test/CodeGen/X86/non-unique-sections.ll
deleted file mode 100644 (file)
index e588b9d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-; RUN: llc < %s -mtriple=x86_64-pc-linux -function-sections -unique-section-names=false | FileCheck %s
-
-; CHECK:   .section                      .text,"ax",@progbits,unique
-; CHECK-NOT: section
-; CHECK: f:
-define void @f() {
-  ret void
-}
-
-; CHECK:   .section                      .text,"ax",@progbits,unique
-; CHECK-NOT: section
-; CHECK: g:
-define void @g() {
-  ret void
-}
diff --git a/test/MC/ELF/section-unique.s b/test/MC/ELF/section-unique.s
deleted file mode 100644 (file)
index b482af3..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-// RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -o - | FileCheck %s
-// RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -filetype=obj -o - | llvm-readobj -t | FileCheck %s --check-prefix=OBJ
-
-       .section        .text,"ax",@progbits,unique
-        .globl f
-f:
-        nop
-
-       .section        .text,"ax",@progbits,unique
-        .globl g
-g:
-        nop
-
-// test that f and g are in different sections.
-
-// CHECK: .section     .text,"ax",@progbits,unique
-// CHECK: f:
-
-// CHECK: .section     .text,"ax",@progbits,unique
-// CHECK: g:
-
-// OBJ: Symbol {
-// OBJ:   Name:    f
-// OBJ:   Value:   0x0
-// OBJ:   Size:    0
-// OBJ:   Binding: Global
-// OBJ:   Type:    None
-// OBJ:   Other:   0
-// OBJ:   Section: .text (0x4)
-// OBJ: }
-// OBJ: Symbol {
-// OBJ:   Name:    g
-// OBJ:   Value:   0x0
-// OBJ:   Size:    0
-// OBJ:   Binding: Global
-// OBJ:   Type:    None
-// OBJ:   Other:   0
-// OBJ:   Section: .text (0x5)
-// OBJ: }