string: factorize skip_spaces and export it to be generally available
[safe/jmp/linux-2.6] / scripts / decodecode
old mode 100644 (file)
new mode 100755 (executable)
index 1e1a8f6..4b00647
@@ -6,7 +6,19 @@
 # e.g., to decode an i386 oops on an x86_64 system, use:
 # AFLAGS=--32 decodecode < 386.oops
 
-T=`mktemp`
+cleanup() {
+       rm -f $T $T.s $T.o $T.oo $T.aa  $T.aaa
+       exit 1
+}
+
+die() {
+       echo "$@"
+       exit 1
+}
+
+trap cleanup EXIT
+
+T=`mktemp` || die "cannot create temp file"
 code=
 
 while read i ; do
@@ -20,6 +32,7 @@ esac
 done
 
 if [ -z "$code" ]; then
+       rm $T
        exit
 fi
 
@@ -31,21 +44,33 @@ if [ $marker -eq 0 ]; then
        marker=`expr index "$code" "\("`
 fi
 
+touch $T.oo
 if [ $marker -ne 0 ]; then
-       beforemark=`echo "$code" | cut -c-$((${marker} - 1))`
+       echo All code >> $T.oo
+       echo ======== >> $T.oo
+       beforemark=`echo "$code"`
        echo -n "       .byte 0x" > $T.s
-       echo $beforemark | sed -e 's/ /,0x/g' >> $T.s
-       as $AFLAGS -o $T.o $T.s
-       objdump -S $T.o
-       rm $T.o $T.s
+       echo $beforemark | sed -e 's/ /,0x/g' | sed -e 's/<//g' | sed -e 's/>//g' >> $T.s
+       as $AFLAGS -o $T.o $T.s &> /dev/null
+       objdump -S $T.o | grep -v "/tmp" | grep -v "Disassembly" | grep -v "\.text" | grep -v "^$" &> $T.ooo
+       cat $T.ooo >> $T.oo
+       rm -f $T.o $T.s  $T.ooo
 
 # and fix code at-and-after marker
        code=`echo "$code" | cut -c$((${marker} + 1))-`
 fi
-
+echo Code starting with the faulting instruction  > $T.aa
+echo =========================================== >> $T.aa
 code=`echo $code | sed -e 's/ [<(]/ /;s/[>)] / /;s/ /,0x/g'`
 echo -n "      .byte 0x" > $T.s
 echo $code >> $T.s
-as $AFLAGS -o $T.o $T.s
-objdump -S $T.o
-rm $T.o $T.s
+as $AFLAGS -o $T.o $T.s &> /dev/null
+objdump -S $T.o | grep -v "Disassembly" | grep -v "/tmp" | grep -v "\.text" | grep -v "^$" &> $T.aaa
+cat $T.aaa >> $T.aa
+
+faultline=`cat $T.aaa | head -1 | cut -d":" -f2`
+
+cat $T.oo | sed -e "s/\($faultline\)/\*\1     <-- trapping instruction/g"
+echo
+cat $T.aa
+cleanup