X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Ftestsuite%2Fld-elfvsb%2Fmain.c;h=26542b8a1fcf3aeb5d12afcac1a37dbfd5cbbe02;hb=e4c4d240a370f0afc8a29b18f8e07affff9c4177;hp=97bb2200e7339e2593baed7e13c13a44686fdc15;hpb=e80778cf3d9ba2660205117067d74bb61ba958ac;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/testsuite/ld-elfvsb/main.c b/ld/testsuite/ld-elfvsb/main.c index 97bb2200e7..26542b8a1f 100644 --- a/ld/testsuite/ld-elfvsb/main.c +++ b/ld/testsuite/ld-elfvsb/main.c @@ -1,3 +1,20 @@ +#ifdef PROTECTED_CHECK +#include +#include + +int +main (void) +{ +#if defined (__GLIBC__) && (__GLIBC__ > 2 \ + || (__GLIBC__ == 2 \ + && __GLIBC_MINOR__ >= 2)) + puts ("yes"); +#else + puts ("no"); +#endif + return 0; +} +#else /* This is the main program for the shared library test. */ #include @@ -18,10 +35,30 @@ extern int (*shlib_getfunptr1 ()) (); extern int (*shlib_getfunptr2 ()) (); extern int shlib_check (); extern int shlib_shlibcall2 (); -extern int visibility (); extern int visibility_check (); extern int visibility_checkfunptr (); extern void *visibility_funptr (); +extern int visibility_checkvar (); +extern int visibility_checkvarptr (); +extern int visibility_varval (); +extern void *visibility_varptr (); + +#ifdef HIDDEN_WEAK_TEST +#define WEAK_TEST +#endif + +#ifdef PROTECTED_WEAK_TEST +#define WEAK_TEST +#endif + +#ifdef PROTECTED_UNDEF_TEST +#define PROTECTED_TEST +#endif + +#ifndef WEAK_TEST +extern int visibility (); +extern int visibility_var; +#endif #if !defined (HIDDEN_TEST) && defined (PROTECTED_TEST) int @@ -35,11 +72,36 @@ main_visibility_check () { return visibility_funptr () != visibility; } + +int visibility_var = 1; + +static int +main_visibility_checkvar () +{ + return visibility_varval () != visibility_var + && visibility_varptr () != &visibility_var; +} #else static int main_visibility_check () { +#ifdef WEAK_TEST + return visibility_funptr () == NULL; +#else return visibility_funptr () == visibility; +#endif +} + +static int +main_visibility_checkvar () +{ +#ifdef WEAK_TEST + return visibility_varval () == 0 + && visibility_varptr () == NULL; +#else + return visibility_varval () == visibility_var + && visibility_varptr () == &visibility_var; +#endif } #endif @@ -106,5 +168,11 @@ main () printf ("visibility_checkfunptr () == %d\n", visibility_checkfunptr ()); printf ("main_visibility_check () == %d\n", main_visibility_check ()); + printf ("visibility_checkvar () == %d\n", visibility_checkvar ()); + printf ("visibility_checkvarptr () == %d\n", + visibility_checkvarptr ()); + printf ("main_visibility_checkvar () == %d\n", + main_visibility_checkvar ()); return 0; } +#endif