Re: [PATCH v2 15/17] selftests: ftrace: Add a testcase for symbol type

From: Masami Hiramatsu
Date: Thu Feb 22 2018 - 06:43:36 EST


On Thu, 22 Feb 2018 00:01:29 +0900
Masami Hiramatsu <mhiramat@xxxxxxxxxx> wrote:

> Add a testcase for symbol type with kprobe event.
> This tests good/bad syntax combinations and also
> the traced data.
> If the kernel doesn't support symbol type, it skips
> the test as UNSUPPORTED.
>
> Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> ---
> .../ftrace/test.d/kprobe/kprobe_args_symbol.tc | 73 ++++++++++++++++++++
> 1 file changed, 73 insertions(+)
> create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_symbol.tc
>
> diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_symbol.tc b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_symbol.tc
> new file mode 100644
> index 000000000000..a5820b175df5
> --- /dev/null
> +++ b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_symbol.tc
> @@ -0,0 +1,73 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0
> +# description: Kprobe event argument symbol type
> +
> +[ -f kprobe_events ] || exit_unsupported # this is configurable
> +
> +grep -qe "type:.* symbol" README || exit_unsupported # version issue
> +
> +echo 0 > events/enable
> +echo > kprobe_events
> +
> +PROBEFUNC="vfs_read"
> +GOODREG=
> +BADREG=
> +GOODSYM="_sdata"
> +if ! grep -qw ${GOODSYM} /proc/kallsyms ; then
> + GOODSYM=$PROBEFUNC
> +fi
> +
> +case `uname -m` in
> +x86_64|i[3456]86)
> + GOODREG=%ax
> + BADREG=%ex
> +;;
> +aarch64)
> + GOODREG=%x0
> + BADREG=%ax
> +;;
> +arm*)
> + GOODREG=%r0
> + BADREG=%ax
> +;;
> +*)
> + echo "Please implement other architecture here"
> + exit_untested
> +esac
> +
> +test_goodarg() # Good-args
> +{
> + while [ "$1" ]; do
> + echo "p ${PROBEFUNC} $1" > kprobe_events
> + shift 1
> + done;
> +}
> +
> +test_badarg() # Bad-args
> +{
> + while [ "$1" ]; do
> + ! echo "p ${PROBEFUNC} $1" > kprobe_events
> + shift 1
> + done;
> +}
> +
> +echo > kprobe_events
> +
> +: "Symbol type"
> +test_goodarg "${GOODREG}:symbol" "@${GOODSYM}:symbol" "@${GOODSYM}+10:symbol" \
> + "\$stack0:symbol" "+0(\$stack):symbol"
> +test_badarg "\$comm:symbol"
> +
> +: "Retval with symbol type"
> +echo "r ${PROBEFUNC} \$retval:symbol" > kprobe_events
> +
> +echo > kprobe_events
> +
> +: "Test get symbol"
> +echo 'p:testprobe create_trace_kprobe $stack0:symbol' > kprobe_events
> +echo 1 > events/kprobes/testprobe/enable
> +! echo test >> kprobe_events
> +tail -n 1 trace | grep -q "arg1=trace_run_command"

Hmm, this works only on x86 and other arch which stores return address on
top of stack. I'll find some other good point to test it.

Thanks,

> +
> +echo 0 > events/enable
> +echo > kprobe_events
>


--
Masami Hiramatsu <mhiramat@xxxxxxxxxx>