summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp')
-rw-r--r--llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
index 202e18d504a..05b06428470 100644
--- a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
+++ b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
@@ -26,6 +26,7 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Config/config.h"
+#include "llvm/DebugInfo/CodeView/TypeDumper.h"
#include "llvm/DebugInfo/PDB/GenericError.h"
#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
@@ -106,8 +107,8 @@ cl::opt<bool> DumpStreamSizes("dump-stream-sizes",
cl::opt<bool> DumpStreamBlocks("dump-stream-blocks",
cl::desc("dump PDB stream blocks"),
cl::cat(OtherOptions));
-cl::opt<bool> DumpTypeStream("dump-tpi-stream",
- cl::desc("dump PDB TPI (Type Info) stream"),
+cl::opt<bool> DumpTpiRecords("dump-tpi-records",
+ cl::desc("dump CodeView type records"),
cl::cat(OtherOptions));
cl::opt<bool>
DumpTpiRecordBytes("dump-tpi-record-bytes",
@@ -338,7 +339,7 @@ static Error dumpDbiStream(ScopedPrinter &P, PDBFile &File) {
}
static Error dumpTpiStream(ScopedPrinter &P, PDBFile &File) {
- if (!opts::DumpTypeStream)
+ if (!opts::DumpTpiRecordBytes && !opts::DumpTpiRecords)
return Error::success();
DictScope D(P, "Type Info Stream");
@@ -351,14 +352,19 @@ static Error dumpTpiStream(ScopedPrinter &P, PDBFile &File) {
P.printNumber("TPI Version", Tpi.getTpiVersion());
P.printNumber("Record count", Tpi.NumTypeRecords());
- if (!opts::DumpTpiRecordBytes)
- return Error::success();
+ if (opts::DumpTpiRecordBytes || opts::DumpTpiRecords) {
+ ListScope L(P, "Records");
+ codeview::CVTypeDumper TD(P, false);
+
+ for (auto &Type : Tpi.types()) {
+ DictScope DD(P, "");
- ListScope L(P, "Records");
- for (auto &Type : Tpi.types()) {
- DictScope DD(P, "");
- P.printHex("Kind", unsigned(Type.Leaf));
- P.printBinaryBlock("Bytes", Type.LeafData);
+ if (opts::DumpTpiRecords)
+ TD.dump(Type);
+
+ if (opts::DumpTpiRecordBytes)
+ P.printBinaryBlock("Bytes", Type.LeafData);
+ }
}
return Error::success();
}
OpenPOWER on IntegriCloud