Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Kevin Buettner <kevinb@redhat.com>
To: "CUTHBERTSON,REVA (HP-Cupertino,ex3)" <reva_cuthbertson@hp.com>,
	"'gdb@sources.redhat.com'" <gdb@sources.redhat.com>
Subject: Re: Support for multiple sized pointers in a program
Date: Tue, 01 Apr 2003 23:44:00 -0000	[thread overview]
Message-ID: <1030401234428.ZM27922@localhost.localdomain> (raw)
In-Reply-To: "CUTHBERTSON,REVA (HP-Cupertino,ex3)" <reva_cuthbertson@hp.com> "Support for multiple sized pointers in a program" (Apr  1,  3:37pm)

On Apr 1,  3:37pm, CUTHBERTSON,REVA (HP-Cupertino,ex3) wrote:

> I am porting gdb to a platform which allows both 32-bit and 64-bit pointers
> to coexist in a program.  I am running into a problem creating pointer types
> when 2 different sized pointers point to the same target type in the same
> program.  
> 
> The problem seems to be in make_pointer_type() in gdbtypes.c.  The function
> creates a pointer type for the target type if one does not exist, fills in
> the length of the pointer, fills in the flags and returns the pointer type.
> What it also does is save the new pointer type into the "pointer_type" field
> of the target type.  The next time I call this function for the same target
> type, it will return the pointer type I just made even if the next pointer
> to the target type is a different size.  This will be a problem when you try
> to fetch the value of a pointer, etc.
> 
> The problem appears to be the 1-1 mapping between the pointer type and the
> target type.  I made a change in make_pointer_type()  which disables the
> code that saves the pointer type in the "pointer_type" field of the target
> type.  I simply return the pointer type which ultimately gets attached to a
> symbol.  With this change, I'm able to print out pointers of different sizes
> even when they point to the same thing.  What I don't understand is why
> there is the 1-1 mapping in the first place between a type and a pointer
> type.  I see code all over gdb which calls lookup_pointer_type() on a type
> -- such as builtin_type_void and builtin_type_char.   What is the purpose
> for looking up the pointer type of a type that is not associated with a
> symbol?  I'm concerned that my change will have consequences on code that
> calls lookup_pointer_type() in this way.  Is my fix correct or should I be
> doing something a different way?
> 
> Any help on this would be greatly appreciated!!!!

Take a look at the "address class" support that I added last year.  I
needed it to handle this precise problem.  (Grep the gdb sources for
ADDRESS_CLASS.)

Kevin


      reply	other threads:[~2003-04-01 23:44 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-01 23:37 CUTHBERTSON,REVA (HP-Cupertino,ex3)
2003-04-01 23:44 ` Kevin Buettner [this message]

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=1030401234428.ZM27922@localhost.localdomain \
    --to=kevinb@redhat.com \
    --cc=gdb@sources.redhat.com \
    --cc=reva_cuthbertson@hp.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