ntdll: Don't worry about the DOS area on non-x86.

This commit is contained in:
Alexandre Julliard 2010-12-16 10:25:14 +01:00
parent d15d52ddab
commit e39c6d0474

View File

@ -122,6 +122,7 @@ static RTL_CRITICAL_SECTION csVirtual = { &critsect_debug, -1, 0, 0, 0, 0 };
static void *address_space_limit = (void *)0xc0000000; /* top of the total available address space */ static void *address_space_limit = (void *)0xc0000000; /* top of the total available address space */
static void *user_space_limit = (void *)0x7fff0000; /* top of the user address space */ static void *user_space_limit = (void *)0x7fff0000; /* top of the user address space */
static void *working_set_limit = (void *)0x7fff0000; /* top of the current working set */ static void *working_set_limit = (void *)0x7fff0000; /* top of the current working set */
static void *address_space_start = (void *)0x110000; /* keep DOS area clear */
#elif defined(__x86_64__) #elif defined(__x86_64__)
# define page_mask 0xfff # define page_mask 0xfff
# define page_shift 12 # define page_shift 12
@ -129,6 +130,7 @@ static void *working_set_limit = (void *)0x7fff0000; /* top of the current wo
static void *address_space_limit = (void *)0x7fffffff0000; static void *address_space_limit = (void *)0x7fffffff0000;
static void *user_space_limit = (void *)0x7fffffff0000; static void *user_space_limit = (void *)0x7fffffff0000;
static void *working_set_limit = (void *)0x7fffffff0000; static void *working_set_limit = (void *)0x7fffffff0000;
static void *address_space_start = (void *)0x10000;
#else #else
static UINT page_shift; static UINT page_shift;
static UINT_PTR page_size; static UINT_PTR page_size;
@ -136,8 +138,8 @@ static UINT_PTR page_mask;
static void *address_space_limit; static void *address_space_limit;
static void *user_space_limit; static void *user_space_limit;
static void *working_set_limit; static void *working_set_limit;
static void *address_space_start = (void *)0x10000;
#endif /* __i386__ */ #endif /* __i386__ */
static void * const address_space_start = (void *)0x110000;
#define ROUND_ADDR(addr,mask) \ #define ROUND_ADDR(addr,mask) \
((void *)((UINT_PTR)(addr) & ~(UINT_PTR)(mask))) ((void *)((UINT_PTR)(addr) & ~(UINT_PTR)(mask)))
@ -1071,7 +1073,7 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz
server_enter_uninterrupted_section( &csVirtual, &sigset ); server_enter_uninterrupted_section( &csVirtual, &sigset );
if (base >= (char *)0x110000) /* make sure the DOS area remains free */ if (base >= (char *)address_space_start) /* make sure the DOS area remains free */
status = map_view( &view, base, total_size, mask, FALSE, status = map_view( &view, base, total_size, mask, FALSE,
VPROT_COMMITTED | VPROT_READ | VPROT_EXEC | VPROT_WRITECOPY | VPROT_IMAGE ); VPROT_COMMITTED | VPROT_READ | VPROT_EXEC | VPROT_WRITECOPY | VPROT_IMAGE );
@ -1367,6 +1369,7 @@ void virtual_init(void)
{ {
const char *preload; const char *preload;
void *heap_base; void *heap_base;
size_t size;
struct file_view *heap_view; struct file_view *heap_view;
#ifndef page_mask #ifndef page_mask
@ -1397,9 +1400,10 @@ void virtual_init(void)
VIRTUAL_HEAP_SIZE, NULL, NULL ); VIRTUAL_HEAP_SIZE, NULL, NULL );
create_view( &heap_view, heap_base, VIRTUAL_HEAP_SIZE, VPROT_COMMITTED | VPROT_READ | VPROT_WRITE ); create_view( &heap_view, heap_base, VIRTUAL_HEAP_SIZE, VPROT_COMMITTED | VPROT_READ | VPROT_WRITE );
/* make the DOS area accessible to hide bugs in broken apps like Excel 2003 */ /* make the DOS area accessible (except the low 64K) to hide bugs in broken apps like Excel 2003 */
if (wine_mmap_is_in_reserved_area( (void *)0x10000, 0x100000 ) == 1) size = (char *)address_space_start - (char *)0x10000;
wine_anon_mmap( (void *)0x10000, 0x100000, PROT_READ | PROT_WRITE, MAP_FIXED ); if (size && wine_mmap_is_in_reserved_area( (void*)0x10000, size ) == 1)
wine_anon_mmap( (void *)0x10000, size, PROT_READ | PROT_WRITE, MAP_FIXED );
} }