aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Schauer <Peter.Schauer@mytum.de>2002-03-16 20:53:14 +0000
committerPeter Schauer <Peter.Schauer@mytum.de>2002-03-16 20:53:14 +0000
commit0e5e3ea669deb649cd05af6dd07e9a8753113ec9 (patch)
treefe451449424c5f2ae2577c5c1c0c44d9fec4b5d3
parent9b013045b0ccb6e2709c4e416c893105f3589bcc (diff)
downloadgdb-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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/cp-valprint.c15
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;
}