8 symtabfmt
= "<Q%ds" % (MAXSTRING
+1)
11 funcline
= re
.compile(r
'([0-9a-f]+)\s+[lg]\s+.\s+\.text\s+([0-9a-f]+)\s+(.*)$')
12 bssline
= re
.compile(r
'([0-9a-f]+)\s+[lg]\s+[a-zA-Z]\s+\.bss\s+([0-9a-f]+)\s+(.*)$')
13 dataline
= re
.compile(r
'([0-9a-f]+)\s+[lg]\s+[a-zA-Z]\s+\.data\s+([0-9a-f]+)\s+(.*)$')
14 fileexp
= re
.compile(r
'([^\s]+):\s+file format')
22 res
= funcline
.match(line
)
24 funcs
.setdefault(fname
,[]).append((int(res
.group(1),16),
27 res
= bssline
.match(line
)
29 start
= int(res
.group(1),16)
30 end
= int(res
.group(2),16)
32 bss
.setdefault(fname
,[]).append((start
,res
.group(3)))
33 res
= dataline
.match(line
)
35 start
= int(res
.group(1),16)
36 end
= int(res
.group(2),16)
38 data
.setdefault(fname
,[]).append((start
,res
.group(3)))
39 res
= fileexp
.match(line
)
50 startfile
= re
.compile(r
'\.(text|bss|data)\s+(0x[0-9a-f]+)\s+0x[0-9a-f]+\s+(.*)$')
51 def generate(kmapf
, obmapf
, out
):
52 obdump
= read_obdump(obmapf
)
59 res
= startfile
.match(line
)
61 if res
and obdump
[res
.group(1)].has_key(res
.group(3)):
62 offset
= int(res
.group(2),16)
64 symbols
= obdump
[res
.group(1)][fname
]
66 for addr
,symbol
in symbols
:
67 value
= fname
+ ':' + symbol
68 data
= struct
.pack(symtabfmt
,addr
+offset
,value
[:MAXSTRING
])
71 out
.write(struct
.pack(symtabfmt
,0,''))
74 if len(sys
.argv
) != 4:
75 print "Usage: %s <kernel.map> <nm dump> <output.bin>" % sys
.argv
[0]
78 kmapf
= open(sys
.argv
[1],'r')
79 obmapf
= open(sys
.argv
[2],'r')
80 out
= open(sys
.argv
[3],'w')
81 generate(kmapf
,obmapf
,out
)
86 if __name__
== '__main__':