From: "Jörn Engel" <joern@wohnheim.fh-wedel.de>
To: Arnd Bergmann <arnd@bergmann-dalldorf.de>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] add checkstack Makefile target
Date: Thu, 6 Mar 2003 11:51:56 +0100 [thread overview]
Message-ID: <20030306105156.GA6783@wohnheim.fh-wedel.de> (raw)
In-Reply-To: <200303060152.h261qUiU012772@post.webmailer.de>
[-- Attachment #1: Type: text/plain, Size: 742 bytes --]
On Thu, 6 March 2003 02:50:22 +0100, Arnd Bergmann wrote:
>
> Ok, here is another regex for s390, including a changed $line
> calculation. I didn't have ksymoops around, but this change
> removes the need for it and should also speed things up.
Time for allnoconfig went down from 13s to 4s.
Time for allyesconfig went down from 44m to 59s.
Great!
The output is slightly less verbose, but that information wasn't too
useful anyway. Thanks a lot!
BTW: Your mailer did something horrible to the patch, and I had to fix
it manually. Hope it didn't break anything (i386 looks fine).
And mine appears to do the same. Better send it as an attachment until
I fix the cause. :(
Jörn
--
Eighty percent of success is showing up.
-- Woody Allen
[-- Attachment #2: checkstack.c1.2.5.63.patch --]
[-- Type: text/plain, Size: 2513 bytes --]
diff -Naur linux-2.5.63/Makefile linux-2.5.63-csb1/Makefile
--- linux-2.5.63/Makefile Mon Feb 24 20:05:08 2003
+++ linux-2.5.63-csb1/Makefile Wed Mar 5 20:33:22 2003
@@ -908,3 +908,7 @@
descend =$(Q)$(MAKE) -f scripts/Makefile.build obj=$(1) $(2)
FORCE:
+
+checkstack: #vmlinux FORCE
+ $(OBJDUMP) -d vmlinux | \
+ $(PERL) scripts/checkstack.pl $(ARCH)
diff -Naur linux-2.5.63/scripts/checkstack.pl linux-2.5.63-csb1/scripts/checkstack.pl
--- linux-2.5.63/scripts/checkstack.pl Thu Jan 1 01:00:00 1970
+++ linux-2.5.63-csb1/scripts/checkstack.pl Wed Mar 5 18:04:19 2003
@@ -0,0 +1,80 @@
+#!/usr/bin/perl
+
+# Check the stack usage of functions
+#
+# Copyright Joern Engel <joern@wh.fh-wedel.de>
+# Inspired by Linus Torvalds
+# Original idea maybe from Keith Owens
+#
+# Usage:
+# objdump -d vmlinux | \
+# stackcheck_ppc.pl
+#
+# TODO : Port to all architectures (one regex per arch)
+# Get rid of ksymoops
+# Speed this puppy up
+
+# check for arch
+#
+# $re is used for three 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
+#
+# use anything else and feel the pain ;)
+{
+ my $arch = shift;
+ $x = "[0-9a-f]"; # hex character
+ $xs = "[0-9a-f ]"; # hex character or space
+ if ($arch =~ /^i386$/) {
+ #c0105234: 81 ec ac 05 00 00 sub $0x5ac,%esp
+ $re = qr/^.*(sub \$(0x$x{3,5}),\%esp)$/o;
+ } elsif ($arch =~ /^ppc$/) {
+ #c00029f4: 94 21 ff 30 stwu r1,-208(r1)
+ $re = qr/.*(stwu.*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;
+ } else {
+ print("wrong or unknown architecture\n");
+ exit
+ }
+}
+
+sub bysize($) {
+ ($asize = $a) =~ s/$re/\2/;
+ ($bsize = $b) =~ s/$re/\2/;
+ $bsize <=> $asize
+}
+
+#
+# main()
+#
+$funcre = qr/^$x* \<(.*)\>:$/;
+while ($line = <STDIN>) {
+ if ($line =~ m/$funcre/) {
+ ($func = $line) =~ s/$funcre/\1/;
+ chomp($func);
+ }
+
+ if ($line =~ m/$re/) {
+ (my $addr = $line) =~ s/^($xs{8}).*/0x\1/o;
+ chomp($addr);
+
+ my $intro = "$addr $func:";
+ my $padlen = 56 - length($intro);
+ while ($padlen > 0) {
+ $intro .= ' ';
+ $padlen -= 8;
+ }
+ (my $code = $line) =~ s/$re/\1/;
+
+ $stack[@stack] = "$intro $code";
+ }
+}
+
+@sortedstack = sort bysize @stack;
+
+foreach $i (@sortedstack) {
+ print("$i");
+}
next prev parent reply other threads:[~2003-03-06 10:41 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20030305172012$3eb0@gated-at.bofh.it>
[not found] ` <20030305172012$0dea@gated-at.bofh.it>
[not found] ` <20030305172012$0ad6@gated-at.bofh.it>
[not found] ` <20030305172012$4a05@gated-at.bofh.it>
[not found] ` <20030305172012$03b3@gated-at.bofh.it>
[not found] ` <20030305172012$525f@gated-at.bofh.it>
[not found] ` <20030305172012$698e@gated-at.bofh.it>
[not found] ` <20030305172012$38f6@gated-at.bofh.it>
2003-03-06 1:50 ` [PATCH] add checkstack Makefile target Arnd Bergmann
2003-03-06 10:51 ` Jörn Engel [this message]
2003-03-03 21:16 Jörn Engel
2003-03-04 7:03 ` Muli Ben-Yehuda
2003-03-04 7:24 ` Jörn Engel
2003-03-04 10:21 ` Jörn Engel
2003-03-04 10:57 ` Jörn Engel
2003-03-04 19:08 ` Sam Ravnborg
2003-03-05 14:51 ` Jörn Engel
2003-03-05 17:14 ` Jörn Engel
2003-03-05 19:15 ` Sam Ravnborg
2003-03-05 19:54 ` Jörn Engel
2003-03-11 15:36 ` =?unknown-8bit?Q?J=F6rn?= Engel
2003-03-23 19:08 ` Sam Ravnborg
2003-03-25 13:49 ` Jörn Engel
2003-03-25 23:53 ` Juan Quintela
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030306105156.GA6783@wohnheim.fh-wedel.de \
--to=joern@wohnheim.fh-wedel.de \
--cc=arnd@bergmann-dalldorf.de \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox