diff options
Diffstat (limited to 'gdb/gnu-v2-abi.c')
-rw-r--r-- | gdb/gnu-v2-abi.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c index 3f25e73..67bf097 100644 --- a/gdb/gnu-v2-abi.c +++ b/gdb/gnu-v2-abi.c @@ -113,6 +113,7 @@ gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j, if (TYPE_TARGET_TYPE (context) != type1) { struct value *tmp = value_cast (context, value_addr (arg1)); + arg1 = value_ind (tmp); type1 = check_typedef (value_type (arg1)); } @@ -359,8 +360,8 @@ gnuv2_baseclass_offset (struct type *type, int index, if (vb_match (type, i, basetype)) { CORE_ADDR addr - = unpack_pointer (TYPE_FIELD_TYPE (type, i), - valaddr + (TYPE_FIELD_BITPOS (type, i) / 8)); + = unpack_pointer (TYPE_FIELD_TYPE (type, i), + valaddr + (TYPE_FIELD_BITPOS (type, i) / 8)); return addr - (LONGEST) address; } @@ -369,7 +370,8 @@ gnuv2_baseclass_offset (struct type *type, int index, for (i = index + 1; i < n_baseclasses; i++) { int boffset = - baseclass_offset (type, i, valaddr, address); + baseclass_offset (type, i, valaddr, address); + if (boffset) return boffset; } |