linux-yocto/scripts/bloat-o-meter
Paolo 'Blaisorblade' Giarrusso 71378be91f kbuild: fix mode of checkstack.pl and other files.
Make it executable like it should be. Do the same for other files intended to be
executed by the user - the ones called by the build process needn't be
executable as they already work (as argument to their interpreter).

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
2006-04-11 13:37:07 +02:00

1.5 KiB
Executable File

#!/usr/bin/python

Copyright 2004 Matt Mackall mpm@selenic.com

inspired by perl Bloat-O-Meter (c) 1997 by Andi Kleen

This software may be used and distributed according to the terms

of the GNU General Public License, incorporated herein by reference.

import sys, os, re

if len(sys.argv) != 3: sys.stderr.write("usage: %s file1 file2\n" % sys.argv[0]) sys.exit(-1)

def getsizes(file): sym = {} for l in os.popen("nm --size-sort " + file).readlines(): size, type, name = l[:-1].split() if type in "tTdDbB": sym[name] = int(size, 16) return sym

old = getsizes(sys.argv[1]) new = getsizes(sys.argv[2]) grow, shrink, add, remove, up, down = 0, 0, 0, 0, 0, 0 delta, common = [], {}

for a in old: if a in new: common[a] = 1

for name in old: if name not in common: remove += 1 down += old[name] delta.append((-old[name], name))

for name in new: if name not in common: add += 1 up += new[name] delta.append((new[name], name))

for name in common: d = new.get(name, 0) - old.get(name, 0) if d>0: grow, up = grow+1, up+d if d<0: shrink, down = shrink+1, down-d delta.append((d, name))

delta.sort() delta.reverse()

print "add/remove: %s/%s grow/shrink: %s/%s up/down: %s/%s (%s)" %
(add, remove, grow, shrink, up, -down, up-down) print "%-40s %7s %7s %+7s" % ("function", "old", "new", "delta") for d, n in delta: if d: print "%-40s %7s %7s %+7d" % (n, old.get(n,"-"), new.get(n,"-"), d)