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
next prev parent 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