source: mainline/tools/genmap.py@ 342616d

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 342616d was ae9624e, checked in by Ondrej Palkovsky <ondrap@…>, 20 years ago

Symbol table now contains static functions too.
NOTE: gcc heavily inlines, be aware of optimizations.

Removed excesive item from boot page tables.

  • Property mode set to 100755
File size: 1.7 KB
Line 
1#!/usr/bin/env python
2
3import sys
4import struct
5import re
6
7MAXSTRING=63
8symtabfmt = "<Q%ds" % (MAXSTRING+1)
9
10
11objline = re.compile(r'([0-9a-f]+)\s+[lg]\s+F\s+\.text\s+[0-9a-f]+\s+(.*)$')
12fileexp = re.compile(r'([^\s]+):\s+file format')
13def read_obdump(inp):
14 result = {}
15 fname = ''
16 for line in inp:
17 line = line.strip()
18 res = objline.match(line)
19 if res:
20 result.setdefault(fname,[]).append((int(res.group(1),16),
21 res.group(2)))
22 res = fileexp.match(line)
23 if res:
24 fname = res.group(1)
25 continue
26
27 return result
28
29startfile = re.compile(r'\.text\s+(0x[0-9a-f]+)\s+0x[0-9a-f]+\s+(.*)$')
30def generate(kmapf, obmapf, out):
31 obdump = read_obdump(obmapf)
32
33 def sorter(x,y):
34 return cmp(x[0],y[0])
35
36 for line in kmapf:
37 line = line.strip()
38 res = startfile.match(line)
39 if res and obdump.has_key(res.group(2)):
40 offset = int(res.group(1),16)
41 fname = res.group(2)
42 symbols = obdump[fname]
43 symbols.sort(sorter)
44 for addr,symbol in symbols:
45 value = fname + ':' + symbol
46 data = struct.pack(symtabfmt,addr+offset,value[:MAXSTRING])
47 out.write(data)
48
49 out.write(struct.pack(symtabfmt,0,''))
50
51def main():
52 if len(sys.argv) != 4:
53 print "Usage: %s <kernel.map> <nm dump> <output.bin>" % sys.argv[0]
54 sys.exit(1)
55
56 kmapf = open(sys.argv[1],'r')
57 obmapf = open(sys.argv[2],'r')
58 out = open(sys.argv[3],'w')
59 generate(kmapf,obmapf,out)
60 kmapf.close()
61 obmapf.close()
62 out.close()
63
64if __name__ == '__main__':
65 main()
Note: See TracBrowser for help on using the repository browser.