From 3f9a994c5e1bf23dfa6b0f3e62ebfcbc43683e8b Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Tue, 28 Dec 2004 09:06:10 +0000 Subject: [PATCH] * remote.c (fetch_register_using_p): Recognize a register value starting with 'x' as indicating an unfetchable register. --- gdb/ChangeLog | 5 +++++ gdb/remote.c | 41 ++++++++++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1ca0f955d4..04eafd886e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2004-12-28 Jim Blandy + + * remote.c (fetch_register_using_p): Recognize a register value + starting with 'x' as indicating an unfetchable register. + 2004-12-27 Mark Kettenis * config/mips/obsd64.mh (NATDEPFILES): Unwrap line. diff --git a/gdb/remote.c b/gdb/remote.c index 9bbe603de6..2ab1c2f467 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -3192,25 +3192,36 @@ fetch_register_using_p (int regnum) p += hexnumstr (p, regnum); *p++ = '\0'; remote_send (buf, rs->remote_packet_size); - if (buf[0] != 0 && buf[0] != 'E') + + /* If the stub didn't recognize the packet, or if we got an error, + tell our caller. */ + if (buf[0] == '\0' || buf[0] == 'E') + return 0; + + /* If this register is unfetchable, tell the regcache. */ + if (buf[0] == 'x') { - p = buf; - i = 0; - while (p[0] != 0) - { - if (p[1] == 0) - { - error ("fetch_register_using_p: early buf termination"); - return 0; - } - regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]); - p += 2; - } - regcache_raw_supply (current_regcache, regnum, regp); + regcache_raw_supply (current_regcache, regnum, NULL); + set_register_cached (regnum, -1); return 1; } - return 0; + /* Otherwise, parse and supply the value. */ + p = buf; + i = 0; + while (p[0] != 0) + { + if (p[1] == 0) + { + error("fetch_register_using_p: early buf termination"); + return 0; + } + + regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]); + p += 2; + } + regcache_raw_supply (current_regcache, regnum, regp); + return 1; } static void