diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-12-07 19:18:04 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-12-07 19:51:41 -0600 |
| commit | c39552375661e495b344e8386649ade92a4d45b2 (patch) | |
| tree | 45623ce35964e43ae7d8804c1ef1c6dedb3ba7a1 /sim/gdbstub.py | |
| parent | b1761b8eac5777c09723bbc8cd31cc05d8ec35ae (diff) | |
Implement single-stepping
Diffstat (limited to 'sim/gdbstub.py')
| -rw-r--r-- | sim/gdbstub.py | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/sim/gdbstub.py b/sim/gdbstub.py index e214a73..75c15cb 100644 --- a/sim/gdbstub.py +++ b/sim/gdbstub.py @@ -22,8 +22,8 @@ def halt(): if haltFromStop: reply(b'S05') - haltFromStop = False + haltFromStop = True while True: data = client.recv(4096) if not data: @@ -52,9 +52,8 @@ def halt(): if data == b'?': out = b'S05' - elif data[0] == b'c'[0]: - assert not data[1:] #TODO - break + elif data == b'c': + return 'continue' elif data == b'D': out = b'OK' elif data == b'g': @@ -74,14 +73,14 @@ def halt(): elif data[0] == b'p'[0]: reg = gdb_reg(int(data[1:], 16)) out = hexout(read_reg(reg) if reg is not None else None) + elif data == b's': + return 'step' else: - print('unhandled packet:', data) + print('unhandled packet:', data, file=sys.stderr) out = b'' reply(out) - haltFromStop = True - def reply(out): client.send(b'$' + out + b'#' + hexout(sum(out) & 0xff, 1)) @@ -100,26 +99,27 @@ def gdb_reg(n): if mode == 0b10001: regs = (r8_fiq, r9_fiq, r10_fiq, r11_fiq, r12_fiq) else: - regs = (r8_fiq, r9_fiq, r10_fiq, r11_fiq, r12_fiq) + regs = (r8_usr, r9_usr, r10_usr, r11_usr, r12_usr) return regs[n - 8] if 13 <= n < 15: if mode == 0b10011: regs = (r13_svc, r14_svc) - if mode == 0b10111: + elif mode == 0b10111: regs = (r13_abt, r14_abt) - if mode == 0b11011: + elif mode == 0b11011: regs = (r13_und, r14_und) - if mode == 0b10010: + elif mode == 0b10010: regs = (r13_irq, r14_irq) - if mode == 0b10001: + elif mode == 0b10001: regs = (r13_fiq, r14_fiq) else: regs = (r13_usr, r14_usr) return regs[n - 13] + print('bad gdb regnum:', n, file=sys.stderr) return None def hexout(data, size=4): |
