Re: [PATCH v7 3/6] perf annotate: Show raw form for jump instruction with indirect target
From: Arnaldo Carvalho de Melo <acme@kernel.org>
Date: 2016-10-05 11:27:12
Also in:
lkml
Em Wed, Sep 21, 2016 at 09:17:53PM +0530, Ravi Bangoria escreveu:
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? - Arnaldo
quoted hunk ↗ jump to hunk
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