summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2001-08-27 01:59:34 +0000
committerAndrew Cagney <cagney@redhat.com>2001-08-27 01:59:34 +0000
commit462f970ca84dafab2d35d0b3931a04ea6bfe95ee (patch)
tree1274f8e555636e0585e0272a310900fd1735fb52
parentbfe87f8a1f0fb5eaf9d5acd3392884ce45382445 (diff)
downloadgdb-462f970ca84dafab2d35d0b3931a04ea6bfe95ee.tar.gz
* 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.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/regcache.c17
2 files changed, 18 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 709c8edc6e7..66b7514dc49 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
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.
* config/djgpp/fnchange.lst: Add entries for i386bsd-tdep.c and
i386bsd-nat.c.
diff --git a/gdb/regcache.c b/gdb/regcache.c
index b939d9a8fb1..79dee2604b6 100644
--- a/gdb/regcache.c
+++ b/gdb/regcache.c
@@ -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