aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/bloat-o-meter25
1 files changed, 25 insertions, 0 deletions
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter
index b4a1d2811..26474595f 100755
--- a/scripts/bloat-o-meter
+++ b/scripts/bloat-o-meter
@@ -43,6 +43,8 @@ if f1 is None or f2 is None:
43 43
44sym_args = " ".join(sys.argv[3 + flag_timing + dashes:]) 44sym_args = " ".join(sys.argv[3 + flag_timing + dashes:])
45def getsizes(file): 45def getsizes(file):
46 if file.endswith(".exe"):
47 return getsizes_pe(file)
46 sym, alias, lut, section = {}, {}, {}, {} 48 sym, alias, lut, section = {}, {}, {}, {}
47 for l in os.popen("readelf -W -S " + file).readlines(): 49 for l in os.popen("readelf -W -S " + file).readlines():
48 x = l.replace("[ ", "[", 1).split() 50 x = l.replace("[ ", "[", 1).split()
@@ -80,6 +82,29 @@ def getsizes(file):
80 sym[alias[(addr, sz)]["name"]] = {"addr" : addr, "size": sz} 82 sym[alias[(addr, sz)]["name"]] = {"addr" : addr, "size": sz}
81 return sym 83 return sym
82 84
85def getsizes_pe(file):
86 sym, sections = {}, {}
87 prefix = os.getenv("CROSS_COMPILE", "")
88 for l in os.popen(prefix + "objdump -h " + file).readlines():
89 x = l.split()
90 if len(x) != 7: continue
91 sections[x[1]] = 1
92 if x[1] not in [".rdata"]: continue
93 sym[x[1]] = {"addr" : int(x[3], 16), "size" : int(x[2], 16)}
94 for l in os.popen(prefix + "nm -S --size-sort %s %s" % (sym_args, file)).readlines():
95 if len(l.split()) != 4: continue
96 value, size, typ, name = l.split()
97 if typ in ["N"]: continue # skip debug symbols
98 if name in sections: continue # bare reference to section
99 value = int(value, 16)
100 size = int(size, 16)
101 if "$" in name:
102 section, name = name.split("$")
103 if section in sym:
104 sym[section]["size"] -= size
105 sym[name] = {"addr" : value, "size": size}
106 return sym
107
83if flag_timing: 108if flag_timing:
84 start_t1 = int(time.time() * 1e9) 109 start_t1 = int(time.time() * 1e9)
85old = getsizes(f1) 110old = getsizes(f1)