How to access hs_free_fun_ptr from a Visual Studio DLL
Wolfgang Thaller
wolfgang.thaller at gmx.net
Tue Mar 28 12:54:37 EST 2006
> Even as the author of some parts of Adjustor.c and some parts of
> Hugs' FFI
> implementation I have to admit that it isn't clear to me at all if
> tail-calls
> are used everywhere. %-)
Hugs uses tail-jumps or static return code on all supported
platforms, GHC on all platforms except IA64.
> And even if this is currently the case: Can we
> really guarantee this for all eternity for every strange ABI people
> will come
> up with? I'm not so sure about this, therefore I'd recommend against
> "self-destruction", as handy as it admittedly is. I'd be happy to be
> convinced of the opposite...
You'd be happy? OK, I'll try.
I think it will be possible for all ABIs. Tearing down the stack
frame or whatever needs to be done on the way out can always be done
by a piece of static code; even if some "dynamic" information (like,
for example, the size of the stack frame) is needed, this information
can be stored in the stack frame or in a register by the function
that sets up the stack frame.
Or if you want to look at it differently:
1.) We can generate a thunk that will tail-call to a static piece of
code and pass an additional constant argument to that static piece of
code, with a custom calling convention.
2.) We can dynamically generate a call to the stub function.
If those two axioms are fulfilled for a platform, we can support self-
destruction.
2 will definitely be supported (otherwise NO interpreters with FFI
would work on that platform), and I can't imagine how a platform can
NOT support 1....
Grüße,
Wolfgang
More information about the Glasgow-haskell-users
mailing list