gdb/
authorPedro Alves <palves@redhat.com>
Fri, 18 Mar 2011 18:40:08 +0000 (18:40 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 18 Mar 2011 18:40:08 +0000 (18:40 +0000)
* mi/mi-main.c (register_changed_p): Handle REG_UNAVAILABLE, and
simplify, using regcache_cooked_read.

gdb/ChangeLog
gdb/mi/mi-main.c

index c9469da0df6dcf83aeddc90f93c00d6e85e18db6..3fab4bc7e70c694cd87125cb2d1ca44e416927b7 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-18  Pedro Alves  <pedro@codesourcery.com>
+
+       * mi/mi-main.c (register_changed_p): Handle REG_UNAVAILABLE, and
+       simplify, using regcache_cooked_read.
+
 2011-03-18  Pedro Alves  <pedro@codesourcery.com>
 
        * regcache.h (regcache_raw_read, regcache_raw_read_signed)
index 412aa4ad80c66b7f1d9db23670dda27f4163ded8..ef6bfc3013f71f31f06def52ad76aaf99e24a851 100644 (file)
@@ -1016,23 +1016,25 @@ register_changed_p (int regnum, struct regcache *prev_regs,
   struct gdbarch *gdbarch = get_regcache_arch (this_regs);
   gdb_byte prev_buffer[MAX_REGISTER_SIZE];
   gdb_byte this_buffer[MAX_REGISTER_SIZE];
+  enum register_status prev_status;
+  enum register_status this_status;
 
-  /* Registers not valid in this frame return count as unchanged.  */
-  if (regcache_register_status (this_regs, regnum) == REG_UNKNOWN)
-    return 0;
-
-  /* First time through or after gdbarch change consider all registers as
-     changed.  Same for registers not valid in the previous frame.  */
-  if (!prev_regs || get_regcache_arch (prev_regs) != gdbarch
-      || regcache_register_status (prev_regs, regnum) == REG_UNKNOWN)
+  /* First time through or after gdbarch change consider all registers
+     as changed.  */
+  if (!prev_regs || get_regcache_arch (prev_regs) != gdbarch)
     return 1;
 
   /* Get register contents and compare.  */
-  regcache_cooked_read (prev_regs, regnum, prev_buffer);
-  regcache_cooked_read (this_regs, regnum, this_buffer);
+  prev_status = regcache_cooked_read (prev_regs, regnum, prev_buffer);
+  this_status = regcache_cooked_read (this_regs, regnum, this_buffer);
 
-  return memcmp (prev_buffer, this_buffer,
-                register_size (gdbarch, regnum)) != 0;
+  if (this_status != prev_status)
+    return 1;
+  else if (this_status == REG_VALID)
+    return memcmp (prev_buffer, this_buffer,
+                  register_size (gdbarch, regnum)) != 0;
+  else
+    return 0;
 }
 
 /* Return a list of register number and value pairs.  The valid
This page took 0.02947 seconds and 4 git commands to generate.