2 # SPDX-License-Identifier: GPL-2.0
3 # description: Kprobe event argument syntax
5 [ -f kprobe_events ] || exit_unsupported # this is configurable
7 grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue
16 if ! grep -qw ${GOODSYM} /proc/kallsyms ; then
20 SYMADDR=0x`grep -w ${GOODSYM} /proc/kallsyms | cut -f 1 -d " "`
42 echo "Please implement other architecture here"
46 test_goodarg() # Good-args
49 echo "p ${PROBEFUNC} $1" > kprobe_events
54 test_badarg() # Bad-args
57 ! echo "p ${PROBEFUNC} $1" > kprobe_events
65 test_goodarg ${GOODREG}
69 test_goodarg "@${GOODSYM}" "@${SYMADDR}" "@${GOODSYM}+10" "@${GOODSYM}-10"
70 test_badarg "@" "@${BADSYM}" "@${GOODSYM}*10" "@${GOODSYM}/10" \
71 "@${GOODSYM}%10" "@${GOODSYM}&10" "@${GOODSYM}|10"
74 test_goodarg "\$stack" "\$stack0" "\$stack1"
75 test_badarg "\$stackp" "\$stack0+10" "\$stack1-10"
78 echo "r ${PROBEFUNC} \$retval" > kprobe_events
79 ! echo "p ${PROBEFUNC} \$retval" > kprobe_events
81 # $comm was introduced in 4.8, older kernels reject it.
82 if grep -A1 "fetcharg:" README | grep -q '\$comm' ; then
87 : "Indirect memory access"
88 test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \
89 "+0(\$stack1)" "+10(@${GOODSYM}-10)" "+0(+10(+20(\$stack)))"
90 test_badarg "+(${GOODREG})" "(${GOODREG}+10)" "-(${GOODREG})" "(${GOODREG})" \
91 "+10(\$comm)" "+0(${GOODREG})+10"
94 test_goodarg "varname=${GOODREG}"
95 test_badarg "varname=varname2=${GOODREG}"
98 test_goodarg "${GOODREG}:${GOODTYPE}"
99 test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \
100 "${GOODTYPE}:${GOODREG}"
102 : "Combination check"
104 test_goodarg "\$comm:string" "+0(\$stack):string"
105 test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string"