This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Removing TYPE_VPTR_FIELDNO uses (was: Re: [patch ping] Set TYPE_VPTR_BASETYPE/TYPE_VPTR_FIELDNO of XL C++ virtual class)


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]