Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Wu Zhou <woodzltc@cn.ibm.com>
Cc: gdb-patches@sources.redhat.com
Subject: Removing TYPE_VPTR_FIELDNO uses (was: Re: [patch ping] Set TYPE_VPTR_BASETYPE/TYPE_VPTR_FIELDNO of XL C++ virtual class)
Date: Sun, 02 Oct 2005 22:21:00 -0000	[thread overview]
Message-ID: <20051002222103.GA32728@nevyn.them.org> (raw)
In-Reply-To: <1127969598.433b733eedab9@imap.linux.ibm.com>

On Thu, Sep 29, 2005 at 12:53:18AM -0400, Wu Zhou wrote:
> - gnu-v2-abi.c is for an old ABI.  Not relevant.
> - stabsread.c is for a different debug format.  Not relevant.
> - dwarf2read.c: to read out data for VPTRs if there are any. No need for
> any change IMO.

Yes, I agree.

> - gdbtypes.c/gdbtype.h: to initialize VPTR_FIELDNO (in alloc_type and
> create_array_type), fill VPTRs (in fill_in_vptr_fieldno), and dump VPTRs
> (in recursive_dump_type).  Maybe some change to the type dumping is
> needed.

Not if we leave them for older ABIs and stabs.

> - varobj.c (cplus_class_num_children and cplus_name_of_child): The code
> will ignore VPTRs when iterating thru the base classes.  I don't know
> the way how to iterate thru the base classes if there is no dependence
> for VPTRs.  Maybe we need to find a way for that?

For this code, it may suffice to ignore DW_AT_artificial fields and
make sure that the vptr is tagged as artificial.  Or, call a new C++
ABI method (cp-abi.h) to check for vptrs and ignore them.

> - eval.c (evaluate_subexp_standard): TYPE_VPTR_BASETYPE is used to iterate
> the baseclasses to find the real address of the virtual function.

This code needs to be (A) read and thought about, so that we can figure
out what it used to do, and (B) replaced with something less broken. 
It hasn't worked in forever.  Take a look at what METHOD_PTR_IS_VIRTUAL
expands to!

I believe this was specific to one particular C++ ABI.  I don't
remember which... maybe gnuv2, maybe HP aCC.

> - 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.

Unless of course there isn't one.  We may need to figure out what the
field at offset 0 is to see whether it's a vptr or a user variable.  I
haven't thought about that in a while; maybe we can assume that there
is one by the time we get into this file.

-- 
Daniel Jacobowitz
CodeSourcery, LLC


  reply	other threads:[~2005-10-02 22:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-29  4:53 [patch ping] Set TYPE_VPTR_BASETYPE/TYPE_VPTR_FIELDNO of XL C++ virtual class Wu Zhou
2005-10-02 22:21 ` Daniel Jacobowitz [this message]
2005-10-09  3:58   ` Removing TYPE_VPTR_FIELDNO uses (was: Re: [patch ping] Set TYPE_VPTR_BASETYPE/TYPE_VPTR_FIELDNO of XL C++ virtual class) Wu Zhou
2005-10-09 20:09     ` Daniel Jacobowitz
2005-10-11  5:49   ` Wu Zhou
2005-10-11 13:16     ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20051002222103.GA32728@nevyn.them.org \
    --to=drow@false.org \
    --cc=gdb-patches@sources.redhat.com \
    --cc=woodzltc@cn.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox