lkml.org 
[lkml]   [2009]   [Dec]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] scripts: add ARM support to decodecode
    Date
    This patch adds support for decoding ARM oopses to scripts/decodecode.
    The following things are handled:

    - ARCH and CROSS_COMPILE environment variables are respected.

    - The Code: in x86 oopses is in bytes, while it is in either words (4
    bytes) or halfwords for ARM.

    - Some versions of ARM objdump refuse to disassemble instructions
    generated by literal constants (".word 0x..."). The workaround is to
    strip the object file first.

    - The faulting instruction is marked (liked so) in ARM, but <like so>
    in x86.

    - ARM mnemonics may include characters such as [] which need to be
    escaped before being passed to sed for the "<- trapping instruction"
    substitution.

    Signed-off-by: Rabin Vincent <rabin@rab.in>
    ---
    I didn't think it was necessary to split this up into separate patches, let me
    know if you would prefer that.

    scripts/decodecode | 47 +++++++++++++++++++++++++++++++++++------------
    1 files changed, 35 insertions(+), 12 deletions(-)

    diff --git a/scripts/decodecode b/scripts/decodecode
    index 4b00647..4d025c9 100755
    --- a/scripts/decodecode
    +++ b/scripts/decodecode
    @@ -7,7 +7,7 @@
    # AFLAGS=--32 decodecode < 386.oops

    cleanup() {
    - rm -f $T $T.s $T.o $T.oo $T.aa $T.aaa
    + rm -f $T $T.s $T.o $T.oo $T.aa $T.dis
    exit 1
    }

    @@ -39,6 +39,29 @@ fi
    echo $code
    code=`echo $code | sed -e 's/.*Code: //'`

    +width=`expr index "$code" ' '`
    +width=$[($width-1)/2]
    +case $width in
    +1) type=byte ;;
    +2) type=2byte ;;
    +4) type=4byte ;;
    +esac
    +
    +disas() {
    + ${CROSS_COMPILE}as $AFLAGS -o $1.o $1.s &> /dev/null
    +
    + if [ "$ARCH" == "arm" ]; then
    + if [ $width == 2 ]; then
    + OBJDUMPFLAGS="-M force-thumb"
    + fi
    +
    + ${CROSS_COMPILE}strip $1.o
    + fi
    +
    + ${CROSS_COMPILE}objdump $OBJDUMPFLAGS -S $1.o | grep -v "/tmp" | \
    + grep -v "Disassembly" | grep -v "\.text" | grep -v "^$" &> $1.dis
    +}
    +
    marker=`expr index "$code" "\<"`
    if [ $marker -eq 0 ]; then
    marker=`expr index "$code" "\("`
    @@ -49,12 +72,11 @@ if [ $marker -ne 0 ]; then
    echo All code >> $T.oo
    echo ======== >> $T.oo
    beforemark=`echo "$code"`
    - echo -n " .byte 0x" > $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
    + echo -n " .$type 0x" > $T.s
    + echo $beforemark | sed -e 's/ /,0x/g' | sed -e "s/[<(]//g" | sed -e "s/[>)]//g" >> $T.s
    + disas $T
    + cat $T.dis >> $T.oo
    + rm -f $T.o $T.s $T.dis

    # and fix code at-and-after marker
    code=`echo "$code" | cut -c$((${marker} + 1))-`
    @@ -62,13 +84,14 @@ 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
    +code=`echo $code | sed -e 's/[>)]$//'`
    +echo -n " .$type 0x" > $T.s
    echo $code >> $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
    +disas $T
    +cat $T.dis >> $T.aa

    -faultline=`cat $T.aaa | head -1 | cut -d":" -f2`
    +faultline=`cat $T.dis | head -1 | cut -d":" -f2`
    +faultline=`echo "$faultline" | sed -e 's/\[/\\\[/' | sed -e 's/\]/\\\]/'`

    cat $T.oo | sed -e "s/\($faultline\)/\*\1 <-- trapping instruction/g"
    echo
    --
    1.6.5


    \
     
     \ /
      Last update: 2009-12-30 15:57    [W:0.035 / U:1.660 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site