This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: Removing TYPE_VPTR_FIELDNO uses (was: Re: [patch ping] Set TYPE_VPTR_BASETYPE/TYPE_VPTR_FIELDNO of XL C++ virtual class)
- From: Daniel Jacobowitz <drow at false dot org>
- To: Wu Zhou <woodzltc at cn dot ibm dot com>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Tue, 11 Oct 2005 09:16:23 -0400
- Subject: Re: Removing TYPE_VPTR_FIELDNO uses (was: Re: [patch ping] Set TYPE_VPTR_BASETYPE/TYPE_VPTR_FIELDNO of XL C++ virtual class)
- References: <1127969598.433b733eedab9@imap.linux.ibm.com> <20051002222103.GA32728@nevyn.them.org> <Pine.LNX.4.63.0510111343240.7264@linux.site>
On Tue, Oct 11, 2005 at 01:52:12PM +0800, Wu Zhou wrote:
> Hi Daniel,
>
> I have one more question about the offset of vptr.
>
> On Sun, 2 Oct 2005, Daniel Jacobowitz wrote:
> > > - gnu-v3-abi.c: VPTRs is used for rtti, virtual function and virtual base
> > > class offset.
> >
> > In this file, I think we can skip all the rigamarole with debug
> > information to find the vptr. It's very easy: it's the size of a
> > pointer, and it's at offset 0. Always.
>
> By saying above, do you means that the pointer to the vtable is always at
> the beginning of the fields, so we can calculate the vtable_address using
> the following code?
>
> vtable_address
> = value_as_address (value_field (value, 0 /* TYPE_VPTR_FIELDNO (values_type) */));
>
> But I found that in some testcase (such as class A in gdb.cp/virtfunc.cc),
> the offset is 1. Did I misunderstand something? If so, please help me
> point out. Thanks a bunch!
No. I mean that the physical offset of the vtable in the structure is
0; the address of the vtable is the same as the address of the
structure, if there is a vtable.
--
Daniel Jacobowitz
CodeSourcery, LLC