lkml.org 
[lkml]   [2008]   [Oct]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    Date
    From
    SubjectRe: [PATCH] scripts: improve the decodecode script
    On Wed, 29 Oct 2008 17:22:26 +0000
    Américo Wang <xiyou.wangcong@gmail.com> wrote:

    > On Wed, Oct 29, 2008 at 10:00:45AM -0700, Arjan van de Ven wrote:
    > >From 80bf813c2bdc3538d823bb59c2611b40673e395a Mon Sep 17 00:00:00
    > >2001 From: Arjan van de Ven <arjan@linux.intel.com>
    > >Date: Wed, 29 Oct 2008 09:57:07 -0700
    > >Subject: [PATCH] scripts: improve the decodecode script
    > >
    > >kerneloops.org has been using an improved "decodecode" script,
    > >specifically it has a special marker that shows which line
    > >in the assembly the oops happened at, like this:
    > >
    > > 20: 83 e0 03 and $0x3,%eax
    > > 23: 09 d8 or %ebx,%eax
    > > 25: 85 db test %ebx,%ebx
    > > 27: 89 02 mov %eax,(%edx)
    > > 29: 74 0f je 0x3a
    > > 2b:* 3b 73 04 cmp 0x4(%ebx),%esi
    > > <-- trapping instruction 2e: 75 05
    > > jne 0x35 30: 89 53 04 mov
    > > %edx,0x4(%ebx) 33: eb 07 jmp 0x3c
    > > 35: 89 53 08 mov %edx,0x8(%ebx)
    > >
    > >this patch updates the kernel copy to also have this functionality.
    > >
    > >Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
    > >---
    > > scripts/decodecode | 32 ++++++++++++++++++++++----------
    > > 1 files changed, 22 insertions(+), 10 deletions(-)
    > >
    > >diff --git a/scripts/decodecode b/scripts/decodecode
    > >index 235d393..dd9bf17 100755
    > >--- a/scripts/decodecode
    > >+++ b/scripts/decodecode
    > >@@ -7,7 +7,7 @@
    > > # AFLAGS=--32 decodecode < 386.oops
    > >
    > > cleanup() {
    > >- rm -f $T $T.s $T.o
    > >+ rm -f $T $T.s $T.o $T.oo $T.aa $T.aaa
    > > exit 1
    > > }
    > >
    > >@@ -44,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 $T.s $T.o
    > >+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
    > >+rm -f $T.o $T.s $T $T.oo $T.aa $T.aaa[5~
    >
    > what is $T.aaa[5~ ? :-)
    >
    > And why not call cleanup() here?

    good point

    update below


    From 232b53efebc0bdba0be17dd0a695494faf3fdb60 Mon Sep 17 00:00:00 2001
    From: Arjan van de Ven <arjan@linux.intel.com>
    Date: Wed, 29 Oct 2008 09:57:07 -0700
    Subject: [PATCH] scripts: improve the decodecode script

    kerneloops.org has been using an improved "decodecode" script,
    specifically it has a special marker that shows which line
    in the assembly the oops happened at, like this:

    20: 83 e0 03 and $0x3,%eax
    23: 09 d8 or %ebx,%eax
    25: 85 db test %ebx,%ebx
    27: 89 02 mov %eax,(%edx)
    29: 74 0f je 0x3a
    2b:* 3b 73 04 cmp 0x4(%ebx),%esi <-- trapping instruction
    2e: 75 05 jne 0x35
    30: 89 53 04 mov %edx,0x4(%ebx)
    33: eb 07 jmp 0x3c
    35: 89 53 08 mov %edx,0x8(%ebx)

    this patch updates the kernel copy to also have this functionality.

    Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
    ---
    scripts/decodecode | 32 ++++++++++++++++++++++----------
    1 files changed, 22 insertions(+), 10 deletions(-)
    diff --git a/scripts/decodecode b/scripts/decodecode
    index 235d393..4b00647 100755
    --- a/scripts/decodecode
    +++ b/scripts/decodecode
    @@ -7,7 +7,7 @@
    # AFLAGS=--32 decodecode < 386.oops

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

    @@ -44,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 $T.s $T.o
    +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
    --
    1.5.5.1

    --
    Arjan van de Ven Intel Open Source Technology Centre
    For development, discussion and tips for power savings,
    visit http://www.lesswatts.org
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2008-10-29 20:23    [W:0.039 / U:0.828 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site