lfn
serial
ticket/834-toolchain-update
topic/msim-upgrade
topic/simplify-dev-export
Last change
on this file since b6d20a7 was b6d20a7, checked in by Ondrej Palkovsky <ondrap@…>, 20 years ago |
Symbols now include filename
|
-
Property mode
set to
100755
|
File size:
1.6 KB
|
Line | |
---|
1 | #!/usr/bin/env python
|
---|
2 |
|
---|
3 | import sys
|
---|
4 | import struct
|
---|
5 | import re
|
---|
6 |
|
---|
7 | symline = re.compile(r'(0x[a-f0-9]+)\s+([^\s]+)$')
|
---|
8 | fileline = re.compile(r'[^\s]+\s+0x[a-f0-9]+\s+0x[a-f0-9]+\s+([^\s]+\.o)$')
|
---|
9 |
|
---|
10 | MAXSTRING=63
|
---|
11 | symtabfmt = "<Q%ds" % (MAXSTRING+1)
|
---|
12 |
|
---|
13 | def read_symbols(inp):
|
---|
14 | while 1:
|
---|
15 | line = inp.readline()
|
---|
16 | if not line:
|
---|
17 | return
|
---|
18 | if 'memory map' in line:
|
---|
19 | break
|
---|
20 |
|
---|
21 | symtable = {}
|
---|
22 | filename = ''
|
---|
23 | while 1:
|
---|
24 | line = inp.readline()
|
---|
25 | if not line.strip():
|
---|
26 | continue
|
---|
27 | if line[0] not in (' ','.'):
|
---|
28 | break
|
---|
29 | line = line.strip()
|
---|
30 | # Search for file name
|
---|
31 | res = fileline.match(line)
|
---|
32 | if res:
|
---|
33 | filename = res.group(1)
|
---|
34 | # Search for symbols
|
---|
35 | res = symline.match(line)
|
---|
36 | if res:
|
---|
37 | symtable[int(res.group(1),16)] = filename + ':' + res.group(2)
|
---|
38 | return symtable
|
---|
39 |
|
---|
40 | def generate(inp, out):
|
---|
41 | symtab = read_symbols(inp)
|
---|
42 | if not symtab:
|
---|
43 | print "Bad kernel.map format, empty."
|
---|
44 | sys.exit(1)
|
---|
45 | addrs = symtab.keys()
|
---|
46 | addrs.sort()
|
---|
47 | for addr in addrs:
|
---|
48 | # Do not write address 0, it indicates end of data
|
---|
49 | if addr == 0:
|
---|
50 | continue
|
---|
51 | data = struct.pack(symtabfmt,addr,symtab[addr][:MAXSTRING])
|
---|
52 | out.write(data)
|
---|
53 | out.write(struct.pack(symtabfmt,0,''))
|
---|
54 |
|
---|
55 | def main():
|
---|
56 | if len(sys.argv) != 3:
|
---|
57 | print "Usage: %s <kernel.map> <output.bin>" % sys.argv[0]
|
---|
58 | sys.exit(1)
|
---|
59 |
|
---|
60 | inp = open(sys.argv[1],'r')
|
---|
61 | out = open(sys.argv[2],'w')
|
---|
62 | generate(inp,out)
|
---|
63 | inp.close()
|
---|
64 | out.close()
|
---|
65 |
|
---|
66 | if __name__ == '__main__':
|
---|
67 | main()
|
---|
Note:
See
TracBrowser
for help on using the repository browser.