
[Resent, as ghc-dev does not like my other address. Sorry Ben] Hi, Am Sonntag, den 30.11.2014, 10:56 -0500 schrieb Ben Gamari:
thanks. I tried to build ghc-7.8.4-rc1 on Debian, and it failed on arm*. First, because it picked llvm-3.5. After I tightened the dependencies to use llvm-3.4, it failed with dll-split: internal error: evacuate(static): strange closure type 0 (GHC version 7.8.3.20141119 for arm_unknown_linux)
Indeed this looks like ld.bfd is being used.
hmm, that’s annoying that --with-ld does not do the right thing. Is there a bug reported about this?
I then followed your advice from somewhere else and passed "--with-ld=ld.gold" to ./configure, but with the same effect:
Unfortunately I don't think this will be sufficient. I believe this will only set the `LD` variable in the build system, which as far qas I know is never used. We always call gcc to do our linking for us; gcc will in turn just use whatever `ld` it finds in `PATH`. For this reason I have resorted to simply adding a directory containing a symlink to `ld.gold` to `PATH`. This is what this script[1] does.
hmm, I’ll need to port that somehow to how the Debian package is built. But it seems to be cleaner to use the -B flag to gcc, available at least on Debian, according to https://gcc.gnu.org/ml/gcc/2010-10/msg00147.html. What would be a reliable way to make the build system pass -B/usr/bin/ld.gold to gcc? Is SRC_HC_OPTS += -optc-B/usr/bin/ld.gold in mk/build.mk a good idea?
Unfortunately it's also a bit more subtle than this; it's very likely that the ghc you are bootstrapping from contains relocations that aren't supported by gold. For this reason you'll likely need to build some of the utilities with `ld.bfd` the continue the build with `ld.gold`. The above script implements this fairly reliably.
What would be the symptoms of that problem? Greetings, Joachim -- Joachim “nomeata” Breitner mail@joachim-breitner.de • http://www.joachim-breitner.de/ Jabber: nomeata@joachim-breitner.de • GPG-Key: 0xF0FBF51F Debian Developer: nomeata@debian.org