Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The primitive haskell lib does not build #12

Closed
ElvishJerricco opened this issue Jul 22, 2018 · 4 comments
Closed

The primitive haskell lib does not build #12

ElvishJerricco opened this issue Jul 22, 2018 · 4 comments

Comments

@ElvishJerricco
Copy link
Member

Seems we still have a codegen problem.

$ nix-build -A nixpkgsWasm.haskell.packages.ghcHEAD.primitive

@nix { "action": "setPhase", "phase": "setupCompilerEnvironmentPhase" }
setupCompilerEnvironmentPhase
Build with /nix/store/sr37s1m1c1wjlfbw3fbz2m4xy5bnk8d8-wasm32-unknown-unknown-wasm-ghc-8.5.20180424.
@nix { "action": "setPhase", "phase": "unpackPhase" }
unpacking sources
unpacking source archive /nix/store/jn648vh2xy6iqxph86b6nryzjrlpzc2l-primitive-0.6.4.0.tar.gz
source root is primitive-0.6.4.0
setting SOURCE_DATE_EPOCH to timestamp 1527705516 of file primitive-0.6.4.0/test/primitive-tests.cabal
@nix { "action": "setPhase", "phase": "patchPhase" }
patching sources
Replace Cabal file with edited version from http://hackage.haskell.org/package/primitive-0.6.4.0/revision/1.cabal.
Run jailbreak-cabal to lift version restrictions on build inputs.
@nix { "action": "setPhase", "phase": "compileBuildDriverPhase" }
compileBuildDriverPhase
setupCompileFlags: -package-db=/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/setup-package.conf.d -j4 -threaded
[1 of 1] Compiling Main             ( Setup.hs, /tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/Main.o )
Linking Setup ...
@nix { "action": "setPhase", "phase": "configurePhase" }
configuring
configureFlags: --verbose --prefix=/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm --libdir=$prefix/lib/$compiler --libsubdir=$pkgid --with-gcc=wasm32-unknown-unknown-wasm-clang --package-db=/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/package.conf.d --ghc-option=-j4 --disable-split-objs --enable-library-profiling --profiling-detail=all-functions --disable-profiling --disable-shared --disable-coverage --disable-executable-dynamic --disable-tests --enable-library-vanilla --enable-library-for-ghci --configure-option=--host=wasm32-unknown-unknown-wasm --with-ghc=wasm32-unknown-unknown-wasm-ghc --with-ghc-pkg=wasm32-unknown-unknown-wasm-ghc-pkg --with-gcc=wasm32-unknown-unknown-wasm-cc --with-ld=wasm32-unknown-unknown-wasm-ld --with-hsc2hs=wasm32-unknown-unknown-wasm-hsc2hs --with-strip=wasm32-unknown-unknown-wasm-strip --hsc2hs-option=--cross-compile --ghc-option=-optl --ghc-option=-Wl,--export=main --extra-include-dirs=/nix/store/ykykk9gjk2h6za56hzl2d4ys9q6wh15c-libiconv-1.15-wasm32-unknown-unknown-wasm/include --extra-lib-dirs=/nix/store/ykykk9gjk2h6za56hzl2d4ys9q6wh15c-libiconv-1.15-wasm32-unknown-unknown-wasm/lib
Using Parsec parser
Configuring primitive-0.6.4.0...
Dependency base -any: using base-4.12.0.0
Dependency ghc-prim -any: using ghc-prim-0.5.2.0
Dependency transformers -any: using transformers-0.5.5.0
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
Source component graph: component lib
Configured component graph:
    component primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7
        include base-4.12.0.0
        include ghc-prim-0.5.2.0
        include transformers-0.5.5.0
Linked component graph:
    unit primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7
        include base-4.12.0.0
        include ghc-prim-0.5.2.0
        include transformers-0.5.5.0
        Control.Monad.Primitive=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Control.Monad.Primitive,Data.Primitive=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive,Data.Primitive.Addr=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.Addr,Data.Primitive.Array=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.Array,Data.Primitive.ByteArray=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.ByteArray,Data.Primitive.MVar=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.MVar,Data.Primitive.MachDeps=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.MachDeps,Data.Primitive.MutVar=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.MutVar,Data.Primitive.PrimArray=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.PrimArray,Data.Primitive.Ptr=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.Ptr,Data.Primitive.SmallArray=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.SmallArray,Data.Primitive.Types=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.Types,Data.Primitive.UnliftedArray=primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7:Data.Primitive.UnliftedArray
Ready component graph:
    definite primitive-0.6.4.0-2YnD1Z7OxvBF6KH7JR7JY7
        depends base-4.12.0.0
        depends ghc-prim-0.5.2.0
        depends transformers-0.5.5.0
Using Cabal-2.1.0.0 compiled by ghc-8.5
Using compiler: ghc-8.5.20180424
Using install prefix:
/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm
Executables installed in:
/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm/bin
Libraries installed in:
/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm/lib/ghc-8.5.20180424/primitive-0.6.4.0
Dynamic Libraries installed in:
/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm/lib/ghc-8.5.20180424/wasm32-unknown-wasm-ghc-8.5.20180424
Private executables installed in:
/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm/libexec/wasm32-unknown-wasm-ghc-8.5.20180424/primitive-0.6.4.0
Data files installed in:
/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm/share/wasm32-unknown-wasm-ghc-8.5.20180424/primitive-0.6.4.0
Documentation installed in:
/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm/share/doc/wasm32-unknown-wasm-ghc-8.5.20180424/primitive-0.6.4.0
Configuration files installed in:
/nix/store/bw7qmsj0r0pw4pi7k2rm8362gh3g6218-primitive-0.6.4.0-wasm32-unknown-unknown-wasm/etc
No alex found
Using ar found on system at:
/nix/store/8da6py0i79w7qhx0zicqyd7icm1kqdq2-llvm-binutils-7.0.0/bin/wasm32-unknown-unknown-wasm-ar
No c2hs found
No cpphs found
No doctest found
Using gcc version 4.2.1 given by user at:
/nix/store/y8ykrnqgq04a9d08niyd8zfcpvi5hgzf-wasm32-unknown-unknown-wasm-clang-cross-wrapper/bin/wasm32-unknown-unknown-wasm-cc
Using ghc version 8.5.20180424 given by user at:
/nix/store/sr37s1m1c1wjlfbw3fbz2m4xy5bnk8d8-wasm32-unknown-unknown-wasm-ghc-8.5.20180424/bin/wasm32-unknown-unknown-wasm-ghc
Using ghc-pkg version 8.5.20180424 given by user at:
/nix/store/sr37s1m1c1wjlfbw3fbz2m4xy5bnk8d8-wasm32-unknown-unknown-wasm-ghc-8.5.20180424/bin/wasm32-unknown-unknown-wasm-ghc-pkg
No ghcjs found
No ghcjs-pkg found
No greencard found
Using haddock version 2.18.2 found on system at:
/nix/store/cvsnpd2jj0395k08vwidfjbqxv64586g-ghc-8.5.20180118/bin/haddock
No happy found
Using haskell-suite found on system at: haskell-suite-dummy-location
Using haskell-suite-pkg found on system at: haskell-suite-pkg-dummy-location
No hmake found
Using hpc version 0.67 found on system at:
/nix/store/cvsnpd2jj0395k08vwidfjbqxv64586g-ghc-8.5.20180118/bin/hpc
Using hsc2hs version 0.68.3 given by user at:
/nix/store/sr37s1m1c1wjlfbw3fbz2m4xy5bnk8d8-wasm32-unknown-unknown-wasm-ghc-8.5.20180424/bin/wasm32-unknown-unknown-wasm-hsc2hs
Using hscolour version 1.24 found on system at:
/nix/store/q0cprnyqwwlfmvqaamd1l4fka2h0xp0k-hscolour-1.24.4/bin/HsColour
No jhc found
Using ld given by user at:
/nix/store/y8ykrnqgq04a9d08niyd8zfcpvi5hgzf-wasm32-unknown-unknown-wasm-clang-cross-wrapper/bin/wasm32-unknown-unknown-wasm-ld
No lhc found
No lhc-pkg found
No pkg-config found
Using runghc version 8.5.20180118 found on system at:
/nix/store/cvsnpd2jj0395k08vwidfjbqxv64586g-ghc-8.5.20180118/bin/runghc
Using strip given by user at:
/nix/store/8da6py0i79w7qhx0zicqyd7icm1kqdq2-llvm-binutils-7.0.0/bin/wasm32-unknown-unknown-wasm-strip
Using tar found on system at:
/nix/store/wpdkxjpwj0yihaixbmamdlzrpw5vn944-gnutar-1.30/bin/tar
No uhc found
@nix { "action": "setPhase", "phase": "buildPhase" }
building
Preprocessing library for primitive-0.6.4.0..
Building library for primitive-0.6.4.0..
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
[ 1 of 15] Compiling Control.Monad.Primitive ( Control/Monad/Primitive.hs, dist/build/Control/Monad/Primitive.o )
clang-7: warning: argument unused during compilation: '-fno-strict-overflow' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
[ 2 of 15] Compiling Data.Primitive.Internal.Compat ( Data/Primitive/Internal/Compat.hs, dist/build/Data/Primitive/Internal/Compat.o )
clang-7: warning: argument unused during compilation: '-fno-strict-overflow' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
[ 3 of 15] Compiling Data.Primitive.Array ( Data/Primitive/Array.hs, dist/build/Data/Primitive/Array.o )
clang-7: warning: argument unused during compilation: '-fno-strict-overflow' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
[ 4 of 15] Compiling Data.Primitive.MVar ( Data/Primitive/MVar.hs, dist/build/Data/Primitive/MVar.o )
clang-7: warning: argument unused during compilation: '-fno-strict-overflow' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
[ 5 of 15] Compiling Data.Primitive.MachDeps ( Data/Primitive/MachDeps.hs, dist/build/Data/Primitive/MachDeps.o )
clang-7: warning: argument unused during compilation: '-fno-strict-overflow' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]
[ 6 of 15] Compiling Data.Primitive.Internal.Operations ( Data/Primitive/Internal/Operations.hs, dist/build/Data/Primitive/Internal/Operations.o )
clang-7: warning: argument unused during compilation: '-fno-strict-overflow' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-nostdlib++' [-Wunused-command-line-argument]
clang-7: warning: argument unused during compilation: '-rtlib=compiler-rt' [-Wunused-command-line-argument]

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:652:15: error:
     error: conflicting types for 'hsprimitive_memset_Word8'
    |
652 | {extern void (hsprimitive_memset_Word8)(void *, I_, W_, I_);
    |               ^
{extern void (hsprimitive_memset_Word8)(void *, I_, W_, I_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:97:15: error:
     note: previous declaration is here
   |
97 | {extern void (hsprimitive_memset_Word8)(void *, I_, W_, W_);
   |               ^
{extern void (hsprimitive_memset_Word8)(void *, I_, W_, W_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:763:15: error:
     error: conflicting types for 'hsprimitive_memset_Word16'
    |
763 | {extern void (hsprimitive_memset_Word16)(void *, I_, W_, I_);
    |               ^
{extern void (hsprimitive_memset_Word16)(void *, I_, W_, I_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:208:15: error:
     note: previous declaration is here
    |
208 | {extern void (hsprimitive_memset_Word16)(void *, I_, W_, W_);
    |               ^
{extern void (hsprimitive_memset_Word16)(void *, I_, W_, W_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:874:15: error:
     error: conflicting types for 'hsprimitive_memset_Word32'
    |
874 | {extern void (hsprimitive_memset_Word32)(void *, I_, W_, I_);
    |               ^
{extern void (hsprimitive_memset_Word32)(void *, I_, W_, I_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:319:15: error:
     note: previous declaration is here
    |
319 | {extern void (hsprimitive_memset_Word32)(void *, I_, W_, W_);
    |               ^
{extern void (hsprimitive_memset_Word32)(void *, I_, W_, W_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:985:15: error:
     error: conflicting types for 'hsprimitive_memset_Word64'
    |
985 | {extern void (hsprimitive_memset_Word64)(void *, I_, W_, StgInt64);
    |               ^
{extern void (hsprimitive_memset_Word64)(void *, I_, W_, StgInt64);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:430:15: error:
     note: previous declaration is here
    |
430 | {extern void (hsprimitive_memset_Word64)(void *, I_, W_, StgWord64);
    |               ^
{extern void (hsprimitive_memset_Word64)(void *, I_, W_, StgWord64);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:1096:15: error:
     error: conflicting types for 'hsprimitive_memset_Word'
     |
1096 | {extern void (hsprimitive_memset_Word)(void *, I_, W_, I_);
     |               ^
{extern void (hsprimitive_memset_Word)(void *, I_, W_, I_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:541:15: error:
     note: previous declaration is here
    |
541 | {extern void (hsprimitive_memset_Word)(void *, I_, W_, W_);
    |               ^
{extern void (hsprimitive_memset_Word)(void *, I_, W_, W_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:2206:15: error:
     error: conflicting types for 'hsprimitive_memset_Word8'
     |
2206 | {extern void (hsprimitive_memset_Word8)(void *, I_, W_, I_);
     |               ^
{extern void (hsprimitive_memset_Word8)(void *, I_, W_, I_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:97:15: error:
     note: previous declaration is here
   |
97 | {extern void (hsprimitive_memset_Word8)(void *, I_, W_, W_);
   |               ^
{extern void (hsprimitive_memset_Word8)(void *, I_, W_, W_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:2317:15: error:
     error: conflicting types for 'hsprimitive_memset_Word16'
     |
2317 | {extern void (hsprimitive_memset_Word16)(void *, I_, W_, I_);
     |               ^
{extern void (hsprimitive_memset_Word16)(void *, I_, W_, I_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:208:15: error:
     note: previous declaration is here
    |
208 | {extern void (hsprimitive_memset_Word16)(void *, I_, W_, W_);
    |               ^
{extern void (hsprimitive_memset_Word16)(void *, I_, W_, W_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:2428:15: error:
     error: conflicting types for 'hsprimitive_memset_Word32'
     |
2428 | {extern void (hsprimitive_memset_Word32)(void *, I_, W_, I_);
     |               ^
{extern void (hsprimitive_memset_Word32)(void *, I_, W_, I_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:319:15: error:
     note: previous declaration is here
    |
319 | {extern void (hsprimitive_memset_Word32)(void *, I_, W_, W_);
    |               ^
{extern void (hsprimitive_memset_Word32)(void *, I_, W_, W_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:2539:15: error:
     error: conflicting types for 'hsprimitive_memset_Word64'
     |
2539 | {extern void (hsprimitive_memset_Word64)(void *, I_, W_, StgInt64);
     |               ^
{extern void (hsprimitive_memset_Word64)(void *, I_, W_, StgInt64);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:430:15: error:
     note: previous declaration is here
    |
430 | {extern void (hsprimitive_memset_Word64)(void *, I_, W_, StgWord64);
    |               ^
{extern void (hsprimitive_memset_Word64)(void *, I_, W_, StgWord64);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:2650:15: error:
     error: conflicting types for 'hsprimitive_memset_Word'
     |
2650 | {extern void (hsprimitive_memset_Word)(void *, I_, W_, I_);
     |               ^
{extern void (hsprimitive_memset_Word)(void *, I_, W_, I_);
              ^

/tmp/nix-build-primitive-0.6.4.0-wasm32-unknown-unknown-wasm.drv-0/ghc128545_0/ghc_46.hc:541:15: error:
     note: previous declaration is here
    |
541 | {extern void (hsprimitive_memset_Word)(void *, I_, W_, W_);
    |               ^
{extern void (hsprimitive_memset_Word)(void *, I_, W_, W_);
              ^
10 errors generated.
`wasm32-unknown-unknown-wasm-cc' failed in phase `C Compiler'. (Exit code: 1)
@ElvishJerricco
Copy link
Member Author

The problem appears to be these four lines.

foreign import ccall unsafe "primitive-memops.h hsprimitive_memset_Word"
  setWordArray# :: MutableByteArray# s -> CPtrdiff -> CSize -> Word# -> IO ()
foreign import ccall unsafe "primitive-memops.h hsprimitive_memset_Word"
  setIntArray# :: MutableByteArray# s -> CPtrdiff -> CSize -> Int# -> IO ()
foreign import ccall unsafe "primitive-memops.h hsprimitive_memset_Word"
  setWordOffAddr# :: Addr# -> CPtrdiff -> CSize -> Word# -> IO ()
foreign import ccall unsafe "primitive-memops.h hsprimitive_memset_Word"
  setIntOffAddr# :: Addr# -> CPtrdiff -> CSize -> Int# -> IO ()

These four foreign imports are importing the same symbol at different types. I could argue that this should break, because the same symbol only ever has one type. But the types do have the same runtime representation, so maybe it should be ok... Regardless, Clang isn't going to like it.

@ElvishJerricco
Copy link
Member Author

I tried to fix this by replacing ccall with capi, but got a GHC panic:

ghc: panic! (the 'impossible' happened)
  (GHC version 8.2.2 for x86_64-unknown-linux):
	toCType
  Word#
  Call stack:
      CallStack (from HasCallStack):
        prettyCurrentCallStack, called at compiler/utils/Outputable.hs:1133:58 in ghc:Outputable
        callStackDoc, called at compiler/utils/Outputable.hs:1137:37 in ghc:Outputable
        pprPanic, called at compiler/deSugar/DsForeign.hs:726:17 in ghc:DsForeign

This panic appears to occur with an official native GHC release, so it's not at all specific to WebGHC.

@ElvishJerricco
Copy link
Member Author

@ElvishJerricco
Copy link
Member Author

ElvishJerricco commented Jul 23, 2018

Fixed in 35a703d, though primitive still needs patching to use capi. Will push such a patch to wasm-cross soon.

ElvishJerricco pushed a commit that referenced this issue Jan 9, 2019
While debugging #15285 I realized that free block lists (free_list in
BlockAlloc.c) get corrupted when multiple scavenge threads allocate and
release blocks concurrently. Here's a picture of one such race:

    Thread 2 (Thread 32573.32601):
    #0  check_tail
        (bd=0x940d40 <stg_TSO_info>) at rts/sm/BlockAlloc.c:860
    #1  0x0000000000928ef7 in checkFreeListSanity
        () at rts/sm/BlockAlloc.c:896
    #2  0x0000000000928979 in freeGroup
        (p=0x7e998ce02880) at rts/sm/BlockAlloc.c:721
    #3  0x0000000000928a17 in freeChain
        (bd=0x7e998ce02880) at rts/sm/BlockAlloc.c:738
    #4  0x0000000000926911 in freeChain_sync
        (bd=0x7e998ce02880) at rts/sm/GCUtils.c:80
    #5  0x0000000000934720 in scavenge_capability_mut_lists
        (cap=0x1acae80) at rts/sm/Scav.c:1665
    #6  0x000000000092b411 in gcWorkerThread
        (cap=0x1acae80) at rts/sm/GC.c:1157
    #7  0x000000000090be9a in yieldCapability
        (pCap=0x7f9994e69e20, task=0x7e9984000b70, gcAllowed=true) at rts/Capability.c:861
    #8  0x0000000000906120 in scheduleYield
        (pcap=0x7f9994e69e50, task=0x7e9984000b70) at rts/Schedule.c:673
    #9  0x0000000000905500 in schedule
        (initialCapability=0x1acae80, task=0x7e9984000b70) at rts/Schedule.c:293
    #10 0x0000000000908d4f in scheduleWorker
        (cap=0x1acae80, task=0x7e9984000b70) at rts/Schedule.c:2554
    #11 0x000000000091a30a in workerStart
        (task=0x7e9984000b70) at rts/Task.c:444
    #12 0x00007f99937fa6db in start_thread
        (arg=0x7f9994e6a700) at pthread_create.c:463
    #13 0x000061654d59f88f in clone
        () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

    Thread 1 (Thread 32573.32573):
    #0  checkFreeListSanity
        () at rts/sm/BlockAlloc.c:887
    #1  0x0000000000928979 in freeGroup
        (p=0x7e998d303540) at rts/sm/BlockAlloc.c:721
    #2  0x0000000000926f23 in todo_block_full
        (size=513, ws=0x1aa8ce0) at rts/sm/GCUtils.c:264
    #3  0x00000000009583b9 in alloc_for_copy
        (size=513, gen_no=0) at rts/sm/Evac.c:80
    #4  0x000000000095850d in copy_tag_nolock
        (p=0x7e998c675f28, info=0x421d98 <Main_Large_con_info>, src=0x7e998d075d80, size=513,
        gen_no=0, tag=1) at rts/sm/Evac.c:153
    #5  0x0000000000959177 in evacuate
        (p=0x7e998c675f28) at rts/sm/Evac.c:715
    #6  0x0000000000932388 in scavenge_small_bitmap
        (p=0x7e998c675f28, size=1, bitmap=0) at rts/sm/Scav.c:271
    #7  0x0000000000934aaf in scavenge_stack
        (p=0x7e998c675f28, stack_end=0x7e998c676000) at rts/sm/Scav.c:1908
    #8  0x0000000000934295 in scavenge_one
        (p=0x7e998c66e000) at rts/sm/Scav.c:1466
    #9  0x0000000000934662 in scavenge_mutable_list
        (bd=0x7e998d300440, gen=0x1b1d880) at rts/sm/Scav.c:1643
    #10 0x0000000000934700 in scavenge_capability_mut_lists
        (cap=0x1aaa340) at rts/sm/Scav.c:1664
    #11 0x00000000009299b6 in GarbageCollect
        (collect_gen=0, do_heap_census=false, gc_type=2, cap=0x1aaa340, idle_cap=0x1b38aa0)
        at rts/sm/GC.c:378
    #12 0x0000000000907a4a in scheduleDoGC
        (pcap=0x7ffdec5b5310, task=0x1b36650, force_major=false) at rts/Schedule.c:1798
    #13 0x0000000000905de7 in schedule
        (initialCapability=0x1aaa340, task=0x1b36650) at rts/Schedule.c:546
    #14 0x0000000000908bc4 in scheduleWaitThread
        (tso=0x7e998c0067c8, ret=0x0, pcap=0x7ffdec5b5430) at rts/Schedule.c:2537
    ghc#15 0x000000000091b5a0 in rts_evalLazyIO
        (cap=0x7ffdec5b5430, p=0x9c11f0, ret=0x0) at rts/RtsAPI.c:530
    ghc#16 0x000000000091ca56 in hs_main
        (argc=1, argv=0x7ffdec5b5628, main_closure=0x9c11f0, rts_config=...) at rts/RtsMain.c:72
    ghc#17 0x0000000000421ea0 in main
        ()

In particular, dbl_link_onto() which is used to add a freed block to a
doubly-linked free list is not thread safe and corrupts the list when
called concurrently.

Note that thread 1 is to blame here as thread 2 is properly taking the
spinlock. With this patch we now take the spinlock when freeing a todo
block in GC, avoiding this race.

Test Plan:
- Tried slow validate locally: this patch does not introduce new failures.
- circleci: https://circleci.com/gh/ghc/ghc-diffs/283 The test got killed
  because it took 5 hours but T7919 (which was previously failing on circleci)
  passed.

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15285

Differential Revision: https://phabricator.haskell.org/D5115

(cherry picked from commit c6fbac6)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant