Commit d892d3d3 authored by Masami Hiramatsu (Google)'s avatar Masami Hiramatsu (Google)
Browse files

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
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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
+8 −0
Original line number Diff line number Diff line
@@ -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