Blob Blame History Raw
diff -Naur insight-6.8-1.orig/gdb/dwarf2read.c insight-6.8-1.new/gdb/dwarf2read.c
--- insight-6.8-1.orig/gdb/dwarf2read.c	2010-01-13 14:55:05.000000000 +0100
+++ insight-6.8-1.new/gdb/dwarf2read.c	2010-01-13 15:02:55.000000000 +0100
@@ -3593,9 +3593,21 @@
     {
       /* C++ base class field.  */
       attr = dwarf2_attr (die, DW_AT_data_member_location, cu);
-      if (attr)
-	FIELD_BITPOS (*fp) = (decode_locdesc (DW_BLOCK (attr), cu)
-			      * bits_per_byte);
+
+      if (attr) {
+	int byte_offset = 0;
+
+	if (attr_form_is_section_offset(attr))
+	  dwarf2_complex_location_expr_complaint();
+	else if (attr_form_is_constant(attr))
+	  byte_offset = dwarf2_get_attr_constant_value(attr, 0);
+	else if (attr_form_is_block(attr))
+	  byte_offset = decode_locdesc(DW_BLOCK(attr), cu);
+	else
+	  dwarf2_complex_location_expr_complaint();
+
+	FIELD_BITPOS(*fp) = byte_offset * bits_per_byte;
+      }
       FIELD_BITSIZE (*fp) = 0;
       FIELD_STATIC_KIND (*fp) = 0;
       FIELD_TYPE (*fp) = die_type (die, cu);