Bug #17585 » ruby-addr2line-dwarf5.patch
addr2line.c | ||
---|---|---|
}
|
||
static void
|
||
di_skip_die_attributes(char **p)
|
||
{
|
||
for (;;) {
|
||
uint64_t at = uleb128(p);
|
||
uint64_t form = uleb128(p);
|
||
if (!at && !form) break;
|
||
switch (form) {
|
||
default:
|
||
break;
|
||
case DW_FORM_implicit_const:
|
||
sleb128(p);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
static void
|
||
di_read_debug_abbrev_cu(DebugInfoReader *reader)
|
||
{
|
||
uint64_t prev = 0;
|
||
... | ... | |
prev = abbrev_number;
|
||
uleb128(&p); /* tag */
|
||
p++; /* has_children */
|
||
/* skip content */
|
||
for (;;) {
|
||
uint64_t at = uleb128(&p);
|
||
uint64_t form = uleb128(&p);
|
||
if (!at && !form) break;
|
||
}
|
||
di_skip_die_attributes(&p);
|
||
}
|
||
}
|
||
... | ... | |
/* skip 255th record */
|
||
uleb128(&p); /* tag */
|
||
p++; /* has_children */
|
||
/* skip content */
|
||
for (;;) {
|
||
uint64_t at = uleb128(&p);
|
||
uint64_t form = uleb128(&p);
|
||
if (!at && !form) break;
|
||
}
|
||
di_skip_die_attributes(&p);
|
||
for (uint64_t n = uleb128(&p); abbrev_number != n; n = uleb128(&p)) {
|
||
if (n == 0) {
|
||
fprintf(stderr,"%d: Abbrev Number %"PRId64" not found\n",__LINE__, abbrev_number);
|
||
... | ... | |
}
|
||
uleb128(&p); /* tag */
|
||
p++; /* has_children */
|
||
/* skip content */
|
||
for (;;) {
|
||
uint64_t at = uleb128(&p);
|
||
uint64_t form = uleb128(&p);
|
||
if (!at && !form) break;
|
||
}
|
||
di_skip_die_attributes(&p);
|
||
}
|
||
return p;
|
||
}
|
||
... | ... | |
case DW_AT_ranges:
|
||
ranges_set(&ranges, &v);
|
||
break;
|
||
case DW_AT_entry_pc:
|
||
goto skip_die;
|
||
case DW_AT_declaration:
|
||
goto skip_die;
|
||
case DW_AT_inline:
|