All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: "Clark Williams" <williams@redhat.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	"Martin Liška" <mliska@suse.cz>, "Jiri Olsa" <jolsa@redhat.com>,
	"Arnaldo Carvalho de Melo" <acme@redhat.com>
Subject: [PATCH 01/13] perf annotate: Properly interpret indirect call
Date: Mon,  3 Sep 2018 11:52:12 -0300	[thread overview]
Message-ID: <20180903145224.12318-2-acme@kernel.org> (raw)
In-Reply-To: <20180903145224.12318-1-acme@kernel.org>

From: Martin Liška <mliska@suse.cz>

The patch changes the parsing of:

	callq  *0x8(%rbx)

from:

  0.26 │     → callq  *8

to:

  0.26 │     → callq  *0x8(%rbx)

in this case an address is followed by a register, thus one can't parse
only the address.

Committer testing:

1) run 'perf record sleep 10'
2) before applying the patch, run:

     perf annotate --stdio2 > /tmp/before

3) after applying the patch, run:

     perf annotate --stdio2 > /tmp/after

4) diff /tmp/before /tmp/after:
  --- /tmp/before 2018-08-28 11:16:03.238384143 -0300
  +++ /tmp/after  2018-08-28 11:15:39.335341042 -0300
  @@ -13274,7 +13274,7 @@
                ↓ jle    128
                  hash_value = hash_table->hash_func (key);
                  mov    0x8(%rsp),%rdi
  -  0.91       → callq  *30
  +  0.91       → callq  *0x30(%r12)
                  mov    $0x2,%r8d
                  cmp    $0x2,%eax
                  node_hash = hash_table->hashes[node_index];
  @@ -13848,7 +13848,7 @@
                   mov    %r14,%rdi
                   sub    %rbx,%r13
                   mov    %r13,%rdx
  -              → callq  *38
  +              → callq  *0x38(%r15)
                   cmp    %rax,%r13
     1.91        ↓ je     240
            1b4:   mov    $0xffffffff,%r13d
  @@ -14026,7 +14026,7 @@
                   mov    %rcx,-0x500(%rbp)
                   mov    %r15,%rsi
                   mov    %r14,%rdi
  -              → callq  *38
  +              → callq  *0x38(%rax)
                   mov    -0x500(%rbp),%rcx
                   cmp    %rax,%rcx
                 ↓ jne    9b0
<SNIP tons of other such cases>

Signed-off-by: Martin Liška <mliska@suse.cz>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Kim Phillips <kim.phillips@arm.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/bd1f3932-be2b-85f9-7582-111ee0a43b07@suse.cz
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/annotate.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 20061cf42288..e62b69ea87cd 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -246,8 +246,14 @@ static int call__parse(struct arch *arch, struct ins_operands *ops, struct map_s
 
 indirect_call:
 	tok = strchr(endptr, '*');
-	if (tok != NULL)
-		ops->target.addr = strtoull(tok + 1, NULL, 16);
+	if (tok != NULL) {
+		endptr++;
+
+		/* Indirect call can use a non-rip register and offset: callq  *0x8(%rbx).
+		 * Do not parse such instruction.  */
+		if (strstr(endptr, "(%r") == NULL)
+			ops->target.addr = strtoull(endptr, NULL, 16);
+	}
 	goto find_target;
 }
 
-- 
2.14.4

  reply	other threads:[~2018-09-03 14:52 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-03 14:52 [GIT PULL 00/13] perf/urgent fixes Arnaldo Carvalho de Melo
2018-09-03 14:52 ` Arnaldo Carvalho de Melo
2018-09-03 14:52 ` Arnaldo Carvalho de Melo
2018-09-03 14:52 ` Arnaldo Carvalho de Melo [this message]
2018-09-03 14:52 ` [PATCH 02/13] perf tests: Add breakpoint modify tests Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 03/13] perf/hw_breakpoint: Modify breakpoint even if the new attr has disabled set Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 04/13] perf/hw_breakpoint: Remove superfluous bp->attr.disabled = 0 Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 05/13] perf/hw_breakpoint: Enable breakpoint in modify_user_hw_breakpoint Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 06/13] perf/hw_breakpoint: Simplify breakpoint enable in perf_event_modify_breakpoint Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 07/13] perf arm64: Fix include path for asm-generic/unistd.h Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 08/13] perf evsel: Fix potential null pointer dereference in perf_evsel__new_idx() Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 09/13] perf tools: Streamline bpf examples and headers installation Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 10/13] perf util: Fix bad memory access in trace info Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 11/13] perf event-parse: Use fixed size string for comms Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 12/13] perf probe powerpc: Ignore SyS symbols irrespective of endianness Arnaldo Carvalho de Melo
2018-09-03 14:52 ` [PATCH 13/13] perf annotate: Fix parsing aarch64 branch instructions after objdump update Arnaldo Carvalho de Melo
2018-09-03 14:52   ` Arnaldo Carvalho de Melo
2018-09-09 19:39 ` [GIT PULL 00/13] perf/urgent fixes Ingo Molnar
2018-09-09 19:39   ` Ingo Molnar
2018-09-09 19:39   ` Ingo Molnar

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=20180903145224.12318-2-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mliska@suse.cz \
    --cc=williams@redhat.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.