|
12 | 12 | board = sys.argv[1] |
13 | 13 | print(board) |
14 | 14 |
|
| 15 | +elfs = [ |
| 16 | + f"build-{board}/firmware.elf", |
| 17 | + "/home/tannewt/Downloads/esp-rom-elfs-20241011/esp32c6_rev0_rom.elf", |
| 18 | +] |
| 19 | + |
15 | 20 | while True: |
| 21 | + print('"Backtrace:" or "Stack memory:". CTRL-D to finish multiline paste') |
16 | 22 | addresses = input("? ") |
17 | 23 | if addresses.startswith("Backtrace:"): |
18 | 24 | addresses = addresses[len("Backtrace:") :] |
| 25 | + addresses = addresses.strip().split() |
| 26 | + addresses = [address.split(":")[0] for address in addresses] |
19 | 27 | if addresses.startswith("Stack memory:"): |
20 | | - addresses = addresses[len("Stack memory:") :] |
21 | | - addresses = addresses.strip().split() |
22 | | - addresses = [address.split(":")[0] for address in addresses] |
| 28 | + addresses = [] |
| 29 | + extra_lines = sys.stdin.readlines() |
| 30 | + for line in extra_lines: |
| 31 | + if not line.strip(): |
| 32 | + continue |
| 33 | + addresses.extend(line.split(":")[1].strip().split()) |
23 | 34 | for address in addresses: |
24 | | - result = subprocess.run( |
25 | | - ["xtensa-esp32s2-elf-addr2line", "-aipfe", "build-{}/firmware.elf".format(board)] |
26 | | - + [address], |
27 | | - capture_output=True, |
28 | | - ) |
29 | | - stdout = result.stdout.decode("utf-8") |
30 | | - if "?? ??" not in stdout: |
31 | | - print(stdout.strip()) |
| 35 | + if address == "0xa5a5a5a5": |
| 36 | + # Skip stack fill value. |
| 37 | + continue |
| 38 | + for elf in elfs: |
| 39 | + result = subprocess.run( |
| 40 | + ["riscv32-esp-elf-addr2line", "-aipfe", elf, address], |
| 41 | + capture_output=True, |
| 42 | + ) |
| 43 | + stdout = result.stdout.decode("utf-8") |
| 44 | + if not stdout: |
| 45 | + continue |
| 46 | + if "?? ??" not in stdout: |
| 47 | + print(stdout.strip()) |
| 48 | + break |
| 49 | + |
| 50 | + print("loop") |
0 commit comments