Report the values of x86 segment registers to remote debuggers.
While here, also report %eflags from the i386 trapframe. Differential Revision: https://reviews.freebsd.org/D2743 Reviewed by: kib Obtained from: 1 month
This commit is contained in:
parent
9f9d9cf33e
commit
5eb95e11ba
@ -48,6 +48,8 @@ __FBSDID("$FreeBSD$");
|
||||
void *
|
||||
gdb_cpu_getreg(int regnum, size_t *regsz)
|
||||
{
|
||||
static uint32_t _kcodesel = GSEL(GCODE_SEL, SEL_KPL);
|
||||
static uint32_t _kdatasel = GSEL(GDATA_SEL, SEL_KPL);
|
||||
|
||||
*regsz = gdb_cpu_regsz(regnum);
|
||||
|
||||
@ -76,6 +78,8 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
|
||||
case 14: return (&kdb_thrctx->pcb_r14);
|
||||
case 15: return (&kdb_thrctx->pcb_r15);
|
||||
case 16: return (&kdb_thrctx->pcb_rip);
|
||||
case 18: return (&_kcodesel);
|
||||
case 19: return (&_kdatasel);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
@ -45,14 +45,22 @@ __FBSDID("$FreeBSD$");
|
||||
void *
|
||||
gdb_cpu_getreg(int regnum, size_t *regsz)
|
||||
{
|
||||
static uint32_t _kcodesel = GSEL(GCODE_SEL, SEL_KPL);
|
||||
static uint32_t _kdatasel = GSEL(GDATA_SEL, SEL_KPL);
|
||||
static uint32_t _kprivsel = GSEL(GPRIV_SEL, SEL_KPL);
|
||||
|
||||
*regsz = gdb_cpu_regsz(regnum);
|
||||
|
||||
if (kdb_thread == curthread) {
|
||||
if (kdb_thread == curthread) {
|
||||
switch (regnum) {
|
||||
case 0: return (&kdb_frame->tf_eax);
|
||||
case 1: return (&kdb_frame->tf_ecx);
|
||||
case 2: return (&kdb_frame->tf_edx);
|
||||
case 9: return (&kdb_frame->tf_eflags);
|
||||
case 10: return (&kdb_frame->tf_cs);
|
||||
case 12: return (&kdb_frame->tf_ds);
|
||||
case 13: return (&kdb_frame->tf_es);
|
||||
case 14: return (&kdb_frame->tf_fs);
|
||||
}
|
||||
}
|
||||
switch (regnum) {
|
||||
@ -62,6 +70,12 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
|
||||
case 6: return (&kdb_thrctx->pcb_esi);
|
||||
case 7: return (&kdb_thrctx->pcb_edi);
|
||||
case 8: return (&kdb_thrctx->pcb_eip);
|
||||
case 10: return (&_kcodesel);
|
||||
case 11: return (&_kdatasel);
|
||||
case 12: return (&_kdatasel);
|
||||
case 13: return (&_kdatasel);
|
||||
case 14: return (&_kprivsel);
|
||||
case 15: return (&kdb_thrctx->pcb_gs);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
@ -2867,6 +2867,7 @@ makectx(struct trapframe *tf, struct pcb *pcb)
|
||||
pcb->pcb_ebx = tf->tf_ebx;
|
||||
pcb->pcb_eip = tf->tf_eip;
|
||||
pcb->pcb_esp = (ISPL(tf->tf_cs)) ? tf->tf_esp : (int)(tf + 1) - 8;
|
||||
pcb->pcb_gs = rgs();
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -30,7 +30,7 @@
|
||||
#define _MACHINE_GDB_MACHDEP_H_
|
||||
|
||||
#define GDB_BUFSZ 400
|
||||
#define GDB_NREGS 14
|
||||
#define GDB_NREGS 16
|
||||
#define GDB_REG_PC 8
|
||||
|
||||
static __inline size_t
|
||||
|
Loading…
x
Reference in New Issue
Block a user