aboutsummaryrefslogtreecommitdiff
path: root/sys/gdb
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2020-12-23 18:36:08 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2020-12-23 18:36:08 +0000
commitfd29833d9a7d8355ce21743ed8c706b72ba03363 (patch)
treee2ef644e22c5f8590c083b03cf2bbbe6fb126999 /sys/gdb
parentc4df8cbfde53c376d93f439eac3f45a7b4fc705e (diff)
downloadsrc-fd29833d9a7d8355ce21743ed8c706b72ba03363.tar.gz
src-fd29833d9a7d8355ce21743ed8c706b72ba03363.zip
gdb(4): handle single register read packets
We support bulk reads of the register set, but not reading specific registers via the 'p' packet. This is useful at least for the 'call' command in gdb. Reviewed by: cem MFC after: 1 week Sponsored by: NetApp, Inc. Sponsored by: Klara, Inc. NetApp PR: 44 Differential Revision: https://reviews.freebsd.org/D27644
Diffstat (limited to 'sys/gdb')
-rw-r--r--sys/gdb/gdb_main.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/gdb/gdb_main.c b/sys/gdb/gdb_main.c
index 70ffe0719c45..588a97c56a40 100644
--- a/sys/gdb/gdb_main.c
+++ b/sys/gdb/gdb_main.c
@@ -755,6 +755,17 @@ gdb_trap(int type, int code)
gdb_tx_ok();
break;
}
+ case 'p': { /* Read register. */
+ uintmax_t reg;
+ if (gdb_rx_varhex(&reg)) {
+ gdb_tx_err(EINVAL);
+ break;
+ }
+ gdb_tx_begin(0);
+ gdb_tx_reg(reg);
+ gdb_tx_end();
+ break;
+ }
case 'P': { /* Write register. */
char *val;
uintmax_t reg;