
On Wed, Apr 14, 2004 at 12:05:40PM +0000, Andres Loeh wrote:
[...]
/var/tmp/portage/nhc98-1.16-r1/work/nhc98-1.16/script/nhc98 -cpp -c +CTS -lib -redefine -CTS +RTS -H32M -RTS -o /var/tmp/portage/nhc98-1.16-r1/work/nhc98-1.16/targets/ix86-Linux/obj/prelude/DErrNo/DErrNo.o DErrNo.hs /var/tmp/portage/nhc98-1.16-r1/work/nhc98-1.16/script/nhc98: line 605: 10142 Segmentation fault $COMP $RUNFLAGS $COMPFLAGS $HINCDIRS -I. $UNLIT -P${NHC98INCDIR} $HSFILE $POSTGRFILE $TMPHIFILE $TMPCPPASFILE make[1]: *** [/var/tmp/portage/nhc98-1.16-r1/work/nhc98-1.16/targets/ix86-Linux/obj/prelude/DErrNo/DErrNo.o] Error 1 make[1]: Leaving directory `/var/tmp/portage/nhc98-1.16-r1/work/nhc98-1.16/src/prelude/ix86-Linux/NHC' make: *** [targets/ix86-Linux/compiler-gcc] Error 2
I've just had a quick look at this. Between 3.2 and 3.3 gcc seems to have changed from generating ----- .file "DErrNo.hc" .data .align 4 .type startLabel,@object .size startLabel,0 startLabel: .globl C0_NHC_46DErrNo_46ERANGE .align 4 ----- to generating ----- .file "DErrNo.hc" .local startLabel .comm startLabel,0,4 .globl C0_NHC_46DErrNo_46ERANGE .data .align 4 ----- It looks like nhc uses offsets from startLabel but (IANA assembler expert) startLabel is now common to all such files linked together and will now probably be created at some other location (hmm, or perhaps nowhere at all if it is 0 size everywhere?) An (extremely ugly) solution is to add perl -e 'undef $/; $_ = <>; s/^\s*\.local\s+startLabel\n\s*.comm\s+startLabel,0,4\n\s*\.globl\s+([^\n]+)\n\s*\.data/\t.data\n\t.align 4\n\t.type startLabel,\@object\n\t.size startLabel,0\nstartLabel:\n.globl $1/m; print' | above the line sed -e '/.align 32/s/32/4/' >$TMPASFILE # evil mangler! in script/nhc98.inst I'm not sure if removing the last .data is necessary; the hack is marginally less ugly if not. This seems to work for me. Better (or even just prettier :-) ) solutions welcomed. Thanks Ian