diff options
Diffstat (limited to 'llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp')
-rw-r--r-- | llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp index 73e4a14a854..bc0bb0830d9 100644 --- a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp +++ b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp @@ -896,6 +896,13 @@ Error DumpOutputStyle::dumpPublics() { auto &Publics = Err(File.getPDBPublicsStream()); const GSIHashTable &PublicsTable = Publics.getPublicsTable(); + if (opts::dump::DumpPublicExtras) { + P.printLine("Publics Header"); + AutoIndent Indent(P); + P.formatLine("sym hash = {0}, thunk table addr = {1}", Publics.getSymHash(), + formatSegmentOffset(Publics.getThunkTableSection(), + Publics.getThunkTableOffset())); + } Err(dumpSymbolsFromGSI(PublicsTable, opts::dump::DumpPublicExtras)); // Skip the rest if we aren't dumping extras. @@ -941,30 +948,42 @@ Error DumpOutputStyle::dumpSymbolsFromGSI(const GSIHashTable &Table, auto ExpectedIds = initializeTypes(StreamIPI); if (!ExpectedIds) return ExpectedIds.takeError(); - SymbolVisitorCallbackPipeline Pipeline; - SymbolDeserializer Deserializer(nullptr, CodeViewContainer::Pdb); - MinimalSymbolDumper Dumper(P, opts::dump::DumpSymRecordBytes, *ExpectedIds, - *ExpectedTypes); - - Pipeline.addCallbackToPipeline(Deserializer); - Pipeline.addCallbackToPipeline(Dumper); - CVSymbolVisitor Visitor(Pipeline); - - BinaryStreamRef SymStream = - ExpectedSyms->getSymbolArray().getUnderlyingStream(); - for (uint32_t PubSymOff : Table) { - Expected<CVSymbol> Sym = readSymbolFromStream(SymStream, PubSymOff); - if (!Sym) - return Sym.takeError(); - if (auto E = Visitor.visitSymbolRecord(*Sym, PubSymOff)) - return E; + + if (HashExtras) { + P.printLine("GSI Header"); + AutoIndent Indent(P); + P.formatLine("sig = {0:X}, hdr = {1:X}, hr size = {2}, num buckets = {3}", + Table.getVerSignature(), Table.getVerHeader(), + Table.getHashRecordSize(), Table.getNumBuckets()); + } + + { + P.printLine("Records"); + SymbolVisitorCallbackPipeline Pipeline; + SymbolDeserializer Deserializer(nullptr, CodeViewContainer::Pdb); + MinimalSymbolDumper Dumper(P, opts::dump::DumpSymRecordBytes, *ExpectedIds, + *ExpectedTypes); + + Pipeline.addCallbackToPipeline(Deserializer); + Pipeline.addCallbackToPipeline(Dumper); + CVSymbolVisitor Visitor(Pipeline); + + BinaryStreamRef SymStream = + ExpectedSyms->getSymbolArray().getUnderlyingStream(); + for (uint32_t PubSymOff : Table) { + Expected<CVSymbol> Sym = readSymbolFromStream(SymStream, PubSymOff); + if (!Sym) + return Sym.takeError(); + if (auto E = Visitor.visitSymbolRecord(*Sym, PubSymOff)) + return E; + } } // Return early if we aren't dumping public hash table and address map info. if (!HashExtras) return Error::success(); - P.formatLine("Hash Records"); + P.formatLine("Hash Entries"); { AutoIndent Indent2(P); for (const PSHashRecord &HR : Table.HashRecords) |