Messages in this thread |  | | Date | Wed, 5 Oct 2016 08:28:23 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH v7 4/6] perf annotate: Support jump instruction with target as second operand |
| |
Em Wed, Sep 21, 2016 at 09:17:54PM +0530, Ravi Bangoria escreveu: > Current perf is not able to parse jump instruction when second operand > contains target address. Arch like powerpc has such instructions. For > example, 'bne cr7,0xc0000000000f6154'. > > 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)
So the above is what is parsed to generate the following? Or these aren't related?
> 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 v7: > - Added example in description > > 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 1ccf26a..a9dbac1 100644 > --- a/tools/perf/util/annotate.c > +++ b/tools/perf/util/annotate.c > @@ -122,8 +122,12 @@ bool ins__is_call(const struct ins *ins) > static int jump__parse(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); > -- > 2.5.5
|  |