aboutsummaryrefslogtreecommitdiff
path: root/sys/gdb
diff options
context:
space:
mode:
authorAndrew Turner <andrew@FreeBSD.org>2024-03-14 15:09:03 +0000
committerAndrew Turner <andrew@FreeBSD.org>2024-04-12 09:32:55 +0000
commit0adc959a37303939e6c64cbeea47a62670bfaf58 (patch)
tree905a43db0e6647ab9c215bf385d19298735ef64b /sys/gdb
parent076b64e83ac9e0cfd361a58d5967dfa939fe8139 (diff)
downloadsrc-0adc959a37303939e6c64cbeea47a62670bfaf58.tar.gz
src-0adc959a37303939e6c64cbeea47a62670bfaf58.zip
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
Diffstat (limited to 'sys/gdb')
-rw-r--r--sys/gdb/gdb_main.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/gdb/gdb_main.c b/sys/gdb/gdb_main.c
index 5567c12c2a9f..3e8ada42adac 100644
--- a/sys/gdb/gdb_main.c
+++ b/sys/gdb/gdb_main.c
@@ -267,6 +267,11 @@ nofeatures:
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
* 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);
break;
case '1': /* hardware breakpoint */
+#ifdef HAS_HW_BREAKPOINT
+ error = kdb_cpu_set_breakpoint((vm_offset_t)addr);
+ break;
+#endif
case '0': /* software breakpoint */
/* Not implemented. */
gdb_tx_empty();
@@ -692,6 +701,10 @@ gdb_z_remove(void)
(vm_size_t)length);
break;
case '1': /* hardware breakpoint */
+#ifdef HAS_HW_BREAKPOINT
+ error = kdb_cpu_clr_breakpoint((vm_offset_t)addr);
+ break;
+#endif
case '0': /* software breakpoint */
/* Not implemented. */
gdb_tx_empty();