Skip to content

Commit 871bef2

Browse files
mhiramatrostedt
authored andcommitted
selftests: ftrace: Add probe event argument syntax testcase
Add a testcase for probe event argument syntax which ensures the kprobe_events interface correctly parses given event arguments. Link: http://lkml.kernel.org/r/152129033679.31874.12705519603869152799.stgit@devbox Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
1 parent c5d343b commit 871bef2

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#!/bin/sh
2+
# SPDX-License-Identifier: GPL-2.0
3+
# description: Kprobe event argument syntax
4+
5+
[ -f kprobe_events ] || exit_unsupported # this is configurable
6+
7+
grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue
8+
9+
echo 0 > events/enable
10+
echo > kprobe_events
11+
12+
PROBEFUNC="vfs_read"
13+
GOODREG=
14+
BADREG=
15+
GOODSYM="_sdata"
16+
if ! grep -qw ${GOODSYM} /proc/kallsyms ; then
17+
GOODSYM=$PROBEFUNC
18+
fi
19+
BADSYM="deaqswdefr"
20+
SYMADDR=0x`grep -w ${GOODSYM} /proc/kallsyms | cut -f 1 -d " "`
21+
GOODTYPE="x16"
22+
BADTYPE="y16"
23+
24+
case `uname -m` in
25+
x86_64|i[3456]86)
26+
GOODREG=%ax
27+
BADREG=%ex
28+
;;
29+
aarch64)
30+
GOODREG=%x0
31+
BADREG=%ax
32+
;;
33+
arm*)
34+
GOODREG=%r0
35+
BADREG=%ax
36+
;;
37+
esac
38+
39+
test_goodarg() # Good-args
40+
{
41+
while [ "$1" ]; do
42+
echo "p ${PROBEFUNC} $1" > kprobe_events
43+
shift 1
44+
done;
45+
}
46+
47+
test_badarg() # Bad-args
48+
{
49+
while [ "$1" ]; do
50+
! echo "p ${PROBEFUNC} $1" > kprobe_events
51+
shift 1
52+
done;
53+
}
54+
55+
echo > kprobe_events
56+
57+
: "Register access"
58+
test_goodarg ${GOODREG}
59+
test_badarg ${BADREG}
60+
61+
: "Symbol access"
62+
test_goodarg "@${GOODSYM}" "@${SYMADDR}" "@${GOODSYM}+10" "@${GOODSYM}-10"
63+
test_badarg "@" "@${BADSYM}" "@${GOODSYM}*10" "@${GOODSYM}/10" \
64+
"@${GOODSYM}%10" "@${GOODSYM}&10" "@${GOODSYM}|10"
65+
66+
: "Stack access"
67+
test_goodarg "\$stack" "\$stack0" "\$stack1"
68+
test_badarg "\$stackp" "\$stack0+10" "\$stack1-10"
69+
70+
: "Retval access"
71+
echo "r ${PROBEFUNC} \$retval" > kprobe_events
72+
! echo "p ${PROBEFUNC} \$retval" > kprobe_events
73+
74+
: "Comm access"
75+
test_goodarg "\$comm"
76+
77+
: "Indirect memory access"
78+
test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \
79+
"+0(\$stack1)" "+10(@${GOODSYM}-10)" "+0(+10(+20(\$stack)))"
80+
test_badarg "+(${GOODREG})" "(${GOODREG}+10)" "-(${GOODREG})" "(${GOODREG})" \
81+
"+10(\$comm)" "+0(${GOODREG})+10"
82+
83+
: "Name assignment"
84+
test_goodarg "varname=${GOODREG}"
85+
test_badarg "varname=varname2=${GOODREG}"
86+
87+
: "Type syntax"
88+
test_goodarg "${GOODREG}:${GOODTYPE}"
89+
test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \
90+
"${GOODTYPE}:${GOODREG}"
91+
92+
: "Combination check"
93+
94+
test_goodarg "\$comm:string" "+0(\$stack):string"
95+
test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string"
96+
97+
echo > kprobe_events

0 commit comments

Comments
 (0)