--- /dev/null
+#! /bin/sh
+
+
+# This little script tries to formulate a series of "perf probe"
+# commands that touch the same probe locations as the stap script
+# would. This can be used to check stap's "alibi" against
+# kprobes/uprobes malfunctions.
+#
+# This is an imperfect mapping, requiring manual checking.
+#
+# Usage:
+
+# (stap -l PATTERN [-c COMMAND]; ...) | stap2perf | sh
+# (stap -p2 -e SCRIPT [-c COMMAND]; ...) | stap2perf | sh
+# perf list | grep probe
+# perf record -e 'probe*:*' COMMAND
+# perf report
+# perf probe -d 'probe*:*'
+
+
+function param1() {
+ # fish out the first literal-string parameter
+ echo "$1" | cut -f2 -d'"' | cut -f1 -d@ | cut -f1 -d'<'
+}
+
+function param2() {
+ # fish out the second literal-string parameter
+ echo "$1" | cut -f4 -d'"' | cut -f1 -d@ | cut -f1 -d'<'
+}
+
+
+while read pp; do
+ case "$pp" in
+ kernel.function*)
+ fn=`param1 "$pp"`
+ nr=`expr "$pp" : '.*\.return.*'`
+ if [ $nr -eq 0 ]; then
+ echo perf probe -a "kernel_$fn"
+ else
+ echo perf probe -a "kernel_${fn}_return=${fn}%return"
+ fi
+ ;;
+
+ process*function*)
+ proc=`param1 "$pp"`
+ procbn=`basename $proc`
+ fn=`param2 "$pp"`
+ nr=`expr "$pp" : '.*\.return.*'`
+ if [ $nr -eq 0 ]; then
+ echo perf probe -a "${procbn}_${fn}=$fn" -x "$proc"
+ else
+ echo perf probe -a "${procbn}_${fn}_return=${fn}%return" -x "$proc"
+ fi
+ ;;
+ esac
+done | sort | uniq
+
+echo
+echo
+echo perf list "|" grep probe