* [PATCH] Remove MAX_REGISTER_SIZE from mi/mi-main.c
@ 2017-06-08 9:42 Alan Hayward
2017-06-08 9:55 ` Pedro Alves
0 siblings, 1 reply; 4+ messages in thread
From: Alan Hayward @ 2017-06-08 9:42 UTC (permalink / raw)
To: gdb-patches; +Cc: nd
Updated register_changed_p() to use cooked_read_value().
I considered moving this function into regcache as:
int regcache::register_cooked_compare (int regnum, struct regcache *prev_regs)
Decided not to because nothing else needs it. Would be happy to change.
Tested on a --enable-targets=all build
No regressions in gdb.mi/*.exp
Also tested with board files unix and native-gdbserver.
Ok to commit?
Alan.
2017-06-08 Alan Hayward <alan.hayward@arm.com>
* mi/mi-main.c (register_changed_p): Use cooked_read_value
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index bdc5dda30537c7e5797fb8c44b689a63c5c0f4b8..38d737f49f35953c7f5a9c957e918606baac63e3 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
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Remove MAX_REGISTER_SIZE from mi/mi-main.c
2017-06-08 9:42 [PATCH] Remove MAX_REGISTER_SIZE from mi/mi-main.c Alan Hayward
@ 2017-06-08 9:55 ` Pedro Alves
2017-06-08 12:57 ` Alan Hayward
0 siblings, 1 reply; 4+ messages in thread
From: Pedro Alves @ 2017-06-08 9:55 UTC (permalink / raw)
To: Alan Hayward, gdb-patches; +Cc: nd
On 06/08/2017 10:42 AM, Alan Hayward wrote:
> /* 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;
> }
>
Use value_contents_eq?
Thanks,
Pedro Alves
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Remove MAX_REGISTER_SIZE from mi/mi-main.c
2017-06-08 9:55 ` Pedro Alves
@ 2017-06-08 12:57 ` Alan Hayward
2017-06-08 13:00 ` Pedro Alves
0 siblings, 1 reply; 4+ messages in thread
From: Alan Hayward @ 2017-06-08 12:57 UTC (permalink / raw)
To: Pedro Alves; +Cc: gdb-patches, nd
> On 8 Jun 2017, at 10:55, Pedro Alves <palves@redhat.com> wrote:
>
> On 06/08/2017 10:42 AM, Alan Hayward wrote:
>
>> /* 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;
>> }
>>
>
> Use value_contents_eq?
That simplifies things!
Updated using value_contents_eq.
Tested on a --enable-targets=all build
No regressions in gdb.mi/*.exp
Also tested with board files unix and native-gdbserver.
Ok to commit?
Alan.
2017-06-08 Alan Hayward <alan.hayward@arm.com>
* mi/mi-main.c (register_changed_p): Use cooked_read_value
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index bdc5dda30537c7e5797fb8c44b689a63c5c0f4b8..9cbd3a454d20b4429725a00328840e4b4cce47f9 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,17 @@ 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);
+ prev_value = prev_regs->cooked_read_value (regnum);
+ this_value = this_regs->cooked_read_value (regnum);
- 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;
+ ret = value_contents_eq (prev_value, 0, this_value, 0,
+ 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
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Remove MAX_REGISTER_SIZE from mi/mi-main.c
2017-06-08 12:57 ` Alan Hayward
@ 2017-06-08 13:00 ` Pedro Alves
0 siblings, 0 replies; 4+ messages in thread
From: Pedro Alves @ 2017-06-08 13:00 UTC (permalink / raw)
To: Alan Hayward; +Cc: gdb-patches, nd
On 06/08/2017 01:57 PM, Alan Hayward wrote:
>
> Ok to commit?
>
OK.
> Alan.
>
>
> 2017-06-08 Alan Hayward <alan.hayward@arm.com>
>
> * mi/mi-main.c (register_changed_p): Use cooked_read_value
(Missing period.)
Thanks,
Pedro Alves
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-06-08 13:00 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-08 9:42 [PATCH] Remove MAX_REGISTER_SIZE from mi/mi-main.c Alan Hayward
2017-06-08 9:55 ` Pedro Alves
2017-06-08 12:57 ` Alan Hayward
2017-06-08 13:00 ` Pedro Alves
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).