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.
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;
}
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;
}