gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gold / testsuite / ifuncmod1.c
CommitLineData
7223e9ca
ILT
1/* Test STT_GNU_IFUNC symbols:
2
3 1. Direct function call.
4 2. Function pointer.
5 3. Visibility.
6 */
7#include "ifunc-sel.h"
8
cd78ea77 9int global __attribute__ ((visibility ("hidden"))) = -1;
7223e9ca
ILT
10
11static int
12one (void)
13{
14 return 1;
15}
16
17static int
18minus_one (void)
19{
20 return -1;
21}
22
23static int
24zero (void)
25{
26 return 0;
27}
28
29void * foo_ifunc (void) __asm__ ("foo");
30__asm__(".type foo, %gnu_indirect_function");
31
32void *
33foo_ifunc (void)
34{
35 return ifunc_sel (one, minus_one, zero);
36}
37
38void * foo_hidden_ifunc (void) __asm__ ("foo_hidden");
39__asm__(".type foo_hidden, %gnu_indirect_function");
40
41void *
42foo_hidden_ifunc (void)
43{
44 return ifunc_sel (minus_one, one, zero);
45}
46
47void * foo_protected_ifunc (void) __asm__ ("foo_protected");
48__asm__(".type foo_protected, %gnu_indirect_function");
49
50void *
51foo_protected_ifunc (void)
52{
53 return ifunc_sel (one, zero, minus_one);
54}
55
56/* Test hidden indirect function. */
57__asm__(".hidden foo_hidden");
58
59/* Test protected indirect function. */
60__asm__(".protected foo_protected");
61
62extern int foo (void);
63extern int foo_hidden (void);
64extern int foo_protected (void);
65extern int ret_foo;
66extern int ret_foo_hidden;
67extern int ret_foo_protected;
68
69#define FOO_P
70typedef int (*foo_p) (void);
71
72extern foo_p get_foo_p (void);
73extern foo_p get_foo_hidden_p (void);
74extern foo_p get_foo_protected_p (void);
75
76foo_p
77get_foo_p (void)
78{
79 ret_foo = foo ();
80 return foo;
81}
82
83foo_p
84get_foo_hidden_p (void)
85{
86 ret_foo_hidden = foo_hidden ();
87 return foo_hidden;
88}
89
90foo_p
91get_foo_protected_p (void)
92{
93 ret_foo_protected = foo_protected ();
94 return foo_protected;
95}
This page took 0.421258 seconds and 4 git commands to generate.