diff options
author | Peter Schauer <Peter.Schauer@mytum.de> | 2002-03-16 20:53:14 +0000 |
---|---|---|
committer | Peter Schauer <Peter.Schauer@mytum.de> | 2002-03-16 20:53:14 +0000 |
commit | 0e5e3ea669deb649cd05af6dd07e9a8753113ec9 (patch) | |
tree | fe451449424c5f2ae2577c5c1c0c44d9fec4b5d3 /gdb | |
parent | 9b013045b0ccb6e2709c4e416c893105f3589bcc (diff) | |
download | gdb-0e5e3ea669deb649cd05af6dd07e9a8753113ec9.zip gdb-0e5e3ea669deb649cd05af6dd07e9a8753113ec9.tar.gz gdb-0e5e3ea669deb649cd05af6dd07e9a8753113ec9.tar.bz2 |
* cp-valprint.c (cp_is_vtbl_ptr_type): Handle vtbl field type
for gcc versions after gcc-2.8.1.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/cp-valprint.c | 15 |
2 files changed, 19 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d6e49f8..291f092 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2002-03-16 Peter Schauer <pes@regent.e-technik.tu-muenchen.de> + * cp-valprint.c (cp_is_vtbl_ptr_type): Handle vtbl field type + for gcc versions after gcc-2.8.1. + +2002-03-16 Peter Schauer <pes@regent.e-technik.tu-muenchen.de> + * eval.c (evaluate_subexp_standard): Fix setup of ``this'' pointer for method resolution. Restore adjustment of ``this'' pointer after calling value_struct_elt, which was accidentally removed during the diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index 66920312..7ea9f3f 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -1,6 +1,6 @@ /* Support for printing C++ values for GDB, the GNU debugger. Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, - 2000, 2001 + 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GDB. @@ -201,6 +201,8 @@ cp_is_vtbl_ptr_type (struct type *type) int cp_is_vtbl_member (struct type *type) { + /* With older versions of g++, the vtbl field pointed to an array + of structures. Nowadays it points directly to the structure. */ if (TYPE_CODE (type) == TYPE_CODE_PTR) { type = TYPE_TARGET_TYPE (type); @@ -215,6 +217,17 @@ cp_is_vtbl_member (struct type *type) return cp_is_vtbl_ptr_type (type); } } + else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) /* if not using thunks */ + { + return cp_is_vtbl_ptr_type (type); + } + else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */ + { + /* The type name of the thunk pointer is NULL when using dwarf2. + We could test for a pointer to a function, but there is + no type info for the virtual table either, so it wont help. */ + return cp_is_vtbl_ptr_type (type); + } } return 0; } |