From f6235d4cfac03962a505970ef92f231860c58517 Mon Sep 17 00:00:00 2001 From: Elena Zannoni Date: Fri, 4 Nov 2005 02:50:30 +0000 Subject: [PATCH] 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. --- gdb/ChangeLog | 8 ++++++++ gdb/dwarf2read.c | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 12a67ff4c09..9be144f6e9f 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); -- 2.30.2