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: Masami Hiramatsu (Google) <mhiramat@kernel.org> Reviewed-by: Alan Maguire <alan.maguire@oracle.com> Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
@ -5,6 +5,7 @@
|
||||
|
||||
KPROBES=
|
||||
FPROBES=
|
||||
FIELDS=
|
||||
|
||||
if grep -qF "p[:[<group>/][<event>]] <place> [<args>]" README ; then
|
||||
KPROBES=yes
|
||||
@ -12,6 +13,9 @@ fi
|
||||
if grep -qF "f[:[<group>/][<event>]] <func-name>[%return] [<args>]" README ; then
|
||||
FPROBES=yes
|
||||
fi
|
||||
if grep -qF "<argname>[->field[->field|.field...]]" README ; then
|
||||
FIELDS=yes
|
||||
fi
|
||||
|
||||
if [ -z "$KPROBES" -a -z "$FPROBES" ] ; then
|
||||
exit_unsupported
|
||||
@ -21,6 +25,9 @@ echo 0 > events/enable
|
||||
echo > dynamic_events
|
||||
|
||||
TP=kfree
|
||||
TP2=kmem_cache_alloc
|
||||
TP3=getname_flags
|
||||
TP4=sched_wakeup
|
||||
|
||||
if [ "$FPROBES" ] ; then
|
||||
echo "f:fpevent $TP object" >> dynamic_events
|
||||
@ -33,6 +40,7 @@ echo > dynamic_events
|
||||
|
||||
echo "f:fpevent $TP "'$arg1' >> dynamic_events
|
||||
grep -q "fpevent.*object=object" dynamic_events
|
||||
|
||||
echo > dynamic_events
|
||||
|
||||
echo "f:fpevent $TP "'$arg*' >> dynamic_events
|
||||
@ -45,6 +53,18 @@ fi
|
||||
|
||||
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
|
||||
echo "p:kpevent $TP object" >> dynamic_events
|
||||
grep -q "kpevent.*object=object" dynamic_events
|
||||
|
@ -103,6 +103,14 @@ check_error 'f vfs_read%return ^$arg*' # NOFENTRY_ARGS
|
||||
check_error 'f vfs_read ^hoge' # NO_BTFARG
|
||||
check_error 'f kfree ^$arg10' # NO_BTFARG (exceed the number of parameters)
|
||||
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
|
||||
check_error 'f vfs_read ^$arg*' # NOSUP_BTFARG
|
||||
check_error 't kfree ^$arg*' # NOSUP_BTFARG
|
||||
|
Reference in New Issue
Block a user