summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Clements <[email protected]>2012-08-24 14:51:52 -0400
committerAustin Clements <[email protected]>2012-08-24 14:51:52 -0400
commit951b77f7eced2165312d5c12d6256e874dba10f8 (patch)
tree0a5f592d363f725a671b9ffad9d9280fa9aa19e9
parent020acb4f10832d0c003f24272b75a95859d4188f (diff)
downloadxv6-labs-951b77f7eced2165312d5c12d6256e874dba10f8.tar.gz
xv6-labs-951b77f7eced2165312d5c12d6256e874dba10f8.tar.bz2
xv6-labs-951b77f7eced2165312d5c12d6256e874dba10f8.zip
Various fixes and improvements to printpcs
Search for an addr2line that supports elf32-i386. Don't print the path of addr2line as a side-effect of which. Don't uselessly pipe "grep '^ '" to addr2line's stdin. Enable as many pretty-printing and otherwise helpful options as possible (this makes the output *much* more pleasant on modern addr2lines).
-rwxr-xr-xprintpcs19
1 files changed, 11 insertions, 8 deletions
diff --git a/printpcs b/printpcs
index 32b33cc..81d039b 100755
--- a/printpcs
+++ b/printpcs
@@ -1,11 +1,14 @@
#!/bin/sh
-# Decode the symbols from a panic stack trace on stdin
+# Decode the symbols from a panic EIP list
-if which addr2line
-then
- p="addr2line"
-else
- p="i386-jos-elf-addr2line"
-fi
-echo grep '^ ' | $p -e kernel $*
+# Find a working addr2line
+for p in i386-jos-elf-addr2line addr2line; do
+ if which $p 2>&1 >/dev/null && \
+ $p -h 2>&1 | grep -q '\belf32-i386\b'; then
+ break
+ fi
+done
+
+# Enable as much pretty-printing as this addr2line can do
+$p $($p -h | grep ' -[aipsf] ' | awk '{print $1}') -e kernel "$@"