1/* Test STT_GNU_IFUNC symbols with dynamic function pointer only. */
2
3#include <stdlib.h>
4
5extern int foo (void);
6extern int foo_protected (void);
7
8typedef int (*foo_p) (void);
9
10foo_p
11__attribute__ ((noinline))
12get_foo (void)
13{
14 return foo;
15}
16
17foo_p
18__attribute__ ((noinline))
19get_foo_protected (void)
20{
21 return foo_protected;
22}
23
24int
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

source code of glibc/elf/ifuncmain5.c