When running Linux binaries, set up the initial FPU state as Linux

would.

PR:	28966
This commit is contained in:
David Schultz 2005-02-06 17:29:20 +00:00
parent 1c7178ce25
commit 2a51b9b0aa
1 changed files with 7 additions and 0 deletions

View File

@ -94,6 +94,9 @@ MALLOC_DEFINE(M_LINUX, "linux", "Linux mode structures");
#define LINUX_SYS_linux_rt_sendsig 0
#define LINUX_SYS_linux_sendsig 0
#define fldcw(addr) __asm("fldcw %0" : : "m" (*(addr)))
#define __LINUX_NPXCW__ 0x37f
extern char linux_sigcode[];
extern int linux_szsigcode;
@ -775,12 +778,16 @@ static void
exec_linux_setregs(struct thread *td, u_long entry,
u_long stack, u_long ps_strings)
{
static const u_short control = __LINUX_NPXCW__;
struct pcb *pcb = td->td_pcb;
exec_setregs(td, entry, stack, ps_strings);
/* Linux sets %gs to 0, we default to _udatasel */
pcb->pcb_gs = 0; load_gs(0);
/* Linux sets the i387 to extended precision. */
fldcw(&control);
}
struct sysentvec linux_sysvec = {