| /* Test STT_GNU_IFUNC symbols with dynamic function pointer only.  */ | 
 |  | 
 | #include <stdlib.h> | 
 |  | 
 | extern int foo (void); | 
 | extern int foo_protected (void); | 
 |  | 
 | typedef int (*foo_p) (void); | 
 |  | 
 | extern foo_p __attribute__ ((noinline)) get_foo (void); | 
 | extern foo_p __attribute__ ((noinline)) get_foo_protected (void); | 
 |  | 
 | foo_p | 
 | __attribute__ ((noinline)) | 
 | get_foo (void) | 
 | { | 
 |   return foo; | 
 | } | 
 |  | 
 | foo_p | 
 | __attribute__ ((noinline)) | 
 | get_foo_protected (void) | 
 | { | 
 |   return foo_protected; | 
 | } | 
 |  | 
 | int | 
 | main (void) | 
 | { | 
 |   foo_p p; | 
 |  | 
 |   p = get_foo (); | 
 |   if ((*p) () != -1) | 
 |     abort (); | 
 |  | 
 |   p = get_foo_protected (); | 
 |   if ((*p) () != 0) | 
 |     abort (); | 
 |  | 
 |   return 0; | 
 | } |