forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.1 KiB
38 lines
1.1 KiB
#!/bin/sh |
|
# SPDX-License-Identifier: GPL-2.0 |
|
# description: Kprobe events - probe points |
|
# requires: kprobe_events |
|
|
|
TARGET_FUNC=tracefs_create_dir |
|
|
|
dec_addr() { # hexaddr |
|
printf "%d" "0x"`echo $1 | tail -c 8` |
|
} |
|
|
|
set_offs() { # prev target next |
|
A1=`dec_addr $1` |
|
A2=`dec_addr $2` |
|
A3=`dec_addr $3` |
|
TARGET="0x$2" # an address |
|
PREV=`expr $A1 - $A2` # offset to previous symbol |
|
NEXT=+`expr $A3 - $A2` # offset to next symbol |
|
OVERFLOW=+`printf "0x%x" ${PREV}` # overflow offset to previous symbol |
|
} |
|
|
|
# We have to decode symbol addresses to get correct offsets. |
|
# If the offset is not an instruction boundary, it cause -EILSEQ. |
|
set_offs `grep -A1 -B1 ${TARGET_FUNC} /proc/kallsyms | cut -f 1 -d " " | xargs` |
|
|
|
UINT_TEST=no |
|
# printf "%x" -1 returns (unsigned long)-1. |
|
if [ `printf "%x" -1 | wc -c` != 9 ]; then |
|
UINT_TEST=yes |
|
fi |
|
|
|
echo "p:testprobe ${TARGET_FUNC}" > kprobe_events |
|
echo "p:testprobe ${TARGET}" > kprobe_events |
|
echo "p:testprobe ${TARGET_FUNC}${NEXT}" > kprobe_events |
|
! echo "p:testprobe ${TARGET_FUNC}${PREV}" > kprobe_events |
|
if [ "${UINT_TEST}" = yes ]; then |
|
! echo "p:testprobe ${TARGET_FUNC}${OVERFLOW}" > kprobe_events |
|
fi
|
|
|