This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patch v4 15/24] record-btrace: add to_wait and to_resume target methods.
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: Markus Metzger <markus dot t dot metzger at intel dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Sun, 18 Aug 2013 21:08:04 +0200
- Subject: Re: [patch v4 15/24] record-btrace: add to_wait and to_resume target methods.
- References: <1372842874-28951-1-git-send-email-markus dot t dot metzger at intel dot com> <1372842874-28951-16-git-send-email-markus dot t dot metzger at intel dot com>
On Wed, 03 Jul 2013 11:14:25 +0200, Markus Metzger wrote:
> Add simple to_wait and to_resume target methods that prevent stepping when the
> current replay position is not at the end of the execution log.
>
> 2013-07-03 Markus Metzger <markus.t.metzger@intel.com>
>
> * record-btrace.c (record_btrace_resume): New.
> (record_btrace_wait): New.
> (init_record_btrace_ops): Initialize to_wait and to_resume.
>
>
> ---
> gdb/record-btrace.c | 41 +++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 41 insertions(+), 0 deletions(-)
>
> diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
> index 831a367..430296a 100644
> --- a/gdb/record-btrace.c
> +++ b/gdb/record-btrace.c
> @@ -966,6 +966,45 @@ static const struct frame_unwind record_btrace_frame_unwind =
> NULL,
> record_btrace_frame_sniffer
> };
> +
> +/* The to_resume method of target record-btrace. */
> +
> +static void
> +record_btrace_resume (struct target_ops *ops, ptid_t ptid, int step,
> + enum gdb_signal signal)
> +{
> + /* As long as we're not replaying, just forward the request. */
> + if (!record_btrace_is_replaying ())
> + {
> + for (ops = ops->beneath; ops != NULL; ops = ops->beneath)
> + if (ops->to_resume != NULL)
> + return ops->to_resume (ops, ptid, step, signal);
> +
> + error (_("Cannot find target for stepping."));
> + }
> +
> + error (_("You can't do this from here. Do 'record goto end', first."));
> +}
> +
> +/* The to_wait method of target record-btrace. */
> +
> +static ptid_t
> +record_btrace_wait (struct target_ops *ops, ptid_t ptid,
> + struct target_waitstatus *status, int options)
> +{
> + /* As long as we're not replaying, just forward the request. */
> + if (!record_btrace_is_replaying ())
> + {
> + for (ops = ops->beneath; ops != NULL; ops = ops->beneath)
> + if (ops->to_wait != NULL)
> + return ops->to_wait (ops, ptid, status, options);
> +
> + error (_("Cannot find target for stepping."));
"for waiting".
target_wait (and target_resume) call just noprocess () in such case although
I understand this is a different case as btrace target should always have some
live target underneath. Just a statement, not a request for change.
> + }
> +
> + error (_("You can't do this from here. Do 'record goto end', first."));
> +}
> +
> /* Initialize the record-btrace target ops. */
>
> static void
> @@ -998,6 +1037,8 @@ init_record_btrace_ops (void)
> ops->to_store_registers = record_btrace_store_registers;
> ops->to_prepare_to_store = record_btrace_prepare_to_store;
> ops->to_get_unwinder = &record_btrace_frame_unwind;
> + ops->to_resume = record_btrace_resume;
> + ops->to_wait = record_btrace_wait;
> ops->to_stratum = record_stratum;
> ops->to_magic = OPS_MAGIC;
> }
> --
> 1.7.1