April 27, 2012
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
1 2
Next ›   Last »