summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/alpha/alpha/gdb_machdep.c2
-rw-r--r--sys/alpha/include/gdb_machdep.h2
-rw-r--r--sys/amd64/amd64/gdb_machdep.c7
-rw-r--r--sys/amd64/include/gdb_machdep.h2
-rw-r--r--sys/gdb/gdb_main.c34
-rw-r--r--sys/i386/i386/gdb_machdep.c7
-rw-r--r--sys/i386/include/gdb_machdep.h2
-rw-r--r--sys/ia64/ia64/gdb_machdep.c2
-rw-r--r--sys/ia64/include/gdb_machdep.h2
-rw-r--r--sys/sparc64/include/gdb_machdep.h2
-rw-r--r--sys/sparc64/sparc64/gdb_machdep.c2
11 files changed, 38 insertions, 26 deletions
diff --git a/sys/alpha/alpha/gdb_machdep.c b/sys/alpha/alpha/gdb_machdep.c
index cbc38a8..a701c6f 100644
--- a/sys/alpha/alpha/gdb_machdep.c
+++ b/sys/alpha/alpha/gdb_machdep.c
@@ -59,7 +59,7 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
}
void
-gdb_cpu_setreg(int regnum, register_t val)
+gdb_cpu_setreg(int regnum, void *val)
{
switch (regnum) {
}
diff --git a/sys/alpha/include/gdb_machdep.h b/sys/alpha/include/gdb_machdep.h
index 5ca5d69..c404c73 100644
--- a/sys/alpha/include/gdb_machdep.h
+++ b/sys/alpha/include/gdb_machdep.h
@@ -46,7 +46,7 @@ gdb_cpu_query(void)
}
void *gdb_cpu_getreg(int, size_t *);
-void gdb_cpu_setreg(int, register_t);
+void gdb_cpu_setreg(int, void *);
int gdb_cpu_signal(int, int);
#endif /* !_MACHINE_GDB_MACHDEP_H_ */
diff --git a/sys/amd64/amd64/gdb_machdep.c b/sys/amd64/amd64/gdb_machdep.c
index 770e903..ea1c3ef 100644
--- a/sys/amd64/amd64/gdb_machdep.c
+++ b/sys/amd64/amd64/gdb_machdep.c
@@ -81,14 +81,13 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
}
void
-gdb_cpu_setreg(int regnum, register_t val)
+gdb_cpu_setreg(int regnum, void *val)
{
- val = __bswap64(val);
switch (regnum) {
case GDB_REG_PC:
- kdb_thrctx->pcb_rip = val;
+ kdb_thrctx->pcb_rip = *(register_t *)val;
if (kdb_thread == curthread)
- kdb_frame->tf_rip = val;
+ kdb_frame->tf_rip = *(register_t *)val;
}
}
diff --git a/sys/amd64/include/gdb_machdep.h b/sys/amd64/include/gdb_machdep.h
index 458f2f6..c2fd8bf 100644
--- a/sys/amd64/include/gdb_machdep.h
+++ b/sys/amd64/include/gdb_machdep.h
@@ -52,6 +52,6 @@ gdb_cpu_query(void)
}
void *gdb_cpu_getreg(int, size_t *);
-void gdb_cpu_setreg(int, register_t);
+void gdb_cpu_setreg(int, void *);
#endif /* !_MACHINE_GDB_MACHDEP_H_ */
diff --git a/sys/gdb/gdb_main.c b/sys/gdb/gdb_main.c
index 0eed036..bed693a 100644
--- a/sys/gdb/gdb_main.c
+++ b/sys/gdb/gdb_main.c
@@ -120,16 +120,22 @@ gdb_trap(int type, int code)
break;
case 'c': { /* Continue. */
uintmax_t addr;
- if (!gdb_rx_varhex(&addr))
- gdb_cpu_setreg(GDB_REG_PC, addr);
+ register_t pc;
+ if (!gdb_rx_varhex(&addr)) {
+ pc = addr;
+ gdb_cpu_setreg(GDB_REG_PC, &pc);
+ }
kdb_cpu_clear_singlestep();
return (1);
}
case 'C': { /* Continue with signal. */
uintmax_t addr, sig;
+ register_t pc;
if (!gdb_rx_varhex(&sig) && gdb_rx_char() == ';' &&
- !gdb_rx_varhex(&addr))
- gdb_cpu_setreg(GDB_REG_PC, addr);
+ !gdb_rx_varhex(&addr)) {
+ pc = addr;
+ gdb_cpu_setreg(GDB_REG_PC, &pc);
+ }
kdb_cpu_clear_singlestep();
return (1);
}
@@ -191,9 +197,11 @@ gdb_trap(int type, int code)
break;
}
case 'P': { /* Write register. */
- uintmax_t reg, val;
+ char *val;
+ uintmax_t reg;
+ val = gdb_rxp;
if (gdb_rx_varhex(&reg) || gdb_rx_char() != '=' ||
- gdb_rx_varhex(&val)) {
+ !gdb_rx_mem(val, gdb_cpu_regsz(reg))) {
gdb_tx_err(EINVAL);
break;
}
@@ -226,16 +234,22 @@ gdb_trap(int type, int code)
break;
case 's': { /* Step. */
uintmax_t addr;
- if (!gdb_rx_varhex(&addr))
- gdb_cpu_setreg(GDB_REG_PC, addr);
+ register_t pc;
+ if (!gdb_rx_varhex(&addr)) {
+ pc = addr;
+ gdb_cpu_setreg(GDB_REG_PC, &pc);
+ }
kdb_cpu_set_singlestep();
return (1);
}
case 'S': { /* Step with signal. */
uintmax_t addr, sig;
+ register_t pc;
if (!gdb_rx_varhex(&sig) && gdb_rx_char() == ';' &&
- !gdb_rx_varhex(&addr))
- gdb_cpu_setreg(GDB_REG_PC, addr);
+ !gdb_rx_varhex(&addr)) {
+ pc = addr;
+ gdb_cpu_setreg(GDB_REG_PC, &pc);
+ }
kdb_cpu_set_singlestep();
return (1);
}
diff --git a/sys/i386/i386/gdb_machdep.c b/sys/i386/i386/gdb_machdep.c
index 836b13e..042b104 100644
--- a/sys/i386/i386/gdb_machdep.c
+++ b/sys/i386/i386/gdb_machdep.c
@@ -67,15 +67,14 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
}
void
-gdb_cpu_setreg(int regnum, register_t val)
+gdb_cpu_setreg(int regnum, void *val)
{
- val = __bswap32(val);
switch (regnum) {
case GDB_REG_PC:
- kdb_thrctx->pcb_eip = val;
+ kdb_thrctx->pcb_eip = *(register_t *)val;
if (kdb_thread == curthread)
- kdb_frame->tf_eip = val;
+ kdb_frame->tf_eip = *(register_t *)val;
}
}
diff --git a/sys/i386/include/gdb_machdep.h b/sys/i386/include/gdb_machdep.h
index c67412a..3b426a1 100644
--- a/sys/i386/include/gdb_machdep.h
+++ b/sys/i386/include/gdb_machdep.h
@@ -46,7 +46,7 @@ gdb_cpu_query(void)
}
void *gdb_cpu_getreg(int, size_t *);
-void gdb_cpu_setreg(int, register_t);
+void gdb_cpu_setreg(int, void *);
int gdb_cpu_signal(int, int);
#endif /* !_MACHINE_GDB_MACHDEP_H_ */
diff --git a/sys/ia64/ia64/gdb_machdep.c b/sys/ia64/ia64/gdb_machdep.c
index 62b4755..7729d71 100644
--- a/sys/ia64/ia64/gdb_machdep.c
+++ b/sys/ia64/ia64/gdb_machdep.c
@@ -128,7 +128,7 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
}
void
-gdb_cpu_setreg(int regnum, register_t val)
+gdb_cpu_setreg(int regnum, void *val)
{
switch (regnum) {
diff --git a/sys/ia64/include/gdb_machdep.h b/sys/ia64/include/gdb_machdep.h
index 1b957fb..b6294d7 100644
--- a/sys/ia64/include/gdb_machdep.h
+++ b/sys/ia64/include/gdb_machdep.h
@@ -41,7 +41,7 @@ gdb_cpu_regsz(int regnum)
}
void *gdb_cpu_getreg(int, size_t *);
-void gdb_cpu_setreg(int, register_t);
+void gdb_cpu_setreg(int, void *);
int gdb_cpu_signal(int, int);
int gdb_cpu_query(void);
diff --git a/sys/sparc64/include/gdb_machdep.h b/sys/sparc64/include/gdb_machdep.h
index b30ad04..27fbe46 100644
--- a/sys/sparc64/include/gdb_machdep.h
+++ b/sys/sparc64/include/gdb_machdep.h
@@ -52,6 +52,6 @@ gdb_cpu_signal(int vector, int _)
}
void *gdb_cpu_getreg(int, size_t *);
-void gdb_cpu_setreg(int, register_t);
+void gdb_cpu_setreg(int, void *);
#endif /* !_MACHINE_GDB_MACHDEP_H_ */
diff --git a/sys/sparc64/sparc64/gdb_machdep.c b/sys/sparc64/sparc64/gdb_machdep.c
index 219ac13..4a3d2e6 100644
--- a/sys/sparc64/sparc64/gdb_machdep.c
+++ b/sys/sparc64/sparc64/gdb_machdep.c
@@ -63,7 +63,7 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
}
void
-gdb_cpu_setreg(int regnum, register_t val)
+gdb_cpu_setreg(int regnum, void *val)
{
switch (regnum) {
}
OpenPOWER on IntegriCloud