From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9981 invoked by alias); 27 Sep 2011 15:05:34 -0000 Received: (qmail 9969 invoked by uid 22791); 27 Sep 2011 15:05:32 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from smtp-vbr18.xs4all.nl (HELO smtp-vbr18.xs4all.nl) (194.109.24.38) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 27 Sep 2011 15:05:13 +0000 Received: from cnoc.nl.alt001.com (oostvogels.xs4all.nl [83.163.197.192]) by smtp-vbr18.xs4all.nl (8.13.8/8.13.8) with ESMTP id p8RF5BVv081528 for ; Tue, 27 Sep 2011 17:05:12 +0200 (CEST) (envelope-from joost@cnoc.nl) Received: from localhost (localhost.localdomain [127.0.0.1]) by cnoc.nl.alt001.com (Postfix) with ESMTP id 868ADBF6C for ; Tue, 27 Sep 2011 17:00:00 +0200 (CEST) Received: from cnoc.nl.alt001.com ([127.0.0.1]) by localhost (cnoc.nl.alt001.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id is-icQtqTJkc for ; Tue, 27 Sep 2011 16:59:58 +0200 (CEST) Received: from [192.168.3.116] (host116.cnoc.intern [192.168.3.116]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by cnoc.nl.alt001.com (Postfix) with ESMTPS id 01088BCC6 for ; Tue, 27 Sep 2011 16:59:57 +0200 (CEST) Subject: Re: Handling of c++ function members From: Joost van der Sluis To: gdb@sourceware.org Date: Tue, 27 Sep 2011 15:05:00 -0000 In-Reply-To: <1317070857.17681.11.camel@feddie.cnoc.lan> References: <1317055596.23338.12.camel@feddie.cnoc.lan> <1317070857.17681.11.camel@feddie.cnoc.lan> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Message-ID: <1317135598.27942.29.camel@feddie.cnoc.lan> Mime-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2011-09/txt/msg00125.txt.bz2 On Mon, 2011-09-26 at 23:00 +0200, Joost van der Sluis wrote: > On Mon, 2011-09-26 at 16:38 -0400, Daniel Jacobowitz wrote: > > On Mon, Sep 26, 2011 at 12:46 PM, Joost van der Sluis wrote: > > > > Can you be a little more specific, maybe an example? > > > What I understood is, that DW_AT_vtable_elem_location should contain a > Dwarf-block that calculates the location of a pointer in which the > location of the function member is stored. If you need an example, you can compile the wikipedia virtual-function-example (after fixing compilation by adding the declaration of 'it') http://en.wikipedia.org/wiki/Virtual_function objdump -W of the function 'eat' in that example: <1><1902>: Abbrev Number: 66 (DW_TAG_class_type) <1903> DW_AT_name : (indirect string, offset: 0x17e6): Animal <1907> DW_AT_byte_size : 8 <1908> DW_AT_decl_file : 2 <1909> DW_AT_decl_line : 4 <190a> DW_AT_containing_type: <0x1902> <190e> DW_AT_sibling : <0x19be> <2><1953>: Abbrev Number: 69 (DW_TAG_subprogram) <1954> DW_AT_external : 1 <1955> DW_AT_name : eat <1959> DW_AT_decl_file : 2 <195a> DW_AT_decl_line : 6 <195b> DW_AT_MIPS_linkage_name: (indirect string, offset: 0xad3): _ZNK6Animal3eatEv <195f> DW_AT_virtuality : 1 (virtual) <1960> DW_AT_vtable_elem_location: 2 byte block: 10 0 (DW_OP_constu: 0) <1963> DW_AT_containing_type: <0x1902> <1967> DW_AT_accessibility: 1 (public) <1968> DW_AT_declaration : 1 <1969> DW_AT_object_pointer: <0x1971> <196d> DW_AT_sibling : <0x1978> <3><1971>: Abbrev Number: 25 (DW_TAG_formal_parameter) <1972> DW_AT_type : <0x2a55> <1976> DW_AT_artificial : 1 > But it seems to me that gcc stores the index of the function member > within some vtable in DW_AT_vtable_elem_location, instead of the memory > address itself. In gnu-v2-abi.c there is some code that 'knows' how this > vtable is organized so it is able to calculate the location of the > method-pointer. > > And there are two thing's I'm not sure about: gcc stores > DW_AT_containing_type in the debug-info, with the 'parent' entry of the > DW_TAG_subprogram entry. To me it looks that this is duplicated > information, and not specified in the Dwarf-specs. Secondly I do not > understand where the DW_AT_object_pointer is used for? DW_AT_containing_type is placed into NFN's Context field by dwarf2read. Regards, Joost van der Sluis.