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