Skip to content

[lld] Static linking fails when using GHC musl images with gmp big-integer implementation plus ld.lld as default linker #142307

Open
@benz0li

Description

@benz0li

Your environment

Which OS do you use? Alpine Linux 3.22.0

Which version of LLVM do you use and how do you install it? Version 20. Using apk.

Preparation

git clone https://github.com/benz0li/ghc-musl.git
cd ghc-musl
git checkout 361466df797552946aeece4d4e0d618203821b75

Build GHC musl

docker build \
  --progress plain \
  --target test \
  -t ghc-musl:9.10.2 \
  -f dockerfiles/9.10.2.Dockerfile .

Expected behaviour

Build succeeds. Test (static linking) succeeds.

Actual behaviour

Build succeeds. Test (static linking) fails.

Cross references:

Output (excerpt):

#17 [test 1/4] WORKDIR /usr/local/src
#17 DONE 0.0s

#18 [test 2/4] COPY --from=ghc-stage2 /root/.local/bin/cabal /usr/local/bin/cabal
#18 DONE 0.5s

#19 [test 3/4] COPY Main.hs Main.hs
#19 DONE 0.0s

#20 [test 4/4] RUN ghc -static -optl-pthread -optl-static Main.hs   && file Main   && ./Main   && mkdir cabal-test   && cd cabal-test   && cabal update   && cabal init -n --is-executable -p tester -l MIT   && cabal run
#20 0.249 [1 of 2] Compiling Main             ( Main.hs, Main.o )
#20 0.333 [2 of 2] Linking Main
#20 0.677 ld.lld: error: undefined symbol: __gmpn_add_1
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzuaddzu1_slow$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzuaddzu1_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_bignatzuaddzuword_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 1 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpn_sub_1
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzusubzu1_slow$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzusubzu1_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_bignatzusubzuword_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 1 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpn_add
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzuadd_slow$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzuadd_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_bignatzuadd_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 2 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpn_sub
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzusub_slow$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzusub_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_bignatzusub_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 2 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpn_mul
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzumul_slow$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzumul_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_bignatzumul_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 1 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpn_cmp
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzucmp_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_bignatzucompare_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by BigNat.o:(ghczmbignum_GHCziNumziBigNat_bigNatEqzh_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 27 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpn_tdiv_qr
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzutdivzuqr_slow$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzutdivzuqr_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_bignatzuquotrem_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 5 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpn_mod_1
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_czumpnzumodzu1_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by GMP.o:(ghczmbignum_GHCziNumziBackendziGMP_bignatzuremzuword_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by BigNat.o:(ghczmbignum_GHCziNumziBigNat_bigNatRemWordzh_info$def) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 5 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpz_get_d
#20 0.677 >>> referenced by gmp_wrappers.o:(integer_gmp_mpn_get_d) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpz_get_d_2exp
#20 0.677 >>> referenced by gmp_wrappers.o:(integer_gmp_mpn_get_d) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpn_gcd_1
#20 0.677 >>> referenced by gmp_wrappers.o:(integer_gmp_gcd_word) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by gmp_wrappers.o:(integer_gmp_mpn_gcd_1) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpz_init
#20 0.677 >>> referenced by gmp_wrappers.o:(integer_gmp_mpn_gcd) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by gmp_wrappers.o:(integer_gmp_gcdext) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced by gmp_wrappers.o:(integer_gmp_gcdext) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.677 >>> referenced 8 more times
#20 0.677 
#20 0.677 ld.lld: error: undefined symbol: __gmpz_gcd
#20 0.678 >>> referenced by gmp_wrappers.o:(integer_gmp_mpn_gcd) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.678 
#20 0.678 ld.lld: error: undefined symbol: __gmpz_clear
#20 0.678 >>> referenced by gmp_wrappers.o:(integer_gmp_mpn_gcd) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.678 >>> referenced by gmp_wrappers.o:(integer_gmp_gcdext) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_gcdext) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 >>> referenced 8 more times
#20 0.679 
#20 0.679 ld.lld: error: undefined symbol: __gmpz_gcdext
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_gcdext) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 
#20 0.679 ld.lld: error: undefined symbol: __gmpz_sizeinbase
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_mpn_sizeinbase) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 
#20 0.679 ld.lld: error: undefined symbol: __gmpz_export
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_mpn_export) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 
#20 0.679 ld.lld: error: undefined symbol: __gmpz_probab_prime_p
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_test_prime) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 
#20 0.679 ld.lld: error: undefined symbol: __gmpz_nextprime
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_next_prime) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_next_prime1) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 
#20 0.679 ld.lld: error: undefined symbol: __gmpz_powm
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_powm) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 >>> referenced by gmp_wrappers.o:(integer_gmp_powm1) in archive /usr/local/lib/ghc-9.10.2/lib/../lib/aarch64-linux-ghc-9.10.2/ghc-bignum-1.3-inplace/libHSghc-bignum-1.3-inplace.a
#20 0.679 
#20 0.679 ld.lld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors)
#20 0.682 collect2: error: ld returned 1 exit status
#20 0.683 ghc-9.10.2: `gcc' failed in phase `Linker'. (Exit code: 1)
#20 0.683 HasCallStack backtrace:
#20 0.683   collectBacktraces, called at libraries/ghc-internal/src/GHC/Internal/Exception.hs:169:13 in ghc-internal:GHC.Internal.Exception
#20 0.683   toExceptionWithBacktrace, called at libraries/ghc-internal/src/GHC/Internal/IO.hs:260:11 in ghc-internal:GHC.Internal.IO
#20 0.683   throwIO, called at libraries/exceptions/src/Control/Monad/Catch.hs:308:12 in exceptions-0.10.9-inplace:Control.Monad.Catch
#20 0.683   throwM, called at libraries/exceptions/src/Control/Monad/Catch.hs:797:84 in exceptions-0.10.9-inplace:Control.Monad.Catch
#20 0.683   onException, called at compiler/GHC/Driver/Make.hs:2983:23 in ghc-9.10.2-inplace:GHC.Driver.Make
#20 0.683 
#20 0.683 
#20 ERROR: process "/bin/sh -c ghc -static -optl-pthread -optl-static Main.hs   && file Main   && ./Main   && mkdir cabal-test   && cd cabal-test   && cabal update   && cabal init -n --is-executable -p tester -l MIT   && cabal run" did not complete successfully: exit code: 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions