]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
dwarf_ranges and dwarf_formref use read hooks
authorPetr Machata <pmachata@redhat.com>
Wed, 29 Apr 2009 13:16:09 +0000 (15:16 +0200)
committerPetr Machata <pmachata@redhat.com>
Wed, 29 Apr 2009 13:16:09 +0000 (15:16 +0200)
libdw/dwarf_formref.c
libdw/dwarf_ranges.c

index b8463b70b16e82b90ce5331babc75c0ad00080c2..3595184cdb34453e558de61355bde48f9457b307 100644 (file)
@@ -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:
index 1eef617b5aacb801b2aab69d5987061c70438408..7dbfb9f54931b6829a341e788535c9c3d370f299 100644 (file)
@@ -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.  */