* dwarf2read.c (dwarf2_ranges_read): Ignore ranges starting at zero if
authorDoug Evans <dje@google.com>
Thu, 19 Jul 2012 16:35:48 +0000 (16:35 +0000)
committerDoug Evans <dje@google.com>
Thu, 19 Jul 2012 16:35:48 +0000 (16:35 +0000)
there's no section at address zero.
(dwarf2_record_block_ranges): Ditto.

gdb/ChangeLog
gdb/dwarf2read.c

index 95187f8cf52e6959bb93a70aa7b019d5df4f8c64..0032aac3eca52c54ceb97fb464f512910370f48e 100644 (file)
@@ -1,3 +1,9 @@
+2012-07-19  Doug Evans  <dje@google.com>
+
+       * 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  <yao@codesourcery.com>
 
        * command.h, remote.c: Fix a typo in comment.
index 3aa5eefaf5fc2ff6686ca481c126dbbd31ea8192..88685407eba0ffed37a919e19f6c59fb681b3191 100644 (file)
@@ -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);
             }
         }
     }