diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index f68c60a1325..c65a9876aac 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/COFF/PDB.cpp @@ -178,8 +178,6 @@ private: llvm::SmallString<128> nativePath; - std::vector sectionMap; - /// Type index mappings of type server PDBs that we've loaded so far. std::map typeServerIndexMappings; @@ -1766,8 +1764,7 @@ void PDBLinker::addSections(ArrayRef outputSections, ArrayRef sections = { (const object::coff_section *)sectionTable.data(), sectionTable.size() / sizeof(object::coff_section)}; - sectionMap = pdb::DbiStreamBuilder::createSectionMap(sections); - dbiBuilder.setSectionMap(sectionMap); + dbiBuilder.createSectionMap(sections); // Add COFF section header stream. exitOnErr( diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h b/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h index d9be238af07..24664c31e7c 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h @@ -57,7 +57,6 @@ public: void setFlags(uint16_t F); void setMachineType(PDB_Machine M); void setMachineType(COFF::MachineTypes M); - void setSectionMap(ArrayRef SecMap); // Add given bytes as a new stream. Error addDbgStream(pdb::DbgHeaderType Type, ArrayRef Data); @@ -84,9 +83,8 @@ public: SectionContribs.emplace_back(SC); } - // A helper function to create a Section Map from a COFF section header. - static std::vector - createSectionMap(ArrayRef SecHdrs); + // Populate the Section Map from COFF section headers. + void createSectionMap(ArrayRef SecHdrs); private: struct DebugStream { @@ -133,7 +131,7 @@ private: WritableBinaryStreamRef NamesBuffer; MutableBinaryByteStream FileInfoBuffer; std::vector SectionContribs; - ArrayRef SectionMap; + std::vector SectionMap; std::array, (int)DbgHeaderType::Max> DbgStreams; }; } diff --git a/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp b/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp index 0e00c2f7ff9..627aef7506f 100644 --- a/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp +++ b/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp @@ -58,10 +58,6 @@ void DbiStreamBuilder::setMachineType(COFF::MachineTypes M) { MachineType = static_cast(static_cast(M)); } -void DbiStreamBuilder::setSectionMap(ArrayRef SecMap) { - SectionMap = SecMap; -} - void DbiStreamBuilder::setGlobalsStreamIndex(uint32_t Index) { GlobalsStreamIndex = Index; } @@ -348,19 +344,18 @@ static uint16_t toSecMapFlags(uint32_t Flags) { return Ret; } -// A utility function to create a Section Map for a given list of COFF sections. +// Populate the Section Map from COFF section headers. // // A Section Map seem to be a copy of a COFF section list in other format. // I don't know why a PDB file contains both a COFF section header and // a Section Map, but it seems it must be present in a PDB. -std::vector DbiStreamBuilder::createSectionMap( +void DbiStreamBuilder::createSectionMap( ArrayRef SecHdrs) { - std::vector Ret; int Idx = 0; auto Add = [&]() -> SecMapEntry & { - Ret.emplace_back(); - auto &Entry = Ret.back(); + SectionMap.emplace_back(); + auto &Entry = SectionMap.back(); memset(&Entry, 0, sizeof(Entry)); Entry.Frame = Idx + 1; @@ -384,8 +379,6 @@ std::vector DbiStreamBuilder::createSectionMap( Entry.Flags = static_cast(OMFSegDescFlags::AddressIs32Bit) | static_cast(OMFSegDescFlags::IsAbsoluteAddress); Entry.SecByteLength = UINT32_MAX; - - return Ret; } Error DbiStreamBuilder::commit(const msf::MSFLayout &Layout, @@ -417,7 +410,7 @@ Error DbiStreamBuilder::commit(const msf::MSFLayout &Layout, SecMapHeader SMHeader = {Size, Size}; if (auto EC = Writer.writeObject(SMHeader)) return EC; - if (auto EC = Writer.writeArray(SectionMap)) + if (auto EC = Writer.writeArray(makeArrayRef(SectionMap))) return EC; }