lkml.org 
[lkml]   [2004]   [May]   [26]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateWed, 26 May 2004 12:06:15 +0200
FromJörn Engel <>
SubjectRe: [4KSTACK][2.6.6] Stack overflow in radeonfb
On Mon, 17 May 2004 16:59:19 -0700, Andrew Morton wrote:
> Matt Mackall <mpm@selenic.com> wrote:
> >
> > I have a cleaned up version of this script in -tiny which is a bit
> > nicer for adding new arches to and produces simpler output:
> 
> OK, thanks.  Joern, could you please own this megaproject?  Send
> me any needed diffs against -mm3?

Below.  I've picked up some of Matt's ideas, but not his code.  While
being short and lean, it is wrong.  There may be more than one
function with the same name, for whatever reason, and Matt's code will
choke on such things.

Matt, if you can send me a patch that doesn't suffer this problem,
I'll gladly accept it.  Your perl is nicer than mine, no doubt.


Oh, and since Linus RFD sounds good and is *MUCH* nicer than what FSF
or RedHat want, I'll just accept the certificate.

        Developer's Certificate of Origin 1.0

        By making a contribution to this project, I certify that:

        (a) The contribution was created in whole or in part by me and I
            have the right to submit it under the open source license
            indicated in the file; or

        (b) The contribution is based upon previous work that, to the best
            of my knowledge, is covered under an appropriate open source
            license and I have the right under that license to submit that
            work with modifications, whether created in whole or in part
            by me, under the same open source license (unless I am   
            permitted to submit under a different license), as indicated
            in the file; or

        (c) The contribution was provided directly to me by some other
            person who certified (a), (b) or (c) and I have not modified
            it.

Jörn

-- 
People will accept your ideas much more readily if you tell them
that Benjamin Franklin said it first.
-- unknown

o Fix the misparsing on *.ko noticed by Andrew Morton.
o Slightly simplify the output format.
o Slightly simplify the code

Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de>

 checkstack.pl |   47 +++++++++++++++++++++++++----------------------
 1 files changed, 25 insertions(+), 22 deletions(-)
--- linux-2.6.6mm5/scripts/checkstack.pl~checkstack	2004-05-26 00:35:53.000000000 +0200
+++ linux-2.6.6mm5/scripts/checkstack.pl	2004-05-26 00:45:18.000000000 +0200
@@ -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]
@@ -16,11 +17,10 @@
 #	TODO :	Port to all architectures (one regex per arch)
 
 # 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 @@
 $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 @@
 			$intro .= '	';
 			$padlen -= 8;
 		}
-		(my $code = $line) =~ s/$re/\1/;
-
-		$stack[@stack] = "$intro $code";
+		$stack[@stack] = "$intro$size\n";
 	}
 }
 
-
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: 2005-03-22 14:03    [from the cache]
©2003-2008