* dcrt0.cc (alloc_stack_hard_way): Revert to previous implementation.

(alloc_stack): Ditto.
* exceptions.cc (ctrl_c_handler): Add debugging output.
This commit is contained in:
Christopher Faylor 2004-02-14 04:38:37 +00:00
parent e6ea2b9671
commit c21e74cce8
5 changed files with 22 additions and 14 deletions

View File

@ -1,3 +1,9 @@
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.

View 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);
}

View 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);

View 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

View File

@ -281,6 +281,5 @@ _longjmp:
movl 20(%edi),%edi
popfl
ret
EOF
}