This is the mail archive of the
mailing list for the GDB project.
Re: C++ debugging progress
On Wed, Nov 28, 2001 at 09:03:04PM +0000, Jason Merrill wrote:
> >>>>> "Jason" == Jason Merrill <firstname.lastname@example.org> writes:
> > Yep. Since Base is a virtual base of Left, the DW_AT_data_member_location
> > here should be a complex expression telling the debugger to go through the
> > vtable. I'll get on it.
> > I'll also change the stabs output to give the offset within the vtable
> > rather than the offset of the base in a complete object; gdb will still
> > need to be clever enough to know what to do with it.
> Please give this a spin; gdb doesn't like it, but I think it's correct.
> Note that the offset given in the stabs output should be treated as
> negative, so for V3 objects,
> BaseAddr = LeftAddr + *((*LeftAddr) - Offset)
> The dwarf2 output is the above encoded in reverse Polish notation. I
> suppose we could rely on gdb to know the equation for dwarf, too, but that
> would be nonconforming and only saves four bytes.
> 2001-11-28 Jason Merrill <email@example.com>
> * dwarf2out.c (add_data_member_location_attribute): Do the
> right thing for virtual bases.
> * dbxout.c (dbxout_type): For a virtual base, print the offset
> within the vtable.
I haven't looked at the Dwarf parts - I need to get my current stabs
project sorted out first - but with the removed minus sign, this
simplifies my stabs code tremendously and works just fine. Any chance
of getting this into 3.0.3 also, or should I just maintain a local
As for the Dwarf bits, what I'll probably do for now is recognize this
specific form of expression and just stash the negative offset, so that
only the debug readers need to know how I got it. That will be a bit
of a hack, but I've done worse, and conforming has some uses :)
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer