-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests/ftrace: Add tracepoint probe test case
Add test cases for tracepoint probe events. Link: https://lore.kernel.org/all/168507477214.913472.11218388626709005588.stgit@mhiramat.roam.corp.google.com/ Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
- Loading branch information
Masami Hiramatsu (Google)
committed
Jun 6, 2023
1 parent
fd26290
commit 6335265
Showing
4 changed files
with
111 additions
and
2 deletions.
There are no files selected for viewing
2 changes: 1 addition & 1 deletion
2
tools/testing/selftests/ftrace/test.d/dynevent/add_remove_fprobe.tc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
27 changes: 27 additions & 0 deletions
27
tools/testing/selftests/ftrace/test.d/dynevent/add_remove_tprobe.tc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
#!/bin/sh | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# description: Generic dynamic event - add/remove tracepoint probe events | ||
# requires: dynamic_events "t[:[<group>/][<event>]] <tracepoint> [<args>]":README | ||
|
||
echo 0 > events/enable | ||
echo > dynamic_events | ||
|
||
TRACEPOINT1=kmem_cache_alloc | ||
TRACEPOINT2=kmem_cache_free | ||
|
||
echo "t:myevent1 $TRACEPOINT1" >> dynamic_events | ||
echo "t:myevent2 $TRACEPOINT2" >> dynamic_events | ||
|
||
grep -q myevent1 dynamic_events | ||
grep -q myevent2 dynamic_events | ||
test -d events/tracepoints/myevent1 | ||
test -d events/tracepoints/myevent2 | ||
|
||
echo "-:myevent2" >> dynamic_events | ||
|
||
grep -q myevent1 dynamic_events | ||
! grep -q myevent2 dynamic_events | ||
|
||
echo > dynamic_events | ||
|
||
clear_trace |
2 changes: 1 addition & 1 deletion
2
tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
82 changes: 82 additions & 0 deletions
82
tools/testing/selftests/ftrace/test.d/dynevent/tprobe_syntax_errors.tc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
#!/bin/sh | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# description: Tracepoint probe event parser error log check | ||
# requires: dynamic_events "t[:[<group>/][<event>]] <tracepoint> [<args>]":README | ||
|
||
check_error() { # command-with-error-pos-by-^ | ||
ftrace_errlog_check 'trace_fprobe' "$1" 'dynamic_events' | ||
} | ||
|
||
check_error 't^100 kfree' # BAD_MAXACT_TYPE | ||
|
||
check_error 't ^non_exist_tracepoint' # NO_TRACEPOINT | ||
check_error 't:^/bar kfree' # NO_GROUP_NAME | ||
check_error 't:^12345678901234567890123456789012345678901234567890123456789012345/bar kfree' # GROUP_TOO_LONG | ||
|
||
check_error 't:^foo.1/bar kfree' # BAD_GROUP_NAME | ||
check_error 't:^ kfree' # NO_EVENT_NAME | ||
check_error 't:foo/^12345678901234567890123456789012345678901234567890123456789012345 kfree' # EVENT_TOO_LONG | ||
check_error 't:foo/^bar.1 kfree' # BAD_EVENT_NAME | ||
|
||
check_error 't kfree ^$retval' # RETVAL_ON_PROBE | ||
check_error 't kfree ^$stack10000' # BAD_STACK_NUM | ||
|
||
check_error 't kfree ^$arg10000' # BAD_ARG_NUM | ||
|
||
check_error 't kfree ^$none_var' # BAD_VAR | ||
check_error 't kfree ^%rax' # BAD_VAR | ||
|
||
check_error 't kfree ^@12345678abcde' # BAD_MEM_ADDR | ||
check_error 't kfree ^@+10' # FILE_ON_KPROBE | ||
|
||
grep -q "imm-value" README && \ | ||
check_error 't kfree arg1=\^x' # BAD_IMM | ||
grep -q "imm-string" README && \ | ||
check_error 't kfree arg1=\"abcd^' # IMMSTR_NO_CLOSE | ||
|
||
check_error 't kfree ^+0@0)' # DEREF_NEED_BRACE | ||
check_error 't kfree ^+0ab1(@0)' # BAD_DEREF_OFFS | ||
check_error 't kfree +0(+0(@0^)' # DEREF_OPEN_BRACE | ||
|
||
if grep -A1 "fetcharg:" README | grep -q '\$comm' ; then | ||
check_error 't kfree +0(^$comm)' # COMM_CANT_DEREF | ||
fi | ||
|
||
check_error 't kfree ^&1' # BAD_FETCH_ARG | ||
|
||
|
||
# We've introduced this limitation with array support | ||
if grep -q ' <type>\\\[<array-size>\\\]' README; then | ||
check_error 't kfree +0(^+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(@0))))))))))))))' # TOO_MANY_OPS? | ||
check_error 't kfree +0(@11):u8[10^' # ARRAY_NO_CLOSE | ||
check_error 't kfree +0(@11):u8[10]^a' # BAD_ARRAY_SUFFIX | ||
check_error 't kfree +0(@11):u8[^10a]' # BAD_ARRAY_NUM | ||
check_error 't kfree +0(@11):u8[^256]' # ARRAY_TOO_BIG | ||
fi | ||
|
||
check_error 't kfree @11:^unknown_type' # BAD_TYPE | ||
check_error 't kfree $stack0:^string' # BAD_STRING | ||
check_error 't kfree @11:^b10@a/16' # BAD_BITFIELD | ||
|
||
check_error 't kfree ^arg123456789012345678901234567890=@11' # ARG_NAME_TOO_LOG | ||
check_error 't kfree ^=@11' # NO_ARG_NAME | ||
check_error 't kfree ^var.1=@11' # BAD_ARG_NAME | ||
check_error 't kfree var1=@11 ^var1=@12' # USED_ARG_NAME | ||
check_error 't kfree ^+1234567(+1234567(+1234567(+1234567(+1234567(+1234567(@1234))))))' # ARG_TOO_LONG | ||
check_error 't kfree arg1=^' # NO_ARG_BODY | ||
|
||
|
||
# multiprobe errors | ||
if grep -q "Create/append/" README && grep -q "imm-value" README; then | ||
echo "t:tracepoint/testevent kfree" > dynamic_events | ||
check_error '^f:tracepoint/testevent kfree' # DIFF_PROBE_TYPE | ||
|
||
# Explicitly use printf "%s" to not interpret \1 | ||
printf "%s" "t:tracepoints/testevent kfree abcd=\\1" > dynamic_events | ||
check_error "t:tracepoints/testevent kfree ^bcd=\\1" # DIFF_ARG_TYPE | ||
check_error "t:tracepoints/testevent kfree ^abcd=\\1:u8" # DIFF_ARG_TYPE | ||
check_error "t:tracepoints/testevent kfree ^abcd=\\\"foo\"" # DIFF_ARG_TYPE | ||
check_error "^t:tracepoints/testevent kfree abcd=\\1" # SAME_PROBE | ||
fi | ||
|
||
exit 0 |