lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Sat, 3 Dec 2016 13:38:37 +0530
From:   Ravi Bangoria <ravi.bangoria@...ux.vnet.ibm.com>
To:     Arnaldo Carvalho de Melo <acme@...nel.org>
Cc:     Kim Phillips <kim.phillips@....com>,
        Chris Ryder <chris.ryder@....com>,
        Pawel Moll <pawel.moll@....com>,
        Peter Zijlstra <peterz@...radead.org>,
        Ingo Molnar <mingo@...hat.com>,
        Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
        linux-perf-users@...r.kernel.org,
        Will Deacon <will.deacon@....com>,
        Mark Rutland <mark.rutland@....com>,
        linux-kernel@...r.kernel.org,
        Ravi Bangoria <ravi.bangoria@...ux.vnet.ibm.com>
Subject: Re: [PATCH 2/2] perf annotate: AArch64 support

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@....com>
> Signed-off-by: Kim Phillips <kim.phillips@....com>
> Cc: Pawel Moll <pawel.moll@....com>
> Cc: Peter Zijlstra <peterz@...radead.org>
> Cc: Ingo Molnar <mingo@...hat.com>
> Cc: Arnaldo Carvalho de Melo <acme@...nel.org>
> Cc: Alexander Shishkin <alexander.shishkin@...ux.intel.com>
> Cc: linux-perf-users@...r.kernel.org
> Cc: Will Deacon <will.deacon@....com>
> Cc: Mark Rutland <mark.rutland@....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),

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ