mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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/

  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®