lkml.org 
[lkml]   [2004]   [May]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
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    [W:0.399 / U:0.200 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site