Re: [PATCH v7 3/6] perf annotate: Show raw form for jump instruction with indirect target
From: Ravi Bangoria <hidden>
Date: 2016-10-10 13:33:08
Also in:
lkml
On Wednesday 05 October 2016 04:57 PM, Arnaldo Carvalho de Melo wrote:
Em Wed, Sep 21, 2016 at 09:17:53PM +0530, Ravi Bangoria escreveu:quoted
For jump instructions that does not include target address as direct operand, use raw value for that. This is needed for certain powerpc"use raw value" looks vague, as the example below makes is go from using a value (ffffffffffffca2c) to no value at all, i.e. the output looks backwards from what you describe, can you instead show the original disassembled line from objdump, which I think is what you're calling "raw value" in this case?
Correct, I'm showing that only -- "original disassembled line from objdump".
There is no direct operand with bctr. It uses content of register 'ctr' as target
address.
For example, objdump output:
100b8fd8: add r10,r9,r10
100b8fdc: mtctr r10
100b8fe0: bctr
- Arnaldoquoted
jump instructions that use target address in a register (such as bctr, btar, ...). Before: ld r12,32088(r12) mtctr r12 v bctr ffffffffffffca2c std r2,24(r1) addis r12,r2,-1 After: ld r12,32088(r12) mtctr r12 v bctr std r2,24(r1) addis r12,r2,-1 Suggested-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Ravi Bangoria <redacted> --- Changes in v7: - Added example in description tools/perf/util/annotate.c | 3 +++ 1 file changed, 3 insertions(+)diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 5aa72d9..1ccf26a 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c@@ -136,6 +136,9 @@ static int jump__parse(struct ins_operands *ops, struct map *map __maybe_unused) static int jump__scnprintf(struct ins *ins, char *bf, size_t size, struct ins_operands *ops) { + if (!ops->target.addr) + return ins__raw_scnprintf(ins, bf, size, ops); + return scnprintf(bf, size, "%-6.6s %" PRIx64, ins->name, ops->target.offset); }-- 2.5.5