Convert a delegate to a function (i.e. make a thunk)
David Brown
davidb at davidb.org
Thu Apr 26 20:55:54 PDT 2012
On 2012-04-25, H. S. Teoh <hsteoh at 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", at 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
More information about the Digitalmars-d
mailing list