sys/gdb: Support hardware breakpoints

Support the use of hardware breakpoints in the kernel gdb stub.

Reviewed by:	jhb (earlier version)
Sponsored by:	Arm Ltd
Differential Revision:	https://reviews.freebsd.org/D44354
This commit is contained in:
Andrew Turner
2024-03-14 15:09:03 +00:00
parent 076b64e83a
commit 0adc959a37
+13
View File
@@ -267,6 +267,11 @@ gdb_do_qsupported(uint32_t *feat)
gdb_tx_str(";qXfer:threads:read+"); gdb_tx_str(";qXfer:threads:read+");
#ifdef HAS_HW_BREAKPOINT
if ((*feat & GDB_HWBREAK) != 0)
gdb_tx_str(";hwbreak+");
#endif
/* /*
* If the debugport is a reliable transport, request No Ack mode from * If the debugport is a reliable transport, request No Ack mode from
* the server. The server may or may not choose to enter No Ack mode. * the server. The server may or may not choose to enter No Ack mode.
@@ -648,6 +653,10 @@ gdb_z_insert(void)
(vm_size_t)length, KDB_DBG_ACCESS_RW); (vm_size_t)length, KDB_DBG_ACCESS_RW);
break; break;
case '1': /* hardware breakpoint */ case '1': /* hardware breakpoint */
#ifdef HAS_HW_BREAKPOINT
error = kdb_cpu_set_breakpoint((vm_offset_t)addr);
break;
#endif
case '0': /* software breakpoint */ case '0': /* software breakpoint */
/* Not implemented. */ /* Not implemented. */
gdb_tx_empty(); gdb_tx_empty();
@@ -692,6 +701,10 @@ gdb_z_remove(void)
(vm_size_t)length); (vm_size_t)length);
break; break;
case '1': /* hardware breakpoint */ case '1': /* hardware breakpoint */
#ifdef HAS_HW_BREAKPOINT
error = kdb_cpu_clr_breakpoint((vm_offset_t)addr);
break;
#endif
case '0': /* software breakpoint */ case '0': /* software breakpoint */
/* Not implemented. */ /* Not implemented. */
gdb_tx_empty(); gdb_tx_empty();