diff options
author | Christopher Faylor <me@cgf.cx> | 2005-12-02 03:12:06 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2005-12-02 03:12:06 +0000 |
commit | e7f6a31bb07e96eed5ffb7b8d137051292532930 (patch) | |
tree | 722b2a0af02789e0b7511615a7749aa82f3ad42b /winsup | |
parent | 032295a9884b6d64b23ae0157318abae6ac963b4 (diff) | |
download | cygnal-e7f6a31bb07e96eed5ffb7b8d137051292532930.tar.gz cygnal-e7f6a31bb07e96eed5ffb7b8d137051292532930.tar.bz2 cygnal-e7f6a31bb07e96eed5ffb7b8d137051292532930.zip |
* dcrt0.cc (getstack): Try harder to modify memory.
(alloc_stack): Alloc page prior to stack top, too.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/dcrt0.cc | 10 |
2 files changed, 11 insertions, 4 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 152dbcd15..f7c6b9690 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,10 @@ 2005-12-01 Christopher Faylor <cgf@timesys.com> + * dcrt0.cc (getstack): Try harder to modify memory. + (alloc_stack): Alloc page prior to stack top, too. + +2005-12-01 Christopher Faylor <cgf@timesys.com> + * devices.h (_major): Revert previous ill-advised change. (_minor): Ditto. diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index c88d43d23..dd5731a3e 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -504,9 +504,10 @@ alloc_stack_hard_way (child_info_fork *ci, volatile char *b) void *getstack (void *) __attribute__ ((noinline)); volatile char * -getstack (volatile char *p) +getstack (volatile char * volatile p) { - *p |= 0; + *p ^= 1; + *p ^= 1; return p - 4096; } @@ -515,13 +516,14 @@ getstack (volatile char *p) static void alloc_stack (child_info_fork *ci) { - volatile char *esp; + volatile char * volatile esp; __asm__ volatile ("movl %%esp,%0": "=r" (esp)); if (_tlsbase != ci->stackbottom) alloc_stack_hard_way (ci, esp); else { - while (_tlstop > ci->stacktop) + char *stacktop = (char *) ci->stacktop - 4096; + while (_tlstop >= stacktop) esp = getstack (esp); ci->stacksize = 0; } |