
Disable static detection: the static currently drops a lot of useful information including clones generated by gcc. Drop this. The statics will appear now without static. prefix. But remove the LTO .NUMBER postfixes that look ugly Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Michal Marek <mmarek@suse.cz>
1.7 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 "tTdDbBrR": # strip generated symbols if name[:6] == "_mod": continue # statics and some other optimizations adds random .NUMBER name = re.sub(r'.[0-9]+', '', name) sym[name] = sym.get(name, 0) + 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)