Adds a new option -reachable_client, on by default. When turned off, client libraries being within 32-bit-displacement reachability of the code cache is relaxed, both the library load location and the fatal error on violation. This is particularly useful for statically-linked clients whose location is difficult to change.
Includes changes to vmm allocation required to make this work for statically-linked clients:
- Eliminates the setting of heap reachability constraints prior to vmm allocation, except for -heap_in_lower_4GB which has no fallback.
- Client libraries are now loaded after the vmm is allocated.
- -vm_base_near_app tries to be near the app but on failure, if -vm_allow_not_at_base, it allows allocating away from the app.
- When reserving any available memory, on UNIX, we take from the high end, for a lower chance of impacting the brk.
Adds a test of a static client with a large heap where the default -vm_base or being near the app fail.
Fixes #2558 (closed)