* dwarf2read.c (read_die_and_children): Ignore NULL DIEs.
authorDaniel Jacobowitz <drow@false.org>
Wed, 20 Aug 2008 19:27:58 +0000 (19:27 +0000)
committerDaniel Jacobowitz <drow@false.org>
Wed, 20 Aug 2008 19:27:58 +0000 (19:27 +0000)
(read_die_and_siblings): Likewise.  Do not add padding DIEs to the
sibling list.
(read_full_die): Do not allocate DIEs for abbrev 0.
(follow_die_ref): Correct error message.

gdb/ChangeLog
gdb/dwarf2read.c

index 9194f04a0ab3feba28ee377dbebaa6d34f6ac407..064e4c2a0859144f901182c4bd670307e99be73a 100644 (file)
@@ -1,3 +1,11 @@
+2008-08-20  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * dwarf2read.c (read_die_and_children): Ignore NULL DIEs.
+       (read_die_and_siblings): Likewise.  Do not add padding DIEs to the
+       sibling list.
+       (read_full_die): Do not allocate DIEs for abbrev 0.
+       (follow_die_ref): Correct error message.
+
 2008-08-20  Pedro Alves  <pedro@codesourcery.com>
 
        * linespec.c (symtab_from_filename): Also throw NOT_FOUND_ERROR if
index 8f1062d90a7bc6583680693fbd80c760da8600d7..eea357a397e030298d995dd5300b5c7869d43b03 100644 (file)
@@ -5141,6 +5141,11 @@ read_die_and_children (gdb_byte *info_ptr, bfd *abfd,
   int has_children;
 
   cur_ptr = read_full_die (&die, abfd, info_ptr, cu, &has_children);
+  if (die == NULL)
+    {
+      *new_info_ptr = cur_ptr;
+      return NULL;
+    }
   store_in_ref_table (die->offset, die, cu);
 
   if (has_children)
@@ -5180,24 +5185,18 @@ read_die_and_siblings (gdb_byte *info_ptr, bfd *abfd,
       struct die_info *die
        = read_die_and_children (cur_ptr, abfd, cu, &cur_ptr, parent);
 
-      if (!first_die)
-       {
-         first_die = die;
-       }
-      else
-       {
-         last_sibling->sibling = die;
-       }
-
-      if (die->tag == 0)
+      if (die == NULL)
        {
          *new_info_ptr = cur_ptr;
          return first_die;
        }
+
+      if (!first_die)
+       first_die = die;
       else
-       {
-         last_sibling = die;
-       }
+       last_sibling->sibling = die;
+
+      last_sibling = die;
     }
 }
 
@@ -6048,10 +6047,7 @@ read_full_die (struct die_info **diep, bfd *abfd, gdb_byte *info_ptr,
   info_ptr += bytes_read;
   if (!abbrev_number)
     {
-      die = dwarf_alloc_die ();
-      die->tag = 0;
-      die->abbrev = abbrev_number;
-      *diep = die;
+      *diep = NULL;
       *has_children = 0;
       return info_ptr;
     }
@@ -9240,7 +9236,7 @@ follow_die_ref (struct die_info *src_die, struct attribute *attr,
 
   error (_("Dwarf Error: Cannot find DIE at 0x%lx referenced from DIE "
         "at 0x%lx [in module %s]"),
-        (long) src_die->offset, (long) offset, cu->objfile->name);
+        (long) offset, (long) src_die->offset, cu->objfile->name);
 
   return NULL;
 }