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