diff options
Diffstat (limited to 'REORG.TODO/elf/ifuncmain5.c')
-rw-r--r-- | REORG.TODO/elf/ifuncmain5.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/REORG.TODO/elf/ifuncmain5.c b/REORG.TODO/elf/ifuncmain5.c new file mode 100644 index 0000000000..f398085cb4 --- /dev/null +++ b/REORG.TODO/elf/ifuncmain5.c @@ -0,0 +1,38 @@ +/* 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); + +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; +} |