OSDN Git Service

* dcrt0.cc (alloc_stack_hard_way): Revert to previous implementation.
authorcgf <cgf>
Sat, 14 Feb 2004 04:38:37 +0000 (04:38 +0000)
committercgf <cgf>
Sat, 14 Feb 2004 04:38:37 +0000 (04:38 +0000)
(alloc_stack): Ditto.
* exceptions.cc (ctrl_c_handler): Add debugging output.

winsup/cygwin/ChangeLog
winsup/cygwin/dcrt0.cc
winsup/cygwin/exceptions.cc
winsup/cygwin/fork.cc
winsup/cygwin/gendef

index 20c8c3e..5a298bf 100644 (file)
@@ -1,5 +1,11 @@
 2004-02-13  Christopher Faylor  <cgf@redhat.com>
 
+       * dcrt0.cc (alloc_stack_hard_way): Revert to previous implementation.
+       (alloc_stack): Ditto.
+       * exceptions.cc (ctrl_c_handler): Add debugging output.
+
+2004-02-13  Christopher Faylor  <cgf@redhat.com>
+
        * Makefile.in (clean): Remove sigfe.s.
        (sigfe.s): Ensure that sigfe.s will be regenerated if it does not exist.
        * dll_init.cc (dll_dllcrt0): Simplify initializing tests.
index b824e3a..79d84c4 100644 (file)
@@ -459,9 +459,8 @@ static MEMORY_BASIC_INFORMATION NO_COPY sm;
 #define CYGWIN_GUARD ((wincap.has_page_guard ()) ? \
                     PAGE_EXECUTE_READWRITE|PAGE_GUARD : PAGE_NOACCESS)
 
-// __inline__ void
-extern void
-alloc_stack_hard_way (child_info_fork *ci)
+static void
+alloc_stack_hard_way (child_info_fork *ci, volatile char *b)
 {
   void *new_stack_pointer;
   MEMORY_BASIC_INFORMATION m;
@@ -496,7 +495,7 @@ alloc_stack_hard_way (child_info_fork *ci)
     api_fatal ("fork: couldn't get new stack info, %E");
   if (!noguard)
     {
-      m.BaseAddress = (LPVOID)((DWORD)m.BaseAddress - 1);
+      m.BaseAddress = (LPVOID) ((DWORD) m.BaseAddress - 1);
       if (!VirtualAlloc ((LPVOID) m.BaseAddress, 1, MEM_COMMIT,
                         CYGWIN_GUARD))
        api_fatal ("fork: couldn't allocate new stack guard page %p, %E",
@@ -505,6 +504,7 @@ alloc_stack_hard_way (child_info_fork *ci)
   if (!VirtualQuery ((LPCVOID) m.BaseAddress, &m, sizeof m))
     api_fatal ("fork: couldn't get new stack info, %E");
   ci->stacktop = m.BaseAddress;
+  b[0] = '\0';
 }
 
 /* extend the stack prior to fork longjmp */
@@ -512,16 +512,18 @@ alloc_stack_hard_way (child_info_fork *ci)
 static void
 alloc_stack (child_info_fork *ci)
 {
-  if (!VirtualQuery ((LPCVOID) _tlstop, &sm, sizeof sm))
+  /* FIXME: adding 16384 seems to avoid a stack copy problem during
+     fork on Win95, but I don't know exactly why yet. DJ */
+  volatile char b[ci->stacksize + 16384];
+
+  if (!VirtualQuery ((LPCVOID) &b, &sm, sizeof sm))
     api_fatal ("fork: couldn't get stack info, %E");
 
   if (sm.AllocationBase == ci->stacktop)
-    {
-      ci->stacksize = 0;
-      return;
-    }
+    ci->stacksize = 0;
+  else
+    alloc_stack_hard_way (ci, b + sizeof (b) - 1);
 
-  alloc_stack_hard_way (ci);
   return;
 }
 
@@ -785,7 +787,6 @@ dll_crt0_1 (char *)
          _tlsbase = (char *) fork_info->stackbottom;
          _tlstop = (char *) fork_info->stacktop;
        }
-
       longjmp (fork_info->jmp, fork_info->cygpid);
     }
 
index 118223e..7bc7c77 100644 (file)
@@ -829,7 +829,10 @@ ctrl_c_handler (DWORD type)
   static bool saw_close;
 
   if (!cygwin_finished_initializing)
-    ExitProcess (STATUS_CONTROL_C_EXIT);
+    {
+      debug_printf ("exiting with status %p", STATUS_CONTROL_C_EXIT);
+      ExitProcess (STATUS_CONTROL_C_EXIT);
+    }
 
   _my_tls.remove (INFINITE);
 
index 01b9dbc..5b5f66d 100644 (file)
@@ -664,7 +664,6 @@ fork ()
   child_info_fork ch;
 
   int res = setjmp (ch.jmp);
-
   if (res)
     res = fork_child (grouped.hParent, grouped.first_dll, grouped.load_dlls);
   else
index 22acf87..009c27d 100755 (executable)
@@ -281,6 +281,5 @@ _longjmp:
        movl    20(%edi),%edi
        popfl
        ret
-
 EOF
 }