On 07/01/2014 16:14, Herbert Valerio Riedel wrote:
Hello Simon,
On 2014-01-07 at 17:04:52 +0100, Simon Marlow wrote:
[...]
Yes, this is technically wrong but luckily works.
...but only as long as the code-generator doesn't try to push something
on the stack, like e.g. when performing native 'call's which need to
push the return-location on the stack...?
Right - in principle the code generator is in control of the stack so it
can move the stack pointer whenever it likes, but in practice we know it
only does this in certain places, like when making native calls, so
these naughty functions just avoid doing that.
I'd very much like
to have a better solution, preferably one that doesn't add any extra
overhead.
I see... I've noticed there's a 'push() { ... }' construct that allows
to push items on the stack; couldn't we have generalized version of
that, taking a size-argument, declaring that specified amount of
stack-space is user-allocated/controlled within the '{ ... }' scope?
We could push a stack frame, like we do for an update frame, but the
problem is that we need a way to take the address of those stack
locations. Taking the address of stack locations is also dodgy, because
stacks move (say, during a native call). So it would still be unsafe.
Also pushing a stack frame would incur an extra memory write for the
info pointer, which is annoying.
Cheers,
Simon
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs