Add a RTS option -xp to load PIC object anywhere in address space
authorZejun Wu <watashi@fb.com>
Sat, 29 Dec 2018 04:37:13 +0000 (20:37 -0800)
committerBen Gamari <ben@smart-cactus.org>
Wed, 30 Jan 2019 15:06:32 +0000 (10:06 -0500)
commite29b1ee72d77d5a06ac949f9dcc80108243a25c0
tree3c2104b52c52d77b130c98d3cd486eb47ed2f347
parent4bf35da4fccd2a21153a1c19bfa80006e99e02a1
Add a RTS option -xp to load PIC object anywhere in address space

Summary:
This re-applies {D5195} with fixes for i386:
* Fix unused label warnings, see {D5230} or {D5273}
* Fix a silly bug introduced by moving `#if`

{P190}

Add a RTS option -xp to load PIC object anywhere in address space. We do
this by relaxing the requirement of <0x80000000 result of
`mmapForLinker` and implying USE_CONTIGUOUS_MMAP.

We also need to change calls to `ocInit` and `ocGetNames` to avoid
dangling pointers when the address of `oc->image` is changed by
`ocAllocateSymbolExtra`.

Test Plan:
See {D5195}, also test under i386:

```
$ uname -a
Linux watashi-arch32 4.18.5-arch1-1.0-ARCH #1 SMP PREEMPT Tue Aug 28
20:45:30 CEST 2018 i686 GNU/Linux
$ cd testsuite/tests/th/ && make test
...
```

will run `./validate` on stacked diff.

Reviewers: simonmar, bgamari, alpmestan, trommler, hvr, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

Differential Revision: https://phabricator.haskell.org/D5289
docs/users_guide/8.8.1-notes.rst
docs/users_guide/runtime_control.rst
includes/rts/Flags.h
libraries/base/GHC/RTS/Flags.hsc
rts/Linker.c
rts/RtsFlags.c
rts/linker/Elf.c
rts/linker/MachO.c
rts/linker/SymbolExtras.c