libwine: Better heuristic for finding the top of the address space on Linux.

This commit is contained in:
Alexandre Julliard 2006-07-31 17:09:34 +02:00
parent 6d4fb08ece
commit 6a5d3600dd
1 changed files with 5 additions and 4 deletions

View File

@ -338,15 +338,16 @@ void mmap_init(void)
if (stack_ptr >= user_space_limit) if (stack_ptr >= user_space_limit)
{ {
char *end = 0;
char *base = stack_ptr - ((unsigned int)stack_ptr & granularity_mask) - (granularity_mask + 1); char *base = stack_ptr - ((unsigned int)stack_ptr & granularity_mask) - (granularity_mask + 1);
if (base > user_space_limit) reserve_area( user_space_limit, base ); if (base > user_space_limit) reserve_area( user_space_limit, base );
base = stack_ptr - ((unsigned int)stack_ptr & granularity_mask) + (granularity_mask + 1); base = stack_ptr - ((unsigned int)stack_ptr & granularity_mask) + (granularity_mask + 1);
#ifdef linux #ifdef linux
/* Linux heuristic: if the stack top is at c0000000, assume the address space */ /* Linux heuristic: assume the stack is near the end of the address */
/* ends there, this avoids a lot of futile allocation attempts */ /* space, this avoids a lot of futile allocation attempts */
if (base != (char *)0xc0000000) end = (char *)(((unsigned long)base + 0x0fffffff) & 0xf0000000);
#endif #endif
reserve_area( base, 0 ); reserve_area( base, end );
} }
else reserve_area( user_space_limit, 0 ); else reserve_area( user_space_limit, 0 );
#endif /* __i386__ */ #endif /* __i386__ */