summaryrefslogtreecommitdiffstats
path: root/sys/i386/linux/linux_ptrace.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2014-11-02 22:58:30 +0000
committerjhb <jhb@FreeBSD.org>2014-11-02 22:58:30 +0000
commitfdfced8ce850bbda17da9a33864db449f49e89d8 (patch)
tree42bdf4fc68fe06b5bb16808009a36a866b42ab0c /sys/i386/linux/linux_ptrace.c
parent948508e0967ce692816e77054ef9ab5302b9313f (diff)
downloadFreeBSD-src-fdfced8ce850bbda17da9a33864db449f49e89d8.zip
FreeBSD-src-fdfced8ce850bbda17da9a33864db449f49e89d8.tar.gz
MFamd64: Add support for extended FPU states on i386. This includes
support for AVX on i386. - Similar to amd64, move the FPU save area out of the PCB and instead store saved FPU state in a variable-sized buffer after the PCB on the stack. - To support the variable PCB location, alter the locore code to only use the bottom-most page of proc0stack for init386(). init386() returns the correct stack pointer to locore which adjusts the stack for thread0 before calling mi_startup(). - Don't bother setting cr3 in thread0's pcb in locore before calling init386(). It wasn't used (init386() overwrote it at the end) and it doesn't work with the variable-sized FPU save area. - Remove the new-bus attachment from npx. This was only ever useful for external co-processors using IRQ13, but those have not been supported for several years. npxinit() is now called much earlier during boot (init386()) similar to amd64. - Implement PT_{GET,SET}XSTATE and I386_GET_XFPUSTATE. - npxsave() is now only called from context switch contexts so it can use XSAVEOPT. Differential Revision: https://reviews.freebsd.org/D1058 Reviewed by: kib Tested on: FreeBSD/i386 VM under bhyve on Intel i5-2520
Diffstat (limited to 'sys/i386/linux/linux_ptrace.c')
-rw-r--r--sys/i386/linux/linux_ptrace.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/i386/linux/linux_ptrace.c b/sys/i386/linux/linux_ptrace.c
index 1074d21..46a1169 100644
--- a/sys/i386/linux/linux_ptrace.c
+++ b/sys/i386/linux/linux_ptrace.c
@@ -225,7 +225,7 @@ linux_proc_read_fpxregs(struct thread *td, struct linux_pt_fpxreg *fpxregs)
PROC_LOCK_ASSERT(td->td_proc, MA_OWNED);
if (cpu_fxsr == 0 || (td->td_proc->p_flag & P_INMEM) == 0)
return (EIO);
- bcopy(&td->td_pcb->pcb_user_save.sv_xmm, fpxregs, sizeof(*fpxregs));
+ bcopy(&get_pcb_user_save_td(td)->sv_xmm, fpxregs, sizeof(*fpxregs));
return (0);
}
@@ -236,7 +236,7 @@ linux_proc_write_fpxregs(struct thread *td, struct linux_pt_fpxreg *fpxregs)
PROC_LOCK_ASSERT(td->td_proc, MA_OWNED);
if (cpu_fxsr == 0 || (td->td_proc->p_flag & P_INMEM) == 0)
return (EIO);
- bcopy(fpxregs, &td->td_pcb->pcb_user_save.sv_xmm, sizeof(*fpxregs));
+ bcopy(fpxregs, &get_pcb_user_save_td(td)->sv_xmm, sizeof(*fpxregs));
return (0);
}
#endif
OpenPOWER on IntegriCloud