diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/mi/mi-main.c | 26 |
2 files changed, 19 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c9469da..3fab4bc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 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) (regcache_raw_read_unsigned, regcache_raw_read_signed) (regcache_raw_read_unsigned, regcache_raw_read_part) diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 412aa4a..ef6bfc3 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -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 |