Don't use X86_64_ELF_NONPIC_HACK for +RTS -xp
authorZejun Wu <watashi@fb.com>
Sat, 29 Dec 2018 04:48:31 +0000 (20:48 -0800)
committerBen Gamari <ben@smart-cactus.org>
Wed, 30 Jan 2019 15:06:32 +0000 (10:06 -0500)
commit6e96aa2d503ddeeef1fa1f37b45d5c744522b64d
treeb02a6f5307a20efc25ddb27c58977069b48972b6
parent740534d43cf9f1635c60f6311b7e0d89af962617
Don't use X86_64_ELF_NONPIC_HACK for +RTS -xp

Summary:
When `+RTS -xp` is passed, when don't need the X86_64_ELF_NONPIC_HACK,
becasue the relocation offset should only be out of range if

* the object file was not compiled with `-fPIC -fexternal-dynamic-refs`;
* ghc generates non-pic code while it should (e.g. #15723)

In either case, we should print an error message rather that silently
attempt to use a hacky workaround that may not work.

This could have made debugging #15723 and #15729 much easier.

Test Plan:
Run this in a case where ghci used to crash becasue of T15723. Now we
see helpful message like:

```
ghc-iserv-prof: R_X86_64_PC32 relocation out of range:
stmzm2zi4zi4zi1zmJQn4hNPyYjP5m9AcbI88Ve_ControlziConcurrentziSTMziTMVar_readTMVar_C61n_cc
9b95ffac
```

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar, bgamari

Subscribers: rwbarton, carter

Differential Revision: https://phabricator.haskell.org/D5233
rts/linker/Elf.c