On Tue, Nov 13, 2007 at 03:22:33PM +0100, Franck Bui-Huu wrote: > > > And the stack wouldn't need to have exec permission anymore. > > > > Oh? > > > > extern void frob(void (*)(void)); > > > > int foo(void) > > { > > int x; > > > > void bar(void) > > { > > x++; > > } > > > > frob(&bar); > > print("x is %d\n", x); > > } > > > > Compile and enjoy. > > > > Sorry Ralf, I missed your point. This piece of code compiles to something that copies a trampoline to the stack. The address of that trampoline is what is then passed as argument to frob(). Old versions of glibc were probable the most notorious users of trampolines. Objective C also generates them. Since a cacheflush that is a syscall is required performance is less than great. Which means the libc() cacheflush() function is another candidate for a vDSO, it can be optimized by using SYNCI on some configurations. Ralf