gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gold / testsuite / ifuncmain1vis.c
1 /* Test STT_GNU_IFUNC symbols:
2
3 1. Direct function call.
4 2. Function pointer.
5 3. Visibility with override.
6 */
7
8 #include <stdlib.h>
9
10 int __attribute__ ((noinline)) foo_hidden (void);
11
12 int ret_foo;
13 int ret_foo_hidden;
14 int ret_foo_protected;
15
16 extern int foo (void);
17 extern int foo_protected (void);
18
19 #ifndef FOO_P
20 typedef int (*foo_p) (void);
21 #endif
22
23 foo_p foo_ptr = foo;
24 foo_p foo_procted_ptr = foo_protected;
25
26 extern foo_p get_foo_p (void);
27 extern foo_p get_foo_hidden_p (void);
28 extern foo_p get_foo_protected_p (void);
29
30 int
31 __attribute__ ((noinline))
32 foo (void)
33 {
34 return -30;
35 }
36
37 int
38 __attribute__ ((noinline))
39 foo_hidden (void)
40 {
41 return -20;
42 }
43
44 int
45 __attribute__ ((noinline))
46 foo_protected (void)
47 {
48 return -40;
49 }
50
51 int
52 main (void)
53 {
54 foo_p p;
55
56 if (foo_ptr != foo)
57 abort ();
58 if ((*foo_ptr) () != -30)
59 abort ();
60
61 if (foo_procted_ptr != foo_protected)
62 abort ();
63 if ((*foo_procted_ptr) () != -40)
64 abort ();
65
66 p = get_foo_p ();
67 if (p != foo)
68 abort ();
69 if (foo () != -30)
70 abort ();
71 if (ret_foo != -30 || (*p) () != ret_foo)
72 abort ();
73
74 p = get_foo_hidden_p ();
75 if (foo_hidden () != -20)
76 abort ();
77 if (ret_foo_hidden != 1 || (*p) () != ret_foo_hidden)
78 abort ();
79
80 p = get_foo_protected_p ();
81 if (p == foo_protected)
82 abort ();
83 if (foo_protected () != -40)
84 abort ();
85 if (ret_foo_protected != 0 || (*p) () != ret_foo_protected)
86 abort ();
87
88 return 0;
89 }
This page took 0.032055 seconds and 4 git commands to generate.