Commit | Line | Data |
---|---|---|
7223e9ca ILT |
1 | /* Test STT_GNU_IFUNC symbols with dynamic function pointer only. */ |
2 | ||
3 | #include <stdlib.h> | |
4 | ||
5 | extern int foo (void); | |
6 | extern int foo_protected (void); | |
7 | ||
8 | typedef int (*foo_p) (void); | |
9 | ||
10 | extern foo_p __attribute__ ((noinline)) get_foo (void); | |
11 | extern foo_p __attribute__ ((noinline)) get_foo_protected (void); | |
12 | ||
13 | foo_p | |
14 | __attribute__ ((noinline)) | |
15 | get_foo (void) | |
16 | { | |
17 | return foo; | |
18 | } | |
19 | ||
20 | foo_p | |
21 | __attribute__ ((noinline)) | |
22 | get_foo_protected (void) | |
23 | { | |
24 | return foo_protected; | |
25 | } | |
26 | ||
27 | int | |
28 | main (void) | |
29 | { | |
30 | foo_p p; | |
31 | ||
32 | p = get_foo (); | |
33 | if ((*p) () != -1) | |
34 | abort (); | |
35 | ||
36 | p = get_foo_protected (); | |
37 | if ((*p) () != 0) | |
38 | abort (); | |
39 | ||
40 | return 0; | |
41 | } |