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 (void) 78{ 79 return 1; 80} 81 82static int 83main_visibility_check (void) 84{ 85 return ((int (*) (void)) visibility_funptr ()) != visibility; 86} 87 88int visibility_var = 1; 89 90static int 91main_visibility_checkvar (void) 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 (void) 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 (void) 116{ 117#ifdef WEAK_TEST 118 return visibility_funptr () == NULL; 119#else 120 return ((int (*) (void)) visibility_funptr ()) == visibility; 121#endif 122} 123 124static int 125main_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 139int 140main_called (void) 141{ 142 return 6; 143} 144 145/* This function overrides a function in the shared library. */ 146 147int 148shlib_overriddencall2 (void) 149{ 150 return 8; 151} 152 153#ifdef HIDDEN_NORMAL_TEST 154int visibility_com; 155asm (".hidden visibility_com"); 156 157int 158main_visibility_checkcom (void) 159{ 160 return visibility_com == 0; 161} 162 163int 164main_visibility_checkweak (void) 165{ 166 return 1; 167} 168#elif defined (HIDDEN_WEAK_TEST) 169int 170main_visibility_checkcom (void) 171{ 172 return 1; 173} 174 175#pragma weak visibility_undef_var_weak 176extern int visibility_undef_var_weak; 177asm (".hidden visibility_undef_var_weak"); 178 179#pragma weak visibility_undef_func_weak 180extern int visibility_undef_func_weak (); 181asm (".hidden visibility_undef_func_weak"); 182 183#pragma weak visibility_var_weak 184extern int visibility_var_weak; 185asm (".hidden visibility_var_weak"); 186 187#pragma weak visibility_func_weak 188extern int visibility_func_weak (); 189asm (".hidden visibility_func_weak"); 190 191int 192main_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) 200extern int visibility_def; 201asm (".hidden visibility_def"); 202extern int visibility_func (); 203asm (".hidden visibility_func"); 204 205int 206main_visibility_checkcom (void) 207{ 208 return visibility_def == 2; 209} 210 211int 212main_visibility_checkweak (void) 213{ 214 return visibility_func () == 2; 215} 216#else 217int 218main_visibility_checkcom (void) 219{ 220 return 1; 221} 222 223int 224main_visibility_checkweak (void) 225{ 226 return 1; 227} 228#endif 229 230int 231main (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