Ticket #1958 (closed bug: fixed)

Opened 2 years ago

Last modified 1 year ago

collect2: ld terminated with signal 10 [Bus error]: Building parsec on a PPC Mac OS X 10.5 Leopard as part of GHC 6.9

Reported by: thorkilnaur Assigned to: thorkilnaur
Priority: high Milestone: Not GHC
Component: Compiler Version: 6.8.2
Severity: normal Keywords:
Cc: Difficulty: Unknown
Test Case: Operating System: MacOS X
Architecture: powerpc

Description

On a PPC Mac OS X 10.5 Leopard, building GHC 6.9 with mk/build.mk set to mk/build.mk.sample with BuildFlavour = perf and extra libraries included, matters are brought to a halt at:

../../compiler/stage1/ghc-inplace -package-name parsec-2.0 -hide-all-packages -split-objs -i -idist/build/autogen -idist/build -i. -Idist/build -odir dist/build -hidir dist/build -stubdir dist/build -package base-3.0 -O -XExistentialQuantification -XPolymorphicComponents -idist/build  -H32m -O2  -c Text/ParserCombinators/Parsec/Token.hs -o dist/build/Text/ParserCombinators/Parsec/Token.o  -ohi dist/build/Text/ParserCombinators/Parsec/Token.hi
collect2: ld terminated with signal 10 [Bus error]
make[2]: *** [dist/build/Text/ParserCombinators/Parsec/Token.o] Error 1
make[1]: *** [make.library.parsec] Error 2
make: *** [stage1] Error 2

This has been reported earlier: See http://www.haskell.org/pipermail/glasgow-haskell-users/2007-November/013407.html and perhaps elsewhere. I have currently isolated the problem to a single .s file, part of object-splitting the code generated for Token.hs, for which assembling using gcc followed by linking with ld -r provokes the bus error. The case is still rather large, however, and I will reduce some more before reporting the details.

I currently suspect a problem in the Mac 10.5 Leopard linker, in addition to the problem reported in #1843. The problem does not occur on 10.4 Tiger.

Attachments

Work_around_PPC_Mac_OS_X_Leopard_ld_Bus_error_illustrative_only.dpatch.gz (15.3 kB) - added by thorkilnaur on 01/02/08 09:55:01.
Work around PPC Mac OS X Leopard ld Bus error (illustrative only)

Change History

12/08/07 15:21:11 changed by thorkilnaur

I have reduced the size of the assembler file that tickles what I still believe is a Leopard linker error to this:

thorkil-naurs-mac-mini:split438 thorkilnaur$ cat g17.s 
.const_data
.align 2
_parseczm2zi0_TextziParserCombinatorsziParsecziToken_makeTokenParser_srt:
        .long   0
.text
.align 2
        .long   _parseczm2zi0_TextziParserCombinatorsziParsecziToken_makeTokenParser_srt-(_s58i_info)+24
_s58i_info:
        .long   0

.symbol_stub
L_u_iswalpha$stub:
        .indirect_symbol _u_iswalpha
        lis r11,ha16(L_u_iswalpha$lazy_ptr)
        lwz r12,lo16(L_u_iswalpha$lazy_ptr)(r11)
        mtctr r12
        addi r11,r11,lo16(L_u_iswalpha$lazy_ptr)
        bctr
.lazy_symbol_pointer
L_u_iswalpha$lazy_ptr:
        .indirect_symbol _u_iswalpha
        .long dyld_stub_binding_helper
.subsections_via_symbols
thorkil-naurs-mac-mini:split438 thorkilnaur$ 

I get the Bus error as follows:

thorkil-naurs-mac-mini:split438 thorkilnaur$ gcc -c g17.s
thorkil-naurs-mac-mini:split438 thorkilnaur$ ld -r g17.o
Bus error
thorkil-naurs-mac-mini:split438 thorkilnaur$ 

Here are some things that I can do that removes the Bus error reaction:

  • Change the initial .const_data to .text.
  • Change .long _parseczm2zi0_TextziParserCombinatorsziParsecziToken_makeTokenParser_srt-(_s58i_info)+24 to .long 0.
  • Remove the entire tail of the file that begins with .symbol_stub.

http://www.haskell.org/pipermail/glasgow-haskell-users/2007-November/013447.html reports that:

The ld executable used is actually from the ld64 project and not the cctools project. The cctools' ld is installed as ld_classic on OS X. In theory this should be the same linker as on Tiger and could be used instead of the ld from ld64. That might be a good workaround till ld is fixed: Update ghc's SysTools to use ld_classic instead of ld.

This is confirmed by the behaviour of the Leopard linker compared to the Tiger linker, in particular the wording of error messages when reporting on the same error.

I have not found a way to replace ld by ld_classic in the GHC build process. I have tried:

  • looking for ways to make gcc use ld_classic and, in turn, GHC call gcc to make this happen. I have not found such a way.
  • creating a static link earlier than ld in the path that points to ld_classic, but this fails to replace the ld uses by gcc
  • replacing the link /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld -> ../../../../bin/ld, but that causes GHC configure (and also ordinary gcc compiles) to fail with
     /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld: /usr/lib/gcc/powerpc-apple-darwin9/4.0.1/../../../libSystem.dylib unknown flags (type) of section 9 (__TEXT,__dof_plockstat) in load command 0
     /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld: /usr/lib/libSystem.B.dylib unknown flags (type) of section 9 (__TEXT,__dof_plockstat) in load command 0
     collect2: ld returned 1 exit status
    

The basic problem that the Leopard linker apparently fails to solve in some cases is the evaluation of the expression _parseczm2zi0_TextziParserCombinatorsziParsecziToken_makeTokenParser_srt-(_s58i_info)+24 in line 7 of g17.s. The two symbols are defined in different sections (.const_data and .text, respectively) which seems significant. But whether this indicates any reasonable workaround in, say, the GHC code generator, I cannot tell.

In any case, I would welcome some ideas about further directions for this investigation. I will happily supply any additional details.

Best regards Thorkil

12/14/07 10:39:11 changed by igloo

  • milestone set to 6.8.3.

12/18/07 11:30:42 changed by igloo

  • priority changed from normal to high.

12/19/07 03:41:43 changed by thorkilnaur

I reported this problem to Apple today: Bug ID# 5655246 (PPC Leopard (Xcode 3.0) linker ld gets "Bus error" sometimes).

Best regards Thorkil

12/19/07 04:50:51 changed by thorkilnaur

  • owner set to thorkilnaur.

I will try to do something here.

Best regards Thorkil

(follow-up: ↓ 7 ) 12/28/07 00:55:35 changed by eelco

Hi Thorkil,

I encounter the dreaded 'Bus error' also when trying to build GHC 6.8.2 on PPC OS X 10.5. It fails on the network library when building with extralibs...

../../compiler/stage1/ghc-inplace -package-name network-2.1.0.0 -hide-all-packages -split-objs -i -idist/build/autogen -idist/build -i. -Idist/build -Iinclude -optc-DCALLCONV=ccall -#include "HsNet.h" -odir dist/build -hidir dist/build -stubdir dist/build -package base-3.0.1.0 -package parsec-2.1.0.0 -O -DCALLCONV=ccall -XCPP -idist/build  -H16m -O -O -Rghc-timing -fgenerics -c Network.hs -o dist/build/Network.o  -ohi dist/build/Network.hi
collect2: ld terminated with signal 10 [Bus error]
<<ghc: 99622432 bytes, 16 GCs, 4841188/7994224 avg/max bytes residency (3 samples), 21M in use, 0.00 INIT (0.00 elapsed), 1.03 MUT (5.71 elapsed), 0.42 GC (0.55 elapsed) :ghc>>
make[2]: *** [dist/build/Network.o] Error 1
make[1]: *** [make.library.network] Error 2
make: *** [stage1] Error 2

... and when trying to link HSghc.o in stage 2 when building without the extralibs.

make -C compiler stage=2
/usr/bin/ld -r -x -o HSghc.o  stage2/basicTypes/BasicTypes.o
...
make[2]: *** [HSghc.o] Bus error
make[2]: *** Deleting file `HSghc.o'
make[1]: *** [stage2] Error 2
make: *** [bootstrap2] Error 2

I also tried using ld_classic, simply by running ./configure --with-ld=/usr/bin/ld_classic before making. Unfortunately, this causes GHC (stage1) to panic:

../../compiler/stage1/ghc-inplace -package-name base-3.0.1.0 -hide-all-packages -split-objs -i -idist/build/autogen -idist/build -i. -Idist/build -Iinclude -#include "HsBase.h" -odir dist/build -hidir dist/build -stubdir dist/build -package rts-1.0 -O -fglasgow-exts -package-name base -XCPP -idist/build  -prof -hisuf p_hi -hcsuf p_hc -osuf p_o -H16m -O -O -Rghc-timing -fgenerics -c GHC/PrimopWrappers.hs -o dist/build/GHC/PrimopWrappers.p_o  -ohi dist/build/GHC/PrimopWrappers.p_hi
ghc-6.8.2: panic! (the 'impossible' happened)
  (GHC version 6.8.2 for powerpc-apple-darwin):
	lookupVers1 base:GHC.Prim Int#{tc}

(in reply to: ↑ 6 ) 12/28/07 06:54:43 changed by eelco

Replying to eelco:

I also tried using ld_classic, simply by running ./configure --with-ld=/usr/bin/ld_classic before making. Unfortunately, this causes GHC (stage1) to panic:

Sorry, this must have been caused by something else. A completely clean build with ld_classic fails with the bus error again.

make -f Makefile.ghcbin -r HS_PROG=stage2/ghc-6.8.2 stage2/ghc-6.8.2
../compiler/stage1/ghc-inplace -o stage2/ghc-6.8.2 -H16m -O -package ghc -Istage2 -cpp -fglasgow-exts -fno-generics -Rghc-timing -I. -IcodeGen -InativeGen -Iparser -Rghc-timing  -DGHCI -threaded -fforce-recomp        stage2/main/Main.o   
collect2: ld terminated with signal 10 [Bus error]
<<ghc: 14764812 bytes, 4 GCs, 111888/111888 avg/max bytes residency (1 samples), 16M in use, 0.00 INIT (0.00 elapsed), 0.06 MUT (57.04 elapsed), 0.03 GC (0.07 elapsed) :ghc>>
make[3]: *** [stage2/ghc-6.8.2] Error 1
make[2]: *** [stage2/ghc-6.8.2] Error 2
make[1]: *** [stage2] Error 2
make: *** [bootstrap2] Error 2

12/28/07 08:29:17 changed by eelco

I finally succeeded doing a GHC 6.8.2 build by running ./configure --with-ld=/usr/bin/ld_classic and a mk/build.mk (copied from the sample) with build flavour 'quickest'.

01/02/08 09:51:11 changed by thorkilnaur

Thanks a lot for this information. I would assume that the PPC Mac OS X Leopard builder fails to build stage 2 for the same reason (http://darcs.haskell.org/buildbot/all/tnaur%20PPC%20OSX%20head%202/builds/20/step-stage2/0):

/usr/bin/ld -r -x -o HSghc.o  stage2/basicTypes/BasicTypes.o stage2/basicTypes/DataCon.o stage2/basicTypes/Demand.o stage2/basicTypes/Id.o stage2/basicTypes/IdInfo.o stage2/basicTypes/Literal.o stage2/basicTypes/MkId.o stage2/basicTypes/Module.o stage2/basicTypes/Name.o stage2/basicTypes/NameEnv.o stage2/basicTypes/NameSet.o stage2/basicTypes/NewDemand.o stage2/basicTypes/OccName.o stage2/basicTypes/RdrName.o stage2/basicTypes/SrcLoc.o stage2/basicTypes/UniqSupply.o stage2/basicTypes/Unique.o stage2/basicTypes/Var.o stage2/basicTypes/VarEnv.o stage2/basicTypes/VarSet.o stage2/cmm/CLabel.o stage2/cmm/Cmm.o stage2/cmm/CmmBrokenBlock.o stage2/cmm/CmmCPS.o stage2/cmm/CmmCPSGen.o stage2/cmm/CmmCPSZ.o stage2/cmm/CmmCallConv.o stage2/cmm/CmmContFlowOpt.o stage2/cmm/CmmCvt.o stage2/cmm/CmmExpr.o stage2/cmm/CmmInfo.o stage2/cmm/CmmLex.o stage2/cmm/CmmLint.o stage2/cmm/CmmLive.o stage2/cmm/CmmLiveZ.o stage2/cmm/CmmOpt.o stage2/cmm/CmmParse.o stage2/cmm/CmmProcPoint.o stage2/cmm/CmmProcPointZ.o stage2/cmm/CmmSpillReload.o stage2/cmm/CmmTx.o stage2/cmm/CmmUtils.o stage2/cmm/CmmZipUtil.o stage2/cmm/DFMonad.o stage2/cmm/Dataflow.o stage2/cmm/MachOp.o stage2/cmm/MkZipCfg.o stage2/cmm/MkZipCfgCmm.o stage2/cmm/OptimizationFuel.o stage2/cmm/PprC.o stage2/cmm/PprCmm.o stage2/cmm/PprCmmZ.o stage2/cmm/StackColor.o stage2/cmm/StackPlacements.o stage2/cmm/ZipCfg.o stage2/cmm/ZipCfgCmmRep.o stage2/cmm/ZipCfgExtras.o stage2/cmm/ZipDataflow0.o stage2/codeGen/Bitmap.o stage2/codeGen/CgBindery.o stage2/codeGen/CgCallConv.o stage2/codeGen/CgCase.o stage2/codeGen/CgClosure.o stage2/codeGen/CgCon.o stage2/codeGen/CgExpr.o stage2/codeGen/CgForeignCall.o stage2/codeGen/CgHeapery.o stage2/codeGen/CgHpc.o stage2/codeGen/CgInfoTbls.o stage2/codeGen/CgLetNoEscape.o stage2/codeGen/CgMonad.o stage2/codeGen/CgParallel.o stage2/codeGen/CgPrimOp.o stage2/codeGen/CgProf.o stage2/codeGen/CgStackery.o stage2/codeGen/CgTailCall.o stage2/codeGen/CgTicky.o stage2/codeGen/CgUtils.o stage2/codeGen/ClosureInfo.o stage2/codeGen/CodeGen.o stage2/codeGen/SMRep.o stage2/coreSyn/CoreFVs.o stage2/coreSyn/CoreLint.o stage2/coreSyn/CorePrep.o stage2/coreSyn/CoreSubst.o stage2/coreSyn/CoreSyn.o stage2/coreSyn/CoreTidy.o stage2/coreSyn/CoreUnfold.o stage2/coreSyn/CoreUtils.o stage2/coreSyn/ExternalCore.o stage2/coreSyn/MkExternalCore.o stage2/coreSyn/PprCore.o stage2/coreSyn/PprExternalCore.o stage2/cprAnalysis/CprAnalyse.o stage2/deSugar/Check.o stage2/deSugar/Coverage.o stage2/deSugar/Desugar.o stage2/deSugar/DsArrows.o stage2/deSugar/DsBinds.o stage2/deSugar/DsCCall.o stage2/deSugar/DsExpr.o stage2/deSugar/DsForeign.o stage2/deSugar/DsGRHSs.o stage2/deSugar/DsListComp.o stage2/deSugar/DsMeta.o stage2/deSugar/DsMonad.o stage2/deSugar/DsUtils.o stage2/deSugar/Match.o stage2/deSugar/MatchCon.o stage2/deSugar/MatchLit.o stage2/ghci/ByteCodeAsm.o stage2/ghci/ByteCodeFFI.o stage2/ghci/ByteCodeGen.o stage2/ghci/ByteCodeInstr.o stage2/ghci/ByteCodeItbls.o stage2/ghci/ByteCodeLink.o stage2/ghci/Debugger.o stage2/ghci/GhciMonad.o stage2/ghci/GhciTags.o stage2/ghci/InteractiveUI.o stage2/ghci/Linker.o stage2/ghci/ObjLink.o stage2/ghci/RtClosureInspect.o stage2/hsSyn/Convert.o stage2/hsSyn/HsBinds.o stage2/hsSyn/HsDecls.o stage2/hsSyn/HsDoc.o stage2/hsSyn/HsExpr.o stage2/hsSyn/HsImpExp.o stage2/hsSyn/HsLit.o stage2/hsSyn/HsPat.o stage2/hsSyn/HsSyn.o stage2/hsSyn/HsTypes.o stage2/hsSyn/HsUtils.o stage2/iface/BinIface.o stage2/iface/BuildTyCl.o stage2/iface/IfaceEnv.o stage2/iface/IfaceSyn.o stage2/iface/IfaceType.o stage2/iface/LoadIface.o stage2/iface/MkIface.o stage2/iface/TcIface.o stage2/main/BreakArray.o stage2/main/CmdLineParser.o stage2/main/CodeOutput.o stage2/main/Config.o stage2/main/Constants.o stage2/main/DriverMkDepend.o stage2/main/DriverPhases.o stage2/main/DriverPipeline.o stage2/main/DynFlags.o stage2/main/ErrUtils.o stage2/main/Finder.o stage2/main/GHC.o stage2/main/HeaderInfo.o stage2/main/HscMain.o stage2/main/HscStats.o stage2/main/HscTypes.o stage2/main/InteractiveEval.o stage2/main/PackageConfig.o stage2/main/Packages.o stage2/main/ParsePkgConf.o stage2/main/PprTyThing.o stage2/main/StaticFlags.o stage2/main/SysTools.o stage2/main/TidyPgm.o stage2/nativeGen/AsmCodeGen.o stage2/nativeGen/MachCodeGen.o stage2/nativeGen/MachInstrs.o stage2/nativeGen/MachRegs.o stage2/nativeGen/NCGMonad.o stage2/nativeGen/PositionIndependentCode.o stage2/nativeGen/PprMach.o stage2/nativeGen/RegAllocColor.o stage2/nativeGen/RegAllocInfo.o stage2/nativeGen/RegAllocLinear.o stage2/nativeGen/RegAllocStats.o stage2/nativeGen/RegArchBase.o stage2/nativeGen/RegArchX86.o stage2/nativeGen/RegCoalesce.o stage2/nativeGen/RegLiveness.o stage2/nativeGen/RegSpill.o stage2/nativeGen/RegSpillClean.o stage2/nativeGen/RegSpillCost.o stage2/ndpFlatten/FlattenInfo.o stage2/ndpFlatten/FlattenMonad.o stage2/ndpFlatten/Flattening.o stage2/ndpFlatten/NDPCoreUtils.o stage2/ndpFlatten/PArrAnal.o stage2/parser/Ctype.o stage2/parser/HaddockLex.o stage2/parser/HaddockParse.o stage2/parser/HaddockUtils.o stage2/parser/LexCore.o stage2/parser/Lexer.o stage2/parser/Parser.o stage2/parser/ParserCore.o stage2/parser/ParserCoreUtils.o stage2/parser/RdrHsSyn.o stage2/prelude/ForeignCall.o stage2/prelude/PrelInfo.o stage2/prelude/PrelNames.o stage2/prelude/PrelRules.o stage2/prelude/PrimOp.o stage2/prelude/TysPrim.o stage2/prelude/TysWiredIn.o stage2/profiling/CostCentre.o stage2/profiling/SCCfinal.o stage2/rename/RnBinds.o stage2/rename/RnEnv.o stage2/rename/RnExpr.o stage2/rename/RnHsDoc.o stage2/rename/RnHsSyn.o stage2/rename/RnNames.o stage2/rename/RnPat.o stage2/rename/RnSource.o stage2/rename/RnTypes.o stage2/simplCore/CSE.o stage2/simplCore/FloatIn.o stage2/simplCore/FloatOut.o stage2/simplCore/LiberateCase.o stage2/simplCore/OccurAnal.o stage2/simplCore/SAT.o stage2/simplCore/SATMonad.o stage2/simplCore/SetLevels.o stage2/simplCore/SimplCore.o stage2/simplCore/SimplEnv.o stage2/simplCore/SimplMonad.o stage2/simplCore/SimplUtils.o stage2/simplCore/Simplify.o stage2/simplStg/SRT.o stage2/simplStg/SimplStg.o stage2/simplStg/StgStats.o stage2/specialise/Rules.o stage2/specialise/SpecConstr.o stage2/specialise/Specialise.o stage2/stgSyn/CoreToStg.o stage2/stgSyn/StgLint.o stage2/stgSyn/StgSyn.o stage2/stranal/DmdAnal.o stage2/stranal/SaAbsInt.o stage2/stranal/SaLib.o stage2/stranal/StrictAnal.o stage2/stranal/WorkWrap.o stage2/stranal/WwLib.o stage2/typecheck/FamInst.o stage2/typecheck/Inst.o stage2/typecheck/TcArrows.o stage2/typecheck/TcBinds.o stage2/typecheck/TcClassDcl.o stage2/typecheck/TcDefaults.o stage2/typecheck/TcDeriv.o stage2/typecheck/TcEnv.o stage2/typecheck/TcExpr.o stage2/typecheck/TcForeign.o stage2/typecheck/TcGadt.o stage2/typecheck/TcGenDeriv.o stage2/typecheck/TcHsSyn.o stage2/typecheck/TcHsType.o stage2/typecheck/TcInstDcls.o stage2/typecheck/TcMType.o stage2/typecheck/TcMatches.o stage2/typecheck/TcPat.o stage2/typecheck/TcRnDriver.o stage2/typecheck/TcRnMonad.o stage2/typecheck/TcRnTypes.o stage2/typecheck/TcRules.o stage2/typecheck/TcSimplify.o stage2/typecheck/TcSplice.o stage2/typecheck/TcTyClsDecls.o stage2/typecheck/TcTyDecls.o stage2/typecheck/TcTyFuns.o stage2/typecheck/TcType.o stage2/typecheck/TcUnify.o stage2/types/Class.o stage2/types/Coercion.o stage2/types/FamInstEnv.o stage2/types/FunDeps.o stage2/types/Generics.o stage2/types/InstEnv.o stage2/types/TyCon.o stage2/types/Type.o stage2/types/TypeRep.o stage2/types/Unify.o stage2/utils/Bag.o stage2/utils/Binary.o stage2/utils/BufWrite.o stage2/utils/Digraph.o stage2/utils/Encoding.o stage2/utils/FastMutInt.o stage2/utils/FastString.o stage2/utils/FastTypes.o stage2/utils/FiniteMap.o stage2/utils/GraphBase.o stage2/utils/GraphColor.o stage2/utils/GraphOps.o stage2/utils/GraphPpr.o stage2/utils/IOEnv.o stage2/utils/Interval.o stage2/utils/ListSetOps.o stage2/utils/Maybes.o stage2/utils/OrdList.o stage2/utils/Outputable.o stage2/utils/Panic.o stage2/utils/Pretty.o stage2/utils/State.o stage2/utils/StringBuffer.o stage2/utils/UniqFM.o stage2/utils/UniqSet.o stage2/utils/Util.o stage2/vectorise/VectBuiltIn.o stage2/vectorise/VectCore.o stage2/vectorise/VectMonad.o stage2/vectorise/VectType.o stage2/vectorise/VectUtils.o stage2/vectorise/Vectorise.o stage2/parser/cutils.o
make[1]: *** [HSghc.o] Bus error
make[1]: *** Deleting file `HSghc.o'
make: *** [stage2] Error 2

I have looked a bit more into this and still believe that it is a Leopard ld problem. Although I am not able to understand what goes on with the failing PPC code in detail, I am a bit concerned about the use of an expression that subtracts a .text section relocatable symbol from a .const_data section relocatable symbol: The Apple Assembler documentation seems to suggest that this is invalid (see section headed "Relocatable Expressions" in http://developer.apple.com/documentation/DeveloperTools/Reference/Assembler/Assembler.pdf).

Although I am not sure of the difference between .const_data and .text, I tried to change the code generator to replace .const_data sections with .text sections as indicated in the attached patch. The resulting compiler is able to pass the sore spots encountered earlier. It is also able to pass validate with relatively few errors reported, but I am not sure that this is particularly significant. For completion, the errors reported are

OVERALL SUMMARY for test run started at Wed Jan  2 09:53:41 CET 2008
    2051 total tests, which gave rise to
    7771 test cases, of which
       1 caused framework failures
    6026 were skipped

    1666 expected passes
      76 expected failures
       0 unexpected passes
       3 unexpected failures

Unexpected failures:
   currentDirectory001(normal)
   directory001(normal)
   ghci024(ghci)

but I don't believe that they are relevant to this issue.

Suggestions for further investigation are most welcome.

Best regards Thorkil

01/02/08 09:55:01 changed by thorkilnaur

  • attachment Work_around_PPC_Mac_OS_X_Leopard_ld_Bus_error_illustrative_only.dpatch.gz added.

Work around PPC Mac OS X Leopard ld Bus error (illustrative only)

01/03/08 13:37:10 changed by eelco

I haven't spent much time on this (because I compiling GHC wasn't the final goal ;), but the compiler built with 'quickest' gave some strange errors concerning interface files when trying to build HAppS. So I tried building 6.8.2 again, again with ld_classic, but now with build flavor 'quick'. I had to restart the build 3 or 4 times, since it segfaulted on (seemingly) random files. After that I tried building HAppS again. Unfortunately, I got stuck at the same point, this time with a panic.

[10 of 18] Compiling HAppS.State.Transaction ( src/HAppS/State/Transaction.hs, dist/build/HAppS/State/Transaction.o )

src/HAppS/State/Transaction.hs:264:42:
    Warning: Defined but not used: `logger'

src/HAppS/State/Transaction.hs:264:52:
    Warning: Defined but not used: `ev'
ghc-6.8.2: panic! (the 'impossible' happened)
  (GHC version 6.8.2 for powerpc-apple-darwin):
	splitFunTy
    <nt>base:GHC.Conc.STM{tc r2T} base:GHC.Base.(){(w) tc 40}

01/20/08 23:17:42 changed by thorkilnaur

Trying a few combinations of compiler options shows: With

SRC_HC_OPTS   = -H32m -O2
GhcHcOpts     = -Rghc-timing
GhcLibHcOpts  =
GhcLibWays    =

in mk/build.mk, the build ends with:

../../compiler/stage1/ghc-inplace -package-name unix-2.2 -hide-all-packages -split-objs -i -idist/build/autogen -idist/build -i. -Idist/build -Iinclude -#include "HsUnix.h" -#include "execvpe.h" -odir dist/build -hidir dist/build -stubdir dist/build -package base-3.0 -package directory-1.0 -O -XCPP -XForeignFunctionInterface -idist/build  -H32m -O2  -c dist/build/System/Posix/Semaphore.hs -o dist/build/System/Posix/Semaphore.o  -ohi dist/build/System/Posix/Semaphore.hi
collect2: ld terminated with signal 10 [Bus error]
make[2]: *** [dist/build/System/Posix/Semaphore.o] Error 1
make[1]: *** [make.library.unix] Error 2
make: *** [stage1] Error 2

(The extra-packages are included in this build.) If I then change mk/build.mk to

SRC_HC_OPTS   = -H32m -O2
GhcHcOpts     = -Rghc-timing
GhcLibHcOpts  =
GhcLibWays    =
SplitObjs     = NO

the build ends with:

/usr/bin/ld -r -x -o HSghc.o  stage2/basicTypes/BasicTypes.o stage2/basicTypes/DataCon.o stage2/basicTypes/Demand.o stage2/basicTypes/Id.o stage2/basicTypes/IdInfo.o stage2/basicTypes/Literal.o stage2/basicTypes/MkId.o stage2/basicTypes/Module.o stage2/basicTypes/Name.o stage2/basicTypes/NameEnv.o stage2/basicTypes/NameSet.o stage2/basicTypes/NewDemand.o stage2/basicTypes/OccName.o stage2/basicTypes/RdrName.o stage2/basicTypes/SrcLoc.o stage2/basicTypes/UniqSupply.o stage2/basicTypes/Unique.o stage2/basicTypes/Var.o stage2/basicTypes/VarEnv.o stage2/basicTypes/VarSet.o stage2/cmm/CLabel.o stage2/cmm/Cmm.o stage2/cmm/CmmBrokenBlock.o stage2/cmm/CmmCPS.o stage2/cmm/CmmCPSGen.o stage2/cmm/CmmCPSZ.o stage2/cmm/CmmCallConv.o stage2/cmm/CmmContFlowOpt.o stage2/cmm/CmmCvt.o stage2/cmm/CmmExpr.o stage2/cmm/CmmInfo.o stage2/cmm/CmmLex.o stage2/cmm/CmmLint.o stage2/cmm/CmmLive.o stage2/cmm/CmmLiveZ.o stage2/cmm/CmmOpt.o stage2/cmm/CmmParse.o stage2/cmm/CmmProcPoint.o stage2/cmm/CmmProcPointZ.o stage2/cmm/CmmSpillReload.o stage2/cmm/CmmTx.o stage2/cmm/CmmUtils.o stage2/cmm/CmmZipUtil.o stage2/cmm/DFMonad.o stage2/cmm/Dataflow.o stage2/cmm/MachOp.o stage2/cmm/MkZipCfg.o stage2/cmm/MkZipCfgCmm.o stage2/cmm/OptimizationFuel.o stage2/cmm/PprC.o stage2/cmm/PprCmm.o stage2/cmm/PprCmmZ.o stage2/cmm/StackColor.o stage2/cmm/StackPlacements.o stage2/cmm/ZipCfg.o stage2/cmm/ZipCfgCmmRep.o stage2/cmm/ZipCfgExtras.o stage2/cmm/ZipDataflow0.o stage2/codeGen/Bitmap.o stage2/codeGen/CgBindery.o stage2/codeGen/CgCallConv.o stage2/codeGen/CgCase.o stage2/codeGen/CgClosure.o stage2/codeGen/CgCon.o stage2/codeGen/CgExpr.o stage2/codeGen/CgForeignCall.o stage2/codeGen/CgHeapery.o stage2/codeGen/CgHpc.o stage2/codeGen/CgInfoTbls.o stage2/codeGen/CgLetNoEscape.o stage2/codeGen/CgMonad.o stage2/codeGen/CgParallel.o stage2/codeGen/CgPrimOp.o stage2/codeGen/CgProf.o stage2/codeGen/CgStackery.o stage2/codeGen/CgTailCall.o stage2/codeGen/CgTicky.o stage2/codeGen/CgUtils.o stage2/codeGen/ClosureInfo.o stage2/codeGen/CodeGen.o stage2/codeGen/SMRep.o stage2/coreSyn/CoreFVs.o stage2/coreSyn/CoreLint.o stage2/coreSyn/CorePrep.o stage2/coreSyn/CoreSubst.o stage2/coreSyn/CoreSyn.o stage2/coreSyn/CoreTidy.o stage2/coreSyn/CoreUnfold.o stage2/coreSyn/CoreUtils.o stage2/coreSyn/ExternalCore.o stage2/coreSyn/MkExternalCore.o stage2/coreSyn/PprCore.o stage2/coreSyn/PprExternalCore.o stage2/cprAnalysis/CprAnalyse.o stage2/deSugar/Check.o stage2/deSugar/Coverage.o stage2/deSugar/Desugar.o stage2/deSugar/DsArrows.o stage2/deSugar/DsBinds.o stage2/deSugar/DsCCall.o stage2/deSugar/DsExpr.o stage2/deSugar/DsForeign.o stage2/deSugar/DsGRHSs.o stage2/deSugar/DsListComp.o stage2/deSugar/DsMeta.o stage2/deSugar/DsMonad.o stage2/deSugar/DsUtils.o stage2/deSugar/Match.o stage2/deSugar/MatchCon.o stage2/deSugar/MatchLit.o stage2/ghci/ByteCodeAsm.o stage2/ghci/ByteCodeFFI.o stage2/ghci/ByteCodeGen.o stage2/ghci/ByteCodeInstr.o stage2/ghci/ByteCodeItbls.o stage2/ghci/ByteCodeLink.o stage2/ghci/Debugger.o stage2/ghci/GhciMonad.o stage2/ghci/GhciTags.o stage2/ghci/InteractiveUI.o stage2/ghci/Linker.o stage2/ghci/ObjLink.o stage2/ghci/RtClosureInspect.o stage2/hsSyn/Convert.o stage2/hsSyn/HsBinds.o stage2/hsSyn/HsDecls.o stage2/hsSyn/HsDoc.o stage2/hsSyn/HsExpr.o stage2/hsSyn/HsImpExp.o stage2/hsSyn/HsLit.o stage2/hsSyn/HsPat.o stage2/hsSyn/HsSyn.o stage2/hsSyn/HsTypes.o stage2/hsSyn/HsUtils.o stage2/iface/BinIface.o stage2/iface/BuildTyCl.o stage2/iface/IfaceEnv.o stage2/iface/IfaceSyn.o stage2/iface/IfaceType.o stage2/iface/LoadIface.o stage2/iface/MkIface.o stage2/iface/TcIface.o stage2/main/BreakArray.o stage2/main/CmdLineParser.o stage2/main/CodeOutput.o stage2/main/Config.o stage2/main/Constants.o stage2/main/DriverMkDepend.o stage2/main/DriverPhases.o stage2/main/DriverPipeline.o stage2/main/DynFlags.o stage2/main/ErrUtils.o stage2/main/Finder.o stage2/main/GHC.o stage2/main/HeaderInfo.o stage2/main/HscMain.o stage2/main/HscStats.o stage2/main/HscTypes.o stage2/main/InteractiveEval.o stage2/main/PackageConfig.o stage2/main/Packages.o stage2/main/ParsePkgConf.o stage2/main/PprTyThing.o stage2/main/StaticFlags.o stage2/main/SysTools.o stage2/main/TidyPgm.o stage2/nativeGen/AsmCodeGen.o stage2/nativeGen/MachCodeGen.o stage2/nativeGen/MachInstrs.o stage2/nativeGen/MachRegs.o stage2/nativeGen/NCGMonad.o stage2/nativeGen/PositionIndependentCode.o stage2/nativeGen/PprMach.o stage2/nativeGen/RegAllocColor.o stage2/nativeGen/RegAllocInfo.o stage2/nativeGen/RegAllocLinear.o stage2/nativeGen/RegAllocStats.o stage2/nativeGen/RegArchBase.o stage2/nativeGen/RegArchX86.o stage2/nativeGen/RegCoalesce.o stage2/nativeGen/RegLiveness.o stage2/nativeGen/RegSpill.o stage2/nativeGen/RegSpillClean.o stage2/nativeGen/RegSpillCost.o stage2/ndpFlatten/FlattenInfo.o stage2/ndpFlatten/FlattenMonad.o stage2/ndpFlatten/Flattening.o stage2/ndpFlatten/NDPCoreUtils.o stage2/ndpFlatten/PArrAnal.o stage2/parser/Ctype.o stage2/parser/HaddockLex.o stage2/parser/HaddockParse.o stage2/parser/HaddockUtils.o stage2/parser/LexCore.o stage2/parser/Lexer.o stage2/parser/Parser.o stage2/parser/ParserCore.o stage2/parser/ParserCoreUtils.o stage2/parser/RdrHsSyn.o stage2/prelude/ForeignCall.o stage2/prelude/PrelInfo.o stage2/prelude/PrelNames.o stage2/prelude/PrelRules.o stage2/prelude/PrimOp.o stage2/prelude/TysPrim.o stage2/prelude/TysWiredIn.o stage2/profiling/CostCentre.o stage2/profiling/SCCfinal.o stage2/rename/RnBinds.o stage2/rename/RnEnv.o stage2/rename/RnExpr.o stage2/rename/RnHsDoc.o stage2/rename/RnHsSyn.o stage2/rename/RnNames.o stage2/rename/RnPat.o stage2/rename/RnSource.o stage2/rename/RnTypes.o stage2/simplCore/CSE.o stage2/simplCore/FloatIn.o stage2/simplCore/FloatOut.o stage2/simplCore/LiberateCase.o stage2/simplCore/OccurAnal.o stage2/simplCore/SAT.o stage2/simplCore/SATMonad.o stage2/simplCore/SetLevels.o stage2/simplCore/SimplCore.o stage2/simplCore/SimplEnv.o stage2/simplCore/SimplMonad.o stage2/simplCore/SimplUtils.o stage2/simplCore/Simplify.o stage2/simplStg/SRT.o stage2/simplStg/SimplStg.o stage2/simplStg/StgStats.o stage2/specialise/Rules.o stage2/specialise/SpecConstr.o stage2/specialise/Specialise.o stage2/stgSyn/CoreToStg.o stage2/stgSyn/StgLint.o stage2/stgSyn/StgSyn.o stage2/stranal/DmdAnal.o stage2/stranal/SaAbsInt.o stage2/stranal/SaLib.o stage2/stranal/StrictAnal.o stage2/stranal/WorkWrap.o stage2/stranal/WwLib.o stage2/typecheck/FamInst.o stage2/typecheck/Inst.o stage2/typecheck/TcArrows.o stage2/typecheck/TcBinds.o stage2/typecheck/TcClassDcl.o stage2/typecheck/TcDefaults.o stage2/typecheck/TcDeriv.o stage2/typecheck/TcEnv.o stage2/typecheck/TcExpr.o stage2/typecheck/TcForeign.o stage2/typecheck/TcGadt.o stage2/typecheck/TcGenDeriv.o stage2/typecheck/TcHsSyn.o stage2/typecheck/TcHsType.o stage2/typecheck/TcInstDcls.o stage2/typecheck/TcMType.o stage2/typecheck/TcMatches.o stage2/typecheck/TcPat.o stage2/typecheck/TcRnDriver.o stage2/typecheck/TcRnMonad.o stage2/typecheck/TcRnTypes.o stage2/typecheck/TcRules.o stage2/typecheck/TcSimplify.o stage2/typecheck/TcSplice.o stage2/typecheck/TcTyClsDecls.o stage2/typecheck/TcTyDecls.o stage2/typecheck/TcTyFuns.o stage2/typecheck/TcType.o stage2/typecheck/TcUnify.o stage2/types/Class.o stage2/types/Coercion.o stage2/types/FamInstEnv.o stage2/types/FunDeps.o stage2/types/Generics.o stage2/types/InstEnv.o stage2/types/TyCon.o stage2/types/Type.o stage2/types/TypeRep.o stage2/types/Unify.o stage2/utils/Bag.o stage2/utils/Binary.o stage2/utils/BufWrite.o stage2/utils/Digraph.o stage2/utils/Encoding.o stage2/utils/FastBool.o stage2/utils/FastFunctions.o stage2/utils/FastMutInt.o stage2/utils/FastString.o stage2/utils/FastTypes.o stage2/utils/FiniteMap.o stage2/utils/GraphBase.o stage2/utils/GraphColor.o stage2/utils/GraphOps.o stage2/utils/GraphPpr.o stage2/utils/IOEnv.o stage2/utils/Interval.o stage2/utils/ListSetOps.o stage2/utils/Maybes.o stage2/utils/OrdList.o stage2/utils/Outputable.o stage2/utils/Panic.o stage2/utils/Pretty.o stage2/utils/State.o stage2/utils/StringBuffer.o stage2/utils/UniqFM.o stage2/utils/UniqSet.o stage2/utils/Util.o stage2/vectorise/VectBuiltIn.o stage2/vectorise/VectCore.o stage2/vectorise/VectMonad.o stage2/vectorise/VectType.o stage2/vectorise/VectUtils.o stage2/vectorise/Vectorise.o stage2/parser/cutils.o
make[2]: *** [HSghc.o] Bus error
make[2]: *** Deleting file `HSghc.o'
make[1]: *** [stage2] Error 2
make: *** [bootstrap2] Error 2

Further, with

SRC_HC_OPTS   = -H32m -O2 -fvia-C
GhcHcOpts     = -Rghc-timing
GhcLibHcOpts  =
GhcLibWays    =

in mk/build.mk, the result is

../../compiler/stage1/ghc-inplace -package-name base-3.0 -hide-all-packages -split-objs -i -idist/build/autogen -idist/build -i. -Idist/build -Iinclude -#include "HsBase.h" -odir dist/build -hidir dist/build -stubdir dist/build -package rts-1.0 -O -fglasgow-exts -package-name base -XCPP -idist/build  -H32m -O2 -fvia-C  -c Foreign/C/Error.hs -o dist/build/Foreign/C/Error.o  -ohi dist/build/Foreign/C/Error.hi
/tmp/ghc13816_0/ghc13816_0.split__1.s:unknown:Undefined local symbol L_strerror$UNIX2003$stub
make[2]: *** [dist/build/Foreign/C/Error.o] Error 1
make[1]: *** [make.library.base] Error 2
make: *** [stage1] Error 2

This could well be the same problem reported in http://hackage.haskell.org/trac/ghc/ticket/2012. And, finally

SRC_HC_OPTS   = -H32m -O2 -fvia-C
GhcHcOpts     = -Rghc-timing
GhcLibHcOpts  =
GhcLibWays    =
SplitObjs     = NO

ends with

/usr/bin/ld -r -x -o HSghc.o  stage2/basicTypes/BasicTypes.o stage2/basicTypes/DataCon.o stage2/basicTypes/Demand.o stage2/basicTypes/Id.o stage2/basicTypes/IdInfo.o stage2/basicTypes/Literal.o stage2/basicTypes/MkId.o stage2/basicTypes/Module.o stage2/basicTypes/Name.o stage2/basicTypes/NameEnv.o stage2/basicTypes/NameSet.o stage2/basicTypes/NewDemand.o stage2/basicTypes/OccName.o stage2/basicTypes/RdrName.o stage2/basicTypes/SrcLoc.o stage2/basicTypes/UniqSupply.o stage2/basicTypes/Unique.o stage2/basicTypes/Var.o stage2/basicTypes/VarEnv.o stage2/basicTypes/VarSet.o stage2/cmm/CLabel.o stage2/cmm/Cmm.o stage2/cmm/CmmBrokenBlock.o stage2/cmm/CmmCPS.o stage2/cmm/CmmCPSGen.o stage2/cmm/CmmCPSZ.o stage2/cmm/CmmCallConv.o stage2/cmm/CmmContFlowOpt.o stage2/cmm/CmmCvt.o stage2/cmm/CmmExpr.o stage2/cmm/CmmInfo.o stage2/cmm/CmmLex.o stage2/cmm/CmmLint.o stage2/cmm/CmmLive.o stage2/cmm/CmmLiveZ.o stage2/cmm/CmmOpt.o stage2/cmm/CmmParse.o stage2/cmm/CmmProcPoint.o stage2/cmm/CmmProcPointZ.o stage2/cmm/CmmSpillReload.o stage2/cmm/CmmTx.o stage2/cmm/CmmUtils.o stage2/cmm/CmmZipUtil.o stage2/cmm/DFMonad.o stage2/cmm/Dataflow.o stage2/cmm/MachOp.o stage2/cmm/MkZipCfg.o stage2/cmm/MkZipCfgCmm.o stage2/cmm/OptimizationFuel.o stage2/cmm/PprC.o stage2/cmm/PprCmm.o stage2/cmm/PprCmmZ.o stage2/cmm/StackColor.o stage2/cmm/StackPlacements.o stage2/cmm/ZipCfg.o stage2/cmm/ZipCfgCmmRep.o stage2/cmm/ZipCfgExtras.o stage2/cmm/ZipDataflow0.o stage2/codeGen/Bitmap.o stage2/codeGen/CgBindery.o stage2/codeGen/CgCallConv.o stage2/codeGen/CgCase.o stage2/codeGen/CgClosure.o stage2/codeGen/CgCon.o stage2/codeGen/CgExpr.o stage2/codeGen/CgForeignCall.o stage2/codeGen/CgHeapery.o stage2/codeGen/CgHpc.o stage2/codeGen/CgInfoTbls.o stage2/codeGen/CgLetNoEscape.o stage2/codeGen/CgMonad.o stage2/codeGen/CgParallel.o stage2/codeGen/CgPrimOp.o stage2/codeGen/CgProf.o stage2/codeGen/CgStackery.o stage2/codeGen/CgTailCall.o stage2/codeGen/CgTicky.o stage2/codeGen/CgUtils.o stage2/codeGen/ClosureInfo.o stage2/codeGen/CodeGen.o stage2/codeGen/SMRep.o stage2/coreSyn/CoreFVs.o stage2/coreSyn/CoreLint.o stage2/coreSyn/CorePrep.o stage2/coreSyn/CoreSubst.o stage2/coreSyn/CoreSyn.o stage2/coreSyn/CoreTidy.o stage2/coreSyn/CoreUnfold.o stage2/coreSyn/CoreUtils.o stage2/coreSyn/ExternalCore.o stage2/coreSyn/MkExternalCore.o stage2/coreSyn/PprCore.o stage2/coreSyn/PprExternalCore.o stage2/cprAnalysis/CprAnalyse.o stage2/deSugar/Check.o stage2/deSugar/Coverage.o stage2/deSugar/Desugar.o stage2/deSugar/DsArrows.o stage2/deSugar/DsBinds.o stage2/deSugar/DsCCall.o stage2/deSugar/DsExpr.o stage2/deSugar/DsForeign.o stage2/deSugar/DsGRHSs.o stage2/deSugar/DsListComp.o stage2/deSugar/DsMeta.o stage2/deSugar/DsMonad.o stage2/deSugar/DsUtils.o stage2/deSugar/Match.o stage2/deSugar/MatchCon.o stage2/deSugar/MatchLit.o stage2/ghci/ByteCodeAsm.o stage2/ghci/ByteCodeFFI.o stage2/ghci/ByteCodeGen.o stage2/ghci/ByteCodeInstr.o stage2/ghci/ByteCodeItbls.o stage2/ghci/ByteCodeLink.o stage2/ghci/Debugger.o stage2/ghci/GhciMonad.o stage2/ghci/GhciTags.o stage2/ghci/InteractiveUI.o stage2/ghci/Linker.o stage2/ghci/ObjLink.o stage2/ghci/RtClosureInspect.o stage2/hsSyn/Convert.o stage2/hsSyn/HsBinds.o stage2/hsSyn/HsDecls.o stage2/hsSyn/HsDoc.o stage2/hsSyn/HsExpr.o stage2/hsSyn/HsImpExp.o stage2/hsSyn/HsLit.o stage2/hsSyn/HsPat.o stage2/hsSyn/HsSyn.o stage2/hsSyn/HsTypes.o stage2/hsSyn/HsUtils.o stage2/iface/BinIface.o stage2/iface/BuildTyCl.o stage2/iface/IfaceEnv.o stage2/iface/IfaceSyn.o stage2/iface/IfaceType.o stage2/iface/LoadIface.o stage2/iface/MkIface.o stage2/iface/TcIface.o stage2/main/BreakArray.o stage2/main/CmdLineParser.o stage2/main/CodeOutput.o stage2/main/Config.o stage2/main/Constants.o stage2/main/DriverMkDepend.o stage2/main/DriverPhases.o stage2/main/DriverPipeline.o stage2/main/DynFlags.o stage2/main/ErrUtils.o stage2/main/Finder.o stage2/main/GHC.o stage2/main/HeaderInfo.o stage2/main/HscMain.o stage2/main/HscStats.o stage2/main/HscTypes.o stage2/main/InteractiveEval.o stage2/main/PackageConfig.o stage2/main/Packages.o stage2/main/ParsePkgConf.o stage2/main/PprTyThing.o stage2/main/StaticFlags.o stage2/main/SysTools.o stage2/main/TidyPgm.o stage2/nativeGen/AsmCodeGen.o stage2/nativeGen/MachCodeGen.o stage2/nativeGen/MachInstrs.o stage2/nativeGen/MachRegs.o stage2/nativeGen/NCGMonad.o stage2/nativeGen/PositionIndependentCode.o stage2/nativeGen/PprMach.o stage2/nativeGen/RegAllocColor.o stage2/nativeGen/RegAllocInfo.o stage2/nativeGen/RegAllocLinear.o stage2/nativeGen/RegAllocStats.o stage2/nativeGen/RegArchBase.o stage2/nativeGen/RegArchX86.o stage2/nativeGen/RegCoalesce.o stage2/nativeGen/RegLiveness.o stage2/nativeGen/RegSpill.o stage2/nativeGen/RegSpillClean.o stage2/nativeGen/RegSpillCost.o stage2/ndpFlatten/FlattenInfo.o stage2/ndpFlatten/FlattenMonad.o stage2/ndpFlatten/Flattening.o stage2/ndpFlatten/NDPCoreUtils.o stage2/ndpFlatten/PArrAnal.o stage2/parser/Ctype.o stage2/parser/HaddockLex.o stage2/parser/HaddockParse.o stage2/parser/HaddockUtils.o stage2/parser/LexCore.o stage2/parser/Lexer.o stage2/parser/Parser.o stage2/parser/ParserCore.o stage2/parser/ParserCoreUtils.o stage2/parser/RdrHsSyn.o stage2/prelude/ForeignCall.o stage2/prelude/PrelInfo.o stage2/prelude/PrelNames.o stage2/prelude/PrelRules.o stage2/prelude/PrimOp.o stage2/prelude/TysPrim.o stage2/prelude/TysWiredIn.o stage2/profiling/CostCentre.o stage2/profiling/SCCfinal.o stage2/rename/RnBinds.o stage2/rename/RnEnv.o stage2/rename/RnExpr.o stage2/rename/RnHsDoc.o stage2/rename/RnHsSyn.o stage2/rename/RnNames.o stage2/rename/RnPat.o stage2/rename/RnSource.o stage2/rename/RnTypes.o stage2/simplCore/CSE.o stage2/simplCore/FloatIn.o stage2/simplCore/FloatOut.o stage2/simplCore/LiberateCase.o stage2/simplCore/OccurAnal.o stage2/simplCore/SAT.o stage2/simplCore/SATMonad.o stage2/simplCore/SetLevels.o stage2/simplCore/SimplCore.o stage2/simplCore/SimplEnv.o stage2/simplCore/SimplMonad.o stage2/simplCore/SimplUtils.o stage2/simplCore/Simplify.o stage2/simplStg/SRT.o stage2/simplStg/SimplStg.o stage2/simplStg/StgStats.o stage2/specialise/Rules.o stage2/specialise/SpecConstr.o stage2/specialise/Specialise.o stage2/stgSyn/CoreToStg.o stage2/stgSyn/StgLint.o stage2/stgSyn/StgSyn.o stage2/stranal/DmdAnal.o stage2/stranal/SaAbsInt.o stage2/stranal/SaLib.o stage2/stranal/StrictAnal.o stage2/stranal/WorkWrap.o stage2/stranal/WwLib.o stage2/typecheck/FamInst.o stage2/typecheck/Inst.o stage2/typecheck/TcArrows.o stage2/typecheck/TcBinds.o stage2/typecheck/TcClassDcl.o stage2/typecheck/TcDefaults.o stage2/typecheck/TcDeriv.o stage2/typecheck/TcEnv.o stage2/typecheck/TcExpr.o stage2/typecheck/TcForeign.o stage2/typecheck/TcGadt.o stage2/typecheck/TcGenDeriv.o stage2/typecheck/TcHsSyn.o stage2/typecheck/TcHsType.o stage2/typecheck/TcInstDcls.o stage2/typecheck/TcMType.o stage2/typecheck/TcMatches.o stage2/typecheck/TcPat.o stage2/typecheck/TcRnDriver.o stage2/typecheck/TcRnMonad.o stage2/typecheck/TcRnTypes.o stage2/typecheck/TcRules.o stage2/typecheck/TcSimplify.o stage2/typecheck/TcSplice.o stage2/typecheck/TcTyClsDecls.o stage2/typecheck/TcTyDecls.o stage2/typecheck/TcTyFuns.o stage2/typecheck/TcType.o stage2/typecheck/TcUnify.o stage2/types/Class.o stage2/types/Coercion.o stage2/types/FamInstEnv.o stage2/types/FunDeps.o stage2/types/Generics.o stage2/types/InstEnv.o stage2/types/TyCon.o stage2/types/Type.o stage2/types/TypeRep.o stage2/types/Unify.o stage2/utils/Bag.o stage2/utils/Binary.o stage2/utils/BufWrite.o stage2/utils/Digraph.o stage2/utils/Encoding.o stage2/utils/FastBool.o stage2/utils/FastFunctions.o stage2/utils/FastMutInt.o stage2/utils/FastString.o stage2/utils/FastTypes.o stage2/utils/FiniteMap.o stage2/utils/GraphBase.o stage2/utils/GraphColor.o stage2/utils/GraphOps.o stage2/utils/GraphPpr.o stage2/utils/IOEnv.o stage2/utils/Interval.o stage2/utils/ListSetOps.o stage2/utils/Maybes.o stage2/utils/OrdList.o stage2/utils/Outputable.o stage2/utils/Panic.o stage2/utils/Pretty.o stage2/utils/State.o stage2/utils/StringBuffer.o stage2/utils/UniqFM.o stage2/utils/UniqSet.o stage2/utils/Util.o stage2/vectorise/VectBuiltIn.o stage2/vectorise/VectCore.o stage2/vectorise/VectMonad.o stage2/vectorise/VectType.o stage2/vectorise/VectUtils.o stage2/vectorise/Vectorise.o stage2/parser/cutils.o
ld: scattered reloc r_address too large for inferred architecture ppc
make[2]: *** [HSghc.o] Error 1
make[1]: *** [stage2] Error 2
make: *** [bootstrap2] Error 2

This has been reported earlier in http://hackage.haskell.org/trac/ghc/ticket/1843. I will assume that this is simply a different symptom of the same basic problem with the Apple linker, but if anyone sees this differently, feel free to report a separate bug.

All in all, fairly entertaining.

Some additional lines of work include:

  1. Actually debugging the Apple linker: http://www.haskell.org/pipermail/glasgow-haskell-users/2007-November/013489.html and http://www.haskell.org/pipermail/glasgow-haskell-users/2007-November/013447.html have some details about this. I have started an attempt to continue this, but I am not done yet. In any case, although I have requested a status on the issue reported to Apple, I have not heard anything, so it seems unlikely that we are going to see some sort of solution from that source anytime soon.
  2. Figuring out how to, possibly, generate different code that works around the linker problem. I don't feel particularly competent in this respect, a lot of study would be required for me to work on this effectively. So if some expert in these matters would be willing to give a few hints, whether such a line of work is likely to succeed, I would be very grateful.
  3. In particular, some better understanding of the difference between using .const_data and .text would be useful. And thereby some indication of whether the work-around patch the I attached makes sense at all.

As always, additional ideas for investigating this problem are most welcome.

Best regards Thorkil

01/23/08 22:21:43 changed by thorkilnaur

Just for the record, using the mk/build.mk

GhcLibHcOpts=-O -fgenerics -fasm
GhcStage1HcOpts=-O -fasm
GhcStage2HcOpts=-O -fasm
SplitObjs=NO
GhcLibWays=
HADDOCK_DOCS=YES

also used by the buildbots and the patch Work_around_PPC_Mac_OS_X_Leopard_ld_Bus_error_illustrative_only.dpatch that were attached a while ago, a recent stable branch GHC builds successfully. The stage=2 test summary is:

OVERALL SUMMARY for test run started at Wed Jan 23 17:49:47 CET 2008
    2078 total tests, which gave rise to
    6475 test cases, of which
       0 caused framework failures
    1098 were skipped

    5102 expected passes
     242 expected failures
       0 unexpected passes
      33 unexpected failures

Unexpected failures:
   TH_fail(normal)
   divbyzero(normal,optc,optasm,ghci,threaded1,threaded2)
   ffi009(ghci)
   ghci024(ghci)
   hpc_raytrace(normal,optc,optasm,threaded1,threaded2)
   num012(normal,optc,optasm,ghci,threaded1,threaded2)
   openFile008(ghci)
   qq001(normal)
   qq002(normal)
   qq003(normal)
   qq004(normal)
   qq005(normal,optc,optasm,ghci,threaded1,threaded2)
   qq006(normal)
   signals002(ghci)

A recent head with the same patch applied also builds successfully with stage=2 test summary:

OVERALL SUMMARY for test run started at Wed Jan 23 09:48:22 CET 2008
    2075 total tests, which gave rise to
    6470 test cases, of which
       0 caused framework failures
    1001 were skipped
   
    5188 expected passes
     239 expected failures
       0 unexpected passes
      42 unexpected failures
   
Unexpected failures:
   break017(ghci)
   divbyzero(normal,optc,optasm,ghci,threaded1,threaded2)
   dynamic001(normal,optc,optasm,ghci,threaded1,threaded2)
   dynamic002(normal,optc,optasm,ghci,threaded1,threaded2)
   ffi009(ghci)
   ghci024(ghci)
   hpc_raytrace(normal,optc,optasm,threaded1,threaded2)
   num012(normal,optc,optasm,ghci,threaded1,threaded2)
   openFile008(ghci)
   qq005(normal,optc,optasm,ghci,threaded1,threaded2)
   qq006(normal)
   recomp002(normal)
   signals002(ghci)

Best regards Thorkil

(in reply to: ↑ description ) 02/14/08 08:50:14 changed by gmh33

Is there a chance that the OS X update 10.5.2 would fix this?

02/14/08 14:32:11 changed by thorkilnaur

Thanks for making me aware of the Mac OS X 10.5.2 update. I have updated the "tnaur PPC OSX ... 2" builder accordingly, so if that removes the problem, we should be able to detect it soon. (For the HEAD, we have to await the resolution of http://www.haskell.org/pipermail/cvs-ghc/2008-February/041135.html that currently makes the stage 2 build fail, rather than the problem of the present ticket.)

Best regards Thorkil

03/12/08 06:07:11 changed by maeder

With your attached patch (that I don't understand) I was able to compile ghc-6.8.2 from sources. I'll try if that fixes #2117, too.

m03:ghc-6.8.2 maeder$ otool -L compiler/stage2/ghc-6.8.2
compiler/stage2/ghc-6.8.2:
        GNUreadline.framework/Versions/A/GNUreadline (compatibility version 5.0.0, current version 5.2.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
        /opt/local/lib/libgmp.3.dylib (compatibility version 8.0.0, current version 8.2.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
m03:ghc-6.8.2 maeder$ uname -a
Darwin m03.informatik.uni-bremen.de 9.2.0 Darwin Kernel Version 9.2.0: Tue Feb  5 16:15:19 PST 2008; root:xnu-1228.3.13~1/RELEASE_PPC Power Macintosh

03/12/08 10:26:24 changed by maeder

  • version changed from 6.9 to 6.8.2.

Yes, the patch fixes #2117, too. (at least I could install the package parsec-3.0.0)

04/24/08 07:21:44 changed by thorkilnaur

Apple has responded to the "Bug ID# 5655246 (PPC Leopard (Xcode 3.0) linker ld gets "Bus error" sometimes)" that I reported a while back, saying that this issue has been addressed in "the latest seed release of Xcode 3.1, build 9M2165" and asking for an update of the bug report. I will get to that within the next couple of days.

Best regards Thorkil

04/25/08 13:25:45 changed by malcolm.wallace@cs.york.ac.uk

I got this error today

collect2: ld terminated with signal 10 [Bus error]

whilst attempting to build the gtk2hs package for ghc-6.8.2. My machine is a PowerPC, running Leopard 10.5.2, and the ghc is the one from the ghc binary download page for powerpc-tiger.

04/28/08 13:04:21 changed by thorkilnaur

I am delighted to report that I was unable to provoke the "Bus error" reaction using the "Developer preview" version of Xcode3.1 that I tried out, prompted by the Apple response. The "tnaur PPC OSX stable 2" builder (which is a Mac OS X 10.5 Leopard) has succeeded for the first time, ever, with this version of Xcode3.1 (see http://darcs.haskell.org/buildbot/all/builders/tnaur%20PPC%20OSX%20stable%202/builds/90).

I suggest that we close this ticket when Apple releases a version of Xcode with this problem solved.

Best regards Thorkil

04/29/08 07:04:38 changed by igloo

  • milestone changed from 6.8.3 to Not GHC.

Great, thanks Thorkil!

So, I think the plan is to just sit and wait? If someone could shout when Xcode3.1 is released, that would be very useful.

04/29/08 07:05:04 changed by igloo

(and the same for #2117)

05/07/08 11:13:41 changed by eelco

I believe XCode 3.1 is released as part of the iPhone SDK (http://developer.apple.com/iphone/). I'm not sure if it's going to be released 'stand-alone' as well. I'm now installing it, to test if the bug is fixed for that version. I'll report back in a couple of hours ;)

05/09/08 06:52:03 changed by eelco

It took me a bit longer than expected, but I can confirm that ghc 6.8.2 built succesfully using XCode 3.1 (from the iPhone SDK package).

05/20/08 14:02:06 changed by igloo

  • status changed from new to closed.
  • resolution set to fixed.

OK, so I think we may as well close this bug then. Thanks everyone!