selftests: ftrace: Add a testcase for probepoint
[muen/linux.git] / 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