Static Executable + GHC API (+ Dynamic Linking?) gives Segfault
I am getting segfaults when a statically linked executable uses a GHC API.
When the same executable is however dynamically linked it runs without error.
In case of the statically-linked version, I think that one of GHC API functions that tries to do dynamic-linking is causing the segfault.
The reason why I think this, is because the segfault shows up when Template-Haskell is used, or when {-# ANN ... #-} annotations are used.
An example of this strange behaviour can be shown using haddock, and running it on the source-code for the lens library [1]:
~/Documents/devel/lens/src (master *)$ haddock -v3 Control/Lens/Internal/ByteString.hs
Creating interfaces...
Haddock coverage:
Checking module Control.Lens.Internal.Setter...
Creating interface...
100% ( 3 / 3) in 'Control.Lens.Internal.Setter'
<MORE LOG MESSAGE>
Checking module Control.Lens.Reified...
Creating interface...
100% ( 20 / 20) in 'Control.Lens.Reified'
Checking module Control.Lens.Setter...
Bus error: 10 <-- SEGFAULT
And the GDB output:
(gdb) run -v3 Control/Lens/Internal/ByteString.hs
Starting program: /Users/christiaan/.ghc-config/cabal/7.7.20130924/bin/haddock -v3 Control/Lens/Internal/ByteString.hs
Reading symbols for shared libraries +++.............................. done
Creating interfaces...
Haddock coverage:
Checking module Control.Lens.Internal.Setter...
Creating interface...
100% ( 3 / 3) in 'Control.Lens.Internal.Setter'
<MORE LOG MESSAGES>
Checking module Control.Lens.Reified...
Creating interface...
100% ( 20 / 20) in 'Control.Lens.Reified'
Checking module Control.Lens.Setter...
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x000000010828b982
0x000000010828b982 in ?? ()
I should note that until now I've been unable to produce a small test case that shows the above behaviour. The statically linked haddock actually runs successfully on many packages. The lens[1] package is the first widely used library that I've been able to get haddock to exhibit the above behaviour.
Also, when I built a dynamically-linked version of haddock, it runs succesfully for the above test-case (and the other test-cases where the statically-linked version would give a segfault).
The source-code for lens[1] contains many {-# ANN ... #-} annotations; removing all those annotations make the statically-linked version of haddock run successfully, with out segfaults.
Halfway through removing the {-# ANN ... #-} annotation, I also encountered the following error:
Checking module Control.Lens.Fold...
haddock: internal error: ARR_WORDS object entered!
(GHC version 7.7.20130924 for x86_64_apple_darwin)
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
Abort trap: 6
I've also encountered the segfault while running the statically-linked haddock on my own clash library [2]. In this case I think it might have something to do with the use of template-haskell. Again, running the dynamically-linked version of haddock does not show any problems.
Here is some extra information about my development environment:[[BR]]
OS: OS X 10.8.5[[BR]]
X-Code: XCode CL-Tools 4.6.2[[BR]]
GHC: GHC-HEAD (commit 94ab5d29)[[BR]]
Output of make show VALUE=GhcLibWays: v dyn[[BR]]
build.mk:
SRC_HC_OPTS = -O -H64m
GhcStage1HcOpts = -O -fasm
GhcStage2HcOpts = -O2 -fasm
GhcHcOpts = -Rghc-timing
GhcLibHcOpts = -O2
HADDOCK_DOCS = NO
I create statically-linked binaries by setting executable-dynamic in .cabal/config to False[[BR]]
I create dynamically-linked binaries by setting executable-dynamic in .cabal/config to True[[BR]]
I created the haddock executables by running cabal install in "up-to-date build tree of GHC"/utils/haddock
[1] https://github.com/ekmett/lens[[BR]] [2] http://hackage.haskell.org/package/clash-lib
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.7 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |