diff options
Diffstat (limited to '')
| -rw-r--r-- | sim/gdbstub.py | 2 | ||||
| -rwxr-xr-x | sim/sim.py | 13 |
2 files changed, 11 insertions, 4 deletions
diff --git a/sim/gdbstub.py b/sim/gdbstub.py index 914f717..74d046c 100644 --- a/sim/gdbstub.py +++ b/sim/gdbstub.py @@ -86,7 +86,7 @@ def yield_to_gdb(): out = hexout(read_reg(gdb_reg(r)) for r in range(16)) elif data[0] == b'm'[0]: addr, length = (int(x, 16) for x in data[1:].split(b',')) - out = hexout(read_mem(addr, length)) + out = hexout(read_mem(addr, length, may_fail = True)) elif data[0] == b'M'[0]: addrlen, data = data[1:].split(b':') addr, length = (int(x, 16) for x in addrlen.split(b',')) @@ -85,10 +85,14 @@ def recv_mem_dump(): elif line == '=== end-mem ===': break - base, data = line.split() - dumped.append((int(base, 16) << 2, bytes.fromhex(data))) + try: + base, data = line.split() + dumped.append((int(base, 16) << 2, bytes.fromhex(data))) + except ValueError: + while_running() + print(f'{COLOR_BLUE}{line}{COLOR_RESET}') -def read_mem(base, length): +def read_mem(base, length, *, may_fail = False): fragments = [] i = 0 @@ -97,6 +101,9 @@ def read_mem(base, length): recv_mem_dump() while length > 0: + if i >= len(dumped) and may_fail: + return None + assert i < len(dumped), f'memory at 0x{base:08x} not dumped' start, data = dumped[i] delta = base - start |
