From: Simon Horman <horms@verge.net.au>
To: Rabin Vincent <rabin@rab.in>
Cc: mmarek@suse.cz, arjan@linux.intel.com, wangcong@zeuux.org,
akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] scripts: add ARM support to decodecode
Date: Thu, 31 Dec 2009 16:18:58 +1100 [thread overview]
Message-ID: <20091231051858.GA31256@verge.net.au> (raw)
In-Reply-To: <1262184839-24497-1-git-send-email-rabin@rab.in>
On Wed, Dec 30, 2009 at 08:23:59PM +0530, Rabin Vincent wrote:
> 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
It should be possible to combine all these sed invocations into one
(untested):
echo $beforemark | sed -e 's/ /,0x/g; s/[<(]//g; s/[>)]//g' >> $T.s
or perhaps even
echo $beforemark | sed -e 's/ /,0x/g; 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
>
> --
> 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/
next prev parent reply other threads:[~2009-12-31 5:19 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-30 14:53 Rabin Vincent
2009-12-31 5:18 ` Simon Horman [this message]
2010-01-05 14:57 ` [PATCH v2] " Rabin Vincent
2010-01-05 15:06 ` Arjan van de Ven
2010-01-05 15:34 ` Michal Marek
2010-01-05 17:31 ` Russell King - ARM Linux
2010-01-05 19:27 ` Daniel Jacobowitz
2010-01-05 22:14 ` Simon Horman
2010-01-01 20:32 ` [PATCH] " Russell King - ARM Linux
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091231051858.GA31256@verge.net.au \
--to=horms@verge.net.au \
--cc=akpm@linux-foundation.org \
--cc=arjan@linux.intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mmarek@suse.cz \
--cc=rabin@rab.in \
--cc=wangcong@zeuux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®