Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / testing / selftests / ftrace / test.d / kprobe / kprobe_args_syntax.tc
blob8f1292ad80ff15d6341513782ce61c90f8b0cce7
1 #!/bin/sh
2 # SPDX-License-Identifier: GPL-2.0
3 # description: Kprobe event argument syntax
4 # requires: kprobe_events "x8/16/32/64":README
6 PROBEFUNC="vfs_read"
7 GOODREG=
8 BADREG=
9 GOODSYM="_sdata"
10 if ! grep -qw ${GOODSYM} /proc/kallsyms ; then
11 GOODSYM=$PROBEFUNC
13 BADSYM="deaqswdefr"
14 SYMADDR=0x`grep -w ${GOODSYM} /proc/kallsyms | cut -f 1 -d " "`
15 GOODTYPE="x16"
16 BADTYPE="y16"
18 case `uname -m` in
19 x86_64|i[3456]86)
20 GOODREG=%ax
21 BADREG=%ex
23 aarch64)
24 GOODREG=%x0
25 BADREG=%ax
27 arm*)
28 GOODREG=%r0
29 BADREG=%ax
31 ppc*)
32 GOODREG=%r3
33 BADREG=%msr
35 s390*)
36 GOODREG=%r2
37 BADREG=%s2
39 mips*)
40 GOODREG=%r4
41 BADREG=%r12
43 loongarch*)
44 GOODREG=%r4
45 BADREG=%r12
47 riscv*)
48 GOODREG=%a0
49 BADREG=%a8
52 echo "Please implement other architecture here"
53 exit_untested
54 esac
56 test_goodarg() # Good-args
58 while [ "$1" ]; do
59 echo "p ${PROBEFUNC} $1" > kprobe_events
60 shift 1
61 done;
64 test_badarg() # Bad-args
66 while [ "$1" ]; do
67 ! echo "p ${PROBEFUNC} $1" > kprobe_events
68 shift 1
69 done;
72 echo > kprobe_events
74 : "Register access"
75 test_goodarg ${GOODREG}
76 test_badarg ${BADREG}
78 : "Symbol access"
79 test_goodarg "@${GOODSYM}" "@${SYMADDR}" "@${GOODSYM}+10" "@${GOODSYM}-10"
80 test_badarg "@" "@${BADSYM}" "@${GOODSYM}*10" "@${GOODSYM}/10" \
81 "@${GOODSYM}%10" "@${GOODSYM}&10" "@${GOODSYM}|10"
83 : "Stack access"
84 test_goodarg "\$stack" "\$stack0" "\$stack1"
85 test_badarg "\$stackp" "\$stack0+10" "\$stack1-10"
87 : "Retval access"
88 echo "r ${PROBEFUNC} \$retval" > kprobe_events
89 ! echo "p ${PROBEFUNC} \$retval" > kprobe_events
91 # $comm was introduced in 4.8, older kernels reject it.
92 if grep -A1 "fetcharg:" README | grep -q '\$comm' ; then
93 : "Comm access"
94 test_goodarg "\$comm"
97 : "Indirect memory access"
98 test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \
99 "+0(\$stack1)" "+10(@${GOODSYM}-10)" "+0(+10(+20(\$stack)))"
100 test_badarg "+(${GOODREG})" "(${GOODREG}+10)" "-(${GOODREG})" "(${GOODREG})" \
101 "+10(\$comm)" "+0(${GOODREG})+10"
103 : "Name assignment"
104 test_goodarg "varname=${GOODREG}"
105 test_badarg "varname=varname2=${GOODREG}"
107 : "Type syntax"
108 test_goodarg "${GOODREG}:${GOODTYPE}"
109 test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \
110 "${GOODTYPE}:${GOODREG}"
112 : "Combination check"
114 test_goodarg "\$comm:string" "+0(\$stack):string"
115 test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string"