diff options
author | Mao Han <han_mao@c-sky.com> | 2019-06-26 02:52:19 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-07-01 21:50:41 -0400 |
commit | aa23aa55166c2865ac430168c4b9d405cf8c6980 (patch) | |
tree | 900d9ede728282220bf39faf7dcee2b0b0126ee3 /tools | |
parent | e3a9427323a53ceee540276a74af7706f350d052 (diff) |
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
Signed-off-by: Mao Han <han_mao@c-sky.com>
Acked-by: Guo Ren <guoren@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: linux-csky@vger.kernel.org
Link: http://lkml.kernel.org/r/d874d7782d9acdad5d98f2f5c4a6fb26fbe41c5d.1561531557.git.han_mao@c-sky.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/arch/csky/annotate/instructions.c | 48 | ||||
-rw-r--r-- | tools/perf/util/annotate.c | 5 |
2 files changed, 53 insertions, 0 deletions
diff --git a/tools/perf/arch/csky/annotate/instructions.c b/tools/perf/arch/csky/annotate/instructions.c new file mode 100644 index 000000000000..5337bfb7d5fc --- /dev/null +++ b/tools/perf/arch/csky/annotate/instructions.c | |||
@@ -0,0 +1,48 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0 | ||
2 | // Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. | ||
3 | |||
4 | #include <linux/compiler.h> | ||
5 | |||
6 | static struct ins_ops *csky__associate_ins_ops(struct arch *arch, | ||
7 | const char *name) | ||
8 | { | ||
9 | struct ins_ops *ops = NULL; | ||
10 | |||
11 | /* catch all kind of jumps */ | ||
12 | if (!strcmp(name, "bt") || | ||
13 | !strcmp(name, "bf") || | ||
14 | !strcmp(name, "bez") || | ||
15 | !strcmp(name, "bnez") || | ||
16 | !strcmp(name, "bnezad") || | ||
17 | !strcmp(name, "bhsz") || | ||
18 | !strcmp(name, "bhz") || | ||
19 | !strcmp(name, "blsz") || | ||
20 | !strcmp(name, "blz") || | ||
21 | !strcmp(name, "br") || | ||
22 | !strcmp(name, "jmpi") || | ||
23 | !strcmp(name, "jmp")) | ||
24 | ops = &jump_ops; | ||
25 | |||
26 | /* catch function call */ | ||
27 | if (!strcmp(name, "bsr") || | ||
28 | !strcmp(name, "jsri") || | ||
29 | !strcmp(name, "jsr")) | ||
30 | ops = &call_ops; | ||
31 | |||
32 | /* catch function return */ | ||
33 | if (!strcmp(name, "rts")) | ||
34 | ops = &ret_ops; | ||
35 | |||
36 | if (ops) | ||
37 | arch__associate_ins_ops(arch, name, ops); | ||
38 | return ops; | ||
39 | } | ||
40 | |||
41 | static int csky__annotate_init(struct arch *arch, char *cpuid __maybe_unused) | ||
42 | { | ||
43 | arch->initialized = true; | ||
44 | arch->objdump.comment_char = '/'; | ||
45 | arch->associate_instruction_ops = csky__associate_ins_ops; | ||
46 | |||
47 | return 0; | ||
48 | } | ||
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 2d08c4b62c63..ec7aaf31c2b2 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c | |||
@@ -145,6 +145,7 @@ static int arch__associate_ins_ops(struct arch* arch, const char *name, struct i | |||
145 | #include "arch/arc/annotate/instructions.c" | 145 | #include "arch/arc/annotate/instructions.c" |
146 | #include "arch/arm/annotate/instructions.c" | 146 | #include "arch/arm/annotate/instructions.c" |
147 | #include "arch/arm64/annotate/instructions.c" | 147 | #include "arch/arm64/annotate/instructions.c" |
148 | #include "arch/csky/annotate/instructions.c" | ||
148 | #include "arch/x86/annotate/instructions.c" | 149 | #include "arch/x86/annotate/instructions.c" |
149 | #include "arch/powerpc/annotate/instructions.c" | 150 | #include "arch/powerpc/annotate/instructions.c" |
150 | #include "arch/s390/annotate/instructions.c" | 151 | #include "arch/s390/annotate/instructions.c" |
@@ -164,6 +165,10 @@ static struct arch architectures[] = { | |||
164 | .init = arm64__annotate_init, | 165 | .init = arm64__annotate_init, |
165 | }, | 166 | }, |
166 | { | 167 | { |
168 | .name = "csky", | ||
169 | .init = csky__annotate_init, | ||
170 | }, | ||
171 | { | ||
167 | .name = "x86", | 172 | .name = "x86", |
168 | .init = x86__annotate_init, | 173 | .init = x86__annotate_init, |
169 | .instructions = x86__instructions, | 174 | .instructions = x86__instructions, |