Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Cagney <ac131313@ges.redhat.com>
To: Andrew Cagney <ac131313@ges.redhat.com>
Cc: gdb-patches@sources.redhat.com, Mark Kettenis <kettenis@science.uva.nl>
Subject: Re: [patch/rfc] regcache_raw_read_as_address() -> regcache_cooked_read_as_ulongest()
Date: Mon, 12 Aug 2002 12:57:00 -0000	[thread overview]
Message-ID: <3D581314.2070403@ges.redhat.com> (raw)
In-Reply-To: <3D5811CA.2070205@ges.redhat.com>

[-- Attachment #1: Type: text/plain, Size: 498 bytes --]

> 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,


[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 5225 bytes --]

2002-08-12  Andrew Cagney  <cagney@redhat.com>
 
	* 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);
 }
 \f
 
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

  reply	other threads:[~2002-08-12 19:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-08-12 12:51 Andrew Cagney
2002-08-12 12:57 ` Andrew Cagney [this message]
2002-08-12 13:12 ` Daniel Jacobowitz
     [not found]   ` <1020812202845.ZM934@localhost.localdomain>
2002-08-13  6:46     ` Andrew Cagney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3D581314.2070403@ges.redhat.com \
    --to=ac131313@ges.redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=kettenis@science.uva.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox