On 9/23/06, Stephan Walter <[EMAIL PROTECTED]> 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#using-own-main:
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
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe