* [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).