summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2020-12-23 18:37:05 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2020-12-23 18:37:05 +0000
commit3f3cc995a35a3e9136204a98af0af5808c11047f (patch)
tree96ee26d654db69fe15bf1fee166f7d3949ee5060
parentfd29833d9a7d8355ce21743ed8c706b72ba03363 (diff)
-rw-r--r--sys/gdb/gdb_main.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/sys/gdb/gdb_main.c b/sys/gdb/gdb_main.c
index 588a97c56a409..6e0c9f21f9470 100644
--- a/sys/gdb/gdb_main.c
+++ b/sys/gdb/gdb_main.c
@@ -700,9 +700,23 @@ gdb_trap(int type, int code)
gdb_tx_end();
break;
}
- case 'G': /* Write registers. */
- gdb_tx_err(0);
+ case 'G': { /* Write registers. */
+ char *val;
+ bool success;
+ size_t r;
+ for (success = true, r = 0; r < GDB_NREGS; r++) {
+ val = gdb_rxp;
+ if (!gdb_rx_mem(val, gdb_cpu_regsz(r))) {
+ gdb_tx_err(EINVAL);
+ success = false;
+ break;
+ }
+ gdb_cpu_setreg(r, val);
+ }
+ if (success)
+ gdb_tx_ok();
break;
+ }
case 'H': { /* Set thread. */
intmax_t tid;
struct thread *thr;