diff options
author | Per Bothner <per@bothner.com> | 1994-05-05 00:19:33 +0000 |
---|---|---|
committer | Per Bothner <per@bothner.com> | 1994-05-05 00:19:33 +0000 |
commit | 36a2283dad09124b2d980d10adfca84d31aaedcb (patch) | |
tree | 4f5c5c0cfbe4d19d0640f1b50d34372ab24ae551 /gdb/stabsread.c | |
parent | d32a92614da2060c30a286d11bfb03146bc8dca6 (diff) | |
download | gdb-36a2283dad09124b2d980d10adfca84d31aaedcb.zip gdb-36a2283dad09124b2d980d10adfca84d31aaedcb.tar.gz gdb-36a2283dad09124b2d980d10adfca84d31aaedcb.tar.bz2 |
Add partial support for g++ code compiled with -fvtable-thunks.
* c-valprint.c (c_val_print): Add vtblprint support
when using thunks.
* cp-valprint.c (cp_is_vtbl_member): A vtable can be an array of
pointers (if using thunks) as well as array of structs (otherwise).
* cp-valprint.c (vtbl_ptr_name_old, vtbl_ptr_name): Move to global
level, and make the latter non-static (so define_symbol can use it).
* stabsread.c (define_symbol): If the type being defined is a
pointer type named "__vtbl_ptr_type", set the TYPE_NAME to that name.
* symtab.h (VTBL_PREFIX_P): Allow "_VT" as well as "_vt".
* values.c (value_virtual_fn_field): Handle thunks.
* values.c (value_headof): Minor efficiency hack.
* values.c (value_headof): Incomplete thunk support. FIXME.
Diffstat (limited to 'gdb/stabsread.c')
-rw-r--r-- | gdb/stabsread.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gdb/stabsread.c b/gdb/stabsread.c index da4632f..a1b1775 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -1075,7 +1075,13 @@ define_symbol (valu, string, desc, type, objfile) if (TYPE_NAME (SYMBOL_TYPE (sym)) == NULL) { - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR + /* gcc-2.6 or later (when using -fvtable-thunks) + emits a unique named type for a vtable entry. + Some gdb code depends on that specific name. */ + extern const char vtbl_ptr_name[]; + + if ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR + && strcmp (SYMBOL_NAME (sym), vtbl_ptr_name)) || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC) { /* If we are giving a name to a type such as "pointer to |