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 foo_p
11 __attribute__ ((noinline))
get_foo(void)12 get_foo (void)
13 {
14   return foo;
15 }
16 
17 foo_p
18 __attribute__ ((noinline))
get_foo_protected(void)19 get_foo_protected (void)
20 {
21   return foo_protected;
22 }
23 
24 int
main(void)25 main (void)
26 {
27   foo_p p;
28 
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 }
39