]> granicus.if.org Git - llvm/commitdiff
[llvm-pdbutil] Show what blocks a stream occupies.
authorZachary Turner <zturner@google.com>
Fri, 23 Jun 2017 20:28:14 +0000 (20:28 +0000)
committerZachary Turner <zturner@google.com>
Fri, 23 Jun 2017 20:28:14 +0000 (20:28 +0000)
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
tools/llvm-pdbutil/DumpOutputStyle.cpp
tools/llvm-pdbutil/llvm-pdbutil.cpp
tools/llvm-pdbutil/llvm-pdbutil.h

index e6ee12b6d10e081e59801f7b646e4b5cbff37293..9a4544cce3831f70f1c79d743405f7014139c120 100644 (file)
@@ -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
index a05e5cf03e99b0b1737ec0f36fd7ef93a92d68a4..f76635f9e51187379fde1279d2c1ac71f6f2193f 100644 (file)
@@ -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<uint32_t> BV(Blocks.begin(), Blocks.end());
+      P.formatLine("       {0}  Blocks: [{1}]",
+                   fmt_repeat(' ', NumDigits(StreamCount)),
+                   make_range(BV.begin(), BV.end()));
+    }
   }
 
   return Error::success();
index 6204594d8f6e6933df5c4137eb867dca5ff9cf93..e1eb1b487b6c17afb219998f64e8758464eabe93 100644 (file)
@@ -308,6 +308,10 @@ cl::opt<bool> DumpSummary("summary", cl::desc("dump file summary"),
 cl::opt<bool> DumpStreams("streams",
                           cl::desc("dump summary of the PDB streams"),
                           cl::cat(MsfOptions), cl::sub(DumpSubcommand));
+cl::opt<bool> DumpStreamBlocks(
+    "stream-blocks",
+    cl::desc("Add block information to the output of -streams"),
+    cl::cat(MsfOptions), cl::sub(DumpSubcommand));
 
 // TYPE OPTIONS
 cl::opt<bool> 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;
index dc1bbe9ef46c290c6504f2fbd5b41af142fdbe5b..882104c1d0b92f54237493864cc6bb733a96841d 100644 (file)
@@ -108,6 +108,7 @@ namespace dump {
 
 extern llvm::cl::opt<bool> DumpSummary;
 extern llvm::cl::opt<bool> DumpStreams;
+extern llvm::cl::opt<bool> DumpStreamBlocks;
 
 extern llvm::cl::opt<bool> DumpLines;
 extern llvm::cl::opt<bool> DumpInlineeLines;