April 27, 2012 Re: Convert a delegate to a function (i.e. make a thunk) | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | On 2012-04-25, H. S. Teoh <hsteoh@quickfur.ath.cx> wrote:
> This is like GCC's implementation of nested function pointers using trampolines:
>
> http://gcc.gnu.org/onlinedocs/gccint/Trampolines.html
>
> These nested function pointers have access to their containing lexical scope, even though they are just regular, non-fat pointers.
>
> Something similar can be used here, though for full-fledged D delegates the trampoline would need to be in executable heap memory. I believe nowadays heap memory is non-executable due to security concerns with heap overflow exploits, right? So this may require special treatment.
Gcc (at least on Linux) does a few things. The trampoline is on
the stack, but the generated code:
- Creates a special section
.section .note.GNU-stack,"x",@progbits
in the assembly that indicates to the linker that the resulting
elf file needs to allow the stack to be executable.
- Depending on the CPU, it may call a libgcc function
__clear_cache. x86 is coherent, so this isn't needed, but it is
in the general case.
David
|
Copyright © 1999-2021 by the D Language Foundation