diff options
author | Zejun Wu <watashi@watashi.ws> | 2018-12-11 13:49:12 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2018-12-11 18:04:30 -0500 |
commit | c98e25a4de88f12c6ded0a97fcf3ed8f4996b9ea (patch) | |
tree | 215df790d26904b47278d9fc3c5dcb9a46760fe9 /compiler/main | |
parent | 18b74cdbbfa053704caabd104587d8a91a9233a0 (diff) | |
download | haskell-c98e25a4de88f12c6ded0a97fcf3ed8f4996b9ea.tar.gz |
Explicitly pass -fno-PIC to C compiler on linux
Recent gcc on some linux ditributions may have -fPIC on by default
```
$ 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
$ gcc --version
gcc (GCC) 7.3.1 20180312
$ touch dummy.c
$ gcc -Q -v dummy.c 2>&1 | grep PIC
options enabled: -fPIC -fPIE -faggressive-loop-optimizations
```
This results in following error for i686:
```
$ TEST=T13366 make test
...
c-iserv.bin:
/home/watashi/github/ghc/libraries/ghc-prim/dist-install/build/HSghc-pri
m-0.5.3.o:
unknown symbol `_GLOBAL_OFFSET_TABLE_'
ghc-stage2: unable to load package `ghc-prim-0.5.3'
...
```
As our runtime linker doesn't support R_386_GOTPC relocations at all
(#15847).
Also while we don't have such problem on x86_64, it's not desired to
build PIC objects either.
Test Plan: `TEST=T13366 make test` passed on
{rGHC82a716431cc680392e332bc2b1a1fd0d7faa4cd8}
Reviewers: simonmar, bgamari, austin
Reviewed By: simonmar
Subscribers: rwbarton, carter
GHC Trac Issues: #15848
Differential Revision: https://phabricator.haskell.org/D5288
Diffstat (limited to 'compiler/main')
-rw-r--r-- | compiler/main/DynFlags.hs | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index 6c4ee86084..be347d9367 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -5510,7 +5510,9 @@ picCCOpts dflags = pieOpts ++ picOpts -- http://ghc.haskell.org/trac/ghc/wiki/Commentary/PositionIndependentCode | gopt Opt_PIC dflags || WayDyn `elem` ways dflags -> ["-fPIC", "-U__PIC__", "-D__PIC__"] - | otherwise -> [] + -- gcc may be configured to have PIC on by default, let's be + -- explicit here, see Trac #15847 + | otherwise -> ["-fno-PIC"] pieOpts | gopt Opt_PICExecutable dflags = ["-pie"] |