checkpatch.pl: be silent when -q and --ignore is given
[linux-2.6.git] / scripts / checkstack.pl
index 3eca625..17e3843 100755 (executable)
 #      sh64 port by Paul Mundt
 #      Random bits by Matt Mackall <mpm@selenic.com>
 #      M68k port by Geert Uytterhoeven and Andreas Schwab
-#      AVR32 port by Haavard Skinnemoen <hskinnemoen@atmel.com>
+#      AVR32 port by Haavard Skinnemoen (Atmel)
 #      PARISC port by Kyle McMartin <kyle@parisc-linux.org>
+#      sparc port by Martin Habets <errandir_news@mph.eclipse.co.uk>
 #
 #      Usage:
 #      objdump -d vmlinux | scripts/checkstack.pl [arch]
 #
 #      TODO :  Port to all architectures (one regex per arch)
 
+use strict;
+
 # check for arch
 #
 # $re is used for two matches:
@@ -81,7 +84,10 @@ my (@stack, $re, $dre, $x, $xs);
                $re = qr/.*st[dw]u.*r1,-($x{1,8})\(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;
+               # or
+               #  100092:       e3 f0 ff c8 ff 71       lay     %r15,-56(%r15)
+               $re = qr/.*(?:lay|ag?hi).*\%r15,-(([0-9]{2}|[3-9])[0-9]{2})
+                     (?:\(\%r15\))?$/ox;
        } elsif ($arch =~ /^sh64$/) {
                #XXX: we only check for the immediate case presently,
                #     though we will want to check for the movi/sub
@@ -91,25 +97,20 @@ my (@stack, $re, $dre, $x, $xs);
        } elsif ($arch =~ /^blackfin$/) {
                #   0:   00 e8 38 01     LINK 0x4e0;
                $re = qr/.*[[:space:]]LINK[[:space:]]*(0x$x{1,8})/o;
+       } elsif ($arch eq 'sparc' || $arch eq 'sparc64') {
+               # f0019d10:       9d e3 bf 90     save  %sp, -112, %sp
+               $re = qr/.*save.*%sp, -(([0-9]{2}|[3-9])[0-9]{2}), %sp/o;
        } else {
                print("wrong or unknown architecture \"$arch\"\n");
                exit
        }
 }
 
-sub bysize($) {
-       my ($asize, $bsize);
-       ($asize = $a) =~ s/.*:  *(.*)$/$1/;
-       ($bsize = $b) =~ s/.*:  *(.*)$/$1/;
-       $bsize <=> $asize
-}
-
 #
 # main()
 #
 my $funcre = qr/^$x* <(.*)>:$/;
-my $func;
-my $file, $lastslash;
+my ($func, $file, $lastslash);
 
 while (my $line = <STDIN>) {
        if ($line =~ m/$funcre/) {
@@ -166,4 +167,6 @@ while (my $line = <STDIN>) {
        }
 }
 
-print sort bysize @stack;
+# Sort output by size (last field)
+print sort { ($b =~ /:\t*(\d+)$/)[0] <=> ($a =~ /:\t*(\d+)$/)[0] } @stack;
+