1
0
mirror of https://github.com/rcore-os/rCore.git synced 2024-11-22 16:16:16 +04:00
rCore/tools/addr2line.py

24 lines
857 B
Python
Executable File

#!/usr/bin/env python3
import sys
import re
import subprocess
print('Paste backtrace here, and then input EOF(Ctrl-D or Ctrl-Z) to get annotated backtrace.')
lines = sys.stdin.readlines()
addrline = sys.argv[1]
arch = sys.argv[2]
mode = sys.argv[3]
print('--------------------------------------')
for line in lines:
match = re.search('#([0-9]+) PC: (0x[0-9A-F]+) FP: (0x[0-9A-F]+)', line)
if match:
addr = match.group(2)
process = subprocess.run([addrline, '-e', 'target/{0}/{1}/rcore'.format(arch, mode), '-f', '-C', addr], capture_output=True)
res = process.stdout.decode('utf-8')
stderr = process.stderr.decode('utf-8')
if stderr:
print(stderr)
print('#{0} PC: {1} FP: {3} {2}'.format(match.group(1), match.group(2), res.strip(), match.group(3)))
else:
print(line, end='')