selftests: ftrace: Add a testcase for probepoint

Add a testcase for probe point definition. This tests
symbol, address and symbol+offset syntax. The offset
must be positive and smaller than UINT_MAX.

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

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

authored by Masami Hiramatsu and committed by Steven Rostedt (VMware) dfa453bc 5fbdbed7

+43
+43
tools/testing/selftests/ftrace/test.d/kprobe/probepoint.tc
··· 1 + #!/bin/sh 2 + # SPDX-License-Identifier: GPL-2.0 3 + # description: Kprobe events - probe points 4 + 5 + [ -f kprobe_events ] || exit_unsupported # this is configurable 6 + 7 + TARGET_FUNC=create_trace_kprobe 8 + 9 + dec_addr() { # hexaddr 10 + printf "%d" "0x"`echo $1 | tail -c 8` 11 + } 12 + 13 + set_offs() { # prev target next 14 + A1=`dec_addr $1` 15 + A2=`dec_addr $2` 16 + A3=`dec_addr $3` 17 + TARGET="0x$2" # an address 18 + PREV=`expr $A1 - $A2` # offset to previous symbol 19 + NEXT=+`expr $A3 - $A2` # offset to next symbol 20 + OVERFLOW=+`printf "0x%x" ${PREV}` # overflow offset to previous symbol 21 + } 22 + 23 + # We have to decode symbol addresses to get correct offsets. 24 + # If the offset is not an instruction boundary, it cause -EILSEQ. 25 + set_offs `grep -A1 -B1 ${TARGET_FUNC} /proc/kallsyms | cut -f 1 -d " " | xargs` 26 + 27 + UINT_TEST=no 28 + # printf "%x" -1 returns (unsigned long)-1. 29 + if [ `printf "%x" -1 | wc -c` != 9 ]; then 30 + UINT_TEST=yes 31 + fi 32 + 33 + echo 0 > events/enable 34 + echo > kprobe_events 35 + echo "p:testprobe ${TARGET_FUNC}" > kprobe_events 36 + echo "p:testprobe ${TARGET}" > kprobe_events 37 + echo "p:testprobe ${TARGET_FUNC}${NEXT}" > kprobe_events 38 + ! echo "p:testprobe ${TARGET_FUNC}${PREV}" > kprobe_events 39 + if [ "${UINT_TEST}" = yes ]; then 40 + ! echo "p:testprobe ${TARGET_FUNC}${OVERFLOW}" > kprobe_events 41 + fi 42 + echo > kprobe_events 43 + clear_trace