diff options
Diffstat (limited to 'gdb/c-valprint.c')
-rw-r--r-- | gdb/c-valprint.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 2d5a826..bcf0a28 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -200,8 +200,25 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, if (vtblprint) { value vt_val; + struct symbol *wsym = (struct symbol *)NULL; + struct type *wtype; + struct symtab *s; + struct block *block = (struct block *)NULL; + int is_this_fld; - vt_val = value_at (TYPE_TARGET_TYPE (type), vt_address); + + wsym = lookup_symbol (SYMBOL_NAME(msymbol), block, + VAR_NAMESPACE, &is_this_fld, &s); + + if (wsym) + { + wtype = SYMBOL_TYPE(wsym); + } + else + { + wtype = TYPE_TARGET_TYPE(type); + } + vt_val = value_at (wtype, vt_address); val_print (VALUE_TYPE (vt_val), VALUE_CONTENTS (vt_val), VALUE_ADDRESS (vt_val), stream, format, deref_ref, recurse + 1, pretty); |