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 52