+2005-01-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR 679
+       * elflink.c (_bfd_elf_dynamic_symbol_p): Only protected
+       non-function symbols are local.
+       (_bfd_elf_symbol_refs_local_p): Likewise.
+
 2005-01-18  Alan Modra  <amodra@bigpond.net.au>
 
        * bfd.c (bfd_link_just_syms): Add abfd param.
 
       /* Proper resolution for function pointer equality may require
         that these symbols perhaps be resolved dynamically, even though
         we should be resolving them to the current module.  */
-      if (!ignore_protected)
+      if (!ignore_protected || h->type != STT_FUNC)
        binding_stays_local_p = TRUE;
       break;
 
   if (ELF_ST_VISIBILITY (h->other) != STV_PROTECTED)
     return TRUE;
 
+  /* STV_PROTECTED non-function symbols are local.  */
+  if (h->type != STT_FUNC)
+    return TRUE;
+
   /* Function pointer equality tests may require that STV_PROTECTED
      symbols be treated as dynamic symbols, even when we know that the
      dynamic linker will resolve them locally.  */