OSDN Git Service

* reloc.c: Add PPC and PPC64 TLS relocs.
authorAlan Modra <amodra@bigpond.net.au>
Tue, 4 Feb 2003 14:50:50 +0000 (14:50 +0000)
committerAlan Modra <amodra@bigpond.net.au>
Tue, 4 Feb 2003 14:50:50 +0000 (14:50 +0000)
commit74a184762424728fc8cd63d9b1016be2b9251108
treeaf4896f9e6698b3e3f9718aeeb030c9151c5060a
parent8b8ab3f9df5a4c871c080d22fc08448674b0624f
* reloc.c: Add PPC and PPC64 TLS relocs.
* libbfd.h: Regenerate.
* bfd-in2.h: Regenerate.
* elf64-ppc.c (TP_OFFSET, DTP_OFFSET): Declare.
(ppc64_elf_howto_raw): Add TLS howto's.  Adjust R_PPC64_NONE to be
against a 32 bit field.
(ppc64_elf_reloc_type_lookup): Handle TLS relocs.
(_ppc64_elf_section_data): Add t_symndx and comments.
(ppc64_elf_section_data): Use elf_section_data macro.
(ppc64_elf_new_section_hook): American spelling.
(struct got_entry, struct plt_entry): New.
(MUST_BE_DYN_RELOC): Rename from IS_ABSOLUTE_RELOC.
(struct ppc_stub_hash_entry): Add "addend" field.
(struct ppc_link_hash_entry): Add "tls_type".
(TLS_TLS, TLS_GD_LD, TLS_LD, TLS_TPREL, TLS_DTPREL,
TLS_EXPLICIT): Define.
(struct ppc_link_hash_table): Add tls_sec, tls_get_addr, tlsld_got.
(link_hash_newfunc): Init new fields.
(ppc64_elf_link_hash_table_create): Likewise.  Set init_relcount and
init_offset to NULL.
(ppc64_elf_copy_indirect_symbol): Copy got and plt info.  Don't call
_bfd_elf_link_hash_copy_indirect, rather insert relevant code from
there.
(update_local_sym_info, update_plt_info): New functions.
(ppc64_elf_check_relocs): Use them.  Handle TLS relocs.  Adjust GOT
handling to use got.glist rather than got.refcount.  Likewise for PLT.
(ppc64_elf_gc_sweep_hook): Handle TLS relocs, new GOT and PLT lists.
(func_desc_adjust): Adjust for new PLT list.
(ppc64_elf_adjust_dynamic_symbol): Likewise.
(get_sym_h, get_tls_type): New functions.
(ppc64_elf_edit_opd): Remove unused variable.  Use get_sym_h.
(ppc64_elf_tls_optimize): New function.
(allocate_dynrelocs): Adjust for new PLT and GOT lists.  Allocate
TLS relocs.
(ppc64_elf_size_dynamic_sections): Likewise.
(ppc_type_of_stub): Adjust for new PLT list.
(ppc_build_one_stub): Likewise.
(ppc64_elf_size_stubs): Likewise.  Use get_sym_h.  Treat __tls_get_addr
calls specially.
(ppc64_elf_relocate_section): Adjust for new GOT and PLT lists.  Handle
TLS relocs.  Report local syms using bfd_elf_local_sym_name.  Don't
init GOT entries that have a reloc.  Generate GOT relocs here..
(ppc64_elf_finish_dynamic_symbol): ..not here.  Adjust for PLT list.
* elf64-ppc.h (ppc64_elf_tls_optimize): Declare.
bfd/ChangeLog
bfd/bfd-in2.h
bfd/elf64-ppc.c
bfd/elf64-ppc.h
bfd/libbfd.h
bfd/reloc.c