* dwarf2read.c (read_attribute_value): Treat size attribute
authorJoel Brobecker <brobecker@gnat.com>
Thu, 26 Jun 2008 19:08:10 +0000 (19:08 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Thu, 26 Jun 2008 19:08:10 +0000 (19:08 +0000)
        values of 0xffffffff as if the attribute value was zero.

gdb/ChangeLog
gdb/dwarf2read.c

index d5957ec886139a3136a94aee2e7329162d12f2f4..e13a47a3cd38c920b6b27f465f368b0775fab073 100644 (file)
@@ -1,3 +1,8 @@
+2008-06-26  Joel Brobecker  <brobecker@adacore.com>
+
+       * dwarf2read.c (read_attribute_value): Treat size attribute
+       values of 0xffffffff as if the attribute value was zero.
+
 2008-06-26  Vladimir Prus  <vladimir@codesourcery.com>
 
        * linux-nat.c: Add description of overall logic.
index e36177afe038eb4fa691df30c00759ada27514e6..9723ddd0d7f99ebab23cf36c7eabbf0de23bb678 100644 (file)
@@ -6234,6 +6234,18 @@ read_attribute_value (struct attribute *attr, unsigned form,
             dwarf_form_name (form),
             bfd_get_filename (abfd));
     }
+
+  /* We have seen instances where the compiler tried to emit a byte
+     size attribute of -1 which ended up being encoded as an unsigned
+     0xffffffff.  Although 0xffffffff is technically a valid size value,
+     an object of this size seems pretty unlikely so we can relatively
+     safely treat these cases as if the size attribute was invalid and
+     treat them as zero by default.  */
+  if (attr->name == DW_AT_byte_size
+      && form == DW_FORM_data4
+      && DW_UNSND (attr) >= 0xffffffff)
+    DW_UNSND (attr) = 0;
+
   return info_ptr;
 }