
From: Jorn Engel <joern@wohnheim.fh-wedel.de>

o Fix the misparsing on *.ko noticed by Andrew Morton.
o Slightly simplify the output format.
o Slightly simplify the code
o Added ppc64 architecture (re by Anton Blanchard)

Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de>
Signed-off-by:  Andrew Morton <akpm@osdl.org>
---

 25-akpm/scripts/checkstack.pl |   45 ++++++++++++++++++++++--------------------
 1 files changed, 24 insertions(+), 21 deletions(-)

diff -puN scripts/checkstack.pl~checkstack-target-update-1 scripts/checkstack.pl
--- 25/scripts/checkstack.pl~checkstack-target-update-1	Wed May 26 15:34:05 2004
+++ 25-akpm/scripts/checkstack.pl	Wed May 26 15:34:05 2004
@@ -9,6 +9,7 @@
 #	Mips port by Juan Quintela <quintela@mandrakesoft.com>
 #	IA64 port via Andreas Dilger
 #	Arm port by Holger Schurig
+#	Random bits by Matt Mackall <mpm@selenic.com>
 #
 #	Usage:
 #	objdump -d vmlinux | stackcheck_ppc.pl [arch]
@@ -17,10 +18,9 @@
 
 # check for arch
 #
-# $re is used for three matches:
+# $re is used for two matches:
 # $& (whole re) matches the complete objdump line with the stack growth
-# $1 (first bracket) matches the code that will be displayed in the output
-# $2 (second bracket) matches the size of the stack growth
+# $1 (first bracket) matches the size of the stack growth
 #
 # use anything else and feel the pain ;)
 {
@@ -33,25 +33,28 @@
 	$xs	= "[0-9a-f ]";	# hex character or space
 	if ($arch =~ /^arm$/) {
 		#c0008ffc:	e24dd064	sub	sp, sp, #100	; 0x64
-		$re = qr/.*(sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2}))/o;
+		$re = qr/.*sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2})/o;
 	} elsif ($arch =~ /^i[3456]86$/) {
 		#c0105234:       81 ec ac 05 00 00       sub    $0x5ac,%esp
-		$re = qr/^.*(sub    \$(0x$x{3,5}),\%esp)$/o;
+		$re = qr/^.*sub    \$(0x$x{3,5}),\%esp$/o;
 	} elsif ($arch =~ /^ia64$/) {
 		#e0000000044011fc:       01 0f fc 8c     adds r12=-384,r12
-		$re = qr/.*(adds.*r12=-(([0-9]{2}|[3-9])[0-9]{2}),r12)/o;
+		$re = qr/.*adds.*r12=-(([0-9]{2}|[3-9])[0-9]{2}),r12/o;
 	} elsif ($arch =~ /^mips64$/) {
 		#8800402c:       67bdfff0        daddiu  sp,sp,-16
-		$re = qr/.*(daddiu.*sp,sp,-(([0-9]{2}|[3-9])[0-9]{2}))/o;
+		$re = qr/.*daddiu.*sp,sp,-(([0-9]{2}|[3-9])[0-9]{2})/o;
 	} elsif ($arch =~ /^mips$/) {
 		#88003254:       27bdffe0        addiu   sp,sp,-32
-		$re = qr/.*(addiu.*sp,sp,-(([0-9]{2}|[3-9])[0-9]{2}))/o;
+		$re = qr/.*addiu.*sp,sp,-(([0-9]{2}|[3-9])[0-9]{2})/o;
 	} elsif ($arch =~ /^ppc$/) {
 		#c00029f4:       94 21 ff 30     stwu    r1,-208(r1)
-		$re = qr/.*(stwu.*r1,-($x{3,5})\(r1\))/o;
+		$re = qr/.*stwu.*r1,-($x{3,5})\(r1\)/o;
+	} elsif ($arch =~ /^ppc64$/) {
+		#XXX
+		$re = qr/.*stdu.*r1,-($x{3,5})\(r1\)/o;
 	} elsif ($arch =~ /^s390x?$/) {
 		#   11160:       a7 fb ff 60             aghi   %r15,-160
-		$re = qr/.*(ag?hi.*\%r15,-(([0-9]{2}|[3-9])[0-9]{2}))/o;
+		$re = qr/.*ag?hi.*\%r15,-(([0-9]{2}|[3-9])[0-9]{2})/o;
 	} else {
 		print("wrong or unknown architecture\n");
 		exit
@@ -59,10 +62,8 @@
 }
 
 sub bysize($) {
-	($asize = $a) =~ s/$re/\2/;
-	($bsize = $b) =~ s/$re/\2/;
-	$asize = hex($asize) if ($asize =~ /^0x/);
-	$bsize = hex($bsize) if ($bsize =~ /^0x/);
+	($asize = $a) =~ s/.*	+(.*)$/$1/;
+	($bsize = $b) =~ s/.*	+(.*)$/$1/;
 	$bsize <=> $asize
 }
 
@@ -72,12 +73,16 @@ sub bysize($) {
 $funcre = qr/^$x* \<(.*)\>:$/;
 while ($line = <STDIN>) {
 	if ($line =~ m/$funcre/) {
-		($func = $line) =~ s/$funcre/\1/;
-		chomp($func);
+		$func = $1;
 	}
 	if ($line =~ m/$re/) {
-		(my $addr = $line) =~ s/^($xs{8}).*/0x\1/o;
-		chomp($addr);
+		my $size = $1;
+		$size = hex($size) if ($size =~ /^0x/);
+
+		$line =~ m/^($xs*).*/;
+		my $addr = $1;
+		$addr =~ s/ /0/g;
+		$addr = "0x$addr";
 
 		my $intro = "$addr $func:";
 		my $padlen = 56 - length($intro);
@@ -85,9 +90,7 @@ while ($line = <STDIN>) {
 			$intro .= '	';
 			$padlen -= 8;
 		}
-		(my $code = $line) =~ s/$re/\1/;
-
-		$stack[@stack] = "$intro $code";
+		$stack[@stack] = "$intro$size\n";
 	}
 }
 
_
