Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/ftrace: Add kprobe-event with symbol argument test

Add a testcase for kprobe-event with @symbol argument.
Since @symbol needs to refer the kernel data symbol
(linux_proc_banner), it requires CONFIG_KALLSYMS_ALL.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Shuah Khan (Samsung OSG) <shuah@kernel.org>

authored by

Masami Hiramatsu and committed by
Shuah Khan (Samsung OSG)
873b4af2 32f6e5da

+40
+1
tools/testing/selftests/ftrace/config
··· 11 11 CONFIG_MODULE_UNLOAD=y 12 12 CONFIG_SAMPLES=y 13 13 CONFIG_SAMPLE_TRACE_PRINTK=m 14 + CONFIG_KALLSYMS_ALL=y
+39
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_symbol.tc
··· 1 + #!/bin/sh 2 + # SPDX-License-Identifier: GPL-2.0 3 + # description: Kprobe event symbol argument 4 + 5 + [ -f kprobe_events ] || exit_unsupported # this is configurable 6 + 7 + SYMBOL="linux_proc_banner" 8 + 9 + if [ ! -f /proc/kallsyms ]; then 10 + echo "Can not check the target symbol - please enable CONFIG_KALLSYMS" 11 + exit_unresolved 12 + elif ! grep "$SYMBOL\$" /proc/kallsyms; then 13 + echo "Linux banner is not exported - please enable CONFIG_KALLSYMS_ALL" 14 + exit_unresolved 15 + fi 16 + 17 + : "Test get basic types symbol argument" 18 + echo "p:testprobe_u _do_fork arg1=@linux_proc_banner:u64 arg2=@linux_proc_banner:u32 arg3=@linux_proc_banner:u16 arg4=@linux_proc_banner:u8" > kprobe_events 19 + echo "p:testprobe_s _do_fork arg1=@linux_proc_banner:s64 arg2=@linux_proc_banner:s32 arg3=@linux_proc_banner:s16 arg4=@linux_proc_banner:s8" >> kprobe_events 20 + if grep -q "x8/16/32/64" README; then 21 + echo "p:testprobe_x _do_fork arg1=@linux_proc_banner:x64 arg2=@linux_proc_banner:x32 arg3=@linux_proc_banner:x16 arg4=@linux_proc_banner:x8" >> kprobe_events 22 + fi 23 + echo "p:testprobe_bf _do_fork arg1=@linux_proc_banner:b8@4/32" >> kprobe_events 24 + echo 1 > events/kprobes/enable 25 + (echo "forked") 26 + echo 0 > events/kprobes/enable 27 + grep "testprobe_[usx]:.* arg1=.* arg2=.* arg3=.* arg4=.*" trace 28 + grep "testprobe_bf:.* arg1=.*" trace 29 + 30 + : "Test get string symbol argument" 31 + echo "p:testprobe_str _do_fork arg1=@linux_proc_banner:string" > kprobe_events 32 + echo 1 > events/kprobes/enable 33 + (echo "forked") 34 + echo 0 > events/kprobes/enable 35 + RESULT=`grep "testprobe_str" trace | sed -e 's/.* arg1=\(.*\)/\1/'` 36 + 37 + RESULT=`echo $RESULT | sed -e 's/.* \((.*)\) \((.*)\) .*/\1 \2/'` 38 + ORIG=`cat /proc/version | sed -e 's/.* \((.*)\) \((.*)\) .*/\1 \2/'` 39 + test "$RESULT" = "$ORIG"