From: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
To: acme@kernel.org, kim.phillips@arm.com
Cc: peterz@infradead.org, mingo@redhat.com,
alexander.shishkin@linux.intel.com, chris.ryder@arm.com,
mhiramat@kernel.org, treeze.taeung@gmail.com,
markus@trippelsdorf.de, naveen.n.rao@linux.vnet.ibm.com,
linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Subject: Re: [PATCH v8 2/3] perf annotate: Support jump instruction with target as second operand
Date: Tue, 6 Dec 2016 11:38:28 +0530 [thread overview]
Message-ID: <584655DC.5030502@linux.vnet.ibm.com> (raw)
In-Reply-To: <1480953407-7605-2-git-send-email-ravi.bangoria@linux.vnet.ibm.com>
Hi Arnaldo,
Hmm, so it's difficult to find example of this when we use debuginfo.
Because...
Jump__parse tries to look for two things 'offset' and 'target address'.
objdump with debuginfo will include offset in assembly f.e. annotate of
'smp_call_function_single' with perf.data and vmlinux I shared.
│c00000000016d6ac: cmpwi cr7,r9,0 ▒
│c00000000016d6b0: ↑ bne cr7,c00000000016d59c <.smp_call_function_single+0x8c> ▒
│c00000000016d6b4: addis r10,r2,-15 ▒
objdump of same function with kcore.
│c00000000016d6ac: cmpwi cr7,r9,0 ▒
│c00000000016d6b0: ↓ bne cr7,0xc00000000016d59c ▒
│c00000000016d6b4: addis r10,r2,-15 ▒
Annotating in first case won't show any issue because we directly get
offset. But in this case as well, we are parsing wrong target address
in ops->target.addr
While we don't have offset in second case, we use target address to
find it. And thus it shows wrong o/p something like:
│ cmpwi cr7,r9,0 ▒
│ ↓ bne 3fffffffffe92afc ▒
│ addis r10,r2,-15 ▒
BTW, we have lot of such instructions in kernel.
Thanks,
-Ravi
On Monday 05 December 2016 09:26 PM, Ravi Bangoria wrote:
> Arch like powerpc has jump instructions that includes target address
> as second operand. For example, 'bne cr7,0xc0000000000f6154'. Add
> support for such instruction in perf annotate.
>
> objdump o/p:
> c0000000000f6140: ld r9,1032(r31)
> c0000000000f6144: cmpdi cr7,r9,0
> c0000000000f6148: bne cr7,0xc0000000000f6154
> c0000000000f614c: ld r9,2312(r30)
> c0000000000f6150: std r9,1032(r31)
> c0000000000f6154: ld r9,88(r31)
>
> Corresponding perf annotate o/p:
>
> Before patch:
> ld r9,1032(r31)
> cmpdi cr7,r9,0
> v bne 3ffffffffff09f2c
> ld r9,2312(r30)
> std r9,1032(r31)
> 74: ld r9,88(r31)
>
> After patch:
> ld r9,1032(r31)
> cmpdi cr7,r9,0
> v bne 74
> ld r9,2312(r30)
> std r9,1032(r31)
> 74: ld r9,88(r31)
>
> Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
> ---
> Changes in v8:
> - v7: https://lkml.org/lkml/2016/9/21/436
> - Rebase to acme/perf/core
> - Little change in patch description.
> - No logical changes. (Cross arch annotate patches are in. This patch
> is for hardening annotate for powerpc.)
>
> tools/perf/util/annotate.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index ea7e0de..590244e 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -223,8 +223,12 @@ bool ins__is_call(const struct ins *ins)
> static int jump__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, struct map *map __maybe_unused)
> {
> const char *s = strchr(ops->raw, '+');
> + const char *c = strchr(ops->raw, ',');
>
> - ops->target.addr = strtoull(ops->raw, NULL, 16);
> + if (c++ != NULL)
> + ops->target.addr = strtoull(c, NULL, 16);
> + else
> + ops->target.addr = strtoull(ops->raw, NULL, 16);
>
> if (s++ != NULL)
> ops->target.offset = strtoull(s, NULL, 16);
next prev parent reply other threads:[~2016-12-06 6:08 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-05 15:56 [PATCH v8 1/3] perf annotate: Show raw form for jump instruction with indirect target Ravi Bangoria
2016-12-05 15:56 ` [PATCH v8 2/3] perf annotate: Support jump instruction with target as second operand Ravi Bangoria
2016-12-06 6:08 ` Ravi Bangoria [this message]
2016-12-13 16:23 ` Arnaldo Carvalho de Melo
2016-12-20 19:25 ` [tip:perf/urgent] " tip-bot for Ravi Bangoria
2016-12-05 15:56 ` [PATCH v8 3/3] perf annotate: Fix jump target outside of function address range Ravi Bangoria
2016-12-13 16:27 ` Arnaldo Carvalho de Melo
2016-12-20 19:26 ` [tip:perf/urgent] " tip-bot for Ravi Bangoria
2016-12-05 19:22 ` [PATCH v8 1/3] perf annotate: Show raw form for jump instruction with indirect target Arnaldo Carvalho de Melo
2016-12-05 20:21 ` Arnaldo Carvalho de Melo
2016-12-05 20:31 ` Arnaldo Carvalho de Melo
2016-12-06 8:30 ` [tip:perf/core] " tip-bot for Ravi Bangoria
2016-12-13 16:15 ` [PATCH v8 1/3] " Ravi Bangoria
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=584655DC.5030502@linux.vnet.ibm.com \
--to=ravi.bangoria@linux.vnet.ibm.com \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=chris.ryder@arm.com \
--cc=kim.phillips@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=markus@trippelsdorf.de \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=naveen.n.rao@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=treeze.taeung@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.