perf annotate csky: Add perf annotate support
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 perf annotate csky: Add perf annotate support
This patch add basic arch initialization and instruction associate support for csky.
perf annotate --stdio2
Samples: 161 of event 'cpu-clock:pppH', 4000 Hz, Event count (approx.):
40250000, [percent: local period]test_4() /usr/lib/perf-test/callchain_test
Percent
Disassembly of section .text:
00008420 <test_4>:
test_4():
subi sp, sp, 4
st.w r8, (sp, 0x0)
mov r8, sp
subi sp, sp, 8
subi r3, r8, 4
movi r2, 0
st.w r2, (r3, 0x0)
↓ br 2e
100.00 14: subi r3, r8, 4
ld.w r2, (r3, 0x0)
subi r3, r8, 8
st.w r2, (r3, 0x0)
subi r3, r8, 4
ld.w r3, (r3, 0x0)
addi r2, r3, 1
subi r3, r8, 4
st.w r2, (r3, 0x0)
2e: subi r3, r8, 4
ld.w r2, (r3, 0x0)
lrw r3, 0x98967f // 8598 <main+0x28> cmplt r3, r2
↑ bf 14
mov r0, r0
mov r0, r0
mov sp, r8
ld.w r8, (sp, 0x0)
addi sp, sp, 4
← rts
--- tools/perf/arch/csky/annotate/instructions.c | 48 ++++++++++++++++++++++++++++ tools/perf/util/annotate.c | 5 +++ 2 files changed, 53 insertions(+) create mode 100644 tools/perf/arch/csky/annotate/instructions.c
tools/perf/arch/csky/annotate/instructions.c new file +48 -0
@@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. + +#include <linux/compiler.h> + +static struct ins_ops *csky__associate_ins_ops (struct arch *arch, +const char *name) +{ +struct ins_ops *ops =NULL ; + +/* catch all kind of jumps */ +if (!strcmp (name,"bt" ) || + !strcmp (name,"bf" ) || + !strcmp (name,"bez" ) || + !strcmp (name,"bnez" ) || + !strcmp (name,"bnezad" ) || + !strcmp (name,"bhsz" ) || + !strcmp (name,"bhz" ) || + !strcmp (name,"blsz" ) || + !strcmp (name,"blz" ) || + !strcmp (name,"br" ) || + !strcmp (name,"jmpi" ) || + !strcmp (name,"jmp" )) + ops = &jump_ops; + +/* catch function call */ +if (!strcmp (name,"bsr" ) || + !strcmp (name,"jsri" ) || + !strcmp (name,"jsr" )) + ops = &call_ops; + +/* catch function return */ +if (!strcmp (name,"rts" )) + ops = &ret_ops; + +if (ops) +arch__associate_ins_ops (arch, name, ops); +return ops; +} + +static int csky__annotate_init (struct arch *arch,char *cpuid__maybe_unused ) +{ + arch->initialized = true; + arch->objdump.comment_char ='/' ; + arch->associate_instruction_ops = csky__associate_ins_ops; + +return 0 ; +}
tools/perf/util/annotate.c +5 -0
@@ -144,6 +144,7 @@ static int arch__associate_ins_ops(struct arch* arch, const char *name, struct i#include "arch/arc/annotate/instructions.c" #include "arch/arm/annotate/instructions.c" #include "arch/arm64/annotate/instructions.c" +#include "arch/csky/annotate/instructions.c" #include "arch/x86/annotate/instructions.c" #include "arch/powerpc/annotate/instructions.c" #include "arch/s390/annotate/instructions.c"
@@ -163,6 +164,10 @@ static struct arch architectures[] = { .init = arm64__annotate_init, }, { + .name = "csky", + .init = csky__annotate_init, + }, + { .name = "x86", .init = x86__annotate_init, .instructions = x86__instructions,
Signature · 1 line
2.7.4
Guo Ren
maintainerThx Mao,
Approved!
Best Regards
Guo Ren
Quoted 137 lines · Mao Han
This patch add basic arch initialization and instruction associate support for csky.
perf annotate --stdio2
Samples: 161 of event 'cpu-clock:pppH', 4000 Hz, Event count (approx.):
40250000, [percent: local period]test_4()/usr/lib/perf-test/callchain_test
PercentDisassembly of section .text: 00008420 <test_4>: test_4(): subi sp, sp, 4 st.w r8, (sp, 0x0) mov r8, sp subi sp, sp, 8 subi r3, r8, 4 movi r2, 0 st.w r2, (r3, 0x0) ↓ br 2e 100.00 14: subi r3, r8, 4 ld.w r2, (r3, 0x0) subi r3, r8, 8 st.w r2, (r3, 0x0) subi r3, r8, 4 ld.w r3, (r3, 0x0) addi r2, r3, 1 subi r3, r8, 4 st.w r2, (r3, 0x0) 2e: subi r3, r8, 4 ld.w r2, (r3, 0x0) lrw r3, 0x98967f // 8598 <main+0x28>cmplt r3, r2
↑ bf 14
mov r0, r0
mov r0, r0
mov sp, r8
ld.w r8, (sp,0x0)
addi sp, sp, 4
← rtsSigned-off-by Mao Han <[email protected]>Cc Guo Ren <[email protected]>Cc Peter Zijlstra <[email protected]>Cc Ingo Molnar <[email protected]>Cc Arnaldo Carvalho de Melo <[email protected]>Cc Alexander Shishkin <[email protected]>Cc Jiri Olsa <[email protected]>Cc Namhyung Kim <[email protected]>--- tools/perf/arch/csky/annotate/instructions.c | 48 ++++++++++++++++++++++++++++ tools/perf/util/annotate.c | 5 +++ 2 files changed, 53 insertions(+) create mode 100644 tools/perf/arch/csky/annotate/instructions.ctools/perf/arch/csky/annotate/instructions.c new file +48
-0@@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. + +#include <linux/compiler.h> + +static struct ins_ops *csky__associate_ins_ops (struct arch *arch, +const char *name) +{ +struct ins_ops *ops =NULL ; + +/* catch all kind of jumps */ +if (!strcmp (name,"bt" ) || + !strcmp (name,"bf" ) || + !strcmp (name,"bez" ) || + !strcmp (name,"bnez" ) || + !strcmp (name,"bnezad" ) || + !strcmp (name,"bhsz" ) || + !strcmp (name,"bhz" ) || + !strcmp (name,"blsz" ) || + !strcmp (name,"blz" ) || + !strcmp (name,"br" ) || + !strcmp (name,"jmpi" ) || + !strcmp (name,"jmp" )) + ops = &jump_ops; + +/* catch function call */ +if (!strcmp (name,"bsr" ) || + !strcmp (name,"jsri" ) || + !strcmp (name,"jsr" )) + ops = &call_ops; + +/* catch function return */ +if (!strcmp (name,"rts" )) + ops = &ret_ops; + +if (ops) +arch__associate_ins_ops (arch, name, ops); +return ops; +} + +static int csky__annotate_init (struct arch *arch,char *cpuid__maybe_unused ) +{ + arch->initialized = true; + arch->objdump.comment_char ='/' ; + arch->associate_instruction_ops = csky__associate_ins_ops; + +return 0 ; +}tools/perf/util/annotate.c +5
-1@@ -144,6 +144,7 @@ static int arch__associate_ins_ops(struct arch* arch, const char *name, struct i#include "arch/arc/annotate/instructions.c" #include "arch/arm/annotate/instructions.c" #include "arch/arm64/annotate/instructions.c" +#include "arch/csky/annotate/instructions.c" #include "arch/x86/annotate/instructions.c" #include "arch/powerpc/annotate/instructions.c" #include "arch/s390/annotate/instructions.c" @@ -163,6 +164,10 @@ static struct arch architectures[] = { .init = arm64__annotate_init, }, { + .name = "csky", + .init = csky__annotate_init, + }, + { .name = "x86", .init = x86__annotate_init, .instructions = x86__instructions, --2.7.4
Signature · 4 lines
Best Regards Guo Ren ML: https://lore.kernel.org/linux-csky/
Em Wed, Jun 26, 2019 at 02:56:55PM +0800, Guo Ren escreveu:
Quoted 3 lines
Thx Mao,
Approved!
I guess I can take this as a:
Or would this better be:
?
- Arnaldo
Quoted 148 lines
Best Regards
Guo RenQuoted 137 lines · Mao Han
This patch add basic arch initialization and instruction associate support for csky.
perf annotate --stdio2
Samples: 161 of event 'cpu-clock:pppH', 4000 Hz, Event count (approx.):
40250000, [percent: local period]test_4()/usr/lib/perf-test/callchain_test
PercentDisassembly of section .text: 00008420 <test_4>: test_4(): subi sp, sp, 4 st.w r8, (sp, 0x0) mov r8, sp subi sp, sp, 8 subi r3, r8, 4 movi r2, 0 st.w r2, (r3, 0x0) ↓ br 2e 100.00 14: subi r3, r8, 4 ld.w r2, (r3, 0x0) subi r3, r8, 8 st.w r2, (r3, 0x0) subi r3, r8, 4 ld.w r3, (r3, 0x0) addi r2, r3, 1 subi r3, r8, 4 st.w r2, (r3, 0x0) 2e: subi r3, r8, 4 ld.w r2, (r3, 0x0) lrw r3, 0x98967f // 8598 <main+0x28>cmplt r3, r2
↑ bf 14
mov r0, r0
mov r0, r0
mov sp, r8
ld.w r8, (sp,0x0)
addi sp, sp, 4
← rtsSigned-off-by Mao Han <[email protected]>Cc Guo Ren <[email protected]>Cc Peter Zijlstra <[email protected]>Cc Ingo Molnar <[email protected]>Cc Arnaldo Carvalho de Melo <[email protected]>Cc Alexander Shishkin <[email protected]>Cc Jiri Olsa <[email protected]>Cc Namhyung Kim <[email protected]>--- tools/perf/arch/csky/annotate/instructions.c | 48 ++++++++++++++++++++++++++++ tools/perf/util/annotate.c | 5 +++ 2 files changed, 53 insertions(+) create mode 100644 tools/perf/arch/csky/annotate/instructions.ctools/perf/arch/csky/annotate/instructions.c new file +48
-0@@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. + +#include <linux/compiler.h> + +static struct ins_ops *csky__associate_ins_ops (struct arch *arch, +const char *name) +{ +struct ins_ops *ops =NULL ; + +/* catch all kind of jumps */ +if (!strcmp (name,"bt" ) || + !strcmp (name,"bf" ) || + !strcmp (name,"bez" ) || + !strcmp (name,"bnez" ) || + !strcmp (name,"bnezad" ) || + !strcmp (name,"bhsz" ) || + !strcmp (name,"bhz" ) || + !strcmp (name,"blsz" ) || + !strcmp (name,"blz" ) || + !strcmp (name,"br" ) || + !strcmp (name,"jmpi" ) || + !strcmp (name,"jmp" )) + ops = &jump_ops; + +/* catch function call */ +if (!strcmp (name,"bsr" ) || + !strcmp (name,"jsri" ) || + !strcmp (name,"jsr" )) + ops = &call_ops; + +/* catch function return */ +if (!strcmp (name,"rts" )) + ops = &ret_ops; + +if (ops) +arch__associate_ins_ops (arch, name, ops); +return ops; +} + +static int csky__annotate_init (struct arch *arch,char *cpuid__maybe_unused ) +{ + arch->initialized = true; + arch->objdump.comment_char ='/' ; + arch->associate_instruction_ops = csky__associate_ins_ops; + +return 0 ; +}tools/perf/util/annotate.c +5
-1@@ -144,6 +144,7 @@ static int arch__associate_ins_ops(struct arch* arch, const char *name, struct i#include "arch/arc/annotate/instructions.c" #include "arch/arm/annotate/instructions.c" #include "arch/arm64/annotate/instructions.c" +#include "arch/csky/annotate/instructions.c" #include "arch/x86/annotate/instructions.c" #include "arch/powerpc/annotate/instructions.c" #include "arch/s390/annotate/instructions.c" @@ -163,6 +164,10 @@ static struct arch architectures[] = { .init = arm64__annotate_init, }, { + .name = "csky", + .init = csky__annotate_init, + }, + { .name = "x86", .init = x86__annotate_init, .instructions = x86__instructions, --2.7.4
Signature · 4 lines
Best Regards Guo Ren ML: https://lore.kernel.org/linux-csky/
Signature · 1 line
- Arnaldo
Guo Ren
maintainerQuoted 6 lines · Arnaldo Carvalho de Melo
Em Wed, Jun 26, 2019 at 02:56:55PM +0800, Guo Ren escreveu:
Quoted 3 lines
Thx Mao,
Approved!
Quoted 7 lines
I guess I can take this as a:
Acked-by Guo Ren <[email protected]>Or would this better be:
Reviewed-by Guo Ren <[email protected]>
Reviewed-by is OK.
Thx for help to merge.
Best regards
Guo Ren
tip-bot for Mao Han
merge bot[tip:perf/core] perf annotate: Add csky support
In reply to Mao Hanperf annotate: Add csky support
Commit-ID: aa23aa55166c2865ac430168c4b9d405cf8c6980 Gitweb: https://git.kernel.org/tip/aa23aa55166c2865ac430168c4b9d405cf8c6980 Author: Mao Han <[email protected]> AuthorDate: Wed, 26 Jun 2019 14:52:19 +0800 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 1 Jul 2019 22:50:41 -0300
perf annotate: Add csky support
This patch add basic arch initialization and instruction associate support for the csky CPU architecture.
E.g.:
$ perf annotate --stdio2 Samples: 161 of event 'cpu-clock:pppH', 4000 Hz, Event count (approx.): 40250000, [percent: local period] test_4() /usr/lib/perf-test/callchain_test Percent
Disassembly of section .text:
00008420 <test_4>:
test_4():
subi sp, sp, 4
st.w r8, (sp, 0x0)
mov r8, sp
subi sp, sp, 8
subi r3, r8, 4
movi r2, 0
st.w r2, (r3, 0x0)
↓ br 2e
100.00 14: subi r3, r8, 4
ld.w r2, (r3, 0x0)
subi r3, r8, 8
st.w r2, (r3, 0x0)
subi r3, r8, 4
ld.w r3, (r3, 0x0)
addi r2, r3, 1
subi r3, r8, 4
st.w r2, (r3, 0x0)
2e: subi r3, r8, 4
ld.w r2, (r3, 0x0)
lrw r3, 0x98967f // 8598 <main+0x28> cmplt r3, r2
↑ bf 14
mov r0, r0
mov r0, r0
mov sp, r8
ld.w r8, (sp, 0x0)
addi sp, sp, 4
← rts
--- tools/perf/arch/csky/annotate/instructions.c | 48 ++++++++++++++++++++++++++++ tools/perf/util/annotate.c | 5 +++ 2 files changed, 53 insertions(+)
tools/perf/arch/csky/annotate/instructions.c new file +48 -0
@@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. + +#include <linux/compiler.h> + +static struct ins_ops *csky__associate_ins_ops (struct arch *arch, +const char *name) +{ +struct ins_ops *ops =NULL ; + +/* catch all kind of jumps */ +if (!strcmp (name,"bt" ) || + !strcmp (name,"bf" ) || + !strcmp (name,"bez" ) || + !strcmp (name,"bnez" ) || + !strcmp (name,"bnezad" ) || + !strcmp (name,"bhsz" ) || + !strcmp (name,"bhz" ) || + !strcmp (name,"blsz" ) || + !strcmp (name,"blz" ) || + !strcmp (name,"br" ) || + !strcmp (name,"jmpi" ) || + !strcmp (name,"jmp" )) + ops = &jump_ops; + +/* catch function call */ +if (!strcmp (name,"bsr" ) || + !strcmp (name,"jsri" ) || + !strcmp (name,"jsr" )) + ops = &call_ops; + +/* catch function return */ +if (!strcmp (name,"rts" )) + ops = &ret_ops; + +if (ops) +arch__associate_ins_ops (arch, name, ops); +return ops; +} + +static int csky__annotate_init (struct arch *arch,char *cpuid__maybe_unused ) +{ + arch->initialized = true; + arch->objdump.comment_char ='/' ; + arch->associate_instruction_ops = csky__associate_ins_ops; + +return 0 ; +}
tools/perf/util/annotate.c +5 -0
@@ -145,6 +145,7 @@ static int arch__associate_ins_ops(struct arch* arch, const char *name, struct i#include "arch/arc/annotate/instructions.c" #include "arch/arm/annotate/instructions.c" #include "arch/arm64/annotate/instructions.c" +#include "arch/csky/annotate/instructions.c" #include "arch/x86/annotate/instructions.c" #include "arch/powerpc/annotate/instructions.c" #include "arch/s390/annotate/instructions.c"
@@ -163,6 +164,10 @@ static struct arch architectures[] = { .name = "arm64", .init = arm64__annotate_init, }, + { + .name = "csky", + .init = csky__annotate_init, + }, { .name = "x86", .init = x86__annotate_init,