From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Markus Metzger <markus.t.metzger@intel.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [patch v4 09/24] btrace: add replay position to btrace thread info
Date: Sun, 18 Aug 2013 19:07:00 -0000 [thread overview]
Message-ID: <20130818190704.GG24153@host2.jankratochvil.net> (raw)
In-Reply-To: <1372842874-28951-10-git-send-email-markus.t.metzger@intel.com>
On Wed, 03 Jul 2013 11:14:19 +0200, Markus Metzger wrote:
> Add a branch trace instruction iterator pointing to the current replay position
> to the branch trace thread info struct.
>
> Free the iterator when btrace is cleared.
>
> Start at the replay position for the instruction and function-call histories.
>
> 2013-07-03 Markus Metzger <markus.t.metzger@intel.com>
>
> * btrace.h (replay) <replay>: New.
> (btrace_is_replaying): New.
> * btrace.c (btrace_clear): Free replay iterator.
> (btrace_is_replaying): New.
> * record-btrace.c (record_btrace_is_replaying): New.
> (record_btrace_info): Print insn number if replaying.
> (record_btrace_insn_history): Start at replay position.
> (record_btrace_call_history): Start at replay position.
> (init_record_btrace_ops): Init to_record_is_replaying.
>
>
> ---
> gdb/btrace.c | 10 ++++++
> gdb/btrace.h | 6 ++++
> gdb/record-btrace.c | 80 +++++++++++++++++++++++++++++++++++++++++++++-----
> 3 files changed, 88 insertions(+), 8 deletions(-)
>
> diff --git a/gdb/btrace.c b/gdb/btrace.c
> index 006deaa..0bec2cf 100644
> --- a/gdb/btrace.c
> +++ b/gdb/btrace.c
> @@ -771,9 +771,11 @@ btrace_clear (struct thread_info *tp)
>
> xfree (btinfo->insn_history);
> xfree (btinfo->call_history);
> + xfree (btinfo->replay);
>
> btinfo->insn_history = NULL;
> btinfo->call_history = NULL;
> + btinfo->replay = NULL;
> }
>
> /* See btrace.h. */
> @@ -1371,3 +1373,11 @@ btrace_set_call_history (struct btrace_thread_info *btinfo,
> btinfo->call_history->begin = *begin;
> btinfo->call_history->end = *end;
> }
> +
> +/* See btrace.h. */
> +
> +int
> +btrace_is_replaying (struct thread_info *tp)
> +{
> + return tp->btrace.replay != NULL;
> +}
> diff --git a/gdb/btrace.h b/gdb/btrace.h
> index a3322d2..5a5b297 100644
> --- a/gdb/btrace.h
> +++ b/gdb/btrace.h
> @@ -181,6 +181,9 @@ struct btrace_thread_info
>
> /* The function call history iterator. */
> struct btrace_call_history *call_history;
> +
> + /* The current replay position. NULL if not replaying. */
> + struct btrace_insn_iterator *replay;
> };
>
> /* Enable branch tracing for a thread. */
> @@ -301,4 +304,7 @@ extern void btrace_set_call_history (struct btrace_thread_info *,
> const struct btrace_call_iterator *begin,
> const struct btrace_call_iterator *end);
>
> +/* Determine if branch tracing is currently replaying TP. */
> +extern int btrace_is_replaying (struct thread_info *tp);
> +
> #endif /* BTRACE_H */
> diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
> index c7d6e9f..5e41b20 100644
> --- a/gdb/record-btrace.c
> +++ b/gdb/record-btrace.c
> @@ -237,6 +237,10 @@ record_btrace_info (void)
> printf_unfiltered (_("Recorded %u instructions in %u functions for thread "
> "%d (%s).\n"), insns, calls, tp->num,
> target_pid_to_str (tp->ptid));
> +
> + if (btrace_is_replaying (tp))
> + printf_unfiltered (_("Replay in progress. At instruction %u.\n"),
> + btrace_insn_number (btinfo->replay));
> }
>
> /* Print an unsigned int. */
> @@ -301,13 +305,34 @@ record_btrace_insn_history (int size, int flags)
> history = btinfo->insn_history;
> if (history == NULL)
> {
> - /* No matter the direction, we start with the tail of the trace. */
> - btrace_insn_end (&begin, btinfo);
> - end = begin;
> + struct btrace_insn_iterator *replay;
>
> DEBUG ("insn-history (0x%x): %d", flags, size);
>
> - covered = btrace_insn_prev (&begin, context);
> + /* If we're replaying, we start at the replay position. Otherwise, we
> + start at the tail of the trace. */
> + replay = btinfo->replay;
> + if (replay != NULL)
> + begin = *replay;
> + else
> + btrace_insn_end (&begin, btinfo);
> +
> + /* We start from here and expand in the requested direction. Then we
> + expand in the other direction, as well, to fill up any remaining
> + context. */
> + end = begin;
> + if (size < 0)
> + {
> + /* We want the current position covered, as well. */
> + covered = btrace_insn_next (&end, 1);
> + covered += btrace_insn_prev (&begin, context - covered);
> + covered += btrace_insn_next (&end, context - covered);
> + }
> + else
> + {
> + covered = btrace_insn_next (&end, context);
> + covered += btrace_insn_prev (&begin, context - covered);
> + }
These two COVERED calculations do not seem right to me, pointer is moving NEXT
and PREV so the directions should be both added and subtracted.
> }
> else
> {
> @@ -562,13 +587,37 @@ record_btrace_call_history (int size, int flags)
> history = btinfo->call_history;
> if (history == NULL)
> {
> - /* No matter the direction, we start with the tail of the trace. */
> - btrace_call_end (&begin, btinfo);
> - end = begin;
> + struct btrace_insn_iterator *replay;
>
> DEBUG ("call-history (0x%x): %d", flags, size);
>
> - covered = btrace_call_prev (&begin, context);
> + /* If we're replaying, we start at the replay position. Otherwise, we
> + start at the tail of the trace. */
> + replay = btinfo->replay;
> + if (replay != NULL)
> + {
> + begin.function = replay->function;
> + begin.btinfo = btinfo;
> + }
> + else
> + btrace_call_end (&begin, btinfo);
> +
> + /* We start from here and expand in the requested direction. Then we
> + expand in the other direction, as well, to fill up any remaining
> + context. */
> + end = begin;
> + if (size < 0)
> + {
> + /* We want the current position covered, as well. */
> + covered = btrace_call_next (&end, 1);
> + covered += btrace_call_prev (&begin, context - covered);
> + covered += btrace_call_next (&end, context - covered);
> + }
> + else
> + {
> + covered = btrace_call_next (&end, context);
> + covered += btrace_call_prev (&begin, context- covered);
> + }
These two COVERED calculations do not seem right to me, pointer is moving NEXT
and PREV so the directions should be both added and subtracted.
> }
> else
> {
> @@ -689,6 +738,20 @@ record_btrace_call_history_from (ULONGEST from, int size, int flags)
> record_btrace_call_history_range (begin, end, flags);
> }
>
> +/* The to_record_is_replaying method of target record-btrace. */
> +
> +static int
> +record_btrace_is_replaying (void)
> +{
> + struct thread_info *tp;
> +
> + ALL_THREADS (tp)
> + if (btrace_is_replaying (tp))
> + return 1;
> +
> + return 0;
> +}
> +
> /* Initialize the record-btrace target ops. */
>
> static void
> @@ -715,6 +778,7 @@ init_record_btrace_ops (void)
> ops->to_call_history = record_btrace_call_history;
> ops->to_call_history_from = record_btrace_call_history_from;
> ops->to_call_history_range = record_btrace_call_history_range;
> + ops->to_record_is_replaying = record_btrace_is_replaying;
> ops->to_stratum = record_stratum;
> ops->to_magic = OPS_MAGIC;
> }
> --
> 1.7.1
next prev parent reply other threads:[~2013-08-18 19:07 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-03 9:15 [patch v4 00/24] record-btrace: reverse Markus Metzger
2013-07-03 9:14 ` [patch v4 11/24] record-btrace: supply register target methods Markus Metzger
2013-08-18 19:07 ` Jan Kratochvil
2013-09-16 9:19 ` Metzger, Markus T
2013-09-22 13:55 ` Jan Kratochvil
2013-09-23 6:55 ` Metzger, Markus T
2013-07-03 9:14 ` [patch v4 20/24] btrace, gdbserver: read branch trace incrementally Markus Metzger
2013-08-18 19:09 ` Jan Kratochvil
2013-09-16 12:48 ` Metzger, Markus T
2013-09-22 14:42 ` Jan Kratochvil
2013-09-23 7:09 ` Metzger, Markus T
2013-09-25 19:05 ` Jan Kratochvil
2013-09-26 6:27 ` Metzger, Markus T
2013-07-03 9:14 ` [patch v4 24/24] record-btrace: skip tail calls in back trace Markus Metzger
2013-08-18 19:10 ` Jan Kratochvil
2013-09-17 14:28 ` Metzger, Markus T
2013-09-18 8:28 ` Metzger, Markus T
2013-09-18 9:52 ` Metzger, Markus T
2013-07-03 9:14 ` [patch v4 03/24] btrace: change branch trace data structure Markus Metzger
2013-08-18 19:05 ` Jan Kratochvil
2013-09-10 9:11 ` Metzger, Markus T
2013-09-12 20:09 ` Jan Kratochvil
2013-09-16 9:01 ` Metzger, Markus T
2013-09-21 19:44 ` Jan Kratochvil
2013-09-23 6:54 ` Metzger, Markus T
2013-09-23 7:15 ` Jan Kratochvil
2013-09-23 7:27 ` Metzger, Markus T
2013-09-22 16:57 ` Jan Kratochvil
2013-09-22 17:16 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 19/24] btrace, linux: fix memory leak when reading branch trace Markus Metzger
2013-08-18 19:09 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 10/24] target: add ops parameter to to_prepare_to_store method Markus Metzger
2013-08-18 19:07 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 09/24] btrace: add replay position to btrace thread info Markus Metzger
2013-08-18 19:07 ` Jan Kratochvil [this message]
2013-09-10 13:24 ` Metzger, Markus T
2013-09-12 20:19 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 05/24] record-btrace: start counting at one Markus Metzger
2013-08-18 19:11 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 02/24] record: upcase record_print_flag enumeration constants Markus Metzger
2013-08-18 19:11 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 14/24] record-btrace: provide xfer_partial target method Markus Metzger
2013-08-18 19:08 ` Jan Kratochvil
2013-09-16 9:30 ` Metzger, Markus T
2013-09-22 14:18 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 22/24] infrun: reverse stepping from unknown functions Markus Metzger
2013-08-18 19:09 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 07/24] record-btrace: optionally indent function call history Markus Metzger
2013-08-18 19:06 ` Jan Kratochvil
2013-09-10 13:06 ` Metzger, Markus T
2013-09-10 13:08 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 08/24] record-btrace: make ranges include begin and end Markus Metzger
2013-08-18 19:12 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 16/24] record-btrace: provide target_find_new_threads method Markus Metzger
2013-08-18 19:15 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 01/24] gdbarch: add instruction predicate methods Markus Metzger
2013-07-03 9:49 ` Mark Kettenis
2013-07-03 11:10 ` Metzger, Markus T
2013-08-18 19:04 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 12/24] frame, backtrace: allow targets to supply a frame unwinder Markus Metzger
2013-08-18 19:14 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 18/24] record-btrace: extend unwinder Markus Metzger
2013-08-18 19:08 ` Jan Kratochvil
2013-09-16 11:21 ` Metzger, Markus T
2013-09-27 13:55 ` Jan Kratochvil
2013-09-30 9:45 ` Metzger, Markus T
2013-09-30 10:26 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 21/24] record-btrace: show trace from enable location Markus Metzger
2013-08-18 19:10 ` instruction_history.exp unset variable [Re: [patch v4 21/24] record-btrace: show trace from enable location] Jan Kratochvil
2013-09-16 14:11 ` Metzger, Markus T
2013-08-18 19:16 ` [patch v4 21/24] record-btrace: show trace from enable location Jan Kratochvil
2013-07-03 9:15 ` [patch v4 04/24] record-btrace: fix insn range in function call history Markus Metzger
2013-08-18 19:06 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 13/24] record-btrace, frame: supply target-specific unwinder Markus Metzger
2013-08-18 19:07 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 17/24] record-btrace: add record goto target methods Markus Metzger
2013-08-18 19:08 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 15/24] record-btrace: add to_wait and to_resume " Markus Metzger
2013-08-18 19:08 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 23/24] record-btrace: add (reverse-)stepping support Markus Metzger
2013-08-18 19:09 ` Jan Kratochvil
2013-09-17 9:43 ` Metzger, Markus T
2013-09-29 17:24 ` Jan Kratochvil
2013-09-30 9:30 ` Metzger, Markus T
2013-09-30 10:25 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 06/24] btrace: increase buffer size Markus Metzger
2013-08-18 19:06 ` Jan Kratochvil
2013-08-18 19:04 ` [patch v4 00/24] record-btrace: reverse Jan Kratochvil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130818190704.GG24153@host2.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=markus.t.metzger@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox