* elfxx-ia64.c (elfNN_ia64_dynamic_symbol_p): Return false
authorRichard Henderson <rth@redhat.com>
Sat, 27 Jan 2001 00:04:09 +0000 (00:04 +0000)
committerRichard Henderson <rth@redhat.com>
Sat, 27 Jan 2001 00:04:09 +0000 (00:04 +0000)
        for non-default visibility.
        * elf64-alpha.c (alpha_elf_dynamic_symbol_p): Likewise, but
        delete ugly macro and replace with pretty function.

bfd/ChangeLog
bfd/elf64-alpha.c
bfd/elfxx-ia64.c

index 2e1cc69..6974692 100644 (file)
@@ -1,3 +1,10 @@
+2001-01-26  Richard Henderson  <rth@redhat.com>
+
+       * elfxx-ia64.c (elfNN_ia64_dynamic_symbol_p): Return false
+       for non-default visibility.
+       * elf64-alpha.c (alpha_elf_dynamic_symbol_p): Likewise, but
+       delete ugly macro and replace with pretty function.
+
 2001-01-25  Mark Elbrecht  <snowball3@bigfoot.com>
 
        * coff-go32.c: Update copyright.
index dd41e9d..fa63753 100644 (file)
@@ -46,7 +46,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define ECOFF_64
 #include "ecoffswap.h"
 
-static boolean elf64_alpha_mkobject PARAMS ((bfd *));
+static int alpha_elf_dynamic_symbol_p
+  PARAMS((struct elf_link_hash_entry *, struct bfd_link_info *));
 static struct bfd_hash_entry * elf64_alpha_link_hash_newfunc
   PARAMS((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
 static struct bfd_link_hash_table * elf64_alpha_bfd_link_hash_table_create
@@ -66,6 +67,8 @@ static reloc_howto_type * elf64_alpha_bfd_reloc_type_lookup
 static void elf64_alpha_info_to_howto
   PARAMS((bfd *, arelent *, Elf64_Internal_Rela *));
 
+static boolean elf64_alpha_mkobject
+  PARAMS((bfd *));
 static boolean elf64_alpha_object_p
   PARAMS((bfd *));
 static boolean elf64_alpha_section_from_shdr
@@ -223,14 +226,35 @@ struct alpha_elf_link_hash_table
 
 /* Should we do dynamic things to this symbol?  */
 
-#define alpha_elf_dynamic_symbol_p(h, info)                            \
-  ((((info)->shared && !(info)->symbolic)                              \
-    || (((h)->elf_link_hash_flags                                      \
-        & (ELF_LINK_HASH_DEF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR))     \
-        == (ELF_LINK_HASH_DEF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR))    \
-    || (h)->root.type == bfd_link_hash_undefweak                       \
-    || (h)->root.type == bfd_link_hash_defweak)                                \
-   && (h)->dynindx != -1)
+static int
+alpha_elf_dynamic_symbol_p (h, info)
+     struct elf_link_hash_entry *h;
+     struct bfd_link_info *info;
+{
+  if (h == NULL)
+    return false;
+
+  while (h->root.type == bfd_link_hash_indirect
+        || h->root.type == bfd_link_hash_warning)
+    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+  if (h->dynindx == -1)
+    return false;
+  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+    return false;
+
+  if (h->root.type == bfd_link_hash_undefweak
+      || h->root.type == bfd_link_hash_defweak)
+    return true;
+
+  if ((info->shared && !info->symbolic)
+      || ((h->elf_link_hash_flags
+          & (ELF_LINK_HASH_DEF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR))
+         == (ELF_LINK_HASH_DEF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR)))
+    return true;
+
+  return false;
+}
 
 /* Create an entry in a Alpha ELF linker hash table.  */
 
index e620938..6751e4a 100644 (file)
@@ -1181,6 +1181,8 @@ elfNN_ia64_dynamic_symbol_p (h, info)
 
   if (h->dynindx == -1)
     return false;
+  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+    return false;
 
   if (h->root.type == bfd_link_hash_undefweak
       || h->root.type == bfd_link_hash_defweak)