Messages in this thread Patch in this message | | | Date | Wed, 26 May 2004 12:06:15 +0200 | From | Jörn Engel <> | Subject | Re: [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/
| |