From 9bca64ff2a12cef2759a8f6deb2d28c270e872ab Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Thu, 15 Sep 2011 05:43:00 +0000 Subject: [PATCH] DWARF: Make DIE printing more bulletproof. llvm-svn: 139786 --- llvm/lib/DebugInfo/DWARFDebugInfoEntry.cpp | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/llvm/lib/DebugInfo/DWARFDebugInfoEntry.cpp b/llvm/lib/DebugInfo/DWARFDebugInfoEntry.cpp index 0bf8b69611fd..f8c89fde9328 100644 --- a/llvm/lib/DebugInfo/DWARFDebugInfoEntry.cpp +++ b/llvm/lib/DebugInfo/DWARFDebugInfoEntry.cpp @@ -31,9 +31,13 @@ void DWARFDebugInfoEntryMinimal::dump(raw_ostream &OS, OS << format("\n0x%8.8x: ", Offset); if (abbrCode) { if (AbbrevDecl) { - OS.indent(indent) << TagString(AbbrevDecl->getTag()) - << format(" [%u] %c\n", abbrCode, - AbbrevDecl->hasChildren() ? '*': ' '); + const char *tagString = TagString(getTag()); + if (tagString) + OS.indent(indent) << tagString; + else + OS.indent(indent) << format("DW_TAG_Unknown_%x", getTag()); + OS << format(" [%u] %c\n", abbrCode, + AbbrevDecl->hasChildren() ? '*' : ' '); // Dump all data in the .debug_info for the attributes const uint32_t numAttributes = AbbrevDecl->getNumAttributes(); @@ -67,8 +71,17 @@ void DWARFDebugInfoEntryMinimal::dumpAttribute(raw_ostream &OS, uint16_t form, unsigned indent) const { OS << format("0x%8.8x: ", *offset_ptr); - OS.indent(indent+2) << AttributeString(attr) - << " [" << FormEncodingString(form) << ']'; + OS.indent(indent+2); + const char *attrString = AttributeString(attr); + if (attrString) + OS << attrString; + else + OS << format("DW_AT_Unknown_%x", attr); + const char *formString = FormEncodingString(form); + if (formString) + OS << " [" << formString << ']'; + else + OS << format(" [DW_FORM_Unknown_%x]", form); DWARFFormValue formValue(form);