
#8935: Obscure linker bug leads to crash in GHCi -------------------------------------+------------------------------------ Reporter: simonmar | Owner: trommler Type: bug | Status: patch Priority: high | Milestone: 7.8.3 Component: Runtime System | Version: 7.8.1-rc2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: GHCi crash | Difficulty: Rocket Science Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Comment (by trommler): Replying to [comment:41 simonmar]:
@trommler, giving you the ticket. Thanks!
Thinking about it, I'm less sure that `RTLD_LOCAL` will work now, because it won't allow us to load new libraries that depend on libraries we've previously loaded, and we definitely need to be able to do that. For libraries (SOs) coming from installed packages everything should be fine. The have a `NEEDED` tag for all dependencies and the system linker will `dlopen()` them and resolve the symbols.
So for new libraries temporary SOs need to be produced the same way SOs in packages are, with `NEEDED` tags for all previously loaded libraries. The new library could potentially depend on all previously loaded libraries. I am thinking of something along the lines of: {{{ ld -shared temp.o ... < -l for each library loaded so far > }}} Perhaps we could remove libraries from the list that are not needed by the new library by using `--as-needed` but I want to check first if this flag is GNU ld specific. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8935#comment:42 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler