~vcs-imports/busybox/trunk

« back to all changes in this revision

Viewing changes to scripts/bloat-o-meter

  • Committer: Denys Vlasenko
  • Author(s): Christian Franke
  • Date: 2023-11-13 10:32:35 UTC
  • Revision ID: git-v1:a63b60bdd6fa26b867c80d44074118babbae7ffd
Cygwin: regenerate defconfig

Signed-off-by: Christian Franke <christian.franke@t-online.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
 
44
44
sym_args = " ".join(sys.argv[3 + flag_timing + dashes:])
45
45
def getsizes(file):
46
 
    sym, alias, lut = {}, {}, {}
 
46
    sym, alias, lut, section = {}, {}, {}, {}
 
47
    for l in os.popen("readelf -W -S " + file).readlines():
 
48
        x = l.replace("[ ", "[", 1).split()
 
49
        if len(x)<6: continue
 
50
        # Should take these into account too!
 
51
        #if x[1] not in [".text", ".rodata", ".symtab", ".strtab"]: continue
 
52
        if x[1] not in [".rodata"]: continue
 
53
        sym[x[1]] = {"addr" : int(x[3], 16), "size" : int(x[5], 16)}
 
54
        section[x[0][1:-1]] = {"name" : x[1]}
47
55
    for l in os.popen("readelf -W -s %s %s" % (sym_args, file)).readlines():
48
56
        l = l.strip()
49
57
        if not (len(l) and l[0].isdigit() and len(l.split()) == 8):
59
67
        else:
60
68
            sym[name] = {"addr" : value, "size":  size}
61
69
            lut[(value, size)] = 0
 
70
            # If this item is in a known section deduct its size from
 
71
            # the size of the section
 
72
            if ndx in section:
 
73
                sym[section[ndx]["name"]]["size"] -= size
62
74
    for addr, sz in iter(alias.keys()):
63
75
        # If the non-GLOBAL sym has an implementation elsewhere then
64
76
        # it's an alias, disregard it.
66
78
            # If this non-GLOBAL sym does not have an implementation at
67
79
            # another address, then treat it as a normal symbol.
68
80
            sym[alias[(addr, sz)]["name"]] = {"addr" : addr, "size": sz}
69
 
    for l in os.popen("readelf -W -S " + file).readlines():
70
 
        x = l.split()
71
 
        if len(x)<6: continue
72
 
        # Should take these into account too!
73
 
        #if x[1] not in [".text", ".rodata", ".symtab", ".strtab"]: continue
74
 
        if x[1] not in [".rodata"]: continue
75
 
        sym[x[1]] = {"addr" : int(x[3], 16), "size" : int(x[5], 16)}
76
81
    return sym
77
82
 
78
83
if flag_timing: