From: Doug Evans Date: Thu, 19 Jul 2012 16:35:48 +0000 (+0000) Subject: * dwarf2read.c (dwarf2_ranges_read): Ignore ranges starting at zero if X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0109304504e0b6d611e95fc9c1e7bccdd64a0fee;p=binutils-gdb.git * dwarf2read.c (dwarf2_ranges_read): Ignore ranges starting at zero if there's no section at address zero. (dwarf2_record_block_ranges): Ditto. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 95187f8cf52..0032aac3eca 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2012-07-19 Doug Evans + + * dwarf2read.c (dwarf2_ranges_read): Ignore ranges starting at zero if + there's no section at address zero. + (dwarf2_record_block_ranges): Ditto. + 2012-07-19 Yao Qi * command.h, remote.c: Fix a typo in comment. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 3aa5eefaf5f..88685407eba 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9284,6 +9284,17 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return, range_beginning += base; range_end += base; + /* A not-uncommon case of bad debug info. + Don't pollute the addrmap with bad data. */ + if (range_beginning + baseaddr == 0 + && !dwarf2_per_objfile->has_section_at_zero) + { + complaint (&symfile_complaints, + _(".debug_ranges entry has start address of zero" + " [in module %s]"), objfile->name); + continue; + } + if (ranges_pst != NULL) addrmap_set_empty (objfile->psymtabs_addrmap, range_beginning + baseaddr, @@ -9599,9 +9610,20 @@ dwarf2_record_block_ranges (struct die_info *die, struct block *block, if (start == end) continue; - record_block_range (block, - baseaddr + base + start, - baseaddr + base + end - 1); + start += base + baseaddr; + end += base + baseaddr; + + /* A not-uncommon case of bad debug info. + Don't pollute the addrmap with bad data. */ + if (start == 0 && !dwarf2_per_objfile->has_section_at_zero) + { + complaint (&symfile_complaints, + _(".debug_ranges entry has start address of zero" + " [in module %s]"), objfile->name); + continue; + } + + record_block_range (block, start, end - 1); } } }