diff options
author | Roland McGrath <roland@redhat.com> | 2009-01-26 18:36:16 -0800 |
---|---|---|
committer | Roland McGrath <roland@redhat.com> | 2009-01-26 18:36:16 -0800 |
commit | f46272a1a9b79efd294465ebfb8d7da4a2220100 (patch) | |
tree | 034b3c85d7e9b5d1340666a12aef1a140d11ecb5 /libdw/dwarf_ranges.c | |
parent | d31505f6a07b91b23d62f9acd37e38658e790543 (diff) | |
download | elfutils-f46272a1a9b79efd294465ebfb8d7da4a2220100.tar.gz |
dwarf_ranges.c: Return 0 when no ranges or *_pc attrs at all.
Diffstat (limited to 'libdw/dwarf_ranges.c')
-rw-r--r-- | libdw/dwarf_ranges.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c index 89da0af4..1eef617b 100644 --- a/libdw/dwarf_ranges.c +++ b/libdw/dwarf_ranges.c @@ -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); |