Re: Another proposal for frontends and queries.

Michael Snyder
2009-09-18T05:16:31Z

Hui Zhu wrote:
> Hi guys,
>
> I make a demo that add a switch can set the memory change query to
> yquery or nquery. Then Marc can set it in his part.
>
> If you think this demo is OK. I will post a patch for memory change
> query and register change query.
> And please help me with the words "memorychangedefault", "Set the
> default query answer of memory change." and so on. I need some clear
> words. :)

How about "set precord-readonly".
One variable, to control both memory and register writes.
If true, you can't change any machine state while debugging a
recording. No worries about queries.

> ---
> record.c | 33 +++++++++++++++++++++++++++++++--
> 1 file changed, 31 insertions(+), 2 deletions(-)
>
> --- a/record.c
> +++ b/record.c
> @@ -97,6 +97,8 @@ static int record_insn_num = 0;
> /* The target_ops of process record. */
> static struct target_ops record_ops;
>
> +static int record_memory_change_default = 0;
> +
> /* The beneath function pointers. */
> static struct target_ops *record_beneath_to_resume_ops;
> static void (*record_beneath_to_resume) (struct target_ops *, ptid_t, int,
> @@ -1018,11 +1020,20 @@ record_xfer_partial (struct target_ops *
> {
> if (RECORD_IS_REPLAY)
> {
> + int n = 0;
> +
> /* Let user choose if he wants to write memory or not. */
> - if (!nquery (_("Because GDB is in replay mode, writing to memory "
> + if (record_memory_change_default)
> + n = yquery (_("Because GDB is in replay mode, writing to memory "
> "will make the execution log unusable from this "
> "point onward. Write memory at address %s?"),
> - paddress (target_gdbarch, offset)))
> + paddress (target_gdbarch, offset));
> + else
> + n = nquery (_("Because GDB is in replay mode, writing to memory "
> + "will make the execution log unusable from this "
> + "point onward. Write memory at address %s?"),
> + paddress (target_gdbarch, offset));
> + if (!n)
> error (_("Process record canceled the operation."));
>
> /* Destroy the record from here forward. */
> @@ -1240,6 +1251,15 @@ info_record_command (char *args, int fro
> cmd_show_list (info_record_cmdlist, from_tty, "");
> }
>
> +static void
> +show_record_memory_change_default (struct ui_file *file, int from_tty,
> + struct cmd_list_element *c,
> + const char *value)
> +{
> + fprintf_filtered (file, _("The default query answer is %s.\n"),
> + record_memory_change_default ? "yes" : "no");
> +}
> +
> void
> _initialize_record (void)
> {
> @@ -1310,4 +1330,13 @@ record/replay buffer. Zero means unlimi
> add_cmd ("insn-number", class_obscure, show_record_insn_number,
> _("Show the current number of instructions in the "
> "record/replay buffer."), &info_record_cmdlist);
> +
> + add_setshow_boolean_cmd ("memorychangedefault", no_class,
> + &record_memory_change_default, _("\
> +Set the default query answer of memory change."), _("\
> +Show the default query answer of memory change."), _("\
> +\"yes\" or \"no\"."),
> + NULL,
> + show_record_memory_change_default,
> + &set_record_cmdlist, &show_record_cmdlist);
> }