Cleanup _IO_wfile_seekoff.
[glibc/pb-stable.git] / elf / ifuncmod1.c
bloba1697b596dd718883e3473fb6ab155d6376251d1
1 /* Test STT_GNU_IFUNC symbols:
3 1. Direct function call.
4 2. Function pointer.
5 3. Visibility.
6 */
8 extern int global;
10 static int
11 one (void)
13 return 1;
16 static int
17 minus_one (void)
19 return -1;
22 static int
23 zero (void)
25 return 0;
28 void * foo_ifunc (void) __asm__ ("foo");
29 __asm__(".type foo, %gnu_indirect_function");
31 void *
32 foo_ifunc (void)
34 switch (global)
36 case 1:
37 return one;
38 case -1:
39 return minus_one;
40 default:
41 return zero;
45 void * foo_hidden_ifunc (void) __asm__ ("foo_hidden");
46 __asm__(".type foo_hidden, %gnu_indirect_function");
48 void *
49 foo_hidden_ifunc (void)
51 switch (global)
53 case 1:
54 return minus_one;
55 case -1:
56 return one;
57 default:
58 return zero;
62 void * foo_protected_ifunc (void) __asm__ ("foo_protected");
63 __asm__(".type foo_protected, %gnu_indirect_function");
65 void *
66 foo_protected_ifunc (void)
68 switch (global)
70 case 1:
71 return one;
72 case -1:
73 return zero;
74 default:
75 return minus_one;
79 /* Test hidden indirect function. */
80 __asm__(".hidden foo_hidden");
82 /* Test protected indirect function. */
83 __asm__(".protected foo_protected");
85 extern int foo (void);
86 extern int foo_hidden (void);
87 extern int foo_protected (void);
88 extern int ret_foo;
89 extern int ret_foo_hidden;
90 extern int ret_foo_protected;
92 #define FOO_P
93 typedef int (*foo_p) (void);
95 foo_p
96 get_foo_p (void)
98 ret_foo = foo ();
99 return foo;
102 foo_p
103 get_foo_hidden_p (void)
105 ret_foo_hidden = foo_hidden ();
106 return foo_hidden;
109 foo_p
110 get_foo_protected_p (void)
112 ret_foo_protected = foo_protected ();
113 return foo_protected;