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
This commit is contained in:
Zachary Turner 2017-08-17 20:04:31 +00:00
parent 7cd577bb0d
commit f401e1102d
3 changed files with 9 additions and 1 deletions

View File

@ -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)

View File

@ -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();
}

View File

@ -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;
};