Allow the user to pick the address that the RTS reserves for the heap
We stumbled upon a case where an external library (OpenCL) does not work if a specific address (0x200000000) is taken.
It so happens that `osReserveHeapMemory` starts trying to `mmap` at `0x200000000`:
```
void *hint = (void*)((W_)8 * (1 << 30) + attempt * BLOCK_SIZE);
at = osTryReserveHeapMemory(*len, hint);
```
This makes it impossible to use Haskell programs compiled with GHC 8 with C functions that use OpenCL.
See this example https://github.com/chpatrick/oclwtf for a repro.
My proposal is to allow the user to work around this kind of behavior outside our control by letting the user override the starting address through an RTS command line flag.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | -------------- |
| Version | 8.0.1 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Runtime System |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | simonmar |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Allow the user to pick the address that the RTS reserves for the heap","status":"New","operating_system":"","component":"Runtime System","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.0.1","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":["simonmar"],"type":"FeatureRequest","description":"We stumbled upon a case where an external library (OpenCL) does not work if a specific address (0x200000000) is taken.\r\n\r\nIt so happens that `osReserveHeapMemory` starts trying to `mmap` at `0x200000000`:\r\n\r\n{{{\r\n void *hint = (void*)((W_)8 * (1 << 30) + attempt * BLOCK_SIZE);\r\n at = osTryReserveHeapMemory(*len, hint);\r\n}}}\r\n\r\nThis makes it impossible to use Haskell programs compiled with GHC 8 with C functions that use OpenCL.\r\n\r\nSee this example https://github.com/chpatrick/oclwtf for a repro.\r\n\r\nMy proposal is to allow the user to work around this kind of behavior outside our control by letting the user override the starting address through an RTS command line flag.","type_of_failure":"OtherFailure","blocking":[]} -->
issue