summaryrefslogtreecommitdiffstats
path: root/bfd/elf64-hppa.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2003-12-08 13:05:11 +0000
committerAlan Modra <amodra@gmail.com>2003-12-08 13:05:11 +0000
commit754021d045c14a02e85d9ee6e15c70ead784d083 (patch)
tree41df489622d8c295bfe637e5649e4c465bbcdab5 /bfd/elf64-hppa.c
parent2f97444a4fbb09bd0b9dd6ed9dda8ddbe91cfaf2 (diff)
downloadppe42-binutils-754021d045c14a02e85d9ee6e15c70ead784d083.tar.gz
ppe42-binutils-754021d045c14a02e85d9ee6e15c70ead784d083.zip
* elf-bfd.h (struct elf_backend_data): Remove "bfd *" and add
"elflink_hash_entry *" param to elf_backend_link_output_symbol_hook. Add "elflink_hash_entry *" param to elf_backend_output_arch_syms. * elflink.h (elf_link_output_sym): Add "elflink_hash_entry *" param, and pass to output_symbol_hook. (elf_bfd_final_link): Adjust elf_link_output_sym calls. (elf_link_output_extsym): Likewise. (elf_link_input_bfd): Likewise. * elf32-sh64.c (sh64_elf_link_output_symbol_hook): Adjust. * elf32-v850.c (v850_elf_link_output_symbol_hook): Likewise. * elf64-mmix.c (mmix_elf_link_output_symbol_hook): Likewise. * elf64-sh64.c (sh64_elf64_link_output_symbol_hook): Likewise. * elfxx-mips.c (_bfd_mips_elf_link_output_symbol_hook): Likewise. * elfxx-mips.h (_bfd_mips_elf_link_output_symbol_hook): Likewise. * elf64-sparc.c (sparc64_elf_output_arch_syms): Likewise. * elf64-hppa.c (elf64_hppa_link_output_symbol_hook): Likewise. Validate dynh->h against h. * elf64-ppc.c (struct ppc_link_hash_entry): Add adjust_done bitfield. (link_hash_newfunc): Init it. (adjust_opd_syms): New function. (ppc64_elf_edit_opd): Set adjust_done when global .opd sym adjusted. Set opd.adjust for all .opd relocs. Call adjust_opd_syms. (ppc64_elf_tls_optimize): Adjust possible .opd sym values here. (ppc64_elf_relocate_section): Also adjust syms not a multiple of 24. (ppc64_elf_output_symbol_hook): New function. (elf_backend_link_output_symbol_hook): Define.
Diffstat (limited to 'bfd/elf64-hppa.c')
-rw-r--r--bfd/elf64-hppa.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c
index 2dd2a36186..36c27c4b6f 100644
--- a/bfd/elf64-hppa.c
+++ b/bfd/elf64-hppa.c
@@ -202,8 +202,8 @@ static bfd_boolean elf64_hppa_size_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *));
static bfd_boolean elf64_hppa_link_output_symbol_hook
- PARAMS ((bfd *abfd, struct bfd_link_info *, const char *,
- Elf_Internal_Sym *, asection *input_sec));
+ PARAMS ((struct bfd_link_info *, const char *, Elf_Internal_Sym *,
+ asection *, struct elf_link_hash_entry *));
static bfd_boolean elf64_hppa_finish_dynamic_symbol
PARAMS ((bfd *, struct bfd_link_info *,
@@ -1893,12 +1893,12 @@ elf64_hppa_size_dynamic_sections (output_bfd, info)
table. Ick. */
static bfd_boolean
-elf64_hppa_link_output_symbol_hook (abfd, info, name, sym, input_sec)
- bfd *abfd ATTRIBUTE_UNUSED;
+elf64_hppa_link_output_symbol_hook (info, name, sym, input_sec, h)
struct bfd_link_info *info;
const char *name;
Elf_Internal_Sym *sym;
asection *input_sec ATTRIBUTE_UNUSED;
+ struct elf_link_hash_entry *h;
{
struct elf64_hppa_link_hash_table *hppa_info;
struct elf64_hppa_dyn_hash_entry *dyn_h;
@@ -1912,6 +1912,8 @@ elf64_hppa_link_output_symbol_hook (abfd, info, name, sym, input_sec)
hppa_info = elf64_hppa_hash_table (info);
dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
name, FALSE, FALSE);
+ if (dyn_h->h != h)
+ return TRUE;
/* Function symbols for which we created .opd entries *may* have been
munged by finish_dynamic_symbol and have to be un-munged here.
OpenPOWER on IntegriCloud