Merge tag 'trace-v5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from Steven Rostedt: "The major changes in this tracing update includes: - Removal of non-DYNAMIC_FTRACE from 32bit x86 - Removal of mcount support from x86 - Emulating a call from int3 on x86_64, fixes live kernel patching - Consolidated Tracing Error logs file Minor updates: - Removal of klp_check_compiler_support() - kdb ftrace dumping output changes - Accessing and creating ftrace instances from inside the kernel - Clean up of #define if macro - Introduction of TRACE_EVENT_NOP() to disable trace events based on config options And other minor fixes and clean ups" * tag 'trace-v5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (44 commits) x86: Hide the int3_emulate_call/jmp functions from UML livepatch: Remove klp_check_compiler_support() ftrace/x86: Remove mcount support ftrace/x86_32: Remove support for non DYNAMIC_FTRACE tracing: Simplify "if" macro code tracing: Fix documentation about disabling options using trace_options tracing: Replace kzalloc with kcalloc tracing: Fix partial reading of trace event's id file tracing: Allow RCU to run between postponed startup tests tracing: Fix white space issues in parse_pred() function tracing: Eliminate const char[] auto variables ring-buffer: Fix mispelling of Calculate tracing: probeevent: Fix to make the type of $comm string tracing: probeevent: Do not accumulate on ret variable tracing: uprobes: Re-enable $comm support for uprobe events ftrace/x86_64: Emulate call function while updating in breakpoint handler x86_64: Allow breakpoints to emulate call instructions x86_64: Add gap to int3 to allow for call emulation tracing: kdb: Allow ftdump to skip all but the last few entries tracing: Add trace_total_entries() / trace_total_entries_cpu() ...
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: ftrace - test tracing error log support
|
||||
|
||||
fail() { #msg
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
# event tracing is currently the only ftrace tracer that uses the
|
||||
# tracing error_log, hence this check
|
||||
if [ ! -f set_event ]; then
|
||||
echo "event tracing is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
ftrace_errlog_check 'event filter parse error' '((sig >= 10 && sig < 15) || dsig ^== 17) && comm != bash' 'events/signal/signal_generate/filter'
|
||||
|
||||
exit 0
|
@@ -109,3 +109,15 @@ LOCALHOST=127.0.0.1
|
||||
yield() {
|
||||
ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
||||
ftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file
|
||||
pos=$(echo -n "${2%^*}" | wc -c) # error position
|
||||
command=$(echo "$2" | tr -d ^)
|
||||
echo "Test command: $command"
|
||||
echo > error_log
|
||||
(! echo "$command" > "$3" ) 2> /dev/null
|
||||
grep "$1: error:" -A 3 error_log
|
||||
N=$(tail -n 1 error_log | wc -c)
|
||||
# " Command: " and "^\n" => 13
|
||||
test $(expr 13 + $pos) -eq $N
|
||||
}
|
||||
|
@@ -0,0 +1,85 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Kprobe event parser error log check
|
||||
|
||||
[ -f kprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
[ -f error_log ] || exit_unsupported
|
||||
|
||||
check_error() { # command-with-error-pos-by-^
|
||||
ftrace_errlog_check 'trace_kprobe' "$1" 'kprobe_events'
|
||||
}
|
||||
|
||||
if grep -q 'r\[maxactive\]' README; then
|
||||
check_error 'p^100 vfs_read' # MAXACT_NO_KPROBE
|
||||
check_error 'r^1a111 vfs_read' # BAD_MAXACT
|
||||
check_error 'r^100000 vfs_read' # MAXACT_TOO_BIG
|
||||
fi
|
||||
|
||||
check_error 'p ^non_exist_func' # BAD_PROBE_ADDR (enoent)
|
||||
check_error 'p ^hoge-fuga' # BAD_PROBE_ADDR (bad syntax)
|
||||
check_error 'p ^hoge+1000-1000' # BAD_PROBE_ADDR (bad syntax)
|
||||
check_error 'r ^vfs_read+10' # BAD_RETPROBE
|
||||
check_error 'p:^/bar vfs_read' # NO_GROUP_NAME
|
||||
check_error 'p:^12345678901234567890123456789012345678901234567890123456789012345/bar vfs_read' # GROUP_TOO_LONG
|
||||
|
||||
check_error 'p:^foo.1/bar vfs_read' # BAD_GROUP_NAME
|
||||
check_error 'p:foo/^ vfs_read' # NO_EVENT_NAME
|
||||
check_error 'p:foo/^12345678901234567890123456789012345678901234567890123456789012345 vfs_read' # EVENT_TOO_LONG
|
||||
check_error 'p:foo/^bar.1 vfs_read' # BAD_EVENT_NAME
|
||||
|
||||
check_error 'p vfs_read ^$retval' # RETVAL_ON_PROBE
|
||||
check_error 'p vfs_read ^$stack10000' # BAD_STACK_NUM
|
||||
|
||||
if grep -q '$arg<N>' README; then
|
||||
check_error 'p vfs_read ^$arg10000' # BAD_ARG_NUM
|
||||
fi
|
||||
|
||||
check_error 'p vfs_read ^$none_var' # BAD_VAR
|
||||
|
||||
check_error 'p vfs_read ^%none_reg' # BAD_REG_NAME
|
||||
check_error 'p vfs_read ^@12345678abcde' # BAD_MEM_ADDR
|
||||
check_error 'p vfs_read ^@+10' # FILE_ON_KPROBE
|
||||
|
||||
check_error 'p vfs_read ^+0@0)' # DEREF_NEED_BRACE
|
||||
check_error 'p vfs_read ^+0ab1(@0)' # BAD_DEREF_OFFS
|
||||
check_error 'p vfs_read +0(+0(@0^)' # DEREF_OPEN_BRACE
|
||||
|
||||
if grep -A1 "fetcharg:" README | grep -q '\$comm' ; then
|
||||
check_error 'p vfs_read +0(^$comm)' # COMM_CANT_DEREF
|
||||
fi
|
||||
|
||||
check_error 'p vfs_read ^&1' # BAD_FETCH_ARG
|
||||
|
||||
|
||||
# We've introduced this limitation with array support
|
||||
if grep -q ' <type>\\\[<array-size>\\\]' README; then
|
||||
check_error 'p vfs_read +0(^+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(@0))))))))))))))' # TOO_MANY_OPS?
|
||||
check_error 'p vfs_read +0(@11):u8[10^' # ARRAY_NO_CLOSE
|
||||
check_error 'p vfs_read +0(@11):u8[10]^a' # BAD_ARRAY_SUFFIX
|
||||
check_error 'p vfs_read +0(@11):u8[^10a]' # BAD_ARRAY_NUM
|
||||
check_error 'p vfs_read +0(@11):u8[^256]' # ARRAY_TOO_BIG
|
||||
fi
|
||||
|
||||
check_error 'p vfs_read @11:^unknown_type' # BAD_TYPE
|
||||
check_error 'p vfs_read $stack0:^string' # BAD_STRING
|
||||
check_error 'p vfs_read @11:^b10@a/16' # BAD_BITFIELD
|
||||
|
||||
check_error 'p vfs_read ^arg123456789012345678901234567890=@11' # ARG_NAME_TOO_LOG
|
||||
check_error 'p vfs_read ^=@11' # NO_ARG_NAME
|
||||
check_error 'p vfs_read ^var.1=@11' # BAD_ARG_NAME
|
||||
check_error 'p vfs_read var1=@11 ^var1=@12' # USED_ARG_NAME
|
||||
check_error 'p vfs_read ^+1234567(+1234567(+1234567(+1234567(+1234567(+1234567(@1234))))))' # ARG_TOO_LONG
|
||||
check_error 'p vfs_read arg1=^' # NO_ARG_BODY
|
||||
|
||||
# instruction boundary check is valid on x86 (at this moment)
|
||||
case $(uname -m) in
|
||||
x86_64|i[3456]86)
|
||||
echo 'p vfs_read' > kprobe_events
|
||||
if grep -q FTRACE ../kprobes/list ; then
|
||||
check_error 'p ^vfs_read+3' # BAD_INSN_BNDRY (only if function-tracer is enabled)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Uprobe event parser error log check
|
||||
|
||||
[ -f uprobe_events ] || exit_unsupported # this is configurable
|
||||
|
||||
[ -f error_log ] || exit_unsupported
|
||||
|
||||
check_error() { # command-with-error-pos-by-^
|
||||
ftrace_errlog_check 'trace_uprobe' "$1" 'uprobe_events'
|
||||
}
|
||||
|
||||
check_error 'p ^/non_exist_file:100' # FILE_NOT_FOUND
|
||||
check_error 'p ^/sys:100' # NO_REGULAR_FILE
|
||||
check_error 'p /bin/sh:^10a' # BAD_UPROBE_OFFS
|
||||
check_error 'p /bin/sh:10(^1a)' # BAD_REFCNT
|
||||
check_error 'p /bin/sh:10(10^' # REFCNT_OPEN_BRACE
|
||||
check_error 'p /bin/sh:10(10)^a' # BAD_REFCNT_SUFFIX
|
||||
|
||||
check_error 'p /bin/sh:10 ^@+ab' # BAD_FILE_OFFS
|
||||
check_error 'p /bin/sh:10 ^@symbol' # SYM_ON_UPROBE
|
||||
|
||||
exit 0
|
@@ -1,28 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: event trigger - test extended error support
|
||||
|
||||
|
||||
fail() { #msg
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
if [ ! -f set_event ]; then
|
||||
echo "event tracing is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
if [ ! -f synthetic_events ]; then
|
||||
echo "synthetic event is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
echo "Test extended error support"
|
||||
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' > events/sched/sched_wakeup/trigger
|
||||
! echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' >> events/sched/sched_wakeup/trigger 2> /dev/null
|
||||
if ! grep -q "ERROR:" events/sched/sched_wakeup/hist; then
|
||||
fail "Failed to generate extended error in histogram"
|
||||
fi
|
||||
|
||||
exit 0
|
Viittaa uudesa ongelmassa
Block a user