source: trunk/binutils/ld/testsuite/ld-elfvsb/main.c

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 5.6 KB
Line 
1#ifdef PROTECTED_CHECK
2#include <features.h>
3#include <stdio.h>
4
5int
6main (void)
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
18/* This is the main program for the shared library test. */
19
20#include <stdio.h>
21
22int mainvar = 1;
23int overriddenvar = 2;
24extern int shlibvar1;
25
26extern int shlib_mainvar ();
27extern int shlib_overriddenvar ();
28extern int shlib_shlibvar1 ();
29extern int shlib_shlibvar2 ();
30extern int shlib_shlibcall ();
31extern int shlib_maincall ();
32extern int shlib_checkfunptr1 ();
33extern int shlib_checkfunptr2 ();
34extern int (*shlib_getfunptr1 ()) ();
35extern int (*shlib_getfunptr2 ()) ();
36extern int shlib_check ();
37extern int shlib_shlibcall2 ();
38extern int visibility_check ();
39extern int visibility_checkfunptr ();
40extern void *visibility_funptr ();
41extern int visibility_checkvar ();
42extern int visibility_checkvarptr ();
43extern int visibility_varval ();
44extern void *visibility_varptr ();
45extern int shlib_visibility_checkcom ();
46extern int shlib_visibility_checkweak ();
47
48int shlib_visibility_com = 1;
49
50int shlib_visibility_var_weak = 1;
51
52int
53shlib_visibility_func_weak ()
54{
55 return 1;
56}
57
58#ifdef HIDDEN_WEAK_TEST
59#define WEAK_TEST
60#endif
61
62#ifdef PROTECTED_WEAK_TEST
63#define WEAK_TEST
64#endif
65
66#ifdef PROTECTED_UNDEF_TEST
67#define PROTECTED_TEST
68#endif
69
70#ifndef WEAK_TEST
71extern int visibility ();
72extern int visibility_var;
73#endif
74
75#if !defined (HIDDEN_TEST) && defined (PROTECTED_TEST)
76int
77visibility ()
78{
79 return 1;
80}
81
82static int
83main_visibility_check ()
84{
85 return visibility_funptr () != visibility;
86}
87
88int visibility_var = 1;
89
90static int
91main_visibility_checkvar ()
92{
93 return visibility_varval () != visibility_var
94 && visibility_varptr () != &visibility_var;
95}
96
97#ifndef PROTECTED_UNDEF_TEST
98int shared_data = 1;
99asm (".protected shared_data");
100
101int
102shared_func ()
103{
104 return 1;
105}
106
107asm (".protected shared_func");
108
109extern int * shared_data_p ();
110typedef int (*func) ();
111extern func shared_func_p ();
112#endif
113#else
114static int
115main_visibility_check ()
116{
117#ifdef WEAK_TEST
118 return visibility_funptr () == NULL;
119#else
120 return visibility_funptr () == visibility;
121#endif
122}
123
124static int
125main_visibility_checkvar ()
126{
127#ifdef WEAK_TEST
128 return visibility_varval () == 0
129 && visibility_varptr () == NULL;
130#else
131 return visibility_varval () == visibility_var
132 && visibility_varptr () == &visibility_var;
133#endif
134}
135#endif
136
137/* This function is called by the shared library. */
138
139int
140main_called ()
141{
142 return 6;
143}
144
145/* This function overrides a function in the shared library. */
146
147int
148shlib_overriddencall2 ()
149{
150 return 8;
151}
152
153#ifdef HIDDEN_NORMAL_TEST
154int visibility_com;
155asm (".hidden visibility_com");
156
157int
158main_visibility_checkcom ()
159{
160 return visibility_com == 0;
161}
162
163int
164main_visibility_checkweak ()
165{
166 return 1;
167}
168#elif defined (HIDDEN_UNDEF_TEST)
169extern int visibility_def;
170asm (".hidden visibility_def");
171extern int visibility_func ();
172asm (".hidden visibility_func");
173
174int
175main_visibility_checkcom ()
176{
177 return &visibility_def != NULL;
178}
179
180int
181main_visibility_checkweak ()
182{
183 return &visibility_func != NULL;
184}
185#else
186int
187main_visibility_checkcom ()
188{
189 return 1;
190}
191
192int
193main_visibility_checkweak ()
194{
195 return 1;
196}
197#endif
198
199int
200main ()
201{
202 int (*p) ();
203 int ret = 0;
204
205 printf ("mainvar == %d\n", mainvar);
206 printf ("overriddenvar == %d\n", overriddenvar);
207 printf ("shlibvar1 == %d\n", shlibvar1);
208#ifndef XCOFF_TEST
209 printf ("shlib_mainvar () == %d\n", shlib_mainvar ());
210 printf ("shlib_overriddenvar () == %d\n", shlib_overriddenvar ());
211#endif
212 printf ("shlib_shlibvar1 () == %d\n", shlib_shlibvar1 ());
213 printf ("shlib_shlibvar2 () == %d\n", shlib_shlibvar2 ());
214 printf ("shlib_shlibcall () == %d\n", shlib_shlibcall ());
215#ifndef XCOFF_TEST
216 printf ("shlib_shlibcall2 () == %d\n", shlib_shlibcall2 ());
217 printf ("shlib_maincall () == %d\n", shlib_maincall ());
218#endif
219 printf ("main_called () == %d\n", main_called ());
220 printf ("shlib_checkfunptr1 (shlib_shlibvar1) == %d\n",
221 shlib_checkfunptr1 (shlib_shlibvar1));
222#ifndef XCOFF_TEST
223 printf ("shlib_checkfunptr2 (main_called) == %d\n",
224 shlib_checkfunptr2 (main_called));
225#endif
226 p = shlib_getfunptr1 ();
227 printf ("shlib_getfunptr1 () ");
228 if (p == shlib_shlibvar1)
229 printf ("==");
230 else
231 printf ("!=");
232 printf (" shlib_shlibvar1\n");
233#ifndef XCOFF_TEST
234 p = shlib_getfunptr2 ();
235 printf ("shlib_getfunptr2 () ");
236 if (p == main_called)
237 printf ("==");
238 else
239 printf ("!=");
240 printf (" main_called\n");
241#endif
242 printf ("shlib_check () == %d\n", shlib_check ());
243 printf ("visibility_check () == %d\n", visibility_check ());
244 printf ("visibility_checkfunptr () == %d\n",
245 visibility_checkfunptr ());
246 printf ("main_visibility_check () == %d\n", main_visibility_check ());
247 printf ("visibility_checkvar () == %d\n", visibility_checkvar ());
248 printf ("visibility_checkvarptr () == %d\n",
249 visibility_checkvarptr ());
250 printf ("main_visibility_checkvar () == %d\n",
251 main_visibility_checkvar ());
252 printf ("main_visibility_checkcom () == %d\n",
253 main_visibility_checkcom ());
254 printf ("shlib_visibility_checkcom () == %d\n",
255 shlib_visibility_checkcom ());
256 printf ("main_visibility_checkweak () == %d\n",
257 main_visibility_checkweak ());
258 printf ("shlib_visibility_checkweak () == %d\n",
259 shlib_visibility_checkweak ());
260
261#if !defined (PROTECTED_UNDEF_TEST) && defined (PROTECTED_TEST)
262 if (&shared_data != shared_data_p ())
263 ret = 1;
264 p = shared_func_p ();
265 if (shared_func != p)
266 ret = 1;
267 if (shared_data != *shared_data_p ())
268 ret = 1;
269 if (shared_func () != (*p) () )
270 ret = 1;
271#endif
272
273 return ret;
274}
275#endif
Note: See TracBrowser for help on using the repository browser.