[PATCH] m32c-tdep.c: Don't choke on virtual functions in push_dummy_call
Corinna Vinschen
vinschen@redhat.com
Wed Jun 28 14:18:00 GMT 2006
Hi,
the below patch fixes a couple of GDB internal errors when calling
virtual C++ methods. Virtual methods are not represented as type
TYPE_CODE_METHOD, but as TYPE_CODE_PTR pointing to TYPE_CODE_METHOD.
The m32c_push_dummy_call function only checks the function type for
TYPE_CODE_FUNC or TYPE_CODE_METHOD, which results in a failed assertion
in case of virtual methods. The below patch skips TYPE_CODE_PTR types
until it points to the actual TYPE_CODE_METHOD to evaluate further
necessary data.
Ok to apply?
Thanks,
Corinna
* m32c-tdep.c (m32c_push_dummy_call): Skip over virtual method
pointer type.
Index: m32c-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/m32c-tdep.c,v
retrieving revision 1.1
diff -u -p -r1.1 m32c-tdep.c
--- m32c-tdep.c 20 Apr 2006 23:18:48 -0000 1.1
+++ m32c-tdep.c 28 Jun 2006 14:14:11 -0000
@@ -2008,6 +2008,10 @@ m32c_push_dummy_call (struct gdbarch *gd
{
struct type *func_type = value_type (function);
+ /* Skip over virtual function pointers */
+ while (TYPE_CODE (func_type) == TYPE_CODE_PTR)
+ func_type = TYPE_TARGET_TYPE (func_type);
+
gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC ||
TYPE_CODE (func_type) == TYPE_CODE_METHOD);
--
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat
More information about the Gdb-patches
mailing list