aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf64-ppc.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2004-03-26 06:13:40 +0000
committerAlan Modra <amodra@gmail.com>2004-03-26 06:13:40 +0000
commit555cd47695349e40eb1fe06ac707d2f278d63021 (patch)
tree6cdcd421c8c4344afbffc107e9cb838c76e61830 /bfd/elf64-ppc.c
parent4ad4eba5b2edf00828f0eeb8db8fabc33da4f9d1 (diff)
downloadgdb-555cd47695349e40eb1fe06ac707d2f278d63021.zip
gdb-555cd47695349e40eb1fe06ac707d2f278d63021.tar.gz
gdb-555cd47695349e40eb1fe06ac707d2f278d63021.tar.bz2
* elf64-ppc.c (elf_backend_add_symbol_hook): Define.
(ppc64_elf_add_symbol_hook): New function. * elf-bfd.h (struct elf_backend_data <elf_add_symbol_hook>): Remove const from Elf_Internal_Sym param. * elflink.c (elf_link_add_object_symbols): Adjust. * elf-hppa.h (elf_hppa_add_symbol_hook): Adjust. * elf32-frv.c (elf32_frv_add_symbol_hook): Adjust. * elf32-i370.c (elf_backend_add_symbol_hook): Adjust. * elf32-m32r.c (m32r_elf_add_symbol_hook): Adjust. * elf32-m68hc1x.c (elf32_m68hc11_add_symbol_hook): Adjust. * elf32-m68hc1x.h (elf32_m68hc11_add_symbol_hook): Adjust. * elf32-ppc.c (ppc_elf_add_symbol_hook): Adjust. * elf32-sh64.c (sh64_elf_add_symbol_hook): Adjust. * elf32-v850.c (v850_elf_add_symbol_hook): Adjust. * elf64-alpha.c (elf64_alpha_add_symbol_hook): Adjust. * elf64-mmix.c (mmix_elf_add_symbol_hook): Adjust. * elf64-sh64.c (sh64_elf64_add_symbol_hook): Adjust. * elf64-sparc.c (sparc64_elf_add_symbol_hook): Adjust. * elfxx-ia64.c (elfNN_ia64_add_symbol_hook): Adjust. * elfxx-mips.c (_bfd_mips_elf_add_symbol_hook): Adjust. * elfxx-mips.h (_bfd_mips_elf_add_symbol_hook): Adjust.
Diffstat (limited to 'bfd/elf64-ppc.c')
-rw-r--r--bfd/elf64-ppc.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index cf15f92..a2aebfe 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -82,6 +82,7 @@ static bfd_reloc_status_type ppc64_elf_unhandled_reloc
#define elf_backend_grok_psinfo ppc64_elf_grok_psinfo
#define elf_backend_create_dynamic_sections ppc64_elf_create_dynamic_sections
#define elf_backend_copy_indirect_symbol ppc64_elf_copy_indirect_symbol
+#define elf_backend_add_symbol_hook ppc64_elf_add_symbol_hook
#define elf_backend_check_relocs ppc64_elf_check_relocs
#define elf_backend_gc_mark_hook ppc64_elf_gc_mark_hook
#define elf_backend_gc_sweep_hook ppc64_elf_gc_sweep_hook
@@ -3474,6 +3475,22 @@ ppc64_elf_mark_entry_syms (struct bfd_link_info *info)
return TRUE;
}
+/* Hack symbols defined in .opd sections to be function type. */
+
+static bfd_boolean
+ppc64_elf_add_symbol_hook (bfd *ibfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ Elf_Internal_Sym *isym,
+ const char **name ATTRIBUTE_UNUSED,
+ flagword *flags ATTRIBUTE_UNUSED,
+ asection **sec,
+ bfd_vma *value ATTRIBUTE_UNUSED)
+{
+ if (strcmp (bfd_get_section_name (ibfd, *sec), ".opd") == 0)
+ isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
+ return TRUE;
+}
+
static bfd_boolean
update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
unsigned long r_symndx, bfd_vma r_addend, int tls_type)