Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 297 → Rev 296

/SPARTAN/trunk/tools/genmap.py
8,48 → 8,27
symtabfmt = "<Q%ds" % (MAXSTRING+1)
 
 
funcline = re.compile(r'([0-9a-f]+)\s+[lg]\s+F\s+\.text\s+([0-9a-f]+)\s+(.*)$')
bssline = re.compile(r'([0-9a-f]+)\s+[lg]\s+[a-zA-Z]\s+\.bss\s+([0-9a-f]+)\s+(.*)$')
dataline = re.compile(r'([0-9a-f]+)\s+[lg]\s+[a-zA-Z]\s+\.data\s+([0-9a-f]+)\s+(.*)$')
objline = re.compile(r'([0-9a-f]+)\s+[lg]\s+F\s+\.text\s+[0-9a-f]+\s+(.*)$')
fileexp = re.compile(r'([^\s]+):\s+file format')
def read_obdump(inp):
funcs = {}
data = {}
bss ={}
result = {}
fname = ''
for line in inp:
line = line.strip()
res = funcline.match(line)
res = objline.match(line)
if res:
funcs.setdefault(fname,[]).append((int(res.group(1),16),
res.group(3)))
continue
res = bssline.match(line)
if res:
start = int(res.group(1),16)
end = int(res.group(2),16)
if end:
bss.setdefault(fname,[]).append((start,res.group(3)))
res = dataline.match(line)
if res:
start = int(res.group(1),16)
end = int(res.group(2),16)
if end:
data.setdefault(fname,[]).append((start,res.group(3)))
result.setdefault(fname,[]).append((int(res.group(1),16),
res.group(2)))
res = fileexp.match(line)
if res:
fname = res.group(1)
continue
return result
 
return {
'text' : funcs,
'bss' : bss,
'data' : data
}
 
startfile = re.compile(r'\.(text|bss|data)\s+(0x[0-9a-f]+)\s+0x[0-9a-f]+\s+(.*)$')
startfile = re.compile(r'\.text\s+(0x[0-9a-f]+)\s+0x[0-9a-f]+\s+(.*)$')
def generate(kmapf, obmapf, out):
obdump = read_obdump(obmapf)
obdump = read_obdump(obmapf)
 
def sorter(x,y):
return cmp(x[0],y[0])
57,13 → 36,12
for line in kmapf:
line = line.strip()
res = startfile.match(line)
 
if res and obdump[res.group(1)].has_key(res.group(3)):
offset = int(res.group(2),16)
fname = res.group(3)
symbols = obdump[res.group(1)][fname]
if res and obdump.has_key(res.group(2)):
offset = int(res.group(1),16)
fname = res.group(2)
symbols = obdump[fname]
symbols.sort(sorter)
for addr,symbol in symbols:
for addr,symbol in symbols:
value = fname + ':' + symbol
data = struct.pack(symtabfmt,addr+offset,value[:MAXSTRING])
out.write(data)