Dwarf5 fixes [1 of 5]: Add & use missing enums, fix typo.

First of 5 small patches to fix various breakpad issues found
while testing dump_syms on DWARF v5 in ChromeOS.

This patch adds some missing DWARF enums, and their uses, and fixes
one small typo (was updating 'lineptr' instead of '*lineptr').

Change-Id: Ic674d5db29f29a69a3f6e370d0553eb4139c91de
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2634546
Reviewed-by: Sterling Augustine <saugustine@google.com>
This commit is contained in:
Caroline Tice 2021-01-16 15:09:48 -08:00 committed by Sterling Augustine
parent f469cab97b
commit f4115fad24
4 changed files with 11 additions and 4 deletions

View file

@ -95,6 +95,10 @@ enum DwarfTag {
DW_TAG_unspecified_type = 0x3b, DW_TAG_unspecified_type = 0x3b,
DW_TAG_partial_unit = 0x3c, DW_TAG_partial_unit = 0x3c,
DW_TAG_imported_unit = 0x3d, DW_TAG_imported_unit = 0x3d,
// DWARF 4.
DW_TAG_type_unit = 0x41,
// DWARF 5.
DW_TAG_skeleton_unit = 0x4a,
// SGI/MIPS Extensions. // SGI/MIPS Extensions.
DW_TAG_MIPS_loop = 0x4081, DW_TAG_MIPS_loop = 0x4081,
// HP extensions. See: // HP extensions. See:
@ -271,8 +275,10 @@ enum DwarfAttribute {
// DWARF 4 // DWARF 4
DW_AT_linkage_name = 0x6e, DW_AT_linkage_name = 0x6e,
// DWARF 5 // DWARF 5
DW_AT_str_offsets_base = 0x72,
DW_AT_addr_base = 0x73, DW_AT_addr_base = 0x73,
DW_AT_rnglists_base = 0x74, DW_AT_rnglists_base = 0x74,
DW_AT_dwo_name = 0x76,
// SGI/MIPS extensions. // SGI/MIPS extensions.
DW_AT_MIPS_fde = 0x2001, DW_AT_MIPS_fde = 0x2001,
DW_AT_MIPS_loop_begin = 0x2002, DW_AT_MIPS_loop_begin = 0x2002,

View file

@ -1203,7 +1203,7 @@ void LineInfo::ReadFileRow(const uint8_t** lineptr,
// MD5 entries help a debugger sort different versions of files with // MD5 entries help a debugger sort different versions of files with
// the same name. It is always paired with a DW_FORM_data16 and is // the same name. It is always paired with a DW_FORM_data16 and is
// unused in this case. // unused in this case.
lineptr += 16; *lineptr += 16;
break; break;
default: default:
fprintf(stderr, "Unrecognized form in line table header. %d\n", fprintf(stderr, "Unrecognized form in line table header. %d\n",

View file

@ -554,7 +554,7 @@ class CompilationUnit {
if (attr == DW_AT_GNU_dwo_id) { if (attr == DW_AT_GNU_dwo_id) {
dwo_id_ = data; dwo_id_ = data;
} }
else if (attr == DW_AT_GNU_addr_base) { else if (attr == DW_AT_GNU_addr_base || attr == DW_AT_addr_base) {
addr_base_ = data; addr_base_ = data;
} }
else if (attr == DW_AT_GNU_ranges_base || attr == DW_AT_rnglists_base) { else if (attr == DW_AT_GNU_ranges_base || attr == DW_AT_rnglists_base) {
@ -611,7 +611,7 @@ class CompilationUnit {
enum DwarfAttribute attr, enum DwarfAttribute attr,
enum DwarfForm form, enum DwarfForm form,
const char* data) { const char* data) {
if (attr == DW_AT_GNU_dwo_name) if (attr == DW_AT_GNU_dwo_name || attr == DW_AT_dwo_name)
dwo_name_ = data; dwo_name_ = data;
handler_->ProcessAttributeString(offset, attr, form, data); handler_->ProcessAttributeString(offset, attr, form, data);
} }

View file

@ -1333,7 +1333,8 @@ bool DwarfCUToModule::StartCompilationUnit(uint64_t offset,
bool DwarfCUToModule::StartRootDIE(uint64_t offset, enum DwarfTag tag) { bool DwarfCUToModule::StartRootDIE(uint64_t offset, enum DwarfTag tag) {
// We don't deal with partial compilation units (the only other tag // We don't deal with partial compilation units (the only other tag
// likely to be used for root DIE). // likely to be used for root DIE).
return tag == dwarf2reader::DW_TAG_compile_unit; return (tag == dwarf2reader::DW_TAG_compile_unit
|| tag == dwarf2reader::DW_TAG_skeleton_unit);
} }
} // namespace google_breakpad } // namespace google_breakpad