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 12/12] btrace: Store function segments as objects.
Date: Wed, 10 May 2017 05:10:00 -0000 [thread overview]
Message-ID: <03bcd302ae8b132f5d2209c3e40cf494@polymtl.ca> (raw)
In-Reply-To: <1494312929-22749-13-git-send-email-tim.wiederhake@intel.com>
On 2017-05-09 02:55, Tim Wiederhake wrote:
> 2017-05-09 Tim Wiederhake <tim.wiederhake@intel.com>
>
> gdb/ChangeLog:
> * btrace.c:
> * btrace.h:
> * record-btrace.c:
IWBN if you could be more explicit :).
>
> ---
> gdb/btrace.c | 94
> ++++++++++++++++++++++++++---------------------------
> gdb/btrace.h | 7 ++--
> gdb/record-btrace.c | 10 +++---
> 3 files changed, 56 insertions(+), 55 deletions(-)
>
> diff --git a/gdb/btrace.c b/gdb/btrace.c
> index 7b82000..4c7020d 100644
> --- a/gdb/btrace.c
> +++ b/gdb/btrace.c
> @@ -155,14 +155,27 @@ ftrace_call_num_insn (const struct
> btrace_function* bfun)
> /* Return the function segment with the given NUMBER or NULL if no
> such segment
> exists. BTINFO is the branch trace information for the current
> thread. */
>
> -static struct btrace_function *
> +const static struct btrace_function *
It would make more sense to put the "static" first.
> ftrace_find_call_by_number (const struct btrace_thread_info *btinfo,
> unsigned int number)
> {
> if (number == 0 || number > btinfo->functions.size ())
> return NULL;
>
> - return btinfo->functions[number - 1];
> + return &btinfo->functions[number - 1];
> +}
> +
> +/* Return the function segment with the given NUMBER or NULL if no
> such segment
> + exists. BTINFO is the branch trace information for the current
> thread. */
It took me a surprisingly high amount of seconds to understand that this
was a const version of the function below. To avoid reapeating the
comment and to make it clear it's the same thing, you can replace the
comment of the const version to something like:
/* A const version of the function above. */
> +
> +static struct btrace_function *
> +ftrace_find_call_by_number (struct btrace_thread_info *btinfo,
> + unsigned int number)
> +{
> + if (number == 0 || number > btinfo->functions.size ())
> + return NULL;
> +
> + return &btinfo->functions[number - 1];
> }
>
> /* Return non-zero if BFUN does not match MFUN and FUN,
> @@ -214,37 +227,33 @@ ftrace_function_switched (const struct
> btrace_function *bfun,
> /* Allocate and initialize a new branch trace function segment at the
> end of
> the trace.
> BTINFO is the branch trace information for the current thread.
> - MFUN and FUN are the symbol information we have for this function.
> */
> + MFUN and FUN are the symbol information we have for this function.
> + This invalidates all struct btrace_function pointer currently held.
> */
>
> static struct btrace_function *
> ftrace_new_function (struct btrace_thread_info *btinfo,
> struct minimal_symbol *mfun,
> struct symbol *fun)
> {
> - struct btrace_function *bfun;
> -
> - bfun = XCNEW (struct btrace_function);
> -
> - bfun->msym = mfun;
> - bfun->sym = fun;
> + struct btrace_function bfun {mfun, fun, 0, 0, 0, NULL, 0, 0, 0, 0,
> 0};
I think it would be much better to add a simple constructor to
btrace_function. For the fields that should simply be zero'ed, you can
initialize fields directly, like we do in many other places (e.g. class
inferior).
>
> if (btinfo->functions.empty ())
> {
> /* Start counting at one. */
> - bfun->number = 1;
> - bfun->insn_offset = 1;
> + bfun.number = 1;
> + bfun.insn_offset = 1;
> }
> else
> {
> - struct btrace_function *prev = btinfo->functions.back ();
> + struct btrace_function *prev = &btinfo->functions.back ();
>
> - bfun->number = prev->number + 1;
> - bfun->insn_offset = prev->insn_offset + ftrace_call_num_insn
> (prev);
> - bfun->level = prev->level;
> + bfun.number = prev->number + 1;
> + bfun.insn_offset = prev->insn_offset + ftrace_call_num_insn
> (prev);
> + bfun.level = prev->level;
> }
>
> - btinfo->functions.push_back (bfun);
> - return bfun;
> + btinfo->functions.push_back (std::move (bfun));
> + return &btinfo->functions.back ();
I could be mistaken, but I don't think the move is very useful here,
since all fields of btrace_function are trivial (?). You could use
emplace_back instead:
btinfo->functions.emplace_back (mfun, fun);
btrace_function &bfun = btinfo->functions.back ();
...
return &bfun;
or
unsigned int number, insn_offset;
unsigned int insn_offset = prev->insn_offset + ftrace_call_num_insn
(prev);
int level = prev->level;
if (btinfo->functions.empty ())
{
/* Start counting at one. */
number = 1;
insn_offset = 1;
level = 0;
}
else
{
struct btrace_function *prev = &btinfo->functions.back ();
number = prev->number + 1;
insn_offset = prev->insn_offset + ftrace_call_num_insn (prev);
level = prev->level;
}
btinfo->functions.emplace_back (mfun, fun, number, insn_offset,
level);
return &btinfo->functions.back ();
Thanks,
Simon
next prev parent reply other threads:[~2017-05-10 5:10 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 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 [this message]
2017-05-10 11:46 ` Wiederhake, Tim
2017-05-10 14:16 ` Simon Marchi
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
2017-05-10 11:46 ` Wiederhake, Tim
2017-05-10 14:13 ` Simon Marchi
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 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 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 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 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
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=03bcd302ae8b132f5d2209c3e40cf494@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