Commit | Line | Data |
---|---|---|
08c44e65 L |
1 | #ifdef PROTECTED_CHECK |
2 | #include <features.h> | |
1566ad5d | 3 | #include <stdio.h> |
08c44e65 L |
4 | |
5 | int | |
1566ad5d | 6 | main (void) |
08c44e65 L |
7 | { |
8 | #if defined (__GLIBC__) && (__GLIBC__ > 2 \ | |
9 | || (__GLIBC__ == 2 \ | |
10 | && __GLIBC_MINOR__ >= 2)) | |
11 | puts ("yes"); | |
12 | #else | |
13 | puts ("no"); | |
14 | #endif | |
15 | return 0; | |
16 | } | |
17 | #else | |
6fc49d28 L |
18 | /* This is the main program for the shared library test. */ |
19 | ||
20 | #include <stdio.h> | |
21 | ||
22 | int mainvar = 1; | |
23 | int overriddenvar = 2; | |
24 | extern int shlibvar1; | |
25 | ||
26 | extern int shlib_mainvar (); | |
27 | extern int shlib_overriddenvar (); | |
28 | extern int shlib_shlibvar1 (); | |
29 | extern int shlib_shlibvar2 (); | |
30 | extern int shlib_shlibcall (); | |
31 | extern int shlib_maincall (); | |
32 | extern int shlib_checkfunptr1 (); | |
33 | extern int shlib_checkfunptr2 (); | |
34 | extern int (*shlib_getfunptr1 ()) (); | |
35 | extern int (*shlib_getfunptr2 ()) (); | |
36 | extern int shlib_check (); | |
37 | extern int shlib_shlibcall2 (); | |
6fc49d28 L |
38 | extern int visibility_check (); |
39 | extern int visibility_checkfunptr (); | |
40 | extern void *visibility_funptr (); | |
7cda33a1 L |
41 | extern int visibility_checkvar (); |
42 | extern int visibility_checkvarptr (); | |
43 | extern int visibility_varval (); | |
44 | extern void *visibility_varptr (); | |
45 | ||
46 | #ifdef HIDDEN_WEAK_TEST | |
7cda33a1 L |
47 | #define WEAK_TEST |
48 | #endif | |
49 | ||
50 | #ifdef PROTECTED_WEAK_TEST | |
7cda33a1 L |
51 | #define WEAK_TEST |
52 | #endif | |
53 | ||
1345a0c0 L |
54 | #ifdef PROTECTED_UNDEF_TEST |
55 | #define PROTECTED_TEST | |
56 | #endif | |
57 | ||
7cda33a1 L |
58 | #ifndef WEAK_TEST |
59 | extern int visibility (); | |
60 | extern int visibility_var; | |
61 | #endif | |
6fc49d28 L |
62 | |
63 | #if !defined (HIDDEN_TEST) && defined (PROTECTED_TEST) | |
64 | int | |
65 | visibility () | |
66 | { | |
67 | return 1; | |
68 | } | |
6fc49d28 | 69 | |
e80778cf L |
70 | static int |
71 | main_visibility_check () | |
72 | { | |
73 | return visibility_funptr () != visibility; | |
74 | } | |
7cda33a1 L |
75 | |
76 | int visibility_var = 1; | |
77 | ||
78 | static int | |
79 | main_visibility_checkvar () | |
80 | { | |
81 | return visibility_varval () != visibility_var | |
82 | && visibility_varptr () != &visibility_var; | |
83 | } | |
e80778cf | 84 | #else |
6fc49d28 L |
85 | static int |
86 | main_visibility_check () | |
87 | { | |
7cda33a1 L |
88 | #ifdef WEAK_TEST |
89 | return visibility_funptr () == NULL; | |
90 | #else | |
6fc49d28 | 91 | return visibility_funptr () == visibility; |
7cda33a1 L |
92 | #endif |
93 | } | |
94 | ||
95 | static int | |
96 | main_visibility_checkvar () | |
97 | { | |
98 | #ifdef WEAK_TEST | |
99 | return visibility_varval () == 0 | |
100 | && visibility_varptr () == NULL; | |
101 | #else | |
102 | return visibility_varval () == visibility_var | |
103 | && visibility_varptr () == &visibility_var; | |
104 | #endif | |
6fc49d28 | 105 | } |
e80778cf | 106 | #endif |
6fc49d28 L |
107 | |
108 | /* This function is called by the shared library. */ | |
109 | ||
110 | int | |
111 | main_called () | |
112 | { | |
113 | return 6; | |
114 | } | |
115 | ||
116 | /* This function overrides a function in the shared library. */ | |
117 | ||
118 | int | |
119 | shlib_overriddencall2 () | |
120 | { | |
121 | return 8; | |
122 | } | |
123 | ||
124 | int | |
125 | main () | |
126 | { | |
127 | int (*p) (); | |
128 | ||
129 | printf ("mainvar == %d\n", mainvar); | |
130 | printf ("overriddenvar == %d\n", overriddenvar); | |
131 | printf ("shlibvar1 == %d\n", shlibvar1); | |
132 | #ifndef XCOFF_TEST | |
133 | printf ("shlib_mainvar () == %d\n", shlib_mainvar ()); | |
134 | printf ("shlib_overriddenvar () == %d\n", shlib_overriddenvar ()); | |
135 | #endif | |
136 | printf ("shlib_shlibvar1 () == %d\n", shlib_shlibvar1 ()); | |
137 | printf ("shlib_shlibvar2 () == %d\n", shlib_shlibvar2 ()); | |
138 | printf ("shlib_shlibcall () == %d\n", shlib_shlibcall ()); | |
139 | #ifndef XCOFF_TEST | |
140 | printf ("shlib_shlibcall2 () == %d\n", shlib_shlibcall2 ()); | |
141 | printf ("shlib_maincall () == %d\n", shlib_maincall ()); | |
142 | #endif | |
143 | printf ("main_called () == %d\n", main_called ()); | |
144 | printf ("shlib_checkfunptr1 (shlib_shlibvar1) == %d\n", | |
145 | shlib_checkfunptr1 (shlib_shlibvar1)); | |
146 | #ifndef XCOFF_TEST | |
147 | printf ("shlib_checkfunptr2 (main_called) == %d\n", | |
148 | shlib_checkfunptr2 (main_called)); | |
149 | #endif | |
150 | p = shlib_getfunptr1 (); | |
151 | printf ("shlib_getfunptr1 () "); | |
152 | if (p == shlib_shlibvar1) | |
153 | printf ("=="); | |
154 | else | |
155 | printf ("!="); | |
156 | printf (" shlib_shlibvar1\n"); | |
157 | #ifndef XCOFF_TEST | |
158 | p = shlib_getfunptr2 (); | |
159 | printf ("shlib_getfunptr2 () "); | |
160 | if (p == main_called) | |
161 | printf ("=="); | |
162 | else | |
163 | printf ("!="); | |
164 | printf (" main_called\n"); | |
165 | #endif | |
166 | printf ("shlib_check () == %d\n", shlib_check ()); | |
167 | printf ("visibility_check () == %d\n", visibility_check ()); | |
168 | printf ("visibility_checkfunptr () == %d\n", | |
169 | visibility_checkfunptr ()); | |
170 | printf ("main_visibility_check () == %d\n", main_visibility_check ()); | |
7cda33a1 L |
171 | printf ("visibility_checkvar () == %d\n", visibility_checkvar ()); |
172 | printf ("visibility_checkvarptr () == %d\n", | |
173 | visibility_checkvarptr ()); | |
174 | printf ("main_visibility_checkvar () == %d\n", | |
175 | main_visibility_checkvar ()); | |
6fc49d28 L |
176 | return 0; |
177 | } | |
08c44e65 | 178 | #endif |