* remote.c (fetch_register_using_p): Recognize a register value
authorJim Blandy <jimb@codesourcery.com>
Tue, 28 Dec 2004 09:06:10 +0000 (09:06 +0000)
committerJim Blandy <jimb@codesourcery.com>
Tue, 28 Dec 2004 09:06:10 +0000 (09:06 +0000)
starting with 'x' as indicating an unfetchable register.

gdb/ChangeLog
gdb/remote.c

index 1ca0f955d4d517c46bb5f1e7b1017d0fa027fb69..04eafd886e2c1a8de53ef29bf21ae73c69d9bed9 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-28  Jim Blandy  <jimb@redhat.com>
+
+       * remote.c (fetch_register_using_p): Recognize a register value
+       starting with 'x' as indicating an unfetchable register.
+
 2004-12-27  Mark Kettenis  <kettenis@gnu.org>
 
        * config/mips/obsd64.mh (NATDEPFILES): Unwrap line.
index 9bbe603de6124723df02237bd4abfd60251fb4ee..2ab1c2f467fcd9e1213f2fe3d9dac4e509ca0659 100644 (file)
@@ -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