Skip to content

Commit 4231f30

Browse files
committed
selftests/ftrace: Add BTF arguments test cases
Add test cases to check the BTF arguments correctly supported. Link: https://lore.kernel.org/all/168507478292.913472.25631899274942311.stgit@mhiramat.roam.corp.google.com/ Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
1 parent 6335265 commit 4231f30

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/bin/sh
2+
# SPDX-License-Identifier: GPL-2.0
3+
# description: Generic dynamic event - add/remove probes with BTF arguments
4+
# requires: dynamic_events "<argname>":README
5+
6+
KPROBES=
7+
FPROBES=
8+
9+
if grep -qF "p[:[<group>/][<event>]] <place> [<args>]" README ; then
10+
KPROBES=yes
11+
fi
12+
if grep -qF "f[:[<group>/][<event>]] <func-name>[%return] [<args>]" README ; then
13+
FPROBES=yes
14+
fi
15+
16+
if [ -z "$KPROBES" -a "$FPROBES" ] ; then
17+
exit_unsupported
18+
fi
19+
20+
echo 0 > events/enable
21+
echo > dynamic_events
22+
23+
TP=kfree
24+
25+
if [ "$FPROBES" ] ; then
26+
echo "f:fpevent $TP object" >> dynamic_events
27+
echo "t:tpevent $TP ptr" >> dynamic_events
28+
29+
grep -q "fpevent.*object=object" dynamic_events
30+
grep -q "tpevent.*ptr=ptr" dynamic_events
31+
32+
echo > dynamic_events
33+
34+
echo "f:fpevent $TP "'$arg1' >> dynamic_events
35+
grep -q "fpevent.*object=object" dynamic_events
36+
echo > dynamic_events
37+
38+
echo "f:fpevent $TP "'$arg*' >> dynamic_events
39+
echo "t:tpevent $TP "'$arg*' >> dynamic_events
40+
41+
grep -q "fpevent.*object=object" dynamic_events
42+
grep -q "tpevent.*ptr=ptr" dynamic_events
43+
! grep -q "tpevent.*_data" dynamic_events
44+
fi
45+
46+
echo > dynamic_events
47+
48+
if [ "$KPROBES" ] ; then
49+
echo "p:kpevent $TP object" >> dynamic_events
50+
grep -q "kpevent.*object=object" dynamic_events
51+
52+
echo > dynamic_events
53+
54+
echo "p:kpevent $TP "'$arg*' >> dynamic_events
55+
grep -q "kpevent.*object=object" dynamic_events
56+
fi
57+
58+
clear_trace

tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,18 @@ fi
9494
# %return suffix errors
9595
check_error 'f vfs_read^%hoge' # BAD_ADDR_SUFFIX
9696

97+
# BTF arguments errors
98+
if grep -q "<argname>" README; then
99+
check_error 'f vfs_read args=^$arg*' # BAD_VAR_ARGS
100+
check_error 'f vfs_read +0(^$arg*)' # BAD_VAR_ARGS
101+
check_error 'f vfs_read $arg* ^$arg*' # DOUBLE_ARGS
102+
check_error 'f vfs_read%return ^$arg*' # NOFENTRY_ARGS
103+
check_error 'f vfs_read ^hoge' # NO_BTFARG
104+
check_error 'f kfree ^$arg10' # NO_BTFARG (exceed the number of parameters)
105+
check_error 'f kfree%return ^$retval' # NO_RETVAL
106+
else
107+
check_error 'f vfs_read ^$arg*' # NOSUP_BTFARG
108+
check_error 't kfree ^$arg*' # NOSUP_BTFARG
109+
fi
110+
97111
exit 0

tools/testing/selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,18 @@ check_error 'p vfs_read^%hoge' # BAD_ADDR_SUFFIX
103103
check_error 'p ^vfs_read+10%return' # BAD_RETPROBE
104104
fi
105105

106+
# BTF arguments errors
107+
if grep -q "<argname>" README; then
108+
check_error 'p vfs_read args=^$arg*' # BAD_VAR_ARGS
109+
check_error 'p vfs_read +0(^$arg*)' # BAD_VAR_ARGS
110+
check_error 'p vfs_read $arg* ^$arg*' # DOUBLE_ARGS
111+
check_error 'r vfs_read ^$arg*' # NOFENTRY_ARGS
112+
check_error 'p vfs_read+8 ^$arg*' # NOFENTRY_ARGS
113+
check_error 'p vfs_read ^hoge' # NO_BTFARG
114+
check_error 'p kfree ^$arg10' # NO_BTFARG (exceed the number of parameters)
115+
check_error 'r kfree ^$retval' # NO_RETVAL
116+
else
117+
check_error 'p vfs_read ^$arg*' # NOSUP_BTFARG
118+
fi
119+
106120
exit 0

0 commit comments

Comments
 (0)