~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/ld/testsuite/ld-elfvsb/main.c

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifdef PROTECTED_CHECK
 
2
#include <features.h>
 
3
#include <stdio.h>
 
4
 
 
5
int
 
6
main (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
 
 
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 ();
 
38
extern int visibility_check ();
 
39
extern int visibility_checkfunptr ();
 
40
extern void *visibility_funptr ();
 
41
extern int visibility_checkvar ();
 
42
extern int visibility_checkvarptr ();
 
43
extern int visibility_varval ();
 
44
extern void *visibility_varptr ();
 
45
extern int shlib_visibility_checkcom ();
 
46
extern int shlib_visibility_checkweak ();
 
47
 
 
48
int shlib_visibility_com = 1;
 
49
 
 
50
int shlib_visibility_var_weak = 1;
 
51
 
 
52
int
 
53
shlib_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
 
71
extern int visibility ();
 
72
extern int visibility_var;
 
73
#endif
 
74
 
 
75
#if !defined (HIDDEN_TEST) && defined (PROTECTED_TEST)
 
76
int
 
77
visibility (void)
 
78
{
 
79
  return 1;
 
80
}
 
81
 
 
82
static int
 
83
main_visibility_check (void)
 
84
{
 
85
  return ((int (*) (void)) visibility_funptr ()) != visibility;
 
86
}
 
87
 
 
88
int visibility_var = 1;
 
89
 
 
90
static int
 
91
main_visibility_checkvar (void)
 
92
{
 
93
  return visibility_varval () != visibility_var
 
94
         && visibility_varptr () != &visibility_var;
 
95
}
 
96
 
 
97
#ifndef PROTECTED_UNDEF_TEST
 
98
int shared_data = 1;
 
99
asm (".protected shared_data");
 
100
 
 
101
int
 
102
shared_func (void)
 
103
{
 
104
  return 1;
 
105
}
 
106
 
 
107
asm (".protected shared_func");
 
108
 
 
109
extern int * shared_data_p ();
 
110
typedef int (*func) ();
 
111
extern func shared_func_p ();
 
112
#endif
 
113
#else
 
114
static int
 
115
main_visibility_check (void)
 
116
{
 
117
#ifdef WEAK_TEST
 
118
  return visibility_funptr () == NULL;
 
119
#else
 
120
  return ((int (*) (void)) visibility_funptr ()) == visibility;
 
121
#endif
 
122
}
 
123
 
 
124
static int
 
125
main_visibility_checkvar (void)
 
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
 
 
139
int
 
140
main_called (void)
 
141
{
 
142
  return 6;
 
143
}
 
144
 
 
145
/* This function overrides a function in the shared library.  */
 
146
 
 
147
int
 
148
shlib_overriddencall2 (void)
 
149
{
 
150
  return 8;
 
151
}
 
152
 
 
153
#ifdef HIDDEN_NORMAL_TEST
 
154
int visibility_com;
 
155
asm (".hidden visibility_com");
 
156
 
 
157
int
 
158
main_visibility_checkcom (void)
 
159
{
 
160
  return visibility_com == 0;
 
161
}
 
162
 
 
163
int
 
164
main_visibility_checkweak (void)
 
165
{
 
166
  return 1;
 
167
}
 
168
#elif defined (HIDDEN_WEAK_TEST)
 
169
int
 
170
main_visibility_checkcom (void)
 
171
{
 
172
  return 1;
 
173
}
 
174
 
 
175
#pragma weak visibility_undef_var_weak
 
176
extern int visibility_undef_var_weak;
 
177
asm (".hidden visibility_undef_var_weak");
 
178
 
 
179
#pragma weak visibility_undef_func_weak
 
180
extern int visibility_undef_func_weak ();
 
181
asm (".hidden visibility_undef_func_weak");
 
182
 
 
183
#pragma weak visibility_var_weak
 
184
extern int visibility_var_weak;
 
185
asm (".hidden visibility_var_weak");
 
186
 
 
187
#pragma weak visibility_func_weak
 
188
extern int visibility_func_weak ();
 
189
asm (".hidden visibility_func_weak");
 
190
 
 
191
int
 
192
main_visibility_checkweak ()
 
193
{
 
194
  return &visibility_undef_var_weak == NULL
 
195
         && &visibility_undef_func_weak == NULL
 
196
         && &visibility_func_weak == NULL
 
197
         && &visibility_var_weak == NULL;
 
198
}
 
199
#elif defined (HIDDEN_UNDEF_TEST)
 
200
extern int visibility_def;
 
201
asm (".hidden visibility_def");
 
202
extern int visibility_func ();
 
203
asm (".hidden visibility_func");
 
204
 
 
205
int
 
206
main_visibility_checkcom (void)
 
207
{
 
208
  return visibility_def == 2;
 
209
}
 
210
 
 
211
int
 
212
main_visibility_checkweak (void)
 
213
{
 
214
  return visibility_func () == 2;
 
215
}
 
216
#else
 
217
int
 
218
main_visibility_checkcom (void)
 
219
{
 
220
  return 1;
 
221
}
 
222
 
 
223
int
 
224
main_visibility_checkweak (void)
 
225
{
 
226
  return 1;
 
227
}
 
228
#endif
 
229
 
 
230
int
 
231
main (void)
 
232
{
 
233
  int (*p) ();
 
234
  int ret = 0;
 
235
 
 
236
  printf ("mainvar == %d\n", mainvar);
 
237
  printf ("overriddenvar == %d\n", overriddenvar);
 
238
  printf ("shlibvar1 == %d\n", shlibvar1);
 
239
#ifndef XCOFF_TEST
 
240
  printf ("shlib_mainvar () == %d\n", shlib_mainvar ());
 
241
  printf ("shlib_overriddenvar () == %d\n", shlib_overriddenvar ());
 
242
#endif
 
243
  printf ("shlib_shlibvar1 () == %d\n", shlib_shlibvar1 ());
 
244
  printf ("shlib_shlibvar2 () == %d\n", shlib_shlibvar2 ());
 
245
  printf ("shlib_shlibcall () == %d\n", shlib_shlibcall ());
 
246
#ifndef XCOFF_TEST
 
247
  printf ("shlib_shlibcall2 () == %d\n", shlib_shlibcall2 ());
 
248
  printf ("shlib_maincall () == %d\n", shlib_maincall ());
 
249
#endif
 
250
  printf ("main_called () == %d\n", main_called ());
 
251
  printf ("shlib_checkfunptr1 (shlib_shlibvar1) == %d\n",
 
252
          shlib_checkfunptr1 (shlib_shlibvar1));
 
253
#ifndef XCOFF_TEST
 
254
  printf ("shlib_checkfunptr2 (main_called) == %d\n",
 
255
          shlib_checkfunptr2 (main_called));
 
256
#endif
 
257
  p = shlib_getfunptr1 ();
 
258
  printf ("shlib_getfunptr1 () ");
 
259
  if (p == shlib_shlibvar1)
 
260
    printf ("==");
 
261
  else
 
262
    printf ("!=");
 
263
  printf (" shlib_shlibvar1\n");
 
264
#ifndef XCOFF_TEST
 
265
  p = shlib_getfunptr2 ();
 
266
  printf ("shlib_getfunptr2 () ");
 
267
  if (p == main_called)
 
268
    printf ("==");
 
269
  else
 
270
    printf ("!=");
 
271
  printf (" main_called\n");
 
272
#endif
 
273
  printf ("shlib_check () == %d\n", shlib_check ());
 
274
  printf ("visibility_check () == %d\n", visibility_check ());
 
275
  printf ("visibility_checkfunptr () == %d\n",
 
276
          visibility_checkfunptr ());
 
277
  printf ("main_visibility_check () == %d\n", main_visibility_check ());
 
278
  printf ("visibility_checkvar () == %d\n", visibility_checkvar ());
 
279
  printf ("visibility_checkvarptr () == %d\n",
 
280
          visibility_checkvarptr ());
 
281
  printf ("main_visibility_checkvar () == %d\n",
 
282
          main_visibility_checkvar ());
 
283
  printf ("main_visibility_checkcom () == %d\n",
 
284
          main_visibility_checkcom ());
 
285
  printf ("shlib_visibility_checkcom () == %d\n",
 
286
          shlib_visibility_checkcom ());
 
287
  printf ("main_visibility_checkweak () == %d\n",
 
288
          main_visibility_checkweak ());
 
289
  printf ("shlib_visibility_checkweak () == %d\n",
 
290
          shlib_visibility_checkweak ());
 
291
 
 
292
#if !defined (PROTECTED_UNDEF_TEST) && defined (PROTECTED_TEST)
 
293
  if (&shared_data != shared_data_p ())
 
294
    ret = 1;
 
295
  p = shared_func_p ();
 
296
  if (shared_func != p)
 
297
    ret = 1;
 
298
  if (shared_data != *shared_data_p ())
 
299
    ret = 1;
 
300
  if (shared_func () != (*p) () )
 
301
    ret = 1;
 
302
#endif
 
303
 
 
304
  return ret;
 
305
}
 
306
#endif