diff options
author | Andrew Turner <andrew@FreeBSD.org> | 2024-03-14 15:09:03 +0000 |
---|---|---|
committer | Andrew Turner <andrew@FreeBSD.org> | 2024-04-12 09:32:55 +0000 |
commit | 0adc959a37303939e6c64cbeea47a62670bfaf58 (patch) | |
tree | 905a43db0e6647ab9c215bf385d19298735ef64b /sys/gdb | |
parent | 076b64e83ac9e0cfd361a58d5967dfa939fe8139 (diff) | |
download | src-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.c | 13 |
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(); |