daily update
[external/binutils.git] / ld / testsuite / ld-elfvsb / sh1.c
index 2b9b9ee..b275424 100644 (file)
@@ -13,7 +13,15 @@ extern int mainvar;
 /* This variable is defined in the shared library, and overridden by
    the main program.  */
 #ifndef XCOFF_TEST
+#ifdef SHARED
+/* SHARED is defined if we are compiling with -fpic/-fPIC.  */
 int overriddenvar = -1;
+#else
+/* Without -fpic, newer versions of gcc assume that we are not
+   compiling for a shared library, and thus that overriddenvar is
+   local.  */
+extern int overriddenvar;
+#endif
 #endif
 
 /* This variable is defined in the shared library.  */
@@ -76,12 +84,14 @@ shlib_shlibcall2 ()
   return shlib_overriddencall2 ();
 }
 
+#ifdef SHARED
 int
 shlib_overriddencall2 ()
 {
   return 7;
 }
 #endif
+#endif
 
 /* This function calls a function defined by the main program.  */
 
@@ -339,6 +349,37 @@ shlib_visibility_checkweak ()
 {
   return 1;
 }
+#elif defined (HIDDEN_WEAK_TEST)
+#pragma weak shlib_visibility_undef_var_weak
+extern int shlib_visibility_undef_var_weak;
+asm (".hidden shlib_visibility_undef_var_weak");
+
+#pragma weak shlib_visibility_undef_func_weak
+extern int shlib_visibility_undef_func_weak ();
+asm (".hidden shlib_visibility_undef_func_weak");
+
+#pragma weak shlib_visibility_var_weak
+extern int shlib_visibility_var_weak;
+asm (".hidden shlib_visibility_var_weak");
+
+#pragma weak shlib_visibility_func_weak
+extern int shlib_visibility_func_weak ();
+asm (".hidden shlib_visibility_func_weak");
+
+int
+shlib_visibility_checkcom ()
+{
+  return 1;
+}
+
+int
+shlib_visibility_checkweak ()
+{
+  return &shlib_visibility_undef_var_weak == NULL
+        && &shlib_visibility_undef_func_weak == NULL
+        && &shlib_visibility_func_weak == NULL
+        && &shlib_visibility_var_weak == NULL;
+}
 #else
 int
 shlib_visibility_checkcom ()
@@ -354,7 +395,11 @@ shlib_visibility_checkweak ()
 #endif
 
 #ifdef PROTECTED_TEST
+#ifdef SHARED
 int shared_data = 100;
+#else
+extern int shared_data;
+#endif
  
 int *
 shared_data_p ()