OSDN Git Service

* autoload.cc (std_dll_init): Save and restore fpu control register around
authorcgf <cgf>
Thu, 3 Mar 2005 00:49:51 +0000 (00:49 +0000)
committercgf <cgf>
Thu, 3 Mar 2005 00:49:51 +0000 (00:49 +0000)
LoadAddress to prevent loaded dlls (like msvcrt.dll) from setting unwanted
stuff.

winsup/cygwin/ChangeLog
winsup/cygwin/autoload.cc

index 3e82187..302fb5e 100644 (file)
@@ -1,5 +1,11 @@
 2005-03-02  Christopher Faylor  <cgf@timesys.com>
 
+       * autoload.cc (std_dll_init): Save and restore fpu control register
+       around LoadAddress to prevent loaded dlls (like msvcrt.dll) from
+       setting unwanted stuff.
+
+2005-03-02  Christopher Faylor  <cgf@timesys.com>
+
        * cygtls.cc (_cygtls::init_thread): Move exitsock setting later.  It
 
 2005-03-02  Christopher Faylor  <cgf@timesys.com>
index 805b765..aef122a 100644 (file)
@@ -208,8 +208,13 @@ std_dll_init ()
     while (InterlockedIncrement (&dll->here));
   else if (!dll->handle)
     {
+      unsigned fpu_control = 0;
+      __asm__ __volatile__ ("fnstcw %0": "=m" (fpu_control));
       if ((h = LoadLibrary (dll->name)) != NULL)
-       dll->handle = h;
+       {
+         __asm__ __volatile__ ("fldcw %0": : "m" (fpu_control));
+         dll->handle = h;
+       }
       else if (!(func->decoration & 1))
        api_fatal ("could not load %s, %E", dll->name);
       else
@@ -256,7 +261,6 @@ wsock_init ()
 
   if (!wsock_started)
     {
-      /* Don't use autoload to load WSAStartup to eliminate recursion. */
       int (*wsastartup) (int, WSADATA *);
 
       wsastartup = (int (*)(int, WSADATA *))