File: resolve.py

package info (click to toggle)
sphinxsearch 2.2.11-8
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 25,720 kB
  • sloc: cpp: 102,259; xml: 85,608; sh: 9,259; php: 3,790; ansic: 3,158; yacc: 1,969; java: 1,336; ruby: 1,289; python: 1,062; pascal: 912; perl: 381; lex: 275; makefile: 150; sql: 77; cs: 35
file content (50 lines) | stat: -rw-r--r-- 1,055 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#
# $Id$
#

import sys, re

if len(sys.argv)!=3:
	print 'Usage: python resolve.py BACKTRACE SYMBOLS'
	sys.exit(0)

def myopen(name):
	if name == '-':
		return sys.stdin
	fh = open(name, 'r')
	if not fh:
		print 'FATAL: failed to open %s' % name
		sys.exit(1)
	return fh

syms = []
fp = myopen(sys.argv[2])
for line in fp.readlines():
	line = line.rstrip()
	match = re.match('([0-9a-fA-F]+) \w ', line)
	if match:
		addr = int(match.group(1), 16)
		name = line[len(match.group(0)):]
		syms.append([addr, name])
fp.close()

fp = myopen(sys.argv[1])
for line in fp.readlines():
	line = line.rstrip()

	# skip plain boring log entries
	if re.search('^\[\w+\s+\w+\s+\d+\s+\d+:\d+:\d+\.\d+ \d+\] \[\d+\] \S', line):
		continue

	# resolve symbols, if any
	match = re.search('\[0x([0-9a-fA-F]+)\]', line)
	if match:
		addr = int(match.group(1), 16)
		resolved = '???'
		for i in range(len(syms)-1):
			if syms[i][0]<=addr and addr<syms[i+1][0]:
				resolved = '%s+0x%x' % (syms[i][1], addr - syms[i][0])
				break
		line += ' ' + resolved
	print line
fp.close()