diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2011-09-15 04:00:58 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2011-09-15 04:00:58 +0000 |
commit | 42180e83368b42c4ba4ce01d35e6c97d8b9d3b4b (patch) | |
tree | 177ee3c0becc2b219d99b0cd07601399d6fc6598 /lib/DebugInfo/DWARFAbbreviationDeclaration.cpp | |
parent | 6bc4e712dc35db68a621f54c176f6e0b14f40f97 (diff) |
DWARF: Fail gracefully when encountering unknown values in an abbrev.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139777 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/DebugInfo/DWARFAbbreviationDeclaration.cpp')
-rw-r--r-- | lib/DebugInfo/DWARFAbbreviationDeclaration.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp b/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp index 7bc942f63d..74c975304a 100644 --- a/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp +++ b/lib/DebugInfo/DWARFAbbreviationDeclaration.cpp @@ -47,11 +47,16 @@ DWARFAbbreviationDeclaration::extract(DataExtractor data, uint32_t* offset_ptr, } void DWARFAbbreviationDeclaration::dump(raw_ostream &OS) const { - OS << '[' << getCode() << "] " << TagString(getTag()) << "\tDW_CHILDREN_" + const char *tagString = TagString(getTag()); + OS << '[' << getCode() << "] " << (tagString ? tagString : "DW_TAG_Unknown") + << "\tDW_CHILDREN_" << (hasChildren() ? "yes" : "no") << '\n'; - for (unsigned i = 0, e = Attributes.size(); i != e; ++i) - OS << '\t' << AttributeString(Attributes[i].getAttribute()) - << '\t' << FormEncodingString(Attributes[i].getForm()) << '\n'; + for (unsigned i = 0, e = Attributes.size(); i != e; ++i) { + const char *attrString = AttributeString(Attributes[i].getAttribute()); + const char *formString = FormEncodingString(Attributes[i].getForm()); + OS << '\t' << (attrString ? attrString : "DW_AT_Unknown") + << '\t' << (formString ? formString : "DW_FORM_Unknown") << '\n'; + } OS << '\n'; } |