Skip to content

Commit a403b1d

Browse files
committed
GDBServer: use hook callback for step() to check for gdb interrupt.
1 parent 5cf0255 commit a403b1d

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

pyocd/gdbserver/gdbserver.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -625,8 +625,22 @@ def resume(self, data):
625625
def step(self, data, start=0, end=0):
626626
addr = self._get_resume_step_addr(data)
627627
LOG.debug("GDB step: %s (start=0x%x, end=0x%x)", data, start, end)
628-
self.target.step(not self.step_into_interrupt, start, end)
629-
return self.create_rsp_packet(self.get_t_response())
628+
629+
# Use the step hook to check for an interrupt event.
630+
def step_hook():
631+
# Note we don't clear the interrupt event here!
632+
return self.packet_io.interrupt_event.is_set()
633+
self.target.step(not self.step_into_interrupt, start, end, hook_cb=step_hook)
634+
635+
# Clear and handle an interrupt.
636+
if self.packet_io.interrupt_event.is_set():
637+
LOG.debug("Received Ctrl-C during step")
638+
self.packet_io.interrupt_event.clear()
639+
response = self.get_t_response(forceSignal=signals.SIGINT)
640+
else:
641+
response = self.get_t_response()
642+
643+
return self.create_rsp_packet(response)
630644

631645
def halt(self):
632646
self.target.halt()

0 commit comments

Comments
 (0)