Module: wine Branch: master Commit: a81c53504ae32715e6e91bd020fdebd5bef20d48 URL: https://gitlab.winehq.org/wine/wine/-/commit/a81c53504ae32715e6e91bd020fdebd...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Sep 28 16:30:32 2023 +0200
ntdll: Release the low address space reservation for 64-bit apps.
---
dlls/ntdll/unix/env.c | 2 +- dlls/ntdll/unix/server.c | 2 -- dlls/ntdll/unix/virtual.c | 11 ++++++++--- 3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c index f42c6a8f59f..feae7d4b954 100644 --- a/dlls/ntdll/unix/env.c +++ b/dlls/ntdll/unix/env.c @@ -1865,7 +1865,6 @@ static void init_peb( RTL_USER_PROCESS_PARAMETERS *params, void *module ) NtCurrentTeb()->WowTebOffset = teb_offset; NtCurrentTeb()->Tib.ExceptionList = (void *)((char *)NtCurrentTeb() + teb_offset); wow_peb = (PEB32 *)((char *)peb + page_size); - user_space_wow_limit = ((main_image_info.ImageCharacteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE) ? limit_4g : limit_2g) - 1; set_thread_id( NtCurrentTeb(), GetCurrentProcessId(), GetCurrentThreadId() ); ERR( "starting %s in experimental wow64 mode\n", debugstr_us(¶ms->ImagePathName) ); break; @@ -1876,6 +1875,7 @@ static void init_peb( RTL_USER_PROCESS_PARAMETERS *params, void *module ) } #endif
+ virtual_set_large_address_space(); load_global_options( ¶ms->ImagePathName );
if (wow_peb) diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c index e5e234d05ae..24653904308 100644 --- a/dlls/ntdll/unix/server.c +++ b/dlls/ntdll/unix/server.c @@ -1687,8 +1687,6 @@ void server_init_process_done(void) #ifdef __APPLE__ send_server_task_port(); #endif - if (main_image_info.ImageCharacteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE) - virtual_set_large_address_space();
/* Install signal handlers; this cannot be done earlier, since we cannot * send exceptions to the debugger before the create process event that diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 94e68edab77..67778453666 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -4184,9 +4184,14 @@ static void virtual_release_address_space(void) */ void virtual_set_large_address_space(void) { - /* no large address space on win9x */ - if (peb->OSPlatformId != VER_PLATFORM_WIN32_NT) return; - +#ifdef _WIN64 + if (is_wow64()) + user_space_wow_limit = ((main_image_info.ImageCharacteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE) ? limit_4g : limit_2g) - 1; + else + free_reserved_memory( 0, (char *)0x7ffe0000 ); +#else + if (!(main_image_info.ImageCharacteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE)) return; +#endif user_space_limit = working_set_limit = address_space_limit; }