How to access hs_free_fun_ptr from a Visual Studio DLL

Wolfgang Thaller wolfgang.thaller at
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- 

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....



More information about the Glasgow-haskell-users mailing list