From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30688 invoked by alias); 1 Apr 2003 23:37:18 -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 30681 invoked from network); 1 Apr 2003 23:37:18 -0000 Received: from unknown (HELO palrel13.hp.com) (156.153.255.238) by sources.redhat.com with SMTP; 1 Apr 2003 23:37:18 -0000 Received: from xparelay1.ptp.hp.com (xparelay1.ptp.hp.com [15.1.28.62]) by palrel13.hp.com (Postfix) with ESMTP id 6A63D1C00AC9 for ; Tue, 1 Apr 2003 15:37:17 -0800 (PST) Received: from xpabh1.ptp.hp.com (xpabh1.ptp.hp.com [15.1.28.60]) by xparelay1.ptp.hp.com (Postfix) with ESMTP id 4FC8B1004BBB for ; Tue, 1 Apr 2003 15:37:17 -0800 (PST) Received: by xpabh1.ptp.hp.com with Internet Mail Service (5.5.2655.55) id ; Tue, 1 Apr 2003 15:37:17 -0800 Message-ID: <68157FD469848D45B9CBC2833AD55280415B34@xsun02.ptp.hp.com> From: "CUTHBERTSON,REVA (HP-Cupertino,ex3)" To: "'gdb@sources.redhat.com'" Subject: Support for multiple sized pointers in a program Date: Tue, 01 Apr 2003 23:37:00 -0000 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-SW-Source: 2003-04/txt/msg00012.txt.bz2 Hello, 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!!!! Reva Cuthbertson reva_cuthbertson@hp.com