mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 21:50:40 +00:00
[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
This commit is contained in:
parent
a77c3fdb21
commit
055ae72128
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user