aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRandy Dunlap <randy.dunlap@oracle.com>2007-07-16 02:41:15 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-16 12:05:48 -0400
commitdcecc6c70013e3a5fa81b3081480c03e10670a23 (patch)
treea45c6a35538004732ea4ce130f9fa5db5f8a1bf6
parent213dd266d48af90c1eec8688c1ff31aa34d21de2 (diff)
doc/oops-tracing: add Code: decode info
Add info that the Code: bytes line contains <xy> or (wxyz) in some architecture oops reports and what that means. Add a script by Andi Kleen that reads the Code: line from an Oops report file and generates assembly code from the hex bytes. Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> Cc: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--Documentation/oops-tracing.txt14
-rw-r--r--scripts/decodecode51
2 files changed, 65 insertions, 0 deletions
diff --git a/Documentation/oops-tracing.txt b/Documentation/oops-tracing.txt
index 7d5b60dea551..23e6dde7eea6 100644
--- a/Documentation/oops-tracing.txt
+++ b/Documentation/oops-tracing.txt
@@ -86,6 +86,20 @@ stuff are the values reported by the Oops - you can just cut-and-paste
86and do a replace of spaces to "\x" - that's what I do, as I'm too lazy 86and do a replace of spaces to "\x" - that's what I do, as I'm too lazy
87to write a program to automate this all). 87to write a program to automate this all).
88 88
89Alternatively, you can use the shell script in scripts/decodecode.
90Its usage is: decodecode < oops.txt
91
92The hex bytes that follow "Code:" may (in some architectures) have a series
93of bytes that precede the current instruction pointer as well as bytes at and
94following the current instruction pointer. In some cases, one instruction
95byte or word is surrounded by <> or (), as in "<86>" or "(f00d)". These
96<> or () markings indicate the current instruction pointer. Example from
97i386, split into multiple lines for readability:
98
99Code: f9 0f 8d f9 00 00 00 8d 42 0c e8 dd 26 11 c7 a1 60 ea 2b f9 8b 50 08 a1
10064 ea 2b f9 8d 34 82 8b 1e 85 db 74 6d 8b 15 60 ea 2b f9 <8b> 43 04 39 42 54
1017e 04 40 89 42 54 8b 43 04 3b 05 00 f6 52 c0
102
89Finally, if you want to see where the code comes from, you can do 103Finally, if you want to see where the code comes from, you can do
90 104
91 cd /usr/src/linux 105 cd /usr/src/linux
diff --git a/scripts/decodecode b/scripts/decodecode
new file mode 100644
index 000000000000..1e1a8f620c47
--- /dev/null
+++ b/scripts/decodecode
@@ -0,0 +1,51 @@
1#!/bin/sh
2# Disassemble the Code: line in Linux oopses
3# usage: decodecode < oops.file
4#
5# options: set env. variable AFLAGS=options to pass options to "as";
6# e.g., to decode an i386 oops on an x86_64 system, use:
7# AFLAGS=--32 decodecode < 386.oops
8
9T=`mktemp`
10code=
11
12while read i ; do
13
14case "$i" in
15*Code:*)
16 code=$i
17 ;;
18esac
19
20done
21
22if [ -z "$code" ]; then
23 exit
24fi
25
26echo $code
27code=`echo $code | sed -e 's/.*Code: //'`
28
29marker=`expr index "$code" "\<"`
30if [ $marker -eq 0 ]; then
31 marker=`expr index "$code" "\("`
32fi
33
34if [ $marker -ne 0 ]; then
35 beforemark=`echo "$code" | cut -c-$((${marker} - 1))`
36 echo -n " .byte 0x" > $T.s
37 echo $beforemark | sed -e 's/ /,0x/g' >> $T.s
38 as $AFLAGS -o $T.o $T.s
39 objdump -S $T.o
40 rm $T.o $T.s
41
42# and fix code at-and-after marker
43 code=`echo "$code" | cut -c$((${marker} + 1))-`
44fi
45
46code=`echo $code | sed -e 's/ [<(]/ /;s/[>)] / /;s/ /,0x/g'`
47echo -n " .byte 0x" > $T.s
48echo $code >> $T.s
49as $AFLAGS -o $T.o $T.s
50objdump -S $T.o
51rm $T.o $T.s