39 lines · plain
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.03# description: Kprobe events - probe points4# requires: kprobe_events5 6TARGET_FUNC=tracefs_create_dir7 8dec_addr() { # hexaddr9 printf "%d" "0x"`echo $1 | tail -c 8`10}11 12set_offs() { # prev target next13 A1=`dec_addr $1`14 A2=`dec_addr $2`15 A3=`dec_addr $3`16 TARGET="0x$2" # an address17 PREV=`expr $A1 - $A2` # offset to previous symbol18 NEXT=+`expr $A3 - $A2` # offset to next symbol19 OVERFLOW=+`printf "0x%x" ${PREV}` # overflow offset to previous symbol20}21 22# We have to decode symbol addresses to get correct offsets.23# If the offset is not an instruction boundary, it cause -EILSEQ.24set_offs `grep -v __pfx_ /proc/kallsyms | grep -A1 -B1 ${TARGET_FUNC} | cut -f 1 -d " " | xargs`25 26UINT_TEST=no27# printf "%x" -1 returns (unsigned long)-1.28if [ `printf "%x" -1 | wc -c` != 9 ]; then29 UINT_TEST=yes30fi31 32echo "p:testprobe ${TARGET_FUNC}" > kprobe_events33echo "p:testprobe ${TARGET}" > kprobe_events34echo "p:testprobe ${TARGET_FUNC}${NEXT}" > kprobe_events35! echo "p:testprobe ${TARGET_FUNC}${PREV}" > kprobe_events36if [ "${UINT_TEST}" = yes ]; then37! echo "p:testprobe ${TARGET_FUNC}${OVERFLOW}" > kprobe_events38fi39