From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14857 invoked by alias); 31 May 2005 02:27:41 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 14844 invoked by uid 22791); 31 May 2005 02:27:37 -0000 Received: from ausmtp01.au.ibm.com (HELO ausmtp01.au.ibm.com) (202.81.18.186) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Tue, 31 May 2005 02:27:37 +0000 Received: from sd0208e0.au.ibm.com (d23rh904.au.ibm.com [202.81.18.202]) by ausmtp01.au.ibm.com (8.12.10/8.12.10) with ESMTP id j4V2TvAR329954 for ; Tue, 31 May 2005 12:30:00 +1000 Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.250.243]) by sd0208e0.au.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id j4V2UK8G116292 for ; Tue, 31 May 2005 12:30:20 +1000 Received: from d23av02.au.ibm.com (loopback [127.0.0.1]) by d23av02.au.ibm.com (8.12.11/8.13.3) with ESMTP id j4V2RRNK012698 for ; Tue, 31 May 2005 12:27:27 +1000 Received: from plinuxt18.cn.ibm.com (plinuxt18.cn.ibm.com [9.181.140.28]) by d23av02.au.ibm.com (8.12.11/8.12.11) with ESMTP id j4V2RPeX012651; Tue, 31 May 2005 12:27:26 +1000 Date: Tue, 31 May 2005 03:31:00 -0000 From: Wu Zhou To: drow@false.org cc: gdb-patches@sources.redhat.com Subject: [RFC] Add a little IBM XL C++ specific code in dwarf2read.c, to set TYPE_VPTR_FIELDNO and TYPE_VPTR_BASETYPE of a virtual class correctly Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2005-05/txt/msg00657.txt.bz2 Daniel, As we discussed in a previous thread before, gdb will drop into SEGV fault when handling the debug-info of a virtual class which has no DW_AT_containing_type attribute. ARM's RVCT compiler will generate this kind of debuginfo and prone to trigger SEGV error, which you fixed in a big un-cleanuped patch. IBM's XL compiler will also generate this kind of debuginfo and prone to SEGV error too, on which I posted a small patch based on yours. I see that you are still too busy to look into this. But maybe we could handle this somewhat easily. My thought is to begin with eliminating the SEGV error first, which only need a small fix. Then we could go on with other parts. So I post the following IBM XLC++ specific patch, wishing that we could make some progress on this. What is your point on this idea? If you think it is ok, I could also add ARM specific code into this patch. Please review and comment. Thanks a lot! <2005-05-31> Wu Zhou * dwarf2read.c (read_structure_type): Add a little 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. Index: dwarf2read.c =================================================================== RCS file: /cvs/src/src/gdb/dwarf2read.c,v retrieving revision 1.181 diff -c -p -r1.181 dwarf2read.c *** dwarf2read.c 9 Mar 2005 06:03:14 -0000 1.181 --- dwarf2read.c 30 May 2005 14:22:29 -0000 *************** read_structure_type (struct die_info *di *** 3864,3869 **** --- 3864,3891 ---- 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); Cheers - Wu Zhou