From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16236 invoked by alias); 11 Oct 2002 04:31:07 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 16229 invoked from network); 11 Oct 2002 04:31:06 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 11 Oct 2002 04:31:06 -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 g9B4B6X01321 for ; Fri, 11 Oct 2002 00:11:06 -0400 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 g9B4V5f24684 for ; Fri, 11 Oct 2002 00:31:05 -0400 Received: from localhost.localdomain (romulus-int.sfbay.redhat.com [172.16.27.46]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9B4V4a11325; Fri, 11 Oct 2002 00:31:04 -0400 From: "Martin M. Hunt" Organization: Red Hat Inc To: Kevin Buettner , gdb-patches@sources.redhat.com Subject: Re: [RFA] string_to_core_addr fix Date: Thu, 10 Oct 2002 21:31:00 -0000 User-Agent: KMail/1.4.1 References: <200210101507.46548.hunt@redhat.com> <1021010223959.ZM14496@localhost.localdomain> In-Reply-To: <1021010223959.ZM14496@localhost.localdomain> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="------------Boundary-00=_S5VSXSZLZOLCUOLN2RZR" Message-Id: <200210102129.52218.hunt@redhat.com> X-SW-Source: 2002-10/txt/msg00230.txt.bz2 --------------Boundary-00=_S5VSXSZLZOLCUOLN2RZR Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Content-length: 2326 On Thursday 10 October 2002 03:40 pm, Kevin Buettner wrote: > On Oct 10, 3:07pm, Martin M. Hunt wrote: > > This is necessary for 64-bit targets where sometimes 32-bit > > values must be sign-extended to 64-bits. > > > > 2002-10-10 Martin M. Hunt > > > > * utils.c (string_to_core_addr): After turning string into > > a number, convert to a CORE_ADDR using POINTER_TO_ADDRESS > > which will do necessary sign-extension, etc. > > > > Index: utils.c > > =================================================================== > > RCS file: /cvs/src/src/gdb/utils.c,v > > retrieving revision 1.80 > > diff -u -p -r1.80 utils.c > > --- utils.c 20 Sep 2002 00:24:01 -0000 1.80 > > +++ utils.c 10 Oct 2002 22:06:50 -0000 > > @@ -2649,7 +2649,7 @@ string_to_core_addr (const char *my_stri > > internal_error (__FILE__, __LINE__, "invalid decimal"); > > } > > } > > - return addr; > > + return POINTER_TO_ADDRESS (builtin_type_void_data_ptr, &addr); > > } > > > > char * > > While I agree that something like this is needed, I'm not convinced that > using POINTER_TO_ADDRESS on a CORE_ADDR is right. By default, > unsigned_pointer_to_address() is used. It looks like this: > > /* Given a pointer of type TYPE in target form in BUF, return the > address it represents. */ > CORE_ADDR > unsigned_pointer_to_address (struct type *type, void *buf) > { > return extract_address (buf, TYPE_LENGTH (type)); > } > > The problem is that ``addr'' is an address in host format (i.e, a > CORE_ADDR), not a target address. I suspect you'll get incorrect results > if the host and target are of different endianness or if sizeof (CORE_ADDR) > != TYPE_LENGTH (type). > > I think you could get the right results by writing addr to a buffer > (maybe using store_typed_address) and then using extract_typed_address(), > but there may be a more straightforward way to do it. For years we used parse_and_eval_address() in Insight until earlier this year when those calls were replaced with string_to_core_addr(), breaking all mips targets. parse_and_eval_address() internally calls INTEGER_TO_ADDRESS() so I probably should use that. In fact I decided to just do what parse_and_eval_address() did but apparently submitted the wrong version. Revised patch attached. Martin --------------Boundary-00=_S5VSXSZLZOLCUOLN2RZR Content-Type: text/x-diff; charset="iso-8859-1"; name="p" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="p" Content-length: 512 Index: utils.c =================================================================== RCS file: /cvs/src/src/gdb/utils.c,v retrieving revision 1.80 diff -u -p -r1.80 utils.c --- utils.c 20 Sep 2002 00:24:01 -0000 1.80 +++ utils.c 11 Oct 2002 04:29:51 -0000 @@ -2649,6 +2649,8 @@ string_to_core_addr (const char *my_stri internal_error (__FILE__, __LINE__, "invalid decimal"); } } + if (INTEGER_TO_ADDRESS_P ()) + addr = INTEGER_TO_ADDRESS (builtin_type_void_data_ptr, &addr); return addr; } --------------Boundary-00=_S5VSXSZLZOLCUOLN2RZR--