Build ghc with hardened toolchain

章宏九 secludedsage at gmail.com
Tue Nov 24 04:26:18 EST 2009


Hello.

I am using Gentoo with hardened features enabled. Recently i want to
try yi-editor. I built GHC with emerge and nothing strange happened.
However, I got following error information when i built yi:

Building yi-0.6.1...
[  1 of 119] Compiling System.FriendlyPath ( System/FriendlyPath.hs,
dist/build/System/FriendlyPath.o )
[  2 of 119] Compiling Shim.ProjectContent ( Shim/ProjectContent.hs,
dist/build/Shim/ProjectContent.o )
[  3 of 119] Compiling Parser.Incremental ( Parser/Incremental.hs,
dist/build/Parser/Incremental.o )
[  4 of 119] Compiling Data.Trie        ( Data/Trie.hs, dist/build/Data/Trie.o
)
[  5 of 119] Compiling Data.DelayList   ( Data/DelayList.hs,
dist/build/Data/DelayList.o )
[  6 of 119] Compiling Data.Rope        ( Data/Rope.hs, dist/build/Data/Rope.o
)
[  7 of 119] Compiling Data.Prototype   ( Data/Prototype.hs,
dist/build/Data/Prototype.o )
[  8 of 119] Compiling HConf.Utils      ( HConf/Utils.hs,
dist/build/HConf/Utils.o )
[  9 of 119] Compiling HConf.Paths      ( HConf/Paths.hs,
dist/build/HConf/Paths.o )
[ 10 of 119] Compiling Paths_yi         ( dist/build/autogen/Paths_yi.hs,
dist/build/Paths_yi.o )
[ 11 of 119] Compiling HConf            ( HConf.hs, dist/build/HConf.o )
[ 12 of 119] Compiling Yi.Char.Unicode  ( Yi/Char/Unicode.hs,
dist/build/Yi/Char/Unicode.o )
[ 13 of 119] Compiling Yi.UI.Common[boot] ( Yi/UI/Common.hs-boot,
dist/build/Yi/UI/Common.o-boot )
[ 14 of 119] Compiling Yi.String        ( Yi/String.hs, dist/build/Yi/String.o
)
[ 15 of 119] Compiling Yi.Monad         ( Yi/Monad.hs, dist/build/Yi/Monad.o )
[ 16 of 119] Compiling Yi.Keymap.Completion ( Yi/Keymap/Completion.hs,
dist/build/Yi/Keymap/Completion.o )
[ 17 of 119] Compiling Yi.Editor[boot]  ( Yi/Editor.hs-boot,
dist/build/Yi/Editor.o-boot )
[ 18 of 119] Compiling Yi.Debug         ( Yi/Debug.hs, dist/build/Yi/Debug.o )
[ 19 of 119] Compiling Yi.Prelude       ( Yi/Prelude.hs,
dist/build/Yi/Prelude.o )
[ 20 of 119] Compiling Yi.Dynamic       ( Yi/Dynamic.hs,
dist/build/Yi/Dynamic.o )
[ 21 of 119] Compiling Yi.Event         ( Yi/Event.hs, dist/build/Yi/Event.o )
[ 22 of 119] Compiling Yi.Interact      ( Yi/Interact.hs,
dist/build/Yi/Interact.o )
[ 23 of 119] Compiling Yi.Keymap[boot]  ( Yi/Keymap.hs-boot,
dist/build/Yi/Keymap.o-boot )
[ 24 of 119] Compiling Yi.Style         ( Yi/Style.hs, dist/build/Yi/Style.o )
[ 25 of 119] Compiling Yi.Style.Library ( Yi/Style/Library.hs,
dist/build/Yi/Style/Library.o )
[ 26 of 119] Compiling Yi.Interpreter   ( Yi/Interpreter.hs,
dist/build/Yi/Interpreter.o )
[ 27 of 119] Compiling Shim.Utils       ( Shim/Utils.hs,
dist/build/Shim/Utils.o )
[ 28 of 119] Compiling Shim.CabalInfo   ( Shim/CabalInfo.hs,
dist/build/Shim/CabalInfo.o )
[ 29 of 119] Compiling Yi.Buffer.Misc[boot] ( Yi/Buffer/Misc.hs-boot,
dist/build/Yi/Buffer/Misc.o-boot )
[ 30 of 119] Compiling Yi.Buffer.Basic  ( Yi/Buffer/Basic.hs,
dist/build/Yi/Buffer/Basic.o )
ghc: /usr/lib/ghc-6.10.4/ghc-prim-0.1.0.0/HSghc-prim-0.1.0.0.o: unknown symbol
`_GLOBAL_OFFSET_TABLE_'
Loading package ghc-prim ... linking ... ghc: unable to load package `ghc-prim'

I notice that Gentoo has already done some works about disabling
hardened features temporarily for Haskell. Here is the mk/build.mk:

# Gentoo changes
docdir = /usr/share/doc/ghc-6.10.4
htmldir = /usr/share/doc/ghc-6.10.4
SRC_HC_OPTS+= -optc-march=native -opta-march=native -optc-nopie
-optl-nopie -optc-fno-PIE -opta-Wa,--noexecstack
SRC_CC_OPTS+=-O2 -march=native -pipe -nopie -Wa,--noexecstack
XMLDocWays=
HADDOCK_DOCS=NO
SRC_HC_OPTS+=-w

While talking on IRC (#gentoo-haskell and #haskell) I was told that
this might be caused by a broken GHC. Although above shows that PIE
are disabled, ghc-prim (maybe at least) is still built with PIE
enabled. According to advice from #gentoo-haskell, I was told to seek
for help here.

I also submit a bug about it as #3668. (Very sorry that I ask
everywhere. Forgive me, but until yesterday I forgot my password of my
gmail and cannot join a mailling-list.) Thank igloo told me add
"-nopie" in SRC_LD_OPTS. I did but still failed:

------------------------------------------------------------------------
== make boot - --no-print-directory -r --jobserver-fds=3,4 -
--jobserver-fds=3,4 -j;
 in /var/tmp/portage/dev-lang/ghc-6.10.4/work/ghc-6.10.4/utils/genapply
------------------------------------------------------------------------
/var/tmp/portage/dev-lang/ghc-6.10.4/work/usr/bin/ghc -package-conf
/var/tmp/portage/dev-lang/ghc-6.10.4/work/ghc-6.10.4/libraries/bootstrapping.conf
-H32m -O -optc-march=native -opta-march=native -optc-nopie -optl-nopie
-opta-Wa,--noexecstack -w -package pretty -fforce-recomp    -c
GenApply.hs -o GenApply.o  -ohi GenApply.hi
/var/tmp/portage/dev-lang/ghc-6.10.4/work/usr/bin/ghc -M -dep-makefile
.depend  -osuf o -package-conf
/var/tmp/portage/dev-lang/ghc-6.10.4/work/ghc-6.10.4/libraries/bootstrapping.conf
   -package-conf
/var/tmp/portage/dev-lang/ghc-6.10.4/work/ghc-6.10.4/libraries/bootstrapping.conf
-H32m -O -optc-march=native -opta-march=native -optc-nopie -optl-nopie
-opta-Wa,--noexecstack -w -package pretty -fforce-recomp GenApply.hs
/var/tmp/portage/dev-lang/ghc-6.10.4/work/usr/bin/ghc -o genapply
-package-conf /var/tmp/portage/dev-lang/ghc-6.10.4/work/ghc-6.10.4/libraries/bootstrapping.conf
-H32m -O -optc-march=native -opta-march=native -optc-nopie -optl-nopie
-opta-Wa,--noexecstack -w -package pretty -fforce-recomp    -nopie
GenApply.o
ghc: unrecognised flags: -nopie
Usage: For basic information, try the `--help' option.
make[2]: *** [genapply] Error 1
Failed making boot in genapply: 1
make[1]: *** [boot] Error 1
make: *** [stage1] Error 1

I am surprised that why "-nopie" is sent here. Since wiki only told me
to see config.mk.in and it does not have any examples, I have no idea
about SRC_LD_OPTS.

I need help how to completely disable PIE for GHC. Thank you very much.


Hongjiu Zhang


More information about the Glasgow-haskell-users mailing list