* dwarf2read.c (dwarf2_ranges_read): Skip empty range entries.
authorUlrich Weigand <uweigand@de.ibm.com>
Fri, 4 Feb 2011 18:13:25 +0000 (18:13 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Fri, 4 Feb 2011 18:13:25 +0000 (18:13 +0000)
Complain about inverted range entries.
(dwarf2_record_block_ranges): Likewise.

gdb/ChangeLog
gdb/dwarf2read.c

index 95ab56383b4e7b8863d784634535c546d63d3898..96224831828cbe0ca8b7531067281b26a29e03d4 100644 (file)
@@ -1,3 +1,9 @@
+2011-02-04  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+       * dwarf2read.c (dwarf2_ranges_read): Skip empty range entries.
+       Complain about inverted range entries.
+       (dwarf2_record_block_ranges): Likewise.
+
 2011-02-04  Thiago Jung Bauermann  <bauerman@br.ibm.com>
 
        Fix some typos.
index 6a98d57bcc0dd2893581200588c8c60cbdb3a7cf..bc43bd8eb16592be8485b5e9532d6b221c0ea081 100644 (file)
@@ -5863,10 +5863,22 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
          return 0;
        }
 
+      if (range_beginning > range_end)
+       {
+         /* Inverted range entries are invalid.  */
+         complaint (&symfile_complaints,
+                    _("Invalid .debug_ranges data (inverted range)"));
+         return 0;
+       }
+
+      /* Empty range entries have no effect.  */
+      if (range_beginning == range_end)
+       continue;
+
       range_beginning += base;
       range_end += base;
 
-      if (ranges_pst != NULL && range_beginning < range_end)
+      if (ranges_pst != NULL)
        addrmap_set_empty (objfile->psymtabs_addrmap,
                           range_beginning + baseaddr,
                           range_end - 1 + baseaddr,
@@ -6149,6 +6161,19 @@ dwarf2_record_block_ranges (struct die_info *die, struct block *block,
                   return;
                 }
 
+             if (start > end)
+               {
+                 /* Inverted range entries are invalid.  */
+                 complaint (&symfile_complaints,
+                            _("Invalid .debug_ranges data "
+                              "(inverted range)"));
+                 return;
+               }
+
+             /* Empty range entries have no effect.  */
+             if (start == end)
+               continue;
+
               record_block_range (block,
                                   baseaddr + base + start,
                                   baseaddr + base + end - 1);
This page took 0.033153 seconds and 4 git commands to generate.