]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* regcache.c (read_register_bytes): When REGISTER_NAME indicates
authorAndrew Cagney <cagney@redhat.com>
Mon, 27 Aug 2001 01:59:34 +0000 (01:59 +0000)
committerAndrew Cagney <cagney@redhat.com>
Mon, 27 Aug 2001 01:59:34 +0000 (01:59 +0000)
that a register should be ignored, supply a value for the register
from the raw registers[] buffer.

gdb/ChangeLog
gdb/regcache.c

index 709c8edc6e79216d328e26e5d2df2125b4f70fd2..66b7514dc49d2cfd902fa300789b69e09b7ac1b9 100644 (file)
@@ -1,3 +1,9 @@
+2001-08-24  Andrew Cagney  <ac131313@redhat.com>
+
+       * regcache.c (read_register_bytes): When REGISTER_NAME indicates
+       that a register should be ignored, supply a value for the register
+       from the raw registers[] buffer.
+
 2001-08-24  Andrew Cagney  <ac131313@redhat.com>
 
        * go32-nat.c (go32_create_inferior): Use xfree instead of free.
index b939d9a8fb10caea2aed97ff357d3e6fa62ad874..79dee2604b6f4f43bf8cb8f3089e99309aec9cd1 100644 (file)
@@ -230,9 +230,6 @@ read_register_bytes (int in_start, char *in_buf, int in_len)
       int end;
       int byte;
 
-      if (REGISTER_NAME (regnum) == NULL || *REGISTER_NAME (regnum) == '\0')
-       continue;
-
       reg_start = REGISTER_BYTE (regnum);
       reg_len = REGISTER_RAW_SIZE (regnum);
       reg_end = reg_start + reg_len;
@@ -241,8 +238,18 @@ read_register_bytes (int in_start, char *in_buf, int in_len)
        /* The range the user wants to read doesn't overlap with regnum.  */
        continue;
 
-      /* Force the cache to fetch the entire register. */
-      read_register_gen (regnum, reg_buf);
+      if (REGISTER_NAME (regnum) != NULL && *REGISTER_NAME (regnum) != '\0')
+       /* Force the cache to fetch the entire register.  */
+       read_register_gen (regnum, reg_buf);
+      else
+       /* Legacy note: even though this register is ``invalid'' we
+           still need to return something.  It would appear that some
+           code relies on apparent gaps in the register array also
+           being returned.  */
+       /* FIXME: cagney/2001-08-18: This is just silly.  It defeats
+           the entire register read/write flow of control.  Must
+           resist temptation to return 0xdeadbeef.  */
+       memcpy (reg_buf, registers + reg_start, reg_len);
 
       /* Legacy note: This function, for some reason, allows a NULL
          input buffer.  If the buffer is NULL, the registers are still