resolve.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #
  2. # $Id$
  3. #
  4. import sys, re
  5. if len(sys.argv)!=3:
  6. print 'Usage: python resolve.py BACKTRACE SYMBOLS'
  7. sys.exit(0)
  8. def myopen(name):
  9. if name == '-':
  10. return sys.stdin
  11. fh = open(name, 'r')
  12. if not fh:
  13. print 'FATAL: failed to open %s' % name
  14. sys.exit(1)
  15. return fh
  16. syms = []
  17. fp = myopen(sys.argv[2])
  18. for line in fp.readlines():
  19. line = line.rstrip()
  20. match = re.match('([0-9a-fA-F]+) \w ', line)
  21. if match:
  22. addr = int(match.group(1), 16)
  23. name = line[len(match.group(0)):]
  24. syms.append([addr, name])
  25. fp.close()
  26. fp = myopen(sys.argv[1])
  27. for line in fp.readlines():
  28. line = line.rstrip()
  29. # skip plain boring log entries
  30. if re.search('^\[\w+\s+\w+\s+\d+\s+\d+:\d+:\d+\.\d+ \d+\] \[\d+\] \S', line):
  31. continue
  32. # resolve symbols, if any
  33. match = re.search('\[0x([0-9a-fA-F]+)\]', line)
  34. if match:
  35. addr = int(match.group(1), 16)
  36. resolved = '???'
  37. for i in range(len(syms)-1):
  38. if syms[i][0]<=addr and addr<syms[i+1][0]:
  39. resolved = '%s+0x%x' % (syms[i][1], addr - syms[i][0])
  40. break
  41. line += ' ' + resolved
  42. print line
  43. fp.close()