From 3390159e1f610a57465add05ca56c31cef78cdc2 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Sun, 31 May 2020 00:41:21 +0200 Subject: Added support for Z0/z0 (aka breakpoint) commands --- gdbstub.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ gdbstub.h | 2 ++ 2 files changed, 58 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 155b37c..a14db06 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -943,6 +943,62 @@ int dbg_main(struct dbg_state *state) dbg_send_signal_packet(pkt_buf, sizeof(pkt_buf), state->signum); break; + /* + * Breakpoint + * Command Format: Z0,[addr],[type] + */ + case 'Z': { + int zero; + size_t brk_sz; + + ptr_next += 1; + token_expect_integer_arg(zero); + token_expect_seperator(','); + token_expect_integer_arg(addr); + token_expect_seperator(','); + token_expect_integer_arg(brk_sz); + + if (zero) { + goto error; + } + + /* Set breakpoint */ + if (dbg_sys_breakpoint(addr)) { + goto error; + } + + dbg_send_ok_packet(pkt_buf, sizeof(pkt_buf)); + } + break; + + /* + * Remove Breakpoint + * Command Format: Z0,[addr],[type] + */ + case 'z': { + int zero; + size_t brk_sz; + + ptr_next += 1; + token_expect_integer_arg(zero); + token_expect_seperator(','); + token_expect_integer_arg(addr); + token_expect_seperator(','); + token_expect_integer_arg(brk_sz); + + if (zero) { + goto error; + } + + /* Set breakpoint */ + if (dbg_sys_del_breakpoint(addr)) { + goto error; + } + + dbg_send_ok_packet(pkt_buf, sizeof(pkt_buf)); + } + break; + /* * Unsupported Command */ diff --git a/gdbstub.h b/gdbstub.h index e72635d..da1c05b 100644 --- a/gdbstub.h +++ b/gdbstub.h @@ -82,5 +82,7 @@ int dbg_sys_mem_readb(address addr, char *val); int dbg_sys_mem_writeb(address addr, char val); int dbg_sys_continue(void); int dbg_sys_step(void); +int dbg_sys_breakpoint(address addr); +int dbg_sys_del_breakpoint(address addr); #endif -- cgit v1.2.3