aboutsummaryrefslogtreecommitdiff
path: root/fw/tools/profile.sh
diff options
context:
space:
mode:
Diffstat (limited to 'fw/tools/profile.sh')
-rw-r--r--fw/tools/profile.sh26
1 files changed, 26 insertions, 0 deletions
diff --git a/fw/tools/profile.sh b/fw/tools/profile.sh
new file mode 100644
index 0000000..b209a14
--- /dev/null
+++ b/fw/tools/profile.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+NLOOPS=1000
+SLEEP=0.1
+
+[ $# -lt 1 ] && echo "ERROR: Not enough arguments" && exit 2
+elffile="$1"
+
+trap "exit" SIGINT
+
+logfile=$(mktemp)
+
+arm-none-eabi-gdb -x profile.gdb "$elffile" > "$logfile" 2>/dev/null&
+gdbpid=$!
+trap "kill -TERM $gdbpid; rm $logfile" EXIT
+echo "Gathering..."
+for i in $(seq 1 $NLOOPS); do
+ echo "$i/$NLOOPS"
+ kill -INT $gdbpid
+ sleep $SLEEP
+done
+kill -TERM $gdbpid
+trap "rm '$logfile'" EXIT
+
+egrep -o '\w+ \(.*\) at .*' "$logfile" |cut -d' ' -f1|sort|uniq -c|sort -n
+echo 'Total:' $(egrep -c '\w+ \(.*\) at .*' "$logfile")
+