selftests/ftrace: Use $FUNCTION_FORK to reference kernel fork function
Commitcad6967ac1
("fork: introduce kernel_clone()") replaced "_do_fork()" with "kernel_clone()". The ftrace selftests reference the fork function in several of the tests. The rename will make the tests break, but if those names are changed in the tests, they would then break on older kernels. The same set of tests should pass older kernels if they have previously passed. Obviously, a new test may not work on older kernels if the test was added due to a bug or a new feature. The setup of ftracetest will now create a $FUNCTION_FORK bash variable that will contain "_do_fork" for older kernels and "kernel_clone" for newer ones. It figures out the proper name by examining /proc/kallsyms. Note, available_filter_functions could also be used, but because some tests should be able to pass without function tracing enabled, it could not be used. Fixes:eea11285da
("tracing: switch to kernel_clone()") Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
3650b228f8
commit
dc6bf4da82
|
@ -6,7 +6,7 @@
|
|||
echo 0 > events/enable
|
||||
echo > dynamic_events
|
||||
|
||||
PLACE=kernel_clone
|
||||
PLACE=$FUNCTION_FORK
|
||||
|
||||
echo "p:myevent1 $PLACE" >> dynamic_events
|
||||
echo "r:myevent2 $PLACE" >> dynamic_events
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
echo 0 > events/enable
|
||||
echo > dynamic_events
|
||||
|
||||
PLACE=kernel_clone
|
||||
PLACE=$FUNCTION_FORK
|
||||
|
||||
setup_events() {
|
||||
echo "p:myevent1 $PLACE" >> dynamic_events
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
echo 0 > events/enable
|
||||
echo > dynamic_events
|
||||
|
||||
PLACE=kernel_clone
|
||||
PLACE=$FUNCTION_FORK
|
||||
|
||||
setup_events() {
|
||||
echo "p:myevent1 $PLACE" >> dynamic_events
|
||||
|
|
|
@ -39,7 +39,7 @@ do_test() {
|
|||
disable_tracing
|
||||
|
||||
echo do_execve* > set_ftrace_filter
|
||||
echo *do_fork >> set_ftrace_filter
|
||||
echo $FUNCTION_FORK >> set_ftrace_filter
|
||||
|
||||
echo $PID > set_ftrace_notrace_pid
|
||||
echo function > current_tracer
|
||||
|
|
|
@ -39,7 +39,7 @@ do_test() {
|
|||
disable_tracing
|
||||
|
||||
echo do_execve* > set_ftrace_filter
|
||||
echo *do_fork >> set_ftrace_filter
|
||||
echo $FUNCTION_FORK >> set_ftrace_filter
|
||||
|
||||
echo $PID > set_ftrace_pid
|
||||
echo function > current_tracer
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
# requires: set_ftrace_filter
|
||||
# flags: instance
|
||||
|
||||
echo kernel_clone:stacktrace >> set_ftrace_filter
|
||||
echo $FUNCTION_FORK:stacktrace >> set_ftrace_filter
|
||||
|
||||
grep -q "kernel_clone:stacktrace:unlimited" set_ftrace_filter
|
||||
grep -q "$FUNCTION_FORK:stacktrace:unlimited" set_ftrace_filter
|
||||
|
||||
(echo "forked"; sleep 1)
|
||||
|
||||
|
|
|
@ -133,6 +133,13 @@ yield() {
|
|||
ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
||||
# The fork function in the kernel was renamed from "_do_fork" to
|
||||
# "kernel_fork". As older tests should still work with older kernels
|
||||
# as well as newer kernels, check which version of fork is used on this
|
||||
# kernel so that the tests can use the fork function for the running kernel.
|
||||
FUNCTION_FORK=`(if grep '\bkernel_clone\b' /proc/kallsyms > /dev/null; then
|
||||
echo kernel_clone; else echo '_do_fork'; fi)`
|
||||
|
||||
# Since probe event command may include backslash, explicitly use printf "%s"
|
||||
# to NOT interpret it.
|
||||
ftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# description: Kprobe dynamic event - adding and removing
|
||||
# requires: kprobe_events
|
||||
|
||||
echo p:myevent kernel_clone > kprobe_events
|
||||
echo p:myevent $FUNCTION_FORK > kprobe_events
|
||||
grep myevent kprobe_events
|
||||
test -d events/kprobes/myevent
|
||||
echo > kprobe_events
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# description: Kprobe dynamic event - busy event check
|
||||
# requires: kprobe_events
|
||||
|
||||
echo p:myevent kernel_clone > kprobe_events
|
||||
echo p:myevent $FUNCTION_FORK > kprobe_events
|
||||
test -d events/kprobes/myevent
|
||||
echo 1 > events/kprobes/myevent/enable
|
||||
echo > kprobe_events && exit_fail # this must fail
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
# description: Kprobe dynamic event with arguments
|
||||
# requires: kprobe_events
|
||||
|
||||
echo 'p:testprobe kernel_clone $stack $stack0 +0($stack)' > kprobe_events
|
||||
echo "p:testprobe $FUNCTION_FORK \$stack \$stack0 +0(\$stack)" > kprobe_events
|
||||
grep testprobe kprobe_events | grep -q 'arg1=\$stack arg2=\$stack0 arg3=+0(\$stack)'
|
||||
test -d events/kprobes/testprobe
|
||||
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
( echo "forked")
|
||||
grep testprobe trace | grep 'kernel_clone' | \
|
||||
grep testprobe trace | grep "$FUNCTION_FORK" | \
|
||||
grep -q 'arg1=0x[[:xdigit:]]* arg2=0x[[:xdigit:]]* arg3=0x[[:xdigit:]]*$'
|
||||
|
||||
echo 0 > events/kprobes/testprobe/enable
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
grep -A1 "fetcharg:" README | grep -q "\$comm" || exit_unsupported # this is too old
|
||||
|
||||
echo 'p:testprobe kernel_clone comm=$comm ' > kprobe_events
|
||||
echo "p:testprobe $FUNCTION_FORK comm=\$comm " > kprobe_events
|
||||
grep testprobe kprobe_events | grep -q 'comm=$comm'
|
||||
test -d events/kprobes/testprobe
|
||||
|
||||
|
|
|
@ -30,13 +30,13 @@ esac
|
|||
: "Test get argument (1)"
|
||||
echo "p:testprobe tracefs_create_dir arg1=+0(${ARG1}):string" > kprobe_events
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
echo "p:test kernel_clone" >> kprobe_events
|
||||
echo "p:test $FUNCTION_FORK" >> kprobe_events
|
||||
grep -qe "testprobe.* arg1=\"test\"" trace
|
||||
|
||||
echo 0 > events/kprobes/testprobe/enable
|
||||
: "Test get argument (2)"
|
||||
echo "p:testprobe tracefs_create_dir arg1=+0(${ARG1}):string arg2=+0(${ARG1}):string" > kprobe_events
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
echo "p:test kernel_clone" >> kprobe_events
|
||||
echo "p:test $FUNCTION_FORK" >> kprobe_events
|
||||
grep -qe "testprobe.* arg1=\"test\" arg2=\"test\"" trace
|
||||
|
||||
|
|
|
@ -14,12 +14,12 @@ elif ! grep "$SYMBOL\$" /proc/kallsyms; then
|
|||
fi
|
||||
|
||||
: "Test get basic types symbol argument"
|
||||
echo "p:testprobe_u kernel_clone arg1=@linux_proc_banner:u64 arg2=@linux_proc_banner:u32 arg3=@linux_proc_banner:u16 arg4=@linux_proc_banner:u8" > kprobe_events
|
||||
echo "p:testprobe_s kernel_clone arg1=@linux_proc_banner:s64 arg2=@linux_proc_banner:s32 arg3=@linux_proc_banner:s16 arg4=@linux_proc_banner:s8" >> kprobe_events
|
||||
echo "p:testprobe_u $FUNCTION_FORK arg1=@linux_proc_banner:u64 arg2=@linux_proc_banner:u32 arg3=@linux_proc_banner:u16 arg4=@linux_proc_banner:u8" > kprobe_events
|
||||
echo "p:testprobe_s $FUNCTION_FORK arg1=@linux_proc_banner:s64 arg2=@linux_proc_banner:s32 arg3=@linux_proc_banner:s16 arg4=@linux_proc_banner:s8" >> kprobe_events
|
||||
if grep -q "x8/16/32/64" README; then
|
||||
echo "p:testprobe_x kernel_clone arg1=@linux_proc_banner:x64 arg2=@linux_proc_banner:x32 arg3=@linux_proc_banner:x16 arg4=@linux_proc_banner:x8" >> kprobe_events
|
||||
echo "p:testprobe_x $FUNCTION_FORK arg1=@linux_proc_banner:x64 arg2=@linux_proc_banner:x32 arg3=@linux_proc_banner:x16 arg4=@linux_proc_banner:x8" >> kprobe_events
|
||||
fi
|
||||
echo "p:testprobe_bf kernel_clone arg1=@linux_proc_banner:b8@4/32" >> kprobe_events
|
||||
echo "p:testprobe_bf $FUNCTION_FORK arg1=@linux_proc_banner:b8@4/32" >> kprobe_events
|
||||
echo 1 > events/kprobes/enable
|
||||
(echo "forked")
|
||||
echo 0 > events/kprobes/enable
|
||||
|
@ -27,7 +27,7 @@ grep "testprobe_[usx]:.* arg1=.* arg2=.* arg3=.* arg4=.*" trace
|
|||
grep "testprobe_bf:.* arg1=.*" trace
|
||||
|
||||
: "Test get string symbol argument"
|
||||
echo "p:testprobe_str kernel_clone arg1=@linux_proc_banner:string" > kprobe_events
|
||||
echo "p:testprobe_str $FUNCTION_FORK arg1=@linux_proc_banner:string" > kprobe_events
|
||||
echo 1 > events/kprobes/enable
|
||||
(echo "forked")
|
||||
echo 0 > events/kprobes/enable
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# requires: kprobe_events "x8/16/32/64":README
|
||||
|
||||
gen_event() { # Bitsize
|
||||
echo "p:testprobe kernel_clone \$stack0:s$1 \$stack0:u$1 \$stack0:x$1 \$stack0:b4@4/$1"
|
||||
echo "p:testprobe $FUNCTION_FORK \$stack0:s$1 \$stack0:u$1 \$stack0:x$1 \$stack0:b4@4/$1"
|
||||
}
|
||||
|
||||
check_types() { # s-type u-type x-type bf-type width
|
||||
|
|
|
@ -5,29 +5,29 @@
|
|||
|
||||
# prepare
|
||||
echo nop > current_tracer
|
||||
echo kernel_clone > set_ftrace_filter
|
||||
echo 'p:testprobe kernel_clone' > kprobe_events
|
||||
echo $FUNCTION_FORK > set_ftrace_filter
|
||||
echo "p:testprobe $FUNCTION_FORK" > kprobe_events
|
||||
|
||||
# kprobe on / ftrace off
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
echo > trace
|
||||
( echo "forked")
|
||||
grep testprobe trace
|
||||
! grep 'kernel_clone <-' trace
|
||||
! grep "$FUNCTION_FORK <-" trace
|
||||
|
||||
# kprobe on / ftrace on
|
||||
echo function > current_tracer
|
||||
echo > trace
|
||||
( echo "forked")
|
||||
grep testprobe trace
|
||||
grep 'kernel_clone <-' trace
|
||||
grep "$FUNCTION_FORK <-" trace
|
||||
|
||||
# kprobe off / ftrace on
|
||||
echo 0 > events/kprobes/testprobe/enable
|
||||
echo > trace
|
||||
( echo "forked")
|
||||
! grep testprobe trace
|
||||
grep 'kernel_clone <-' trace
|
||||
grep "$FUNCTION_FORK <-" trace
|
||||
|
||||
# kprobe on / ftrace on
|
||||
echo 1 > events/kprobes/testprobe/enable
|
||||
|
@ -35,11 +35,11 @@ echo function > current_tracer
|
|||
echo > trace
|
||||
( echo "forked")
|
||||
grep testprobe trace
|
||||
grep 'kernel_clone <-' trace
|
||||
grep "$FUNCTION_FORK <-" trace
|
||||
|
||||
# kprobe on / ftrace off
|
||||
echo nop > current_tracer
|
||||
echo > trace
|
||||
( echo "forked")
|
||||
grep testprobe trace
|
||||
! grep 'kernel_clone <-' trace
|
||||
! grep "$FUNCTION_FORK <-" trace
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# requires: kprobe_events "Create/append/":README
|
||||
|
||||
# Choose 2 symbols for target
|
||||
SYM1=kernel_clone
|
||||
SYM1=$FUNCTION_FORK
|
||||
SYM2=do_exit
|
||||
EVENT_NAME=kprobes/testevent
|
||||
|
||||
|
|
|
@ -86,15 +86,15 @@ esac
|
|||
|
||||
# multiprobe errors
|
||||
if grep -q "Create/append/" README && grep -q "imm-value" README; then
|
||||
echo 'p:kprobes/testevent kernel_clone' > kprobe_events
|
||||
echo "p:kprobes/testevent $FUNCTION_FORK" > kprobe_events
|
||||
check_error '^r:kprobes/testevent do_exit' # DIFF_PROBE_TYPE
|
||||
|
||||
# Explicitly use printf "%s" to not interpret \1
|
||||
printf "%s" 'p:kprobes/testevent kernel_clone abcd=\1' > kprobe_events
|
||||
check_error 'p:kprobes/testevent kernel_clone ^bcd=\1' # DIFF_ARG_TYPE
|
||||
check_error 'p:kprobes/testevent kernel_clone ^abcd=\1:u8' # DIFF_ARG_TYPE
|
||||
check_error 'p:kprobes/testevent kernel_clone ^abcd=\"foo"' # DIFF_ARG_TYPE
|
||||
check_error '^p:kprobes/testevent kernel_clone abcd=\1' # SAME_PROBE
|
||||
printf "%s" "p:kprobes/testevent $FUNCTION_FORK abcd=\\1" > kprobe_events
|
||||
check_error "p:kprobes/testevent $FUNCTION_FORK ^bcd=\\1" # DIFF_ARG_TYPE
|
||||
check_error "p:kprobes/testevent $FUNCTION_FORK ^abcd=\\1:u8" # DIFF_ARG_TYPE
|
||||
check_error "p:kprobes/testevent $FUNCTION_FORK ^abcd=\\\"foo\"" # DIFF_ARG_TYPE
|
||||
check_error "^p:kprobes/testevent $FUNCTION_FORK abcd=\\1" # SAME_PROBE
|
||||
fi
|
||||
|
||||
# %return suffix errors
|
||||
|
|
|
@ -4,14 +4,14 @@
|
|||
# requires: kprobe_events
|
||||
|
||||
# Add new kretprobe event
|
||||
echo 'r:testprobe2 kernel_clone $retval' > kprobe_events
|
||||
echo "r:testprobe2 $FUNCTION_FORK \$retval" > kprobe_events
|
||||
grep testprobe2 kprobe_events | grep -q 'arg1=\$retval'
|
||||
test -d events/kprobes/testprobe2
|
||||
|
||||
echo 1 > events/kprobes/testprobe2/enable
|
||||
( echo "forked")
|
||||
|
||||
cat trace | grep testprobe2 | grep -q '<- kernel_clone'
|
||||
cat trace | grep testprobe2 | grep -q "<- $FUNCTION_FORK"
|
||||
|
||||
echo 0 > events/kprobes/testprobe2/enable
|
||||
echo '-:testprobe2' >> kprobe_events
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# requires: kprobe_events
|
||||
|
||||
! grep -q 'myevent' kprobe_profile
|
||||
echo p:myevent kernel_clone > kprobe_events
|
||||
echo "p:myevent $FUNCTION_FORK" > kprobe_events
|
||||
grep -q 'myevent[[:space:]]*0[[:space:]]*0$' kprobe_profile
|
||||
echo 1 > events/kprobes/myevent/enable
|
||||
( echo "forked" )
|
||||
|
|
Loading…
Reference in New Issue