summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTillmann Karras <tilkax@gmail.com>2015-02-08 00:39:54 +0100
committerTillmann Karras <tilkax@gmail.com>2015-02-08 00:39:54 +0100
commitfd374a7989a642a3eafc441d738f72cf5fe2d47d (patch)
tree69640f7420cd66c2d3692f9cf7f524fed72b79b2
parent8f4bcf3ec33e63b02e001b7256148e6f94c95da8 (diff)
Tools: add disassemble script for perf
-rwxr-xr-xTools/perf-disassemble.sh50
1 files changed, 50 insertions, 0 deletions
diff --git a/Tools/perf-disassemble.sh b/Tools/perf-disassemble.sh
new file mode 100755
index 0000000000..d338b7141e
--- /dev/null
+++ b/Tools/perf-disassemble.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Using this script instead of objdump enables perf to disassemble
+# and annotate any JIT code (given a symbol file).
+#
+# To run perf without root:
+# kernel.perf_event_paranoid = -1
+# To trace a process without root:
+# kernel.yama.ptrace_scope = 0
+#
+# Example usage:
+# $ dolphin-emu -P /tmp -b -e $game
+# $ perf top -p $(pidof dolphin-emu) --objdump ./Tools/perf-disassemble.sh
+
+flavor=att
+raw=r
+src=
+
+[[ "${@: -1}" != /tmp/perf-*.map ]] && { objdump "$@"; exit; }
+
+while [ "$1" ]
+do
+ case "$1" in
+ -M)
+ flavor=$2
+ shift
+ ;;
+ --start-address=*)
+ start="${1##--start-address=}"
+ ;;
+ --stop-address=*)
+ stop="${1##--stop-address=}"
+ ;;
+ --no-show-raw)
+ raw=
+ ;;
+ -S)
+ src=m
+ ;;
+ -[ldC])
+ ;;
+ -*)
+ echo "Unknown parameter '$1'"
+ ;;
+ *)
+ ;;
+ esac
+ shift
+done
+gdb -q -p $(pidof dolphin-emu) -ex "set disassembly $flavor" -ex "disas /$raw$src $start,$stop" -ex q -batch