
#8935: Obscure linker bug leads to crash in GHCi -------------------------------------+------------------------------------ Reporter: simonmar | Owner: simonmar 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 dagit): Great and thanks for the examples! By the way, weak not making a difference is the other half of the point I wanted to make :) I'm glad we're on the same page. I feel like I've learned something useful that I can use elsewhere. You might also look at `RTLD_DEEPBIND` for doing the initial symbol match up (when you use `RTLD_LOCAL`). I can't be certain, but I think it may help when reloading a shared object (presumably with new definitions inside). As far as I can tell, that option was added specifically for uses like this (I found some mailing list threads about it). I suspect the point with that option is that it allows consistent behavior even if something you don't have control over passes `RTLD_GLOBAL` to `dlopen`. My prediction is that if you switch to using `RTLD_LOCAL`, then you won't need `RTLD_DEEPBIND` in 99% of cases. Also, I played with `RTLD_NEXT`, to see if I could locate the last symbol loaded, but I couldn't figure out when I had reached the end and I also wasn't able to lookup the symbol in the executable that way. I wish I understood what they mean by next. Thanks! -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8935#comment:38 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler