summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Machata <pmachata@redhat.com>2009-04-29 15:16:09 +0200
committerPetr Machata <pmachata@redhat.com>2009-04-29 15:16:09 +0200
commitecbb8cdd8b500e37dc34fc246b912f704fe31ca4 (patch)
treee7dab210b73f043a0074102e3c1be2bb350fe3c9
parentcb8f67b29a896c2660c10aa1028a9dbb377553e9 (diff)
downloadelfutils-ecbb8cdd8b500e37dc34fc246b912f704fe31ca4.tar.gz
dwarf_ranges and dwarf_formref use read hooks
-rw-r--r--libdw/dwarf_formref.c8
-rw-r--r--libdw/dwarf_ranges.c29
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. */