1 | /* Test program for making nonexecutable stacks executable |
2 | on DT_NEEDED load of a DSO that requires executable stacks. */ |
3 | |
4 | #include <dlfcn.h> |
5 | #include <stdio.h> |
6 | #include <string.h> |
7 | #include <unistd.h> |
8 | #include <error.h> |
9 | |
10 | extern void tryme (void); /* from tst-execstack-mod.so */ |
11 | |
12 | static void deeper (void (*f) (void)); |
13 | |
14 | static int |
15 | do_test (void) |
16 | { |
17 | tryme (); |
18 | |
19 | /* Test that growing the stack region gets new executable pages too. */ |
20 | deeper (f: &tryme); |
21 | |
22 | return 0; |
23 | } |
24 | |
25 | static void |
26 | deeper (void (*f) (void)) |
27 | { |
28 | char stack[1100 * 1024]; |
29 | explicit_bzero (s: stack, n: sizeof stack); |
30 | (*f) (); |
31 | memfrob (s: stack, n: sizeof stack); |
32 | } |
33 | |
34 | #include <support/test-driver.c> |
35 | |