Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: Tim Wiederhake <tim.wiederhake@intel.com>
Cc: gdb-patches@sourceware.org, markus.t.metzger@intel.com
Subject: Re: [PATCH v3 10/12] btrace: Replace struct  btrace_thread_info::segment.
Date: Wed, 10 May 2017 04:14:00 -0000	[thread overview]
Message-ID: <d52131fd2731dc351c71e8b4774a7f47@polymtl.ca> (raw)
In-Reply-To: <1494312929-22749-11-git-send-email-tim.wiederhake@intel.com>

This title too should say btrace_function.

On 2017-05-09 02:55, Tim Wiederhake wrote:
> This used to hold a pair of pointers to the previous and next function 
> segment
> that belong to this function call.  Replace with a pair of indices into 
> the
> vector of function segments.
> 
> 2017-05-09  Tim Wiederhake  <tim.wiederhake@intel.com>
> 
> gdb/ChangeLog:
> 
> 	* btrace.c (ftrace_fixup_caller, ftrace_new_return, 
> ftrace_connect_bfun,
> 	ftrace_bridge_gap): Replace references to btrace_thread_info::segment
> 	with btrace_thread_info::next_segment and
> 	btrace_thread_info::prev_segment.
> 	* btrace.h: Remove struct btrace_func_link.
> 	(struct btrace_function): Replace pair of function segment pointers
> 	with pair of indices.
> 	* python/py-record-btrace.c (btpy_call_prev_sibling,
> 	btpy_call_next_sibling): Replace references to
> 	btrace_thread_info::segment with btrace_thread_info::next_segment and
> 	btrace_thread_info::prev_segment.
> 	* record-btrace.c (record_btrace_frame_this_id): Same.
> 
> ---
>  gdb/btrace.c                  | 47 
> ++++++++++++++++++++++++++-----------------
>  gdb/btrace.h                  | 17 ++++++----------
>  gdb/python/py-record-btrace.c |  8 ++++----
>  gdb/record-btrace.c           |  4 ++--
>  4 files changed, 40 insertions(+), 36 deletions(-)
> 
> diff --git a/gdb/btrace.c b/gdb/btrace.c
> index f57bbf9..921cb64 100644
> --- a/gdb/btrace.c
> +++ b/gdb/btrace.c
> @@ -271,20 +271,29 @@ ftrace_update_caller (struct btrace_function 
> *bfun,
>  /* Fix up the caller for all segments of a function.  */
> 
>  static void
> -ftrace_fixup_caller (struct btrace_function *bfun,
> +ftrace_fixup_caller (struct btrace_thread_info *btinfo,
> +		     struct btrace_function *bfun,
>  		     struct btrace_function *caller,
>  		     enum btrace_function_flag flags)
>  {
> -  struct btrace_function *prev, *next;
> +  unsigned int prev, next;
> 
> +  prev = bfun->prev;
> +  next = bfun->next;
>    ftrace_update_caller (bfun, caller, flags);
> 
>    /* Update all function segments belonging to the same function.  */
> -  for (prev = bfun->segment.prev; prev != NULL; prev = 
> prev->segment.prev)
> -    ftrace_update_caller (prev, caller, flags);
> +  for (; prev != 0; prev = bfun->prev)
> +    {
> +      bfun = ftrace_find_call_by_number (btinfo, prev);
> +      ftrace_update_caller (bfun, caller, flags);
> +    }
> 
> -  for (next = bfun->segment.next; next != NULL; next = 
> next->segment.next)
> -    ftrace_update_caller (next, caller, flags);
> +  for (; next != 0; next = bfun->next)
> +    {
> +      bfun = ftrace_find_call_by_number (btinfo, next);
> +      ftrace_update_caller (bfun, caller, flags);
> +    }

Could you define the loop variables in the for like this?

   for (unsigned int prev = bfun->prev; prev != 0; prev = bfun->prev)
     {
       bfun = ftrace_find_call_by_number (btinfo, prev);
       ftrace_update_caller (bfun, caller, flags);
     }

Unless is it important to capture the value of bfun->prev/next before 
calling ftrace_update_caller?  This way their scope is limited to where 
they are used.

Btw, this is another thing that could be rewritten nicely if 
btrace_function had a backlink to btrace_thread_info, something like:

   for (btrace_function *it = bfun; it != NULL; it = it->next_segment ())
     ftrace_update_caller (it, caller, flags);

Btw #2, I thing this function could be more efficient (or maybe I don't 
understand as well as I think).  If bfun at function entry is in the 
middle of a long list of segments, it will start from there and iterate 
backwards until it hits the first segment.  But because the same bfun 
variable is reused, it will iterate forward from the start until the 
end, whereas it only needed to iterate from the original bfun.  Using a 
temporary loop variable to avoid modifying bfun would correct that.

> @@ -948,7 +957,7 @@ ftrace_bridge_gap (struct btrace_thread_info 
> *btinfo,
>  static void
>  btrace_bridge_gaps (struct thread_info *tp, VEC (bfun_s) **gaps)
>  {
> -  struct btrace_thread_info *btinfo;
> +  struct btrace_thread_info *btinfo = &tp->btrace;

btinfo is now assigned twice in this function.

Thanks,

Simon


  reply	other threads:[~2017-05-10  4:14 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-09  7:01 [PATCH v3 00/12] btrace: Turn linked list of function call segments into vector Tim Wiederhake
2017-05-09  7:01 ` [PATCH v3 11/12] btrace: Remove bfun_s vector Tim Wiederhake
2017-05-10  4:27   ` Simon Marchi
2017-05-10 11:46     ` Wiederhake, Tim
2017-05-09  7:01 ` [PATCH v3 08/12] btrace: Replace struct btrace_thread_info::up Tim Wiederhake
2017-05-10  3:26   ` Simon Marchi
2017-05-10 11:46     ` Wiederhake, Tim
2017-05-09  7:01 ` [PATCH v3 06/12] btrace: Remove constant arguments Tim Wiederhake
2017-05-10  2:45   ` Simon Marchi
2017-05-10 11:46     ` Wiederhake, Tim
2017-05-09  7:01 ` [PATCH v3 02/12] btrace: Transfer ownership of pointers Tim Wiederhake
2017-05-09 12:21   ` Simon Marchi
2017-05-09  7:01 ` [PATCH v3 09/12] btrace: Remove struct btrace_thread_info::flow Tim Wiederhake
2017-05-10  3:46   ` Simon Marchi
2017-05-10 11:46     ` Wiederhake, Tim
2017-05-10 13:59       ` Simon Marchi
2017-05-09  7:01 ` [PATCH v3 03/12] btrace: Add btinfo to instruction interator Tim Wiederhake
2017-05-09  7:01 ` [PATCH v3 05/12] btrace: Use function segment index in insn iterator Tim Wiederhake
2017-05-10  2:20   ` Simon Marchi
2017-05-10 11:46     ` Wiederhake, Tim
2017-05-09  7:01 ` [PATCH v3 07/12] btrace: Remove struct btrace_thread_info::{begin,end} Tim Wiederhake
2017-05-10  3:06   ` Simon Marchi
2017-05-09  7:01 ` [PATCH v3 01/12] btrace: Use std::vector in struct btrace_thread_information Tim Wiederhake
2017-05-09 12:10   ` Simon Marchi
2017-05-09  7:01 ` [PATCH v3 10/12] btrace: Replace struct btrace_thread_info::segment Tim Wiederhake
2017-05-10  4:14   ` Simon Marchi [this message]
2017-05-10 11:46     ` Wiederhake, Tim
2017-05-10 14:13       ` Simon Marchi
2017-05-09  7:01 ` [PATCH v3 04/12] btrace: Use function segment index in call iterator Tim Wiederhake
2017-05-09 12:50   ` Simon Marchi
2017-05-09 13:14     ` Wiederhake, Tim
2017-05-09 14:29       ` Simon Marchi
2017-05-09  7:01 ` [PATCH v3 12/12] btrace: Store function segments as objects Tim Wiederhake
2017-05-10  5:10   ` Simon Marchi
2017-05-10 11:46     ` Wiederhake, Tim
2017-05-10 14:16       ` Simon Marchi

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=d52131fd2731dc351c71e8b4774a7f47@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=markus.t.metzger@intel.com \
    --cc=tim.wiederhake@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