mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
![Nathan Lynch](/assets/img/avatar_default.png)
bloat-o-meter assumes that a '.' anywhere in a symbol's name means that it is static and prepends 'static.' to the first part of the symbol name, discarding the portion of the name that follows the '.'. However, the names of function entry points begin with '.' in the ppc64 ABI. This causes all function text size changes to be accounted to a single 'static.' entry in the output when comparing ppc64 kernels. Change getsizes() to ignore the first character of the symbol name when searching for '.'. Signed-off-by: Nathan Lynch <ntl@pobox.com> Cc: Matt Mackall <mpm@selenic.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
60 lines
1.7 KiB
Python
Executable file
60 lines
1.7 KiB
Python
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":
|
|
# function names begin with '.' on 64-bit powerpc
|
|
if "." in name[1:]: name = "static." + name.split(".")[0]
|
|
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)
|