diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 63fd6fc48a..d3e8bfb7a0 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,19 @@ +2003-11-17 Daniel Jacobowitz + + * elf.c (_bfd_elf_link_hash_copy_indirect): Copy + ELF_LINK_HASH_NEEDS_PLT. Fix formatting. + * elf32-hppa.c (elf32_hppa_copy_indirect_symbol): Likewise. + * elf32-i386.c (elf_i386_copy_indirect_symbol): Likewise. + * elf32-ppc.c (ppc_elf_copy_indirect_symbol): Likewise. + * elf32-s390.c (elf_s390_copy_indirect_symbol): Likewise. + * elf32-sh.c (sh_elf_copy_indirect_symbol): Likewise. + * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise. + * elf64-s390.c (elf_s390_copy_indirect_symbol): Likewise. + * elf64-x86-64.c (elf64_x86_64_copy_indirect_symbol): Likewise. + * elfxx-ia64.c (elfNN_ia64_hash_copy_indirect): Likewise. + * elf32-xtensa.c (elf_xtensa_copy_indirect_symbol): Remove. + (elf_backend_copy_indirect_symbol): Don't define. + 2003-11-14 Daniel Jacobowitz * elfxx-mips.c (mips_elf_merge_gots): Weaken assert for local diff --git a/bfd/elf.c b/bfd/elf.c index e008cb7bd6..e6965af375 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -1354,12 +1354,12 @@ _bfd_elf_link_hash_copy_indirect (const struct elf_backend_data *bed, /* Copy down any references that we may have already seen to the symbol which just became indirect. */ - dir->elf_link_hash_flags |= - (ind->elf_link_hash_flags - & (ELF_LINK_HASH_REF_DYNAMIC - | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK - | ELF_LINK_NON_GOT_REF)); + dir->elf_link_hash_flags + |= (ind->elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC + | ELF_LINK_HASH_REF_REGULAR + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_NON_GOT_REF + | ELF_LINK_HASH_NEEDS_PLT)); if (ind->root.type != bfd_link_hash_indirect) return; diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index c2e2f706c2..51f070d741 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -1018,7 +1018,8 @@ elf32_hppa_copy_indirect_symbol (const struct elf_backend_data *bed, dir->elf_link_hash_flags |= (ind->elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK)); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_HASH_NEEDS_PLT)); else _bfd_elf_link_hash_copy_indirect (bed, dir, ind); } diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index ff8aab4a8b..9814543e96 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -770,7 +770,8 @@ elf_i386_copy_indirect_symbol (const struct elf_backend_data *bed, dir->elf_link_hash_flags |= (ind->elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK)); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_HASH_NEEDS_PLT)); else _bfd_elf_link_hash_copy_indirect (bed, dir, ind); } diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index e2de01e264..c7d48aa910 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -336,7 +336,8 @@ ppc_elf_copy_indirect_symbol (const struct elf_backend_data *bed, dir->elf_link_hash_flags |= (ind->elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK)); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_HASH_NEEDS_PLT)); else _bfd_elf_link_hash_copy_indirect (bed, dir, ind); } diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 61b1cbfc29..32bf8bf1ae 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -914,7 +914,8 @@ elf_s390_copy_indirect_symbol (bed, dir, ind) dir->elf_link_hash_flags |= (ind->elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK)); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_HASH_NEEDS_PLT)); else _bfd_elf_link_hash_copy_indirect (bed, dir, ind); } diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index 9ffd05ba50..0ac67e5b70 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -6339,7 +6339,8 @@ sh_elf_copy_indirect_symbol (const struct elf_backend_data *bed, dir->elf_link_hash_flags |= (ind->elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK)); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_HASH_NEEDS_PLT)); else _bfd_elf_link_hash_copy_indirect (bed, dir, ind); } diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index e8c276b194..cec239ebfd 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -47,9 +47,6 @@ static bfd_boolean elf_xtensa_check_relocs const Elf_Internal_Rela *)); static void elf_xtensa_hide_symbol PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean)); -static void elf_xtensa_copy_indirect_symbol - PARAMS ((const struct elf_backend_data *, struct elf_link_hash_entry *, - struct elf_link_hash_entry *)); static asection *elf_xtensa_gc_mark_hook PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *, Elf_Internal_Sym *)); @@ -796,19 +793,6 @@ elf_xtensa_hide_symbol (info, h, force_local) } -static void -elf_xtensa_copy_indirect_symbol (bed, dir, ind) - const struct elf_backend_data *bed; - struct elf_link_hash_entry *dir, *ind; -{ - _bfd_elf_link_hash_copy_indirect (bed, dir, ind); - - /* The standard function doesn't copy the NEEDS_PLT flag. */ - dir->elf_link_hash_flags |= - (ind->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT); -} - - /* Return the section that should be marked against GC for a given relocation. */ @@ -5850,7 +5834,6 @@ static struct bfd_elf_special_section const elf_xtensa_special_sections[]= #define elf_backend_adjust_dynamic_symbol elf_xtensa_adjust_dynamic_symbol #define elf_backend_check_relocs elf_xtensa_check_relocs -#define elf_backend_copy_indirect_symbol elf_xtensa_copy_indirect_symbol #define elf_backend_create_dynamic_sections elf_xtensa_create_dynamic_sections #define elf_backend_discard_info elf_xtensa_discard_info #define elf_backend_ignore_discarded_relocs elf_xtensa_ignore_discarded_relocs diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 8ae3f12ed8..4554c2c607 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -3359,7 +3359,8 @@ ppc64_elf_copy_indirect_symbol edir->tls_mask |= eind->tls_mask; mask = (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK | ELF_LINK_NON_GOT_REF); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK | ELF_LINK_NON_GOT_REF + | ELF_LINK_HASH_NEEDS_PLT); /* If called to transfer flags for a weakdef during processing of elf_adjust_dynamic_symbol, don't copy ELF_LINK_NON_GOT_REF. We clear it ourselves for ELIMINATE_COPY_RELOCS. */ diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index b4da0b124e..8b521be633 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -867,7 +867,8 @@ elf_s390_copy_indirect_symbol (bed, dir, ind) dir->elf_link_hash_flags |= (ind->elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK)); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_HASH_NEEDS_PLT)); else _bfd_elf_link_hash_copy_indirect (bed, dir, ind); } diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 4cfcba506d..5778f165fc 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -560,7 +560,8 @@ elf64_x86_64_copy_indirect_symbol (const struct elf_backend_data *bed, dir->elf_link_hash_flags |= (ind->elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK)); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_HASH_NEEDS_PLT)); else _bfd_elf_link_hash_copy_indirect (bed, dir, ind); } diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index 24d607956d..db4b8aca15 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -1592,7 +1592,8 @@ elfNN_ia64_hash_copy_indirect (bed, xdir, xind) (ind->root.elf_link_hash_flags & (ELF_LINK_HASH_REF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK)); + | ELF_LINK_HASH_REF_REGULAR_NONWEAK + | ELF_LINK_HASH_NEEDS_PLT)); if (ind->root.root.type != bfd_link_hash_indirect) return;