From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2667 invoked by alias); 1 Apr 2003 23:44:39 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 2654 invoked from network); 1 Apr 2003 23:44:38 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 1 Apr 2003 23:44:38 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h31NicQ13153 for ; Tue, 1 Apr 2003 18:44:38 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h31NicV25044; Tue, 1 Apr 2003 18:44:38 -0500 Received: from localhost.localdomain (vpnuser8.stuttgart.redhat.com [172.16.4.8]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h31NiZ502136; Tue, 1 Apr 2003 18:44:35 -0500 Received: (from kev@localhost) by localhost.localdomain (8.11.6/8.11.6) id h31NiSF27923; Tue, 1 Apr 2003 16:44:28 -0700 Date: Tue, 01 Apr 2003 23:44:00 -0000 From: Kevin Buettner Message-Id: <1030401234428.ZM27922@localhost.localdomain> In-Reply-To: "CUTHBERTSON,REVA (HP-Cupertino,ex3)" "Support for multiple sized pointers in a program" (Apr 1, 3:37pm) References: <68157FD469848D45B9CBC2833AD55280415B34@xsun02.ptp.hp.com> To: "CUTHBERTSON,REVA (HP-Cupertino,ex3)" , "'gdb@sources.redhat.com'" Subject: Re: Support for multiple sized pointers in a program MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2003-04/txt/msg00013.txt.bz2 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