mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2025-02-17 02:31:41 +01:00
Save FPU context for i386.
This commit is contained in:
parent
b1c68e060c
commit
75b76d1f45
1 changed files with 25 additions and 9 deletions
|
@ -61,20 +61,36 @@ _Ux86_getcontext:
|
||||||
popl FREEBSD_UC_MCONTEXT_EFLAGS_OFF(%eax)
|
popl FREEBSD_UC_MCONTEXT_EFLAGS_OFF(%eax)
|
||||||
|
|
||||||
movl $0, FREEBSD_UC_MCONTEXT_TRAPNO_OFF(%eax)
|
movl $0, FREEBSD_UC_MCONTEXT_TRAPNO_OFF(%eax)
|
||||||
#if 0
|
|
||||||
movl $FREEBSD_UC_MCONTEXT_FPOWNED_FPU,\
|
movl $FREEBSD_UC_MCONTEXT_FPOWNED_FPU,\
|
||||||
FREEBSD_UC_MCONTEXT_OWNEDFP_OFF(%eax)
|
FREEBSD_UC_MCONTEXT_OWNEDFP_OFF(%eax)
|
||||||
movl $FREEBSD_UC_MCONTEXT_FPFMT_XMM,\
|
movl $FREEBSD_UC_MCONTEXT_FPFMT_XMM,\
|
||||||
FREEBSD_UC_MCONTEXT_FPFORMAT_OFF(%eax)
|
FREEBSD_UC_MCONTEXT_FPFORMAT_OFF(%eax)
|
||||||
|
|
||||||
/* Require CPU with fxsave implemented, and enabled by OS. */
|
/*
|
||||||
fxsave FREEBSD_UC_MCONTEXT_FPSTATE_OFF(%eax)
|
* Require CPU with fxsave implemented, and enabled by OS.
|
||||||
#else
|
*
|
||||||
movl $FREEBSD_UC_MCONTEXT_FPOWNED_NONE,\
|
* If passed ucontext is not aligned to 16-byte boundary,
|
||||||
FREEBSD_UC_MCONTEXT_OWNEDFP_OFF(%eax)
|
* save fpu context into temporary aligned location on stack
|
||||||
movl $FREEBSD_UC_MCONTEXT_FPFMT_NODEV,\
|
* and then copy.
|
||||||
FREEBSD_UC_MCONTEXT_FPFORMAT_OFF(%eax)
|
*/
|
||||||
#endif
|
leal FREEBSD_UC_MCONTEXT_FPSTATE_OFF(%eax), %edx
|
||||||
|
testl $0xf, %edx
|
||||||
|
je 1f
|
||||||
|
movl %edx, %edi
|
||||||
|
movl %esp, %edx
|
||||||
|
subl $512, %esp
|
||||||
|
andl $~0xf, %esp
|
||||||
|
fxsave (%esp)
|
||||||
|
movl %esp, %esi
|
||||||
|
movl $512/4,%ecx
|
||||||
|
rep; movsl
|
||||||
|
movl %edx, %esp
|
||||||
|
movl FREEBSD_UC_MCONTEXT_ESI_OFF(%eax), %esi
|
||||||
|
movl FREEBSD_UC_MCONTEXT_EDI_OFF(%eax), %edi
|
||||||
|
jmp 2f
|
||||||
|
1: fxsave (%edx)
|
||||||
|
2:
|
||||||
|
|
||||||
movl $FREEBSD_UC_MCONTEXT_MC_LEN_VAL,\
|
movl $FREEBSD_UC_MCONTEXT_MC_LEN_VAL,\
|
||||||
FREEBSD_UC_MCONTEXT_MC_LEN_OFF(%eax)
|
FREEBSD_UC_MCONTEXT_MC_LEN_OFF(%eax)
|
||||||
|
|
Loading…
Add table
Reference in a new issue