Runtime crashes on arm64 (iOS)
I compiled GHC from source (ff84d052) with a few modifications to create a cross-compiler for arm64. This was the configuration:
CC=aarch64-apple-darwin14-clang ./configure --prefix=/usr/local/ghc-ios --target=aarch64-apple-darwin14 --disable-large-address-space --enable-bootstrap-with-devel-snapshot
Here's my "mk/build.mk":
HADDOCK_DOCS=NO
WITH_TERMINFO=NO
DYNAMIC_BY_DEFAULT=NO
DYNAMIC_GHC_PROGRAMS=NO
DYNAMIC_TOO=NO
I used the stage1 compiler to export an arm64 library. The application (which links the library) crashes when run on my device (iOS 10.2.1). The application runs without issue on x86 and arm32. When I initialize with -DS, I get the following error:
internal error: ASSERTION FAILED: file rts/sm/Sanity.c, line 88
(GHC version 8.3.20170408 for aarch64_apple_ios)
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
// SIGABRT at line 182 in RtsMessages.c
To narrow down the offending code, I replaced all my functions with print statements and slowly added the functionality back until I could reproduce the crash. It looks like the crash happens around a call to this function:
foreign export ccall hs_AAPublicKeyAlgorithm :: StablePtr AA.PublicKey -> IO CString
hs_AAPublicKeyAlgorithm :: StablePtr AA.PublicKey -> IO CString
hs_AAPublicKeyAlgorithm = hs_toAlgorithmIdentifier
hs_toAlgorithmIdentifier :: (ToAlgorithm t a, AlgorithmId a) => StablePtr t -> IO CString
hs_toAlgorithmIdentifier ptr = do
algId <- fmap (toAlgorithmId . toAlgorithm) $ deRefStablePtr ptr
newCString algId
Oddly, when I add print statements around this call, I get a EXC_BREAKPOINT instead of a SIGABRT. Here's the output for this case:
****************TEST************
****************TEST************
****************TEST************
****************TEST************
v1K_FZuskg6Bkm-whFvkQ8IzHxnXDSGibCwbqZpM0fk=
here
****************TEST************
here1
here2
I've disabled dead code stripping.