Adds new VMM capabilities to reserve memory at a specific address for a file mapping and uses it to load client libs and anything else that requires reachability inside the vmcode region.
Fixes two unmap failures which now show up as memory leaks with the VMM managing the space:
- The inter-segment gaps were not being unmapped.
- The .bss separation page was not being unmapped.
Makes -vm_size, the size of the vmcode region, 1G by default on UNIX. We do not go all the way to 2G because that causes -vm_base_near_app to always fail, which results in always having to mangle rip-relative accesses and corresponding increased overhead.
Leaves Windows vmcode size and library location unchanged, due to complexities in placing file mappings inside the region (see the issue for details).
Increases -vmheap_size to 2G as well while at it, for all platforms.
Tweaks the client.alloc test options to work with larger vmcode sizes.
Disables -reachable_client guarantees for static DR and documents this. Such guarantees are impossible with a 2G vmcode, and difficult even with 1G or smaller.
Fixes a bug where reachable bounds were not reset on detach.
Issue: #3570