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