[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180828141047.GG22309@kernel.org>
Date: Tue, 28 Aug 2018 11:10:47 -0300
From: Arnaldo Carvalho de Melo <acme@...nel.org>
To: Martin Liška <mliska@...e.cz>
Cc: linux-perf-users@...r.kernel.org,
lkml <linux-kernel@...r.kernel.org>, Jiri Olsa <jolsa@...hat.com>
Subject: Re: [PATCH] Properly interpret indirect call in perf annotate.
Em Mon, Aug 27, 2018 at 11:06:21AM +0200, Martin Liška escreveu:
> On 08/23/2018 04:12 PM, Arnaldo Carvalho de Melo wrote:
> > Em Thu, Aug 23, 2018 at 02:29:34PM +0200, Martin Liška escreveu:
> >> The patch changes interpretation of:
> >> callq *0x8(%rbx)
> >>
> >> from:
> >> 0.26 │ → callq *8
> >> to:
> >> 0.26 │ → callq *0x8(%rbx)
> >>
> >> in this can an address is followed by a register, thus
> >> one can't parse only address.
> >
> > Please mention one or two functions where such sequence appears, so that
> > others can reproduce your before/after more quickly,
>
> Sure, there's self-contained example on can compile (-O2) and test.
> It's following call in test function:
>
> test:
> .LFB1:
> .cfi_startproc
> movq %rdi, %rax
> subq $8, %rsp
> .cfi_def_cfa_offset 16
> movq %rsi, %rdi
> movq %rdx, %rsi
> call *8(%rax) <---- here
> cmpl $1, %eax
> adcl $-1, %eax
> addq $8, %rsp
> .cfi_def_cfa_offset 8
> ret
> .cfi_endproc
Here I'm getting:
Samples: 2K of event 'cycles:uppp', 4000 Hz, Event count (approx.): 1808551484
test /home/acme/c/perf-callq [Percent: local period]
0.17 │ mov %rdx,-0x28(%rbp)
0.58 │ mov -0x18(%rbp),%rax
7.90 │ mov 0x8(%rax),%rax
8.67 │ mov -0x28(%rbp),%rcx
│ mov -0x20(%rbp),%rdx
0.08 │ mov %rcx,%rsi
6.28 │ mov %rdx,%rdi
10.50 │ → callq *%rax
1.67 │ mov %eax,-0x4(%rbp)
11.95 │ cmpl $0x0,-0x4(%rbp)
8.14 │ ↓ je 3d
│ mov -0x4(%rbp),%eax
│ sub $0x1,%eax
│ ↓ jmp 42
│3d: mov $0x0,%eax
7.84 │42: leaveq
│ ← retq
Without the patch, will check if something changes with it.
- Arnaldo
Powered by blists - more mailing lists