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