From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3698 invoked by alias); 12 Aug 2002 19:57:11 -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 3614 invoked from network); 12 Aug 2002 19:57:10 -0000 Received: from unknown (HELO localhost.redhat.com) (216.138.202.10) by sources.redhat.com with SMTP; 12 Aug 2002 19:57:10 -0000 Received: from ges.redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 442153CFC; Mon, 12 Aug 2002 15:57:08 -0400 (EDT) Message-ID: <3D581314.2070403@ges.redhat.com> Date: Mon, 12 Aug 2002 12:57:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.0) Gecko/20020810 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Andrew Cagney Cc: gdb-patches@sources.redhat.com, Mark Kettenis Subject: Re: [patch/rfc] regcache_raw_read_as_address() -> regcache_cooked_read_as_ulongest() References: <3D5811CA.2070205@ges.redhat.com> Content-Type: multipart/mixed; boundary="------------060302070801020100010207" X-SW-Source: 2002-08/txt/msg00275.txt.bz2 This is a multi-part message in MIME format. --------------060302070801020100010207 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 498 > Hello, > > This patch replaces the function regcache_raw_read_as_address() with the pair: > regcache_cooked_read_as_longest() > regcache_cooked_read_as_ulongest() > The two calls to the old ..as_address() being replaced with the ulongest version. > > I think the change is ok (i386 shows no regressions, the mips doesn't use this code :-). I'm just wondering about the names. Perhaps: regcache_cooked_read_signed() & regcache_cooked_read_unsigned()? > > thoughts? > Andrew > sigh, --------------060302070801020100010207 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 5225 2002-08-12 Andrew Cagney * regcache.c (regcache_raw_read_as_address): Delete function. (regcache_cooked_read_as_longest): New function. (regcache_cooked_read_as_ulongest): New function. * regcache.h (regcache_cooked_read_as_longest): Declare. (regcache_cooked_read_as_ulongest): Declare. (regcache_raw_read_as_address): Delete declaration. * blockframe.c (generic_read_register_dummy): Use regcache_cooked_read_as_ulongest. * i386-tdep.c (i386_extract_struct_value_address): Use regcache_cooked_read_as_ulongest. Index: blockframe.c =================================================================== RCS file: /cvs/src/src/gdb/blockframe.c,v retrieving revision 1.35 diff -u -r1.35 blockframe.c --- blockframe.c 9 Aug 2002 18:26:15 -0000 1.35 +++ blockframe.c 12 Aug 2002 19:43:07 -0000 @@ -1215,7 +1215,16 @@ struct regcache *dummy_regs = generic_find_dummy_frame (pc, fp); if (dummy_regs) - return regcache_raw_read_as_address (dummy_regs, regno); + /* NOTE: cagney/2002-08-12: Replaced a call to + regcache_raw_read_as_address() with a call to + regcache_cooked_read_as_ulongest(). The old, ...as_address + call was eventually calling extract_unsigned_integer (via + extract_address) to unpack the registers value. The bellow is + doing an unsigned extract so that it is functionally + equivalent. The read needs to be cooked as, otherwize, it will + never correctly return the value of a register in the [NUM_REGS + .. NUM_REGS+NUM_PSEUDO_REGS) range. */ + return regcache_cooked_read_as_ulongest (dummy_regs, regno); else return 0; } Index: i386-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/i386-tdep.c,v retrieving revision 1.74 diff -u -r1.74 i386-tdep.c --- i386-tdep.c 12 Aug 2002 19:05:33 -0000 1.74 +++ i386-tdep.c 12 Aug 2002 19:43:07 -0000 @@ -1028,7 +1028,7 @@ static CORE_ADDR i386_extract_struct_value_address (struct regcache *regcache) { - return regcache_raw_read_as_address (regcache, LOW_RETURN_REGNUM); + return regcache_cooked_read_as_ulongest (regcache, LOW_RETURN_REGNUM); } Index: regcache.c =================================================================== RCS file: /cvs/src/src/gdb/regcache.c,v retrieving revision 1.50 diff -u -r1.50 regcache.c --- regcache.c 10 Aug 2002 02:00:16 -0000 1.50 +++ regcache.c 12 Aug 2002 19:43:08 -0000 @@ -366,17 +366,6 @@ return regcache->raw_register_valid_p[regnum]; } -CORE_ADDR -regcache_raw_read_as_address (struct regcache *regcache, int regnum) -{ - char *buf; - gdb_assert (regcache != NULL); - gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers); - buf = alloca (regcache->descr->sizeof_register[regnum]); - regcache_raw_read (regcache, regnum, buf); - return extract_address (buf, regcache->descr->sizeof_register[regnum]); -} - char * deprecated_grub_regcache_for_registers (struct regcache *regcache) { @@ -694,6 +683,30 @@ else gdbarch_pseudo_register_read (regcache->descr->gdbarch, regcache, regnum, buf); +} + +LONGEST +regcache_cooked_read_as_longest (struct regcache *regcache, int regnum) +{ + char *buf; + gdb_assert (regcache != NULL); + gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers); + buf = alloca (regcache->descr->sizeof_register[regnum]); + regcache_cooked_read (regcache, regnum, buf); + return extract_signed_integer (buf, + regcache->descr->sizeof_register[regnum]); +} + +ULONGEST +regcache_cooked_read_as_ulongest (struct regcache *regcache, int regnum) +{ + char *buf; + gdb_assert (regcache != NULL); + gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers); + buf = alloca (regcache->descr->sizeof_register[regnum]); + regcache_cooked_read (regcache, regnum, buf); + return extract_unsigned_integer (buf, + regcache->descr->sizeof_register[regnum]); } /* Write register REGNUM at MYADDR to the target. MYADDR points at Index: regcache.h =================================================================== RCS file: /cvs/src/src/gdb/regcache.h,v retrieving revision 1.12 diff -u -r1.12 regcache.h --- regcache.h 2 Aug 2002 18:08:31 -0000 1.12 +++ regcache.h 12 Aug 2002 19:43:08 -0000 @@ -39,12 +39,18 @@ void regcache_raw_write (struct regcache *regcache, int rawnum, const void *buf); int regcache_valid_p (struct regcache *regcache, int regnum); -CORE_ADDR regcache_raw_read_as_address (struct regcache *regcache, int rawnum); /* Transfer a cooked register [0..NUM_REGS+NUM_PSEUDO_REGS). */ void regcache_cooked_read (struct regcache *regcache, int rawnum, void *buf); void regcache_cooked_write (struct regcache *regcache, int rawnum, const void *buf); + +/* Read a cooked register as a signed integer. */ +extern LONGEST regcache_cooked_read_as_longest (struct regcache *regcache, + int regnum); +/* Read a cooked register as an unsigned integer. */ +extern ULONGEST regcache_cooked_read_as_ulongest (struct regcache *regcache, + int regnum); /* Transfer a raw register [0..NUM_REGS) between the regcache and the target. These functions are called by the target in response to a --------------060302070801020100010207--