http://bugs.winehq.org/show_bug.cgi?id=30849
--- Comment #58 from Erich Hoover ehoover@mines.edu 2012-06-07 12:16:18 CDT --- (In reply to comment #57)
... This would limit the address space even more than my first patch. The question is why does it require this, when the current behavior is AFAICT identical to that of 64-bit Windows.
Oh! I think I might have figured it out, it's not actually the internal behavior - it's the reporting of the address space. In virtual_get_system_info it sets the HighestUserAddress to user_space_limit-1. My guess is that because we're reporting back an address over the 32-bit limit (in my case 0xffff0000) that Warden starts attempting to look in addresses that it doesn't have the ability to check. Using the following instead allows it to work: info->HighestUserAddress = (char*)min((char *)user_space_limit, 0xc0000000)-1;
(note: 0x7fff0000 also works, but I'm not sure which is more appropriate - this isn't really my area of expertise)