Greetings, On 3/21/06 5:31 PM, "Duncan Coutts" <[EMAIL PROTECTED]> wrote:
> On Wed, 2006-03-15 at 16:24 +0000, Simon Marlow wrote: > >> If you have anything else for 6.4.2, please let me know. > > Chris Parrott found that ghc-6.4.1 doesn't work with gcc 4.1 on amd64, > although it does work on x86. > > The error manifests itself as link errors due to undefined symbols: > > /var/tmp/portage/ghc-6.4.1-r2/work/ghc-6.4.1/ghc/rts/libHSrts.a(Linker.o):(.da > ta+0x48): undefined reference to `StgReturn' > /var/tmp/portage/ghc-6.4.1-r2/work/ghc-6.4.1/ghc/rts/libHSrts.a(RtsStartup.o): > In function `hs_add_root': > RtsStartup.c:(.text+0x1a8): undefined reference to `StgRun' > > Chris found that the problem is that gcc 4.1 is noticing that > StgRunIsImplementedInAssembler is not actually used anywhere. It is in > inline assembly in StgRunIsImplementedInAssembler that the global > symbols StgRun and StgReturn are being defined. This is why it works on > x86 and not on amd64, because on x86 it uses StgRun rather than > StgRunIsImplementedInAssembler so the function (and the global syms > defined therein) are not discarded. > > So the solution is to get gcc to not discard the function by using the > gcc __attribute__((used)). To make this portable we use the existing > GNUC3_ATTRIBUTE macro, so it's: GNUC3_ATTRIBUTE(used). > > The patch we are using in the Gentoo ebuild is here: > > http://haskell.org/~gentoo/gentoo-haskell/portage/dev-lang/ghc/files/ghc-6.4.1 > -gcc41.patch > > This patch fixes it for amd64, ppc linux, ppc64 and ia64. The patch > doesn't touch ppc darwin, we'll leave that to the judgement of someone > else but it's probably required for gcc-4.1 on darwin too. We've tested > it on amd64 linux & x86 linux with gcc-4.1 and gcc-4.0.2 so far. We're > testing gcc 3.4.x next. There should not be much chance of breakage > since for earlier gccs it should be a noop. > > The gcc attribute 'unused' is already being used in Adjustor.c for x86 > and amd64. (Actually the 'used' attribute is only available in gcc 3.1 > and later. Presumably nobody uses gcc 3.0.x or they would have found > this problem earlier.) > > It'd be nice if this were included for ghc-6.4.2 since gcc-4.1.x will > probably become common during the lifespan of the ghc-6.4.2 release. I just wanted to add that I have indeed verified that this patch does not break ghc-6.4.1 on amd64 with both gcc-3.4 as well as gcc-4.0. I am going to do one final retest of this with gcc-4.1 on amd64, just to be sure I didn't miss anything. Cheers, +chris _______________________________________________ Cvs-ghc mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/cvs-ghc
