/* 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; } |