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
Unified · Split
| @@ -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 | |