Add back the i386-specific hack to save and restore the FP state
to/from a ucontext when a thread is interrupted by a signal. This will be removed when a proper fix is made in the kernel to save/restore the FP state without breaking the ABI.
This commit is contained in:
parent
d294e7fb70
commit
cbed250de4
@ -77,12 +77,12 @@
|
||||
#define SET_STACK_UC(ucp, stk) (ucp)->uc_mcontext.mc_esp = (int)(stk)
|
||||
#define FP_SAVE_UC(ucp) do { \
|
||||
char *fdata; \
|
||||
fdata = (char *) (ucp)->uc_mcontext.mc_fpregs; \
|
||||
fdata = (char *) (ucp)->uc_mcontext.mc_fpstate; \
|
||||
__asm__("fnsave %0": :"m"(*fdata)); \
|
||||
} while (0)
|
||||
#define FP_RESTORE_UC(ucp) do { \
|
||||
char *fdata; \
|
||||
fdata = (char *) (ucp)->uc_mcontext.mc_fpregs; \
|
||||
fdata = (char *) (ucp)->uc_mcontext.mc_fpstate; \
|
||||
__asm__("frstor %0": :"m"(*fdata)); \
|
||||
} while (0)
|
||||
#define SET_RETURN_ADDR_JB(jb, ra) (jb)[0]._jb[0] = (int)(ra)
|
||||
|
@ -113,7 +113,7 @@ _thread_kern_sched(ucontext_t *ucp)
|
||||
|
||||
/* Check if this function was called from the signal handler: */
|
||||
if (ucp != NULL) {
|
||||
#if 0
|
||||
#if 1
|
||||
/* XXX - Save FP registers? */
|
||||
FP_SAVE_UC(ucp);
|
||||
#endif
|
||||
@ -158,7 +158,7 @@ _thread_kern_sched(ucontext_t *ucp)
|
||||
if (ucp == NULL)
|
||||
return;
|
||||
else {
|
||||
#if 0
|
||||
#if 1
|
||||
/* XXX - Restore FP registers? */
|
||||
FP_RESTORE_UC(ucp);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user