[MLton] Re: MLton and shared libraries
Jens Axel Søgaard
jensaxel@soegaard.net
Sat, 23 Apr 2005 14:02:37 +0200
Stephen Weeks wrote:
> Part of the problem is that the trampoline isn't checking for the code
> returning to C. You should be using a trampoline like that in
> MLton_callFromC, which is different than the one in main.
>
> returnToC = FALSE; \
> do { \
> cont=(*(struct cont(*)(void))cont.nextChunk)(); \
> } while (not returnToC); \
Check.
>>Both programs, when from within gdb, produces the same output, and gdb writes
>>
>> Program exited normally.
>>
>>at the end.
>>
>>What troubles me is that MAIN2 is not displayed.
>
>
> It makes perfect sense that you would not see MAIN2 with the program
> compiled normally, since the suffix calls exit. With -shared-library
> true, I don't understand what's going on. You didn't even see
>
> init_function> trampoline 2
>
> which makes it look like Thread_ReturnToC isn't being executed.
Oops. I got bitten by "don't edit source files in the build directory"
combined with "gmake nj-mlton" announcing that mlton was build successfully
even though smlnj had complained earlier (I overlooked the errors from
smlnj).
Now the non-shared library version of works as expected.
And just now, I figured out why the garbage collector wasn't initialized.
Setting a break point at GC_init reveals that init_function is calling
MzScheme's GC_init in stead of the MLton one. No wonder I got a core dump.
The solution must be to rereread the man pages for ld and dlopen.
--
Jens Axel Søgaard