X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=scripts%2Fcheckstack.pl;h=7d33f0a42a37f423d77d313d43b6c9b36c7fbd42;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=df85c66caa0ad6f2f43cd8e29d91b118854bf6f6;hpb=e812ccbe0c915857ebea6a632bfadc631f7504a9;p=linux-2.6.git diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl index df85c66ca..7d33f0a42 100644 --- a/scripts/checkstack.pl +++ b/scripts/checkstack.pl @@ -10,9 +10,10 @@ # IA64 port via Andreas Dilger # Arm port by Holger Schurig # Random bits by Matt Mackall +# M68k port by Geert Uytterhoeven and Andreas Schwab # # Usage: -# objdump -d vmlinux | stackcheck_ppc.pl [arch] +# objdump -d vmlinux | stackcheck.pl [arch] # # TODO : Port to all architectures (one regex per arch) @@ -23,6 +24,7 @@ # $1 (first bracket) matches the size of the stack growth # # use anything else and feel the pain ;) +my (@stack, $re, $x, $xs); { my $arch = shift; if ($arch eq "") { @@ -31,25 +33,29 @@ $x = "[0-9a-f]"; # hex character $xs = "[0-9a-f ]"; # hex character or space - if ($arch =~ /^arm$/) { + if ($arch eq 'arm') { #c0008ffc: e24dd064 sub sp, sp, #100 ; 0x64 $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/^.*[as][du][db] \$(0x$x{1,8}),\%esp$/o; - } elsif ($arch =~ /^ia64$/) { + } elsif ($arch eq 'ia64') { #e0000000044011fc: 01 0f fc 8c adds r12=-384,r12 $re = qr/.*adds.*r12=-(([0-9]{2}|[3-9])[0-9]{2}),r12/o; - } elsif ($arch =~ /^mips64$/) { + } elsif ($arch eq 'm68k') { + # 2b6c: 4e56 fb70 linkw %fp,#-1168 + # 1df770: defc ffe4 addaw #-28,%sp + $re = qr/.*(?:linkw %fp,|addaw )#-([0-9]{1,4})(?:,%sp)?$/o; + } elsif ($arch eq 'mips64') { #8800402c: 67bdfff0 daddiu sp,sp,-16 $re = qr/.*daddiu.*sp,sp,-(([0-9]{2}|[3-9])[0-9]{2})/o; - } elsif ($arch =~ /^mips$/) { + } elsif ($arch eq 'mips') { #88003254: 27bdffe0 addiu sp,sp,-32 $re = qr/.*addiu.*sp,sp,-(([0-9]{2}|[3-9])[0-9]{2})/o; - } elsif ($arch =~ /^ppc$/) { + } elsif ($arch eq 'ppc') { #c00029f4: 94 21 ff 30 stwu r1,-208(r1) $re = qr/.*stwu.*r1,-($x{1,8})\(r1\)/o; - } elsif ($arch =~ /^ppc64$/) { + } elsif ($arch eq 'ppc64') { #XXX $re = qr/.*stdu.*r1,-($x{1,8})\(r1\)/o; } elsif ($arch =~ /^s390x?$/) { @@ -62,6 +68,7 @@ } sub bysize($) { + my ($asize, $bsize); ($asize = $a) =~ s/.* +(.*)$/$1/; ($bsize = $b) =~ s/.* +(.*)$/$1/; $bsize <=> $asize @@ -70,8 +77,9 @@ sub bysize($) { # # main() # -$funcre = qr/^$x* \<(.*)\>:$/; -while ($line = ) { +my $funcre = qr/^$x* <(.*)>:$/; +my $func; +while (my $line = ) { if ($line =~ m/$funcre/) { $func = $1; } @@ -85,7 +93,7 @@ while ($line = ) { $size += 0x80000000; } - $line =~ m/^($xs*).*/; + next if $line !~ m/^($xs*)/; my $addr = $1; $addr =~ s/ /0/g; $addr = "0x$addr"; @@ -97,12 +105,8 @@ while ($line = ) { $padlen -= 8; } next if ($size < 100); - $stack[@stack] = "$intro$size\n"; + push @stack, "$intro$size\n"; } } -@sortedstack = sort bysize @stack; - -foreach $i (@sortedstack) { - print("$i"); -} +print sort bysize @stack;