On Wed Jul 17 17:16:20 2024 +0000, theofficialgman wrote:
The issue I am having is when fully emulating x86_64 wine on arm64 using the likes of box64/fex/qemu. So the hardcode makes sense why the problem is happening. Thanks for the info, I'll look into using `get_host_addr_space_limit` for all architectures.
That resolved the issue
@julliard please consider using the `get_host_addr_space_limit` for all architectures as is done with this patch
``` diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 0d88315..87b27fb 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -2436,8 +2436,6 @@ static NTSTATUS map_pe_header( void *ptr, size_t size, int fd, BOOL *removable ) return STATUS_SUCCESS; /* page protections will be updated later */ }
-#ifdef __aarch64__ - /*********************************************************************** * get_host_addr_space_limit */ @@ -2464,6 +2462,7 @@ static void *get_host_addr_space_limit(void) return (void *)((addr << 1) - (granularity_mask + 1)); }
+#ifdef __aarch64__
/*********************************************************************** * alloc_arm64ec_map @@ -3296,12 +3295,8 @@ void virtual_init(void) pthread_mutex_init( &virtual_mutex, &attr ); pthread_mutexattr_destroy( &attr );
-#ifdef __aarch64__ host_addr_space_limit = get_host_addr_space_limit(); TRACE( "host addr space limit: %p\n", host_addr_space_limit ); -#else - host_addr_space_limit = address_space_limit; -#endif
if (preload_info && *preload_info) for (i = 0; (*preload_info)[i].size; i++) ```