From: Elena Zannoni Date: Fri, 4 Nov 2005 02:58:32 +0000 (+0000) Subject: 2005-11-03 Wu Zhou X-Git-Tag: gdb_6_4-20051202-release~55 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9be71962fd6acf3dde56f23602601287812766f;p=thirdparty%2Fbinutils-gdb.git 2005-11-03 Wu Zhou Checked in by Elena Zannoni * dwarf2read.c (read_structure_type): Add IBM XL C++ specific code to set TYPE_VPTR_FIELDNO and TYPE_VPTR_BASETYPE of a virtual class if a field named "__vfp" is found. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9428e84d3ea..616efd99f94 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2005-11-03 Wu Zhou + + Checked in by Elena Zannoni + + * dwarf2read.c (read_structure_type): Add IBM XL C++ + specific code to set TYPE_VPTR_FIELDNO and TYPE_VPTR_BASETYPE + of a virtual class if a field named "__vfp" is found. + 2005-11-03 Jim Blandy Checked in by Elena Zannoni diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index e7a423f0da1..0a59a8cc1ff 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -3855,6 +3855,28 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu) TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (t); } } + else if (cu->producer + && strncmp (cu->producer, + "IBM(R) XL C/C++ Advanced Edition", 32) == 0) + { + /* The IBM XLC compiler does not provide direct indication + of the containing type, but the vtable pointer is + always named __vfp. */ + + int i; + + for (i = TYPE_NFIELDS (type) - 1; + i >= TYPE_N_BASECLASSES (type); + --i) + { + if (strcmp (TYPE_FIELD_NAME (type, i), "__vfp") == 0) + { + TYPE_VPTR_FIELDNO (type) = i; + TYPE_VPTR_BASETYPE (type) = type; + break; + } + } + } } do_cleanups (back_to);