Applied, thanks
On Mon, Mar 8, 2021 at 8:31 PM Ron Yorston <[email protected]> wrote: > > Disable 'echo' in the default config, run 'make baseline', then > re-enable 'echo' and run 'make bloatcheck': > > function old new delta > .rodata 182521 182622 +101 > packed_usage 33714 33792 +78 > applet_main 3168 3176 +8 > applet_names 2730 2735 +5 > applet_suid 99 100 +1 > applet_install_loc 198 199 +1 > ------------------------------------------------------------------------------ > (add/remove: 0/0 grow/shrink: 6/0 up/down: 194/0) Total: 194 bytes > text data bss dec hex filename > 955052 4195 1808 961055 eaa1f busybox_old > 955153 4195 1808 961156 eaa84 busybox_unstripped > > The Total bytes value doesn't equal the change in the size of the > binary. The packed_usage and applet_* items are in .rodata and > are counted twice. With this modified bloat-o-meter the size of > named items is deducted from .rodata: > > function old new delta > packed_usage 33714 33792 +78 > applet_main 3168 3176 +8 > .rodata 105105 105113 +8 > applet_names 2730 2735 +5 > applet_suid 99 100 +1 > applet_install_loc 198 199 +1 > ------------------------------------------------------------------------------ > (add/remove: 0/0 grow/shrink: 6/0 up/down: 101/0) Total: 101 bytes > text data bss dec hex filename > 955052 4195 1808 961055 eaa1f busybox_old > 955153 4195 1808 961156 eaa84 busybox_unstripped > > v2: Sections numbered less than 10 were always being omitted from > consideration because splitting "[ 1] .interp" leaves "1]" in > x[1] where the section name is expected. This wasn't a problem > for .rodata (numbered 15 in my testing) but let's fix it anyway. > > Signed-off-by: Ron Yorston <[email protected]> > --- > scripts/bloat-o-meter | 21 +++++++++++++-------- > 1 file changed, 13 insertions(+), 8 deletions(-) > > diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter > index cb861b8e9..b4a1d2811 100755 > --- a/scripts/bloat-o-meter > +++ b/scripts/bloat-o-meter > @@ -43,7 +43,15 @@ if f1 is None or f2 is None: > > sym_args = " ".join(sys.argv[3 + flag_timing + dashes:]) > def getsizes(file): > - sym, alias, lut = {}, {}, {} > + sym, alias, lut, section = {}, {}, {}, {} > + for l in os.popen("readelf -W -S " + file).readlines(): > + x = l.replace("[ ", "[", 1).split() > + if len(x)<6: continue > + # Should take these into account too! > + #if x[1] not in [".text", ".rodata", ".symtab", ".strtab"]: continue > + if x[1] not in [".rodata"]: continue > + sym[x[1]] = {"addr" : int(x[3], 16), "size" : int(x[5], 16)} > + section[x[0][1:-1]] = {"name" : x[1]} > for l in os.popen("readelf -W -s %s %s" % (sym_args, file)).readlines(): > l = l.strip() > if not (len(l) and l[0].isdigit() and len(l.split()) == 8): > @@ -59,6 +67,10 @@ def getsizes(file): > else: > sym[name] = {"addr" : value, "size": size} > lut[(value, size)] = 0 > + # If this item is in a known section deduct its size from > + # the size of the section > + if ndx in section: > + sym[section[ndx]["name"]]["size"] -= size > for addr, sz in iter(alias.keys()): > # If the non-GLOBAL sym has an implementation elsewhere then > # it's an alias, disregard it. > @@ -66,13 +78,6 @@ def getsizes(file): > # If this non-GLOBAL sym does not have an implementation at > # another address, then treat it as a normal symbol. > sym[alias[(addr, sz)]["name"]] = {"addr" : addr, "size": sz} > - for l in os.popen("readelf -W -S " + file).readlines(): > - x = l.split() > - if len(x)<6: continue > - # Should take these into account too! > - #if x[1] not in [".text", ".rodata", ".symtab", ".strtab"]: continue > - if x[1] not in [".rodata"]: continue > - sym[x[1]] = {"addr" : int(x[3], 16), "size" : int(x[5], 16)} > return sym > > if flag_timing: > -- > 2.29.2 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
