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 307