driver: pass '-fPIC' option to all CC invocations
authorSergei Trofimovich <siarheit@google.com>
Wed, 24 Jun 2015 21:10:47 +0000 (22:10 +0100)
committerSergei Trofimovich <siarheit@google.com>
Wed, 24 Jun 2015 21:34:48 +0000 (22:34 +0100)
commit4d1316a56cb2e763ef6b47f95e529ae799b4c5ff
tree9515f9168a86d75954a475e7ebbf53a29569c7a1
parentaa267317bb7b1a71c090234efa7b0edbf64ccadf
driver: pass '-fPIC' option to all CC invocations

Reported by mitchty:

  When porting ghc to alpine linux (rumors say they build
  all binaries as Position Independent Executables
  to leverage global ASLR) linker issued obscure errors:

Tiny example:
    $ echo 'main = print "hello"' > a.hs
    $ ghc -fforce-recomp a.hs -fPIC -dynamic -optl-pie -o a
        ld: /tmp/ghc2142_0/ghc2142_5.o: relocation R_X86_64_32 against `ZCMain_main_closure'
            can not be used when making a shared object; recompile with -fPIC
        /tmp/ghc2142_0/ghc2142_5.o: error adding symbols: Bad value
        collect2: error: ld returned 1 exit status

There is two entry points in CC driver:
    'runPhase' (CC) and 'mkExtraObj'

'mkExtraObj' does not handle most of 'runPhase's complexity.
Ideally it should.

This patch only adds -fPIC propagation to 'mkExtraObj'.

Please merge to stable branch.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
compiler/main/DriverPipeline.hs