diff options
author | Richard Henderson <rth@redhat.com> | 2001-01-27 00:04:09 +0000 |
---|---|---|
committer | Richard Henderson <rth@redhat.com> | 2001-01-27 00:04:09 +0000 |
commit | 8fb35fedd531db95117ec2571f74a8dac1cf5844 (patch) | |
tree | 844e9e6439bdcc383c9edd8e4e8f58d1d0a50271 /bfd/elf64-alpha.c | |
parent | 5b616ba11e5389dc47b9d85a3cbfbdbb54955801 (diff) | |
download | gdb-8fb35fedd531db95117ec2571f74a8dac1cf5844.zip gdb-8fb35fedd531db95117ec2571f74a8dac1cf5844.tar.gz gdb-8fb35fedd531db95117ec2571f74a8dac1cf5844.tar.bz2 |
* 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.
Diffstat (limited to 'bfd/elf64-alpha.c')
-rw-r--r-- | bfd/elf64-alpha.c | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index dd41e9d..fa63753 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -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. */ |