From f401e1102d573b36f788f1c7d13972d6ceb5ff89 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Thu, 17 Aug 2017 20:04:31 +0000 Subject: [PATCH] Fix a few minor issues when dumping symbols. 1) We weren't handling symbol types that weren't able to parse, even if we knew what the leaf type was. This was triggering when trying to dump /DEBUG:FASTLINK PDBs, where we expect a certain symbol to show up, but we just don't know how to parse it. 2) We lost the code for dumping record bytes, so this was added back. llvm-svn: 311116 --- llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def | 2 ++ llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp | 5 +++++ llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def b/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def index 32813d861d90..f6b1b54d8630 100644 --- a/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def +++ b/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def @@ -184,6 +184,8 @@ CV_SYMBOL(S_LDATA_HLSL32 , 0x1163) CV_SYMBOL(S_GDATA_HLSL32_EX, 0x1164) CV_SYMBOL(S_LDATA_HLSL32_EX, 0x1165) +CV_SYMBOL(S_FASTLINK, 0x1167) + // Known symbol types SYMBOL_RECORD(S_END , 0x0006, ScopeEndSym) SYMBOL_RECORD_ALIAS(S_INLINESITE_END , 0x114e, InlineSiteEnd, ScopeEndSym) diff --git a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp b/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp index 678376b59574..a6816bde0ea7 100644 --- a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp +++ b/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp @@ -29,6 +29,7 @@ static StringRef getSymbolKindName(SymbolKind K) { #define SYMBOL_RECORD(EnumName, value, name) \ case EnumName: \ return #EnumName; +#define CV_SYMBOL(EnumName, value) SYMBOL_RECORD(EnumName, value, EnumName) #include "llvm/DebugInfo/CodeView/CodeViewSymbols.def" default: llvm_unreachable("Unknown symbol kind!"); @@ -385,6 +386,10 @@ Error MinimalSymbolDumper::visitSymbolBegin(codeview::CVSymbol &Record, } Error MinimalSymbolDumper::visitSymbolEnd(CVSymbol &Record) { + if (RecordBytes) { + AutoIndent Indent(P, 7); + P.formatBinary("bytes", Record.content(), 0); + } P.Unindent(); return Error::success(); } diff --git a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h b/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h index a140af74b694..d9e9861d5b30 100644 --- a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h +++ b/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h @@ -25,7 +25,7 @@ public: MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, codeview::LazyRandomTypeCollection &Ids, codeview::LazyRandomTypeCollection &Types) - : P(P), Ids(Ids), Types(Types) {} + : P(P), RecordBytes(RecordBytes), Ids(Ids), Types(Types) {} Error visitSymbolBegin(codeview::CVSymbol &Record) override; Error visitSymbolBegin(codeview::CVSymbol &Record, uint32_t Offset) override; @@ -44,6 +44,7 @@ private: std::string idIndex(codeview::TypeIndex TI) const; LinePrinter &P; + bool RecordBytes; codeview::LazyRandomTypeCollection &Ids; codeview::LazyRandomTypeCollection &Types; };