Bug #18081 ยป ruby-addr2line-section-for-DW_AT_ranges.patch
addr2line.c | ||
---|---|---|
const char *pend;
|
||
const char *q0;
|
||
const char *q;
|
||
uint16_t version;
|
||
int format; // 4 or 8
|
||
uint8_t address_size;
|
||
uint64_t debug_abbrev_offset;
|
||
... | ... | |
const char *p;
|
||
uint64_t base = ptr->low_pc_set ? ptr->low_pc : reader->current_low_pc;
|
||
bool base_valid = true;
|
||
if (reader->obj->debug_rnglists.ptr) {
|
||
if (reader->version >= 5) {
|
||
if (!reader->obj->debug_rnglists.ptr) {
|
||
return false;
|
||
}
|
||
p = reader->obj->debug_rnglists.ptr + ptr->ranges;
|
||
for (;;) {
|
||
uint8_t rle = read_uint8(&p);
|
||
... | ... | |
}
|
||
return false;
|
||
}
|
||
/* assert(reader->version < 5); */
|
||
if (!reader->obj->debug_ranges.ptr) {
|
||
return false;
|
||
}
|
||
p = reader->obj->debug_ranges.ptr + ptr->ranges;
|
||
for (;;) {
|
||
uintptr_t from = read_uintptr(&p);
|
||
... | ... | |
di_read_cu(DebugInfoReader *reader)
|
||
{
|
||
uint64_t unit_length;
|
||
uint16_t version;
|
||
reader->format = 4;
|
||
reader->current_cu = reader->p;
|
||
unit_length = read_uint32(&reader->p);
|
||
... | ... | |
reader->format = 8;
|
||
}
|
||
reader->cu_end = reader->p + unit_length;
|
||
version = read_uint16(&reader->p);
|
||
if (version > 5) {
|
||
reader->version = read_uint16(&reader->p);
|
||
if (reader->version > 5) {
|
||
return -1;
|
||
}
|
||
else if (version == 5) {
|
||
else if (reader->version == 5) {
|
||
/* unit_type = */ read_uint8(&reader->p);
|
||
reader->address_size = read_uint8(&reader->p);
|
||
reader->debug_abbrev_offset = read_uint(reader);
|