From: Rafael Espindola <rafael.espindola@gmail.com> Date: Tue, 28 Apr 2015 21:07:28 +0000 (+0000) Subject: Remove the GroupMapTy DenseMap. NFC. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=923bffd67535045a11ffeaa6bbb7835490d860d2;p=oota-llvm.git Remove the GroupMapTy DenseMap. NFC. Instead use the Group symbol of MCSectionELF. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236033 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCContext.h b/include/llvm/MC/MCContext.h index bf473ccc68e..231b02095e8 100644 --- a/include/llvm/MC/MCContext.h +++ b/include/llvm/MC/MCContext.h @@ -352,7 +352,7 @@ namespace llvm { void renameELFSection(const MCSectionELF *Section, StringRef Name); - const MCSectionELF *CreateELFGroupSection(); + const MCSectionELF *createELFGroupSection(const MCSymbol *Group); const MCSectionCOFF *getCOFFSection(StringRef Section, unsigned Characteristics, diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index aaca625082d..21ddf4c1ab7 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -217,8 +217,6 @@ class ELFObjectWriter : public MCObjectWriter { uint64_t getSymbolIndexInSymbolTable(const MCAssembler &Asm, const MCSymbol *S); - // Map from a group section to the signature symbol - typedef DenseMap<const MCSectionELF*, const MCSymbol*> GroupMapTy; // Map from a signature symbol to the group section typedef DenseMap<const MCSymbol*, const MCSectionELF*> RevGroupMapTy; // Start and end offset of each section @@ -248,15 +246,14 @@ 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, - GroupMapTy &GroupMap, RevGroupMapTy &RevGroupMap, + RevGroupMapTy &RevGroupMap, SectionIndexMapTy &SectionIndexMap); void ExecutePostLayoutBinding(MCAssembler &Asm, const MCAsmLayout &Layout) override; void writeSectionHeader(ArrayRef<const MCSectionELF *> Sections, - MCAssembler &Asm, const GroupMapTy &GroupMap, - const MCAsmLayout &Layout, + MCAssembler &Asm, const MCAsmLayout &Layout, const SectionIndexMapTy &SectionIndexMap, const SectionOffsetsTy &SectionOffsets); @@ -1422,8 +1419,8 @@ void ELFObjectWriter::CreateMetadataSections( } void ELFObjectWriter::createIndexedSections( - MCAssembler &Asm, MCAsmLayout &Layout, GroupMapTy &GroupMap, - RevGroupMapTy &RevGroupMap, SectionIndexMapTy &SectionIndexMap) { + MCAssembler &Asm, MCAsmLayout &Layout, RevGroupMapTy &RevGroupMap, + SectionIndexMapTy &SectionIndexMap) { MCContext &Ctx = Asm.getContext(); // Build the groups @@ -1438,13 +1435,12 @@ void ELFObjectWriter::createIndexedSections( Asm.getOrCreateSymbolData(*SignatureSymbol); const MCSectionELF *&Group = RevGroupMap[SignatureSymbol]; if (!Group) { - Group = Ctx.CreateELFGroupSection(); + Group = Ctx.createELFGroupSection(SignatureSymbol); MCSectionData &Data = Asm.getOrCreateSectionData(*Group); Data.setAlignment(4); MCDataFragment *F = new MCDataFragment(&Data); write(*F, uint32_t(ELF::GRP_COMDAT)); } - GroupMap[Group] = SignatureSymbol; } computeIndexMap(Asm, SectionIndexMap); @@ -1540,8 +1536,7 @@ void ELFObjectWriter::writeDataSectionData(MCAssembler &Asm, void ELFObjectWriter::writeSectionHeader( ArrayRef<const MCSectionELF *> Sections, MCAssembler &Asm, - const GroupMapTy &GroupMap, const MCAsmLayout &Layout, - const SectionIndexMapTy &SectionIndexMap, + const MCAsmLayout &Layout, const SectionIndexMapTy &SectionIndexMap, const SectionOffsetsTy &SectionOffsets) { const unsigned NumSections = Asm.size(); @@ -1559,8 +1554,7 @@ void ELFObjectWriter::writeSectionHeader( if (Section.getType() != ELF::SHT_GROUP) GroupSymbolIndex = 0; else - GroupSymbolIndex = getSymbolIndexInSymbolTable(Asm, - GroupMap.lookup(&Section)); + GroupSymbolIndex = getSymbolIndexInSymbolTable(Asm, Section.getGroup()); const std::pair<uint64_t, uint64_t> &Offsets = SectionOffsets[i]; uint64_t Size = Section.getType() == ELF::SHT_NOBITS @@ -1574,13 +1568,12 @@ void ELFObjectWriter::writeSectionHeader( void ELFObjectWriter::WriteObject(MCAssembler &Asm, const MCAsmLayout &Layout) { - GroupMapTy GroupMap; RevGroupMapTy RevGroupMap; SectionIndexMapTy SectionIndexMap; CompressDebugSections(Asm, const_cast<MCAsmLayout &>(Layout)); - createIndexedSections(Asm, const_cast<MCAsmLayout &>(Layout), GroupMap, - RevGroupMap, SectionIndexMap); + createIndexedSections(Asm, const_cast<MCAsmLayout &>(Layout), RevGroupMap, + SectionIndexMap); // Compute symbol table information. computeSymbolTable(Asm, Layout, SectionIndexMap, RevGroupMap); @@ -1621,8 +1614,7 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm, const unsigned SectionHeaderOffset = OS.tell(); // ... then the section header table ... - writeSectionHeader(Sections, Asm, GroupMap, Layout, SectionIndexMap, - SectionOffsets); + writeSectionHeader(Sections, Asm, Layout, SectionIndexMap, SectionOffsets); if (is64Bit()) { uint64_t Val = SectionHeaderOffset; diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index 5f8e3c11de3..fd0422daf29 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -337,10 +337,10 @@ const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type, return Result; } -const MCSectionELF *MCContext::CreateELFGroupSection() { +const MCSectionELF *MCContext::createELFGroupSection(const MCSymbol *Group) { MCSectionELF *Result = new (*this) MCSectionELF(".group", ELF::SHT_GROUP, 0, SectionKind::getReadOnly(), 4, - nullptr, ~0, nullptr, nullptr); + Group, ~0, nullptr, nullptr); return Result; }