This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch v4 15/24] record-btrace: add to_wait and to_resume target methods.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]