On Wed, 2005-03-16 at 00:32, Alexandre Julliard wrote: > Michael Ost <[EMAIL PROTECTED]> writes: > > > Wine reports that apps have 2GB of VM in GlobalMemoryStatus, but they > > actually only have 1GB. Isn't that a Wine bug? > > Not really, you do have 2GB of VM, you just can't allocate all of it > with VirtualAlloc(NULL) because of kernel limitations. You can still > access it by specifying explicit addresses.
Here's a suggestion. Certainly naive, but would it work? The idea is to trap mmap allocations which go above "user_space_limit" and retry them in the space below 0x4000,0000. Something like this in lib/wine/mmap.c wine_anon_map() - replace: return mmap(start, size, prot, flags, fdzero, 0); with void* addr = mmap(start, size, prot, flags, fdzero, 0); /* disallow allocations above the windows limit */ /* OR can you to find this out without mmap()ing first? */ if addr + size > user_space_limit) munmap(addr) addr = 0; /* look below linux's 0x40000000 address if a specific */ /* address wasn't requested */ if start == 0 and addr == 0 /* 0x08000000 is the start of the TEXT segment - */ /* start looking there */ addr = mmap(0x08000000, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0); return addr; This should start allocating memory from below 0x4000,0000 to windows processes after the area between 0x4000,0000 to 0x8000,0000 is full, right? >From way out of my depth %) ... mo PS: my company is very interested in getting this fixed. I might be able to shake some money loose for the development.