00001
00002
00003 import sys
00004
00005 if len(sys.argv) != 2:
00006 print "Bad arguments"
00007 print "Usage: parse_symbols.py file.sym"
00008 sys.exit(1)
00009
00010 symlist=[]
00011 global_cpt=0
00012
00013 f=open(sys.argv[1])
00014
00015
00016 while True:
00017 l=f.readline()
00018 if l=='':
00019 break
00020
00021 address, type, name = l[:-1].split(' ')
00022 if type != 'T':
00023 continue
00024
00025
00026 symlist.append([int(address, 16), name, 0])
00027
00028 f.close()
00029
00030
00031 while True:
00032 l=sys.stdin.readline()
00033 if l=='':
00034 break
00035
00036 try:
00037 add=int(l, 16)*2
00038 except:
00039 print "Bad value"
00040 continue
00041
00042 prev = None
00043 i=1
00044 while i < len(symlist):
00045 address, name, cpt = symlist[i]
00046 if add < address:
00047 symlist[i-1][2] += 1
00048 global_cpt += 1
00049 break
00050 i+=1
00051
00052
00053
00054 if i == len(symlist):
00055 print "Cannot find symbol"
00056 break
00057
00058 symlist.sort(cmp=lambda x,y:x[2]<y[2] and 1 or -1)
00059
00060 for sym in symlist:
00061 address, name, cpt = sym
00062 if not cpt:
00063 continue
00064 print "%2.2f%% (%.3d/%.3d) %s[%.8x]"%( (float(cpt)*100.)/global_cpt, cpt,
00065 global_cpt, name, address)