| /* Test module for making nonexecutable stacks executable |
| on load of a DSO that requires executable stacks. */ |
| |
| #include <stdbool.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| void callme (void (*callback) (void)); |
| |
| /* This is a function that makes use of executable stack by |
| using a local function trampoline. */ |
| void |
| tryme (void) |
| { |
| bool ok = false; |
| void callback (void) { ok = true; } |
| |
| callme (&callback); |
| |
| if (ok) |
| printf ("DSO called ok (local %p, trampoline %p)\n", &ok, &callback); |
| else |
| abort (); |
| } |
| |
| void |
| callme (void (*callback) (void)) |
| { |
| (*callback) (); |
| } |