diff options
| -rw-r--r-- | src/focaccia/qemu/_qemu_tool.py | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/focaccia/qemu/_qemu_tool.py b/src/focaccia/qemu/_qemu_tool.py index 5dd76b5..4f897e7 100644 --- a/src/focaccia/qemu/_qemu_tool.py +++ b/src/focaccia/qemu/_qemu_tool.py @@ -304,14 +304,7 @@ class GDBServerStateIterator: if not state: # Step - pc = gdb.selected_frame().read_register('pc') - new_pc = pc - while pc == new_pc: # Skip instruction chains from REP STOS etc. - self._step() - if self._is_exited(): - raise StopIteration - new_pc = gdb.selected_frame().read_register('pc') - state = self.current_state() + state = self._step() return state @@ -351,7 +344,14 @@ class GDBServerStateIterator: gdb.execute(f'set $pc = {hex(new_pc)}') def _step(self): - gdb.execute('si', to_string=True) + pc = gdb.selected_frame().read_register('pc') + new_pc = pc + while pc == new_pc: # Skip instruction chains from REP STOS etc. + gdb.execute('si', to_string=True) + if self._is_exited(): + raise StopIteration + new_pc = gdb.selected_frame().read_register('pc') + return self.current_state() def current_tid(self) -> int: return gdb.selected_inferior().threads()[0].ptid[1] |