From 55a3afb418d283b92f5b3bdf4413ae25682c5de6 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 28 Apr 2015 21:07:28 +0000 Subject: [PATCH] Remove the GroupMapTy DenseMap. NFC. Instead use the Group symbol of MCSectionELF. llvm-svn: 236033 --- llvm/include/llvm/MC/MCContext.h | 2 +- llvm/lib/MC/ELFObjectWriter.cpp | 28 ++++++++++------------------ llvm/lib/MC/MCContext.cpp | 4 ++-- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h index bf473cc..231b020 100644 --- a/llvm/include/llvm/MC/MCContext.h +++ b/llvm/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/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index aaca625..21ddf4c 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/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 GroupMapTy; // Map from a signature symbol to the group section typedef DenseMap 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 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 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 &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(Layout)); - createIndexedSections(Asm, const_cast(Layout), GroupMap, - RevGroupMap, SectionIndexMap); + createIndexedSections(Asm, const_cast(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/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index 5f8e3c1..fd0422d 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/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; } -- 2.7.4