diff options
| author | Zachary Turner <zturner@google.com> | 2016-05-06 22:15:42 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2016-05-06 22:15:42 +0000 |
| commit | 5a1b5ef9ebe76f50197c1180c894d8ba6f62e04d (patch) | |
| tree | c5aea04b6b74e2763c4f9226651bce446078cf2d /llvm/tools | |
| parent | 52b394e9813c9dad61fbf4f53a934da3fc17b7fa (diff) | |
| download | bcm5719-llvm-5a1b5ef9ebe76f50197c1180c894d8ba6f62e04d.tar.gz bcm5719-llvm-5a1b5ef9ebe76f50197c1180c894d8ba6f62e04d.zip | |
Make llvm-pdbdump print CV type records
This reuses the CVTypeDumper from libcodeview to dump full
information about type records within a PDB file.
Differential Revision: http://reviews.llvm.org/D20022
Reviewed By: rnk
llvm-svn: 268808
Diffstat (limited to 'llvm/tools')
| -rw-r--r-- | llvm/tools/llvm-pdbdump/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp | 26 |
2 files changed, 17 insertions, 10 deletions
diff --git a/llvm/tools/llvm-pdbdump/CMakeLists.txt b/llvm/tools/llvm-pdbdump/CMakeLists.txt index 212b9563b04..02f386efe03 100644 --- a/llvm/tools/llvm-pdbdump/CMakeLists.txt +++ b/llvm/tools/llvm-pdbdump/CMakeLists.txt @@ -1,4 +1,5 @@ set(LLVM_LINK_COMPONENTS + DebugInfoCodeView DebugInfoPDB Object Support 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(); } |

