Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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


  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