On 9/23/06, Stephan Walter <news@stephan.walter.name> wrote:
I'm trying to use a shared lib written in Haskell to overload C functions via LD_PRELOAD. [snip] This aborts with a segfault in scheduleWaitThread() from ./libtestffi.so
The test program doesn't use threads, so I'm wondering what I did wrong?
From http://www.haskell.org/ghc/docs/latest/html/users_guide/sec-ffi-ghc.html#usi...: The call to hs_init() initializes GHC's runtime system. Do NOT try to invoke any Haskell functions before calling hs_init(): strange things will undoubtedly happen.
If you are using gcc you can add something like this when linking libtestffi.so: #include <HsFFI.h> extern void __stginit_Socks(void); static void __attribute__ ((constructor)) my_init(void) { int argc = 1; char *argv[] = {"Haskell shared object"}; char **argvp = argv; hs_init(&argc, &argvp); hs_add_root(__stginit_Socks); } static void __attribute__ ((destructor)) my_fini(void) { hs_exit(); } -- Tolik