
#8935: Obscure linker bug leads to crash in GHCi -------------------------------------+------------------------------------ Reporter: simonmar | Owner: simonmar Type: bug | Status: infoneeded 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): Adding error handling: {{{ hdl = dlopen(so2, RTLD_LAZY); if (hdl == NULL) { printf("failed to open libpthread: %s\n", dlerror()); return 1; } printf("dlsym(\"libpthread\", \"environ\") = %p\n", dlsym(hdl,"environ")); }}} I get: {{{ &environ = 0x601068, environ = 0x7fffd170d688 dlsym(deflt, "environ") = 0x601068, *dflt_env = 0x7fffd170d688 dlsym("libgmp", "environ") = 0x7fcc61a82fd8 *env = (nil) failed to open libpthread: /usr/lib64/libpthread.so: invalid ELF header }}} `libgmp.so` is not special after all. On openSUSE `libpthread.so` is a linker script. `dlopen()` cannot open it and returns `NULL`. `RTLD_DEFAULT` is defined as `(void *) 0` so `NULL` so dlsym did not fail but return the symbol from the default SO (the program itself). Trying `libpthread.so.0` instead shows the same problem as `libgmp.so`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8935#comment:26 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler