]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
dwarf_ranges.c: Return 0 when no ranges or *_pc attrs at all.
authorRoland McGrath <roland@redhat.com>
Tue, 27 Jan 2009 02:36:16 +0000 (18:36 -0800)
committerRoland McGrath <roland@redhat.com>
Tue, 27 Jan 2009 02:36:16 +0000 (18:36 -0800)
libdw/ChangeLog
libdw/dwarf_ranges.c

index 89225e937a023f594754a8d73e7995bc9e201b4a..0d94b45a7b6e6a10f4025ea72386ee0c474e4e37 100644 (file)
@@ -1,3 +1,7 @@
+2009-01-26  Roland McGrath  <roland@redhat.com>
+
+       * dwarf_ranges.c: Return 0 when no ranges or *_pc attrs at all.
+
 2009-01-25  Roland McGrath  <roland@redhat.com>
 
        * dwarf_getattrs.c: Correctly skip attribute values when restarting.
index 89da0af4d95a3e044588c5a01ec28bdf5c790d47..1eef617b5aacb801b2aab69d5987061c70438408 100644 (file)
@@ -1,5 +1,5 @@
 /* Enumerate the PC ranges covered by a DIE.
-   Copyright (C) 2005, 2007 Red Hat, Inc.
+   Copyright (C) 2005, 2007, 2009 Red Hat, Inc.
    This file is part of Red Hat elfutils.
 
    Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -78,8 +78,9 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
   /* We have to look for a noncontiguous range.  */
 
   const Elf_Data *d = die->cu->dbg->sectiondata[IDX_debug_ranges];
-  if (d == NULL)
+  if (d == NULL && offset != 0)
     {
+    no_ranges:
       __libdw_seterrno (DWARF_E_NO_DEBUG_RANGES);
       return -1;
     }
@@ -90,13 +91,17 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
       Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, DW_AT_ranges,
                                                  &attr_mem);
       if (attr == NULL)
-       return -1;
+       /* No PC attributes in this DIE at all, so an empty range list.  */
+       return 0;
 
       /* Must have the form data4 or data8 which act as an offset.  */
       Dwarf_Word start_offset;
       if (INTUSE(dwarf_formudata) (attr, &start_offset) != 0)
        return -1;
 
+      if (d == NULL)
+       goto no_ranges;
+
       offset = start_offset;
       assert ((Dwarf_Word) offset == start_offset);