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