aboutsummaryrefslogtreecommitdiff
path: root/gdb/mi
diff options
context:
space:
mode:
authorAlan Hayward <alan.hayward@arm.com>2017-06-08 14:02:59 +0100
committerAlan Hayward <alan.hayward@arm.com>2017-06-08 14:02:59 +0100
commitff4ca5ac6a2e85177dc7efe5cbda7b956bb71fd5 (patch)
tree105c3afc1b45f628ec94f51314bbb939627b9083 /gdb/mi
parent6322e5c5cb7ffe1c26c50f117765503717b0431c (diff)
Remove MAX_REGISTER_SIZE from mi/mi-main.c
gdb/ * mi/mi-main.c (register_changed_p): Use cooked_read_value.
Diffstat (limited to 'gdb/mi')
-rw-r--r--gdb/mi/mi-main.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index bdc5dda305..38d737f49f 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -1111,10 +1111,8 @@ register_changed_p (int regnum, struct regcache *prev_regs,
struct regcache *this_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;
+ struct value *prev_value, *this_value;
+ int ret;
/* First time through or after gdbarch change consider all registers
as changed. */
@@ -1122,16 +1120,28 @@ register_changed_p (int regnum, struct regcache *prev_regs,
return 1;
/* Get register contents and compare. */
- prev_status = regcache_cooked_read (prev_regs, regnum, prev_buffer);
- this_status = regcache_cooked_read (this_regs, regnum, this_buffer);
-
- if (this_status != prev_status)
- return 1;
- else if (this_status == REG_VALID)
- return memcmp (prev_buffer, this_buffer,
- register_size (gdbarch, regnum)) != 0;
+ prev_value = prev_regs->cooked_read_value (regnum);
+ this_value = this_regs->cooked_read_value (regnum);
+ gdb_assert (prev_value != NULL);
+ gdb_assert (this_value != NULL);
+
+ if (value_optimized_out (prev_value) != value_optimized_out (this_value)
+ || value_entirely_available (prev_value)
+ != value_entirely_available (this_value))
+ ret = 1;
+ if (value_optimized_out (prev_value)
+ || !value_entirely_available (prev_value))
+ ret = 0;
else
- return 0;
+ ret = memcmp (value_contents_all (prev_value),
+ value_contents_all (this_value),
+ register_size (gdbarch, regnum)) != 0;
+
+ release_value (prev_value);
+ release_value (this_value);
+ value_free (prev_value);
+ value_free (this_value);
+ return ret;
}
/* Return a list of register number and value pairs. The valid