You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1010 B

#!/usr/bin/python
import re
import os
def main():
fd = os.popen("avr-objdump -d firmware.bin")
oldaddr=0
lastfnname=""
namespacedict = {}
s="foo"
while s:
s=fd.readline()
m=re.match("([0-9a-f]+) <(\w+)>:",s)
if m:
addr,fname=m.groups()
addr=int(addr,16)
size=addr-oldaddr
oldaddr=addr
# print size,"\t",lastfnname
namespace=get_namespace(lastfnname)
try:
namespacedict[namespace].append((lastfnname, size))
except:
namespacedict[namespace] = [(lastfnname, size)]
lastfnname = fname
print "individual sizes:"
for k,v in namespacedict.items():
for a,b in sorted(v):
print "%4i %s"%(b,a)
print "namespace sizes:"
for k,v in namespacedict.items():
totalsize = sum( [ i[1] for i in v ] )
print "%4i %s*"%(totalsize,k)
def get_namespace(name):
matchlist = [
r"(^__)",
r"(^\w+?_)",
r"(\w[a-z0-9])[A-Z]"]
for i in matchlist:
m = re.match(i, name)
if m:
return m.groups()[0]
return "<nonamespace>"
if __name__=="__main__":
main()