This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH v9 23/29] record-btrace: provide target_find_new_threads method
- From: Pedro Alves <palves at redhat dot com>
- To: Markus Metzger <markus dot t dot metzger at intel dot com>
- Cc: jan dot kratochvil at redhat dot com, gdb-patches at sourceware dot org
- Date: Thu, 19 Dec 2013 19:32:39 +0000
- Subject: Re: [PATCH v9 23/29] record-btrace: provide target_find_new_threads method
- Authentication-results: sourceware.org; auth=none
- References: <1387471499-29444-1-git-send-email-markus dot t dot metzger at intel dot com> <1387471499-29444-24-git-send-email-markus dot t dot metzger at intel dot com>
On 12/19/2013 04:44 PM, Markus Metzger wrote:
> The "info threads" command tries to read memory, which is not possible during
> replay. This results in an error message and aborts the command without showing
> the existing threads.
>
> Provide a to_find_new_threads target method to skip the search while replaying.
I think for completeness you should also provide a to_thread_alive
method. These two go hand in hand.
>
> 2013-12-19 Markus Metzger <markus.t.metzger@intel.com>
>
> * record-btrace.c (record_btrace_find_new_threads): New.
> (init_record_btrace_ops): Initialize to_find_new_threads.
>
>
> ---
> gdb/record-btrace.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
> index bb140ce..f6272b4 100644
> --- a/gdb/record-btrace.c
> +++ b/gdb/record-btrace.c
> @@ -1055,6 +1055,24 @@ record_btrace_wait (struct target_ops *ops, ptid_t ptid,
> error (_("You can't do this from here. Do 'record goto end', first."));
> }
>
> +/* The to_find_new_threads method of target record-btrace. */
> +
> +static void
> +record_btrace_find_new_threads (struct target_ops *ops)
> +{
> + /* Don't expect new threads if we're replaying. */
> + if (record_btrace_is_replaying ())
> + return;
> +
> + /* Forward the request. */
> + for (ops = ops->beneath; ops != NULL; ops = ops->beneath)
> + if (ops->to_find_new_threads != NULL)
> + {
> + ops->to_find_new_threads (ops);
> + break;
> + }
> +}
> +
> /* Initialize the record-btrace target ops. */
>
> static void
> @@ -1091,6 +1109,7 @@ init_record_btrace_ops (void)
> ops->to_get_unwinder = &record_btrace_frame_unwind;
> ops->to_resume = record_btrace_resume;
> ops->to_wait = record_btrace_wait;
> + ops->to_find_new_threads = record_btrace_find_new_threads;
> ops->to_stratum = record_stratum;
> ops->to_magic = OPS_MAGIC;
> }
>
--
Pedro Alves