selftests/ftrace: Add BTF fields access testcases

Add test cases for accessing the data structure fields using BTF info.
This includes the field access from parameters and retval, and accessing
string information.

Link: https://lore.kernel.org/all/169272161265.160970.14048619786574971276.stgit@devnote2/Signed-off-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
Reviewed-by: default avatarAlan Maguire <alan.maguire@oracle.com>
Acked-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent 08c9306f
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
KPROBES= KPROBES=
FPROBES= FPROBES=
FIELDS=
if grep -qF "p[:[<group>/][<event>]] <place> [<args>]" README ; then if grep -qF "p[:[<group>/][<event>]] <place> [<args>]" README ; then
KPROBES=yes KPROBES=yes
...@@ -12,6 +13,9 @@ fi ...@@ -12,6 +13,9 @@ fi
if grep -qF "f[:[<group>/][<event>]] <func-name>[%return] [<args>]" README ; then if grep -qF "f[:[<group>/][<event>]] <func-name>[%return] [<args>]" README ; then
FPROBES=yes FPROBES=yes
fi fi
if grep -qF "<argname>[->field[->field|.field...]]" README ; then
FIELDS=yes
fi
if [ -z "$KPROBES" -a -z "$FPROBES" ] ; then if [ -z "$KPROBES" -a -z "$FPROBES" ] ; then
exit_unsupported exit_unsupported
...@@ -21,6 +25,9 @@ echo 0 > events/enable ...@@ -21,6 +25,9 @@ echo 0 > events/enable
echo > dynamic_events echo > dynamic_events
TP=kfree TP=kfree
TP2=kmem_cache_alloc
TP3=getname_flags
TP4=sched_wakeup
if [ "$FPROBES" ] ; then if [ "$FPROBES" ] ; then
echo "f:fpevent $TP object" >> dynamic_events echo "f:fpevent $TP object" >> dynamic_events
...@@ -33,6 +40,7 @@ echo > dynamic_events ...@@ -33,6 +40,7 @@ echo > dynamic_events
echo "f:fpevent $TP "'$arg1' >> dynamic_events echo "f:fpevent $TP "'$arg1' >> dynamic_events
grep -q "fpevent.*object=object" dynamic_events grep -q "fpevent.*object=object" dynamic_events
echo > dynamic_events echo > dynamic_events
echo "f:fpevent $TP "'$arg*' >> dynamic_events echo "f:fpevent $TP "'$arg*' >> dynamic_events
...@@ -45,6 +53,18 @@ fi ...@@ -45,6 +53,18 @@ fi
echo > dynamic_events echo > dynamic_events
if [ "$FIELDS" ] ; then
echo "t:tpevent ${TP2} obj_size=s->object_size" >> dynamic_events
echo "f:fpevent ${TP3}%return path=\$retval->name:string" >> dynamic_events
echo "t:tpevent2 ${TP4} p->se.group_node.next->prev" >> dynamic_events
grep -q "tpevent .*obj_size=s->object_size" dynamic_events
grep -q "fpevent.*path=\$retval->name:string" dynamic_events
grep -q 'tpevent2 .*p->se.group_node.next->prev' dynamic_events
echo > dynamic_events
fi
if [ "$KPROBES" ] ; then if [ "$KPROBES" ] ; then
echo "p:kpevent $TP object" >> dynamic_events echo "p:kpevent $TP object" >> dynamic_events
grep -q "kpevent.*object=object" dynamic_events grep -q "kpevent.*object=object" dynamic_events
......
...@@ -103,6 +103,14 @@ check_error 'f vfs_read%return ^$arg*' # NOFENTRY_ARGS ...@@ -103,6 +103,14 @@ check_error 'f vfs_read%return ^$arg*' # NOFENTRY_ARGS
check_error 'f vfs_read ^hoge' # NO_BTFARG check_error 'f vfs_read ^hoge' # NO_BTFARG
check_error 'f kfree ^$arg10' # NO_BTFARG (exceed the number of parameters) check_error 'f kfree ^$arg10' # NO_BTFARG (exceed the number of parameters)
check_error 'f kfree%return ^$retval' # NO_RETVAL check_error 'f kfree%return ^$retval' # NO_RETVAL
if grep -qF "<argname>[->field[->field|.field...]]" README ; then
check_error 'f vfs_read%return $retval->^foo' # NO_PTR_STRCT
check_error 'f vfs_read file->^foo' # NO_BTF_FIELD
check_error 'f vfs_read file^-.foo' # BAD_HYPHEN
check_error 'f vfs_read ^file:string' # BAD_TYPE4STR
fi
else else
check_error 'f vfs_read ^$arg*' # NOSUP_BTFARG check_error 'f vfs_read ^$arg*' # NOSUP_BTFARG
check_error 't kfree ^$arg*' # NOSUP_BTFARG check_error 't kfree ^$arg*' # NOSUP_BTFARG
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment