Kernel32: 3GB UserSpace boot option
Stefan Reimer
lists at startux.de
Wed Oct 15 02:08:09 CDT 2008
Hi,
I hacked wine to enable 3GB user address space just like the /3GB boot.ini
option for windows. ( see patch )
This actually works like a charm playing everquest2 which crashes from
time to time without this patch due to running out of memory.
To do it right, should this "3GB Option" be enabled by a wine start
parameter or a registry key ? Is the registry already setup during the
call of libs/wine/mmap.c ?
Bye
Stefan Reimer
diff --git a/dlls/kernel32/cpu.c b/dlls/kernel32/cpu.c
index a49df99..61dd2be 100644
--- a/dlls/kernel32/cpu.c
+++ b/dlls/kernel32/cpu.c
@@ -383,7 +383,7 @@ VOID WINAPI GetSystemInfo(
/* FIXME: the two entries below should be computed somehow... */
cachedsi.lpMinimumApplicationAddress = (void *)0x00010000;
- cachedsi.lpMaximumApplicationAddress = (void *)0x7FFEFFFF;
+ cachedsi.lpMaximumApplicationAddress = (void *)0xBFFEFFFF;
cachedsi.dwActiveProcessorMask = 0;
cachedsi.dwNumberOfProcessors = 1;
cachedsi.dwProcessorType = PROCESSOR_INTEL_PENTIUM;
diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c
index 9931c09..aec818f 100644
--- a/dlls/kernel32/heap.c
+++ b/dlls/kernel32/heap.c
@@ -1336,7 +1336,7 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX
lpmemex )
/* FIXME: should do something for other systems */
GetSystemInfo(&si);
- lpmemex->ullTotalVirtual =
(char*)si.lpMaximumApplicationAddress-(char*)si.lpMinimumApplicationAddress;
+ lpmemex->ullTotalVirtual = (unsigned
long)si.lpMaximumApplicationAddress-(unsigned
long)si.lpMinimumApplicationAddress;
/* FIXME: we should track down all the already allocated VM pages and
substract them, for now arbitrarily remove 64KB so that it matches NT
*/
lpmemex->ullAvailVirtual = lpmemex->ullTotalVirtual-64*1024;
diff --git a/libs/wine/mmap.c b/libs/wine/mmap.c
index ff117cc..6ae6664 100644
--- a/libs/wine/mmap.c
+++ b/libs/wine/mmap.c
@@ -346,7 +346,7 @@ void mmap_init(void)
#if defined(__i386__) && !defined(__FreeBSD__) &&
!defined(__FreeBSD_kernel__) /* commented out until FreeBSD gets fixed
*/
char stack;
char * const stack_ptr = &stack;
- char *user_space_limit = (char *)0x7ffe0000;
+ char *user_space_limit = (char *)0xbffe0000;
reserve_malloc_space( 8 * 1024 * 1024 );
More information about the wine-devel
mailing list