From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4990 invoked by alias); 10 Oct 2002 22:40:08 -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 4982 invoked from network); 10 Oct 2002 22:40:07 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 10 Oct 2002 22:40:07 -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 g9AMK9X23819 for ; Thu, 10 Oct 2002 18:20:09 -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 g9AMe6f16794 for ; Thu, 10 Oct 2002 18:40:06 -0400 Received: from localhost.localdomain (vpn50-65.rdu.redhat.com [172.16.50.65]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9AMe5a31092; Thu, 10 Oct 2002 18:40:05 -0400 Received: (from kev@localhost) by localhost.localdomain (8.11.6/8.11.6) id g9AMe0q14497; Thu, 10 Oct 2002 15:40:00 -0700 Date: Thu, 10 Oct 2002 15:40:00 -0000 From: Kevin Buettner Message-Id: <1021010223959.ZM14496@localhost.localdomain> In-Reply-To: "Martin M. Hunt" "[RFA] string_to_core_addr fix" (Oct 10, 3:07pm) References: <200210101507.46548.hunt@redhat.com> To: "Martin M. Hunt" , gdb-patches@sources.redhat.com Subject: Re: [RFA] string_to_core_addr fix MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-10/txt/msg00227.txt.bz2 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. Kevin