diff options
| -rw-r--r-- | tools/testing/selftests/ftrace/test.d/kprobe/probepoint.tc | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/probepoint.tc b/tools/testing/selftests/ftrace/test.d/kprobe/probepoint.tc new file mode 100644 index 000000000000..4fda01a08da4 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/kprobe/probepoint.tc | |||
| @@ -0,0 +1,43 @@ | |||
| 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 | ||
