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);