Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 871bef20 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Steven Rostedt (VMware)
Browse files

selftests: ftrace: Add probe event argument syntax testcase

Add a testcase for probe event argument syntax which
ensures the kprobe_events interface correctly parses
given event arguments.

Link: http://lkml.kernel.org/r/152129033679.31874.12705519603869152799.stgit@devbox



Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent c5d343b6
Loading
Loading
Loading
Loading
+97 −0
Original line number Diff line number Diff line
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# description: Kprobe event argument syntax

[ -f kprobe_events ] || exit_unsupported # this is configurable

grep "x8/16/32/64" README > /dev/null || 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
BADSYM="deaqswdefr"
SYMADDR=0x`grep -w ${GOODSYM} /proc/kallsyms | cut -f 1 -d " "`
GOODTYPE="x16"
BADTYPE="y16"

case `uname -m` in
x86_64|i[3456]86)
  GOODREG=%ax
  BADREG=%ex
;;
aarch64)
  GOODREG=%x0
  BADREG=%ax
;;
arm*)
  GOODREG=%r0
  BADREG=%ax
;;
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

: "Register access"
test_goodarg ${GOODREG}
test_badarg ${BADREG}

: "Symbol access"
test_goodarg "@${GOODSYM}" "@${SYMADDR}" "@${GOODSYM}+10" "@${GOODSYM}-10"
test_badarg "@" "@${BADSYM}" "@${GOODSYM}*10" "@${GOODSYM}/10" \
	    "@${GOODSYM}%10" "@${GOODSYM}&10" "@${GOODSYM}|10"

: "Stack access"
test_goodarg "\$stack" "\$stack0" "\$stack1"
test_badarg "\$stackp" "\$stack0+10" "\$stack1-10"

: "Retval access"
echo "r ${PROBEFUNC} \$retval" > kprobe_events
! echo "p ${PROBEFUNC} \$retval" > kprobe_events

: "Comm access"
test_goodarg "\$comm"

: "Indirect memory access"
test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \
	"+0(\$stack1)" "+10(@${GOODSYM}-10)" "+0(+10(+20(\$stack)))"
test_badarg "+(${GOODREG})" "(${GOODREG}+10)" "-(${GOODREG})" "(${GOODREG})" \
	"+10(\$comm)" "+0(${GOODREG})+10"

: "Name assignment"
test_goodarg "varname=${GOODREG}"
test_badarg "varname=varname2=${GOODREG}"

: "Type syntax"
test_goodarg "${GOODREG}:${GOODTYPE}"
test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \
	"${GOODTYPE}:${GOODREG}"

: "Combination check"

test_goodarg "\$comm:string" "+0(\$stack):string"
test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string"

echo > kprobe_events