Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Mao Han and committed by
Arnaldo Carvalho de Melo
aa23aa55 e3a94273

+53
+48
tools/perf/arch/csky/annotate/instructions.c
··· 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 + }
+5
tools/perf/util/annotate.c
··· 145 145 #include "arch/arc/annotate/instructions.c" 146 146 #include "arch/arm/annotate/instructions.c" 147 147 #include "arch/arm64/annotate/instructions.c" 148 + #include "arch/csky/annotate/instructions.c" 148 149 #include "arch/x86/annotate/instructions.c" 149 150 #include "arch/powerpc/annotate/instructions.c" 150 151 #include "arch/s390/annotate/instructions.c" ··· 163 162 { 164 163 .name = "arm64", 165 164 .init = arm64__annotate_init, 165 + }, 166 + { 167 + .name = "csky", 168 + .init = csky__annotate_init, 166 169 }, 167 170 { 168 171 .name = "x86",