diff options
author | Petr Machata <pmachata@redhat.com> | 2009-04-29 15:16:09 +0200 |
---|---|---|
committer | Petr Machata <pmachata@redhat.com> | 2009-04-29 15:16:09 +0200 |
commit | ecbb8cdd8b500e37dc34fc246b912f704fe31ca4 (patch) | |
tree | e7dab210b73f043a0074102e3c1be2bb350fe3c9 | |
parent | cb8f67b29a896c2660c10aa1028a9dbb377553e9 (diff) | |
download | elfutils-ecbb8cdd8b500e37dc34fc246b912f704fe31ca4.tar.gz |
dwarf_ranges and dwarf_formref use read hooks
-rw-r--r-- | libdw/dwarf_formref.c | 8 | ||||
-rw-r--r-- | libdw/dwarf_ranges.c | 29 |
2 files changed, 15 insertions, 22 deletions
diff --git a/libdw/dwarf_formref.c b/libdw/dwarf_formref.c index b8463b70..3595184c 100644 --- a/libdw/dwarf_formref.c +++ b/libdw/dwarf_formref.c @@ -79,11 +79,11 @@ __libdw_formref (attr, return_offset) break; case DW_FORM_ref4: - *return_offset = read_4ubyte_unaligned (attr->cu->dbg, attr->valp); - break; - case DW_FORM_ref8: - *return_offset = read_8ubyte_unaligned (attr->cu->dbg, attr->valp); + if (__libdw_read_offset (attr->cu->dbg, IDX_debug_info, attr->valp, + attr->form == DW_FORM_ref4 ? 4 : 8, + return_offset)) + return -1; break; case DW_FORM_ref_udata: diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c index 1eef617b..7dbfb9f5 100644 --- a/libdw/dwarf_ranges.c +++ b/libdw/dwarf_ranges.c @@ -142,25 +142,18 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep, Dwarf_Addr begin; Dwarf_Addr end; - if (die->cu->address_size == 8) + if (__libdw_read_address_inc (die->cu->dbg, + IDX_debug_ranges, &readp, + die->cu->address_size, &begin) + || __libdw_read_address_inc (die->cu->dbg, + IDX_debug_ranges, &readp, + die->cu->address_size, &end)) + return -1l; + + if (begin == ADDR_ESCAPE (die->cu->address_size)) { - begin = read_8ubyte_unaligned_inc (die->cu->dbg, readp); - end = read_8ubyte_unaligned_inc (die->cu->dbg, readp); - if (begin == (uint64_t) -1l) /* Base address entry. */ - { - *basep = end; - goto next; - } - } - else - { - begin = read_4ubyte_unaligned_inc (die->cu->dbg, readp); - end = read_4ubyte_unaligned_inc (die->cu->dbg, readp); - if (begin == (uint32_t) -1) /* Base address entry. */ - { - *basep = end; - goto next; - } + *basep = end; + goto next; } if (begin == 0 && end == 0) /* End of list entry. */ |