Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2004-02-14 07:38:37 +0300
committerChristopher Faylor <me@cgf.cx>2004-02-14 07:38:37 +0300
commitc21e74cce84389cfbde36b355b8c60810a40ee0c (patch)
tree18b42fb18d0a096e245786ff4aa1e52f2b792388 /winsup
parente6ea2b96713e786f0f06e285ca8b226d7f8ec8ac (diff)
* dcrt0.cc (alloc_stack_hard_way): Revert to previous implementation.
(alloc_stack): Ditto. * exceptions.cc (ctrl_c_handler): Add debugging output.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/dcrt0.cc23
-rw-r--r--winsup/cygwin/exceptions.cc5
-rw-r--r--winsup/cygwin/fork.cc1
-rwxr-xr-xwinsup/cygwin/gendef1
5 files changed, 22 insertions, 14 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 20c8c3ebb..5a298bf71 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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.
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index b824e3a51..79d84c47d 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -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);
}
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index 118223e03..7bc7c7775 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -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);
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc
index 01b9dbc23..5b5f66d97 100644
--- a/winsup/cygwin/fork.cc
+++ b/winsup/cygwin/fork.cc
@@ -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
diff --git a/winsup/cygwin/gendef b/winsup/cygwin/gendef
index 22acf87df..009c27db1 100755
--- a/winsup/cygwin/gendef
+++ b/winsup/cygwin/gendef
@@ -281,6 +281,5 @@ _longjmp:
movl 20(%edi),%edi
popfl
ret
-
EOF
}