All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Kim Phillips <kim.phillips@arm.com>,
	Chris Ryder <chris.ryder@arm.com>,
	Pawel Moll <pawel.moll@arm.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	linux-perf-users@vger.kernel.org,
	Will Deacon <will.deacon@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	linux-kernel@vger.kernel.org,
	Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Subject: Re: [PATCH 2/2] perf annotate: AArch64 support
Date: Sat, 3 Dec 2016 13:38:37 +0530	[thread overview]
Message-ID: <58427D85.1010705@linux.vnet.ibm.com> (raw)
In-Reply-To: <20161130092344.012e18e3e623bea395162f95@arm.com>

Hi,

Sorry, I replied little late. I see you already included patch in perf/core.

I've tested this patch on powerpc with perf.data and vmlinux shared by Kim.
Looks good to me.

You can add my Tested-by.

-Ravi.


On Wednesday 30 November 2016 08:53 PM, Kim Phillips wrote:
> This is a regex converted version from the original:
>
> 	https://lkml.org/lkml/2016/5/19/461
>
> Add basic support to recognise AArch64 assembly. This allows perf to
> identify AArch64 instructions that branch to other parts within the
> same function, thereby properly annotating them.
>
> Rebased onto new cross-arch annotation bits:
>
> 	https://lkml.org/lkml/2016/11/25/546
>
> Sample output:
>
> security_file_permission  vmlinux
>   5.80 │    ← ret                                                            ▒
>        │70:   ldr    w0, [x21,#68]                                           ▒
>   4.44 │    ↓ tbnz   d0                                                      ▒
>        │      mov    w0, #0x24                       // #36                  ▒
>   1.37 │      ands   w0, w22, w0                                             ▒
>        │    ↑ b.eq   60                                                      ▒
>   1.37 │    ↓ tbnz   e4                                                      ▒
>        │      mov    w19, #0x20000                   // #131072              ▒
>   1.02 │    ↓ tbz    ec                                                      ▒
>        │90:┌─→ldr    x3, [x21,#24]                                           ▒
>   1.37 │   │  add    x21, x21, #0x10                                         ▒
>        │   │  mov    w2, w19                                                 ▒
>   1.02 │   │  mov    x0, x21                                                 ▒
>        │   │  mov    x1, x3                                                  ▒
>   1.71 │   │  ldr    x20, [x3,#48]                                           ▒
>        │   │→ bl     __fsnotify_parent                                       ▒
>   0.68 │   │↑ cbnz   60                                                      ▒
>        │   │  mov    x2, x21                                                 ▒
>   1.37 │   │  mov    w1, w19                                                 ▒
>        │   │  mov    x0, x20                                                 ▒
>   0.68 │   │  mov    w5, #0x0                        // #0                   ▒
>        │   │  mov    x4, #0x0                        // #0                   ▒
>   1.71 │   │  mov    w3, #0x1                        // #1                   ▒
>        │   │→ bl     fsnotify                                                ▒
>   1.37 │   │↑ b      60                                                      ▒
>        │d0:│  mov    w0, #0x0                        // #0                   ▒
>        │   │  ldp    x19, x20, [sp,#16]                                      ▒
>        │   │  ldp    x21, x22, [sp,#32]                                      ▒
>        │   │  ldp    x29, x30, [sp],#48                                      ▒
>        │   │← ret                                                            ▒
>        │e4:│  mov    w19, #0x10000                   // #65536               ▒
>        │   └──b      90                                                      ◆
>        │ec:   brk    #0x800                                                  ▒
> Press 'h' for help on key bindings
>
> Signed-off-by: Chris Ryder <chris.ryder@arm.com>
> Signed-off-by: Kim Phillips <kim.phillips@arm.com>
> Cc: Pawel Moll <pawel.moll@arm.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
> Cc: linux-perf-users@vger.kernel.org
> Cc: Will Deacon <will.deacon@arm.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> ---
>  tools/perf/arch/arm64/annotate/instructions.c | 62 +++++++++++++++++++++++++++
>  tools/perf/util/annotate.c                    |  5 +++
>  2 files changed, 67 insertions(+)
>  create mode 100644 tools/perf/arch/arm64/annotate/instructions.c
>
> diff --git a/tools/perf/arch/arm64/annotate/instructions.c b/tools/perf/arch/arm64/annotate/instructions.c
> new file mode 100644
> index 0000000..44eafd6
> --- /dev/null
> +++ b/tools/perf/arch/arm64/annotate/instructions.c
> @@ -0,0 +1,62 @@
> +#include <sys/types.h>
> +#include <regex.h>
> +
> +struct arm64_annotate {
> +	regex_t call_insn,
> +		jump_insn;
> +};
> +
> +static struct ins_ops *arm64__associate_instruction_ops(struct arch *arch, const char *name)
> +{
> +	struct arm64_annotate *arm = arch->priv;
> +	struct ins_ops *ops;
> +	regmatch_t match[2];
> +
> +	if (!regexec(&arm->jump_insn, name, 2, match, 0))
> +		ops = &jump_ops;
> +	else if (!regexec(&arm->call_insn, name, 2, match, 0))
> +		ops = &call_ops;
> +	else if (!strcmp(name, "ret"))
> +		ops = &ret_ops;
> +	else
> +		return NULL;
> +
> +	arch__associate_ins_ops(arch, name, ops);
> +	return ops;
> +}
> +
> +static int arm64__annotate_init(struct arch *arch)
> +{
> +	struct arm64_annotate *arm;
> +	int err;
> +
> +	if (arch->initialized)
> +		return 0;
> +
> +	arm = zalloc(sizeof(*arm));
> +	if (!arm)
> +		return -1;
> +
> +	/* bl, blr */
> +	err = regcomp(&arm->call_insn, "^blr?$", REG_EXTENDED);
> +	if (err)
> +		goto out_free_arm;
> +	/* b, b.cond, br, cbz/cbnz, tbz/tbnz */
> +	err = regcomp(&arm->jump_insn, "^[ct]?br?\\.?(cc|cs|eq|ge|gt|hi|le|ls|lt|mi|ne|pl)?n?z?$",
> +		      REG_EXTENDED);
> +	if (err)
> +		goto out_free_call;
> +
> +	arch->initialized = true;
> +	arch->priv	  = arm;
> +	arch->associate_instruction_ops   = arm64__associate_instruction_ops;
> +	arch->objdump.comment_char	  = ';';
> +	arch->objdump.skip_functions_char = '+';
> +	return 0;
> +
> +out_free_call:
> +	regfree(&arm->call_insn);
> +out_free_arm:
> +	free(arm);
> +	return -1;
> +}
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index 3e34ee0..76b8bbf 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -105,6 +105,7 @@ static int arch__associate_ins_ops(struct arch* arch, const char *name, struct i
>  }
>
>  #include "arch/arm/annotate/instructions.c"
> +#include "arch/arm64/annotate/instructions.c"
>  #include "arch/x86/annotate/instructions.c"
>  #include "arch/powerpc/annotate/instructions.c"
>
> @@ -114,6 +115,10 @@ static struct arch architectures[] = {
>  		.init = arm__annotate_init,
>  	},
>  	{
> +		.name = "arm64",
> +		.init = arm64__annotate_init,
> +	},
> +	{
>  		.name = "x86",
>  		.instructions = x86__instructions,
>  		.nr_instructions = ARRAY_SIZE(x86__instructions),

      parent reply	other threads:[~2016-12-03  8:08 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-30 15:23 [PATCH 2/2] perf annotate: AArch64 support Kim Phillips
2016-11-30 15:23 ` Kim Phillips
2016-12-02 10:44 ` [tip:perf/core] " tip-bot for Kim Phillips
2016-12-03  8:08 ` Ravi Bangoria [this message]

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=58427D85.1010705@linux.vnet.ibm.com \
    --to=ravi.bangoria@linux.vnet.ibm.com \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=chris.ryder@arm.com \
    --cc=kim.phillips@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=pawel.moll@arm.com \
    --cc=peterz@infradead.org \
    --cc=will.deacon@arm.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.