Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F158894827
D27642.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D27642.diff
View Options
Index: head/sys/amd64/amd64/gdb_machdep.c
===================================================================
--- head/sys/amd64/amd64/gdb_machdep.c
+++ head/sys/amd64/amd64/gdb_machdep.c
@@ -92,12 +92,42 @@
void
gdb_cpu_setreg(int regnum, void *val)
{
+ register_t regval = *(register_t *)val;
+ /*
+ * Write registers to the trapframe and pcb, if applicable.
+ * Some scratch registers are not tracked by the pcb.
+ */
+ if (kdb_thread == curthread) {
+ switch (regnum) {
+ case GDB_REG_RAX: kdb_frame->tf_rax = regval; break;
+ case GDB_REG_RBX: kdb_frame->tf_rbx = regval; break;
+ case GDB_REG_RCX: kdb_frame->tf_rcx = regval; break;
+ case GDB_REG_RDX: kdb_frame->tf_rdx = regval; break;
+ case GDB_REG_RSI: kdb_frame->tf_rsi = regval; break;
+ case GDB_REG_RDI: kdb_frame->tf_rdi = regval; break;
+ case GDB_REG_RBP: kdb_frame->tf_rbp = regval; break;
+ case GDB_REG_RSP: kdb_frame->tf_rsp = regval; break;
+ case GDB_REG_R8: kdb_frame->tf_r8 = regval; break;
+ case GDB_REG_R9: kdb_frame->tf_r9 = regval; break;
+ case GDB_REG_R10: kdb_frame->tf_r10 = regval; break;
+ case GDB_REG_R11: kdb_frame->tf_r11 = regval; break;
+ case GDB_REG_R12: kdb_frame->tf_r12 = regval; break;
+ case GDB_REG_R13: kdb_frame->tf_r13 = regval; break;
+ case GDB_REG_R14: kdb_frame->tf_r14 = regval; break;
+ case GDB_REG_R15: kdb_frame->tf_r15 = regval; break;
+ case GDB_REG_PC: kdb_frame->tf_rip = regval; break;
+ }
+ }
switch (regnum) {
- case GDB_REG_PC:
- kdb_thrctx->pcb_rip = *(register_t *)val;
- if (kdb_thread == curthread)
- kdb_frame->tf_rip = *(register_t *)val;
+ case GDB_REG_RBX: kdb_thrctx->pcb_rbx = regval; break;
+ case GDB_REG_RBP: kdb_thrctx->pcb_rbp = regval; break;
+ case GDB_REG_RSP: kdb_thrctx->pcb_rsp = regval; break;
+ case GDB_REG_R12: kdb_thrctx->pcb_r12 = regval; break;
+ case GDB_REG_R13: kdb_thrctx->pcb_r13 = regval; break;
+ case GDB_REG_R14: kdb_thrctx->pcb_r14 = regval; break;
+ case GDB_REG_R15: kdb_thrctx->pcb_r15 = regval; break;
+ case GDB_REG_PC: kdb_thrctx->pcb_rip = regval; break;
}
}
Index: head/sys/amd64/include/gdb_machdep.h
===================================================================
--- head/sys/amd64/include/gdb_machdep.h
+++ head/sys/amd64/include/gdb_machdep.h
@@ -33,6 +33,22 @@
#define GDB_BUFSZ 4096
#define GDB_NREGS 56
+#define GDB_REG_RAX 0
+#define GDB_REG_RBX 1
+#define GDB_REG_RCX 2
+#define GDB_REG_RDX 3
+#define GDB_REG_RSI 4
+#define GDB_REG_RDI 5
+#define GDB_REG_RBP 6
+#define GDB_REG_RSP 7
+#define GDB_REG_R8 8
+#define GDB_REG_R9 9
+#define GDB_REG_R10 10
+#define GDB_REG_R11 11
+#define GDB_REG_R12 12
+#define GDB_REG_R13 13
+#define GDB_REG_R14 14
+#define GDB_REG_R15 15
#define GDB_REG_PC 16
_Static_assert(GDB_BUFSZ >= (GDB_NREGS * 16), "buffer fits 'g' regs");
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Jun 8, 10:46 AM (10 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33810387
Default Alt Text
D27642.diff (2 KB)
Attached To
Mode
D27642: amd64: allow gdb(4) to write to most registers
Attached
Detach File
Event Timeline
Log In to Comment