From 055ae721289a2e5ba558b6bff23cb43e072873da Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Fri, 23 Jun 2017 20:28:14 +0000 Subject: [PATCH] [llvm-pdbutil] Show what blocks a stream occupies. This is useful when you want to look at a specific chunk of a stream or look for discontinuities, and you need to know the list of blocks occupied by a stream. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306150 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/DebugInfo/PDB/pdbdump-headers.test | 51 ++++++++++++++++--------- tools/llvm-pdbutil/DumpOutputStyle.cpp | 7 ++++ tools/llvm-pdbutil/llvm-pdbutil.cpp | 5 +++ tools/llvm-pdbutil/llvm-pdbutil.h | 1 + 4 files changed, 47 insertions(+), 17 deletions(-) diff --git a/test/DebugInfo/PDB/pdbdump-headers.test b/test/DebugInfo/PDB/pdbdump-headers.test index e6ee12b6d10..9a4544cce38 100644 --- a/test/DebugInfo/PDB/pdbdump-headers.test +++ b/test/DebugInfo/PDB/pdbdump-headers.test @@ -22,23 +22,40 @@ ALL-NEXT: Has conflicting types: false ALL-NEXT: Is stripped: false ALL: Streams ALL-NEXT: ============================================================ -ALL-NEXT: Stream 0: [Old MSF Directory] (40 bytes) -ALL-NEXT: Stream 1: [PDB Stream] (118 bytes) -ALL-NEXT: Stream 2: [TPI Stream] (5392 bytes) -ALL-NEXT: Stream 3: [DBI Stream] (739 bytes) -ALL-NEXT: Stream 4: [IPI Stream] (784 bytes) -ALL-NEXT: Stream 5: [Named Stream "/LinkInfo"] (0 bytes) -ALL-NEXT: Stream 6: [Global Symbol Hash] (556 bytes) -ALL-NEXT: Stream 7: [Public Symbol Hash] (604 bytes) -ALL-NEXT: Stream 8: [Public Symbol Records] (104 bytes) -ALL-NEXT: Stream 9: [Named Stream "/src/headerblock"] (0 bytes) -ALL-NEXT: Stream 10: [Section Header Data] (160 bytes) -ALL-NEXT: Stream 11: [New FPO Data] (32 bytes) -ALL-NEXT: Stream 12: [Module "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes) -ALL-NEXT: Stream 13: [Named Stream "/names"] (239 bytes) -ALL-NEXT: Stream 14: [Module "* Linker *"] (520 bytes) -ALL-NEXT: Stream 15: [TPI Hash] (308 bytes) -ALL-NEXT: Stream 16: [IPI Hash] (68 bytes) +ALL-NEXT: Stream 0: [Old MSF Directory] (40 bytes) +ALL-NEXT: Blocks: [8] +ALL-NEXT: Stream 1: [PDB Stream] (118 bytes) +ALL-NEXT: Blocks: [19] +ALL-NEXT: Stream 2: [TPI Stream] (5392 bytes) +ALL-NEXT: Blocks: [18, 17] +ALL-NEXT: Stream 3: [DBI Stream] (739 bytes) +ALL-NEXT: Blocks: [14] +ALL-NEXT: Stream 4: [IPI Stream] (784 bytes) +ALL-NEXT: Blocks: [20] +ALL-NEXT: Stream 5: [Named Stream "/LinkInfo"] (0 bytes) +ALL-NEXT: Blocks: [] +ALL-NEXT: Stream 6: [Global Symbol Hash] (556 bytes) +ALL-NEXT: Blocks: [11] +ALL-NEXT: Stream 7: [Public Symbol Hash] (604 bytes) +ALL-NEXT: Blocks: [13] +ALL-NEXT: Stream 8: [Public Symbol Records] (104 bytes) +ALL-NEXT: Blocks: [12] +ALL-NEXT: Stream 9: [Named Stream "/src/headerblock"] (0 bytes) +ALL-NEXT: Blocks: [] +ALL-NEXT: Stream 10: [Section Header Data] (160 bytes) +ALL-NEXT: Blocks: [10] +ALL-NEXT: Stream 11: [New FPO Data] (32 bytes) +ALL-NEXT: Blocks: [15] +ALL-NEXT: Stream 12: [Module "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes) +ALL-NEXT: Blocks: [6] +ALL-NEXT: Stream 13: [Named Stream "/names"] (239 bytes) +ALL-NEXT: Blocks: [16] +ALL-NEXT: Stream 14: [Module "* Linker *"] (520 bytes) +ALL-NEXT: Blocks: [7] +ALL-NEXT: Stream 15: [TPI Hash] (308 bytes) +ALL-NEXT: Blocks: [21] +ALL-NEXT: Stream 16: [IPI Hash] (68 bytes) +ALL-NEXT: Blocks: [22] ALL: String Table ALL-NEXT: ============================================================ ALL-NEXT: ID | String diff --git a/tools/llvm-pdbutil/DumpOutputStyle.cpp b/tools/llvm-pdbutil/DumpOutputStyle.cpp index a05e5cf03e9..f76635f9e51 100644 --- a/tools/llvm-pdbutil/DumpOutputStyle.cpp +++ b/tools/llvm-pdbutil/DumpOutputStyle.cpp @@ -199,6 +199,13 @@ Error DumpOutputStyle::dumpStreamSummary() { "Stream {0}: [{1}] ({2} bytes)", fmt_align(StreamIdx, AlignStyle::Right, NumDigits(StreamCount)), StreamPurposes[StreamIdx], File.getStreamByteSize(StreamIdx)); + if (opts::dump::DumpStreamBlocks) { + auto Blocks = File.getStreamBlockList(StreamIdx); + std::vector BV(Blocks.begin(), Blocks.end()); + P.formatLine(" {0} Blocks: [{1}]", + fmt_repeat(' ', NumDigits(StreamCount)), + make_range(BV.begin(), BV.end())); + } } return Error::success(); diff --git a/tools/llvm-pdbutil/llvm-pdbutil.cpp b/tools/llvm-pdbutil/llvm-pdbutil.cpp index 6204594d8f6..e1eb1b487b6 100644 --- a/tools/llvm-pdbutil/llvm-pdbutil.cpp +++ b/tools/llvm-pdbutil/llvm-pdbutil.cpp @@ -308,6 +308,10 @@ cl::opt DumpSummary("summary", cl::desc("dump file summary"), cl::opt DumpStreams("streams", cl::desc("dump summary of the PDB streams"), cl::cat(MsfOptions), cl::sub(DumpSubcommand)); +cl::opt DumpStreamBlocks( + "stream-blocks", + cl::desc("Add block information to the output of -streams"), + cl::cat(MsfOptions), cl::sub(DumpSubcommand)); // TYPE OPTIONS cl::opt DumpTypes("types", @@ -978,6 +982,7 @@ int main(int argc_, const char *argv_[]) { opts::dump::DumpSectionContribs = true; opts::dump::DumpSectionMap = true; opts::dump::DumpStreams = true; + opts::dump::DumpStreamBlocks = true; opts::dump::DumpStringTable = true; opts::dump::DumpSummary = true; opts::dump::DumpSymbols = true; diff --git a/tools/llvm-pdbutil/llvm-pdbutil.h b/tools/llvm-pdbutil/llvm-pdbutil.h index dc1bbe9ef46..882104c1d0b 100644 --- a/tools/llvm-pdbutil/llvm-pdbutil.h +++ b/tools/llvm-pdbutil/llvm-pdbutil.h @@ -108,6 +108,7 @@ namespace dump { extern llvm::cl::opt DumpSummary; extern llvm::cl::opt DumpStreams; +extern llvm::cl::opt DumpStreamBlocks; extern llvm::cl::opt DumpLines; extern llvm::cl::opt DumpInlineeLines; -- 2.40.0