binutils-gdb/bfd/elf64-ppc.h

31 lines
1.2 KiB
C
Raw Normal View History

* elflink.c (_bfd_elf_create_dynamic_sections): Don't set SEC_CODE when plt_not_loaded. * elf64-ppc.c (ppc64_elf_create_dynamic_sections): No need to clear .plt SEC_CODE here. Create .stub and correct .glink flags. (PLT_INITIAL_ENTRY_SIZE): Set to 24. (ppc64_elf_glink_code): Delete. (PPC64_ELF_GLINK_SIZE): Delete. (ADDIS_R12_R2, STD_R2_40R1, LD_R11_0R12, LD_R2_0R12, MTCTR_R11, BCTR, ADDIS_R12_R12_1, LD_R2_40R1, NOP, LI_R0_0, B_DOT, LIS_R0_0, ORI_R0_R0_0): Define. (PLT_CALL_STUB_SIZE, GLINK_CALL_STUB_SIZE): Define. (struct ppc_link_hash_table): Add sstub and plt_overflow. (ppc64_elf_link_hash_table_create): Init them. (ppc64_elf_check_relocs <R_PPC64_REL24>): Refcount .plt entry. Don't copy to shared lib. (ppc64_elf_check_relocs): Call bfd_set_error on errors. (ppc64_elf_gc_sweep_hook <R_PPC64_REL24>): Sweep plt refcount. (allocate_dynrelocs <plt>): Don't change function sym here. Make room for .stub and .glink code. (ppc64_elf_size_dynamic_sections): Handle .stub. Make entry for DT_PPC64_GLINK. (ppc64_elf_final_link): Rename to ppc64_elf_set_toc. Don't call bfd_elf64_bfd_final_link. (bfd_elf64_bfd_final_link): Don't define. (ppc64_elf_size_stubs): New. (build_plt_stub): New. (build_one_stub): New. (ppc64_elf_build_stubs): New. (ppc64_elf_relocate_section <toc relocs>): Remove assert. (ppc64_elf_relocate_section): Don't copy R_PPC64_REL24 relocs. (ppc64_elf_finish_dynamic_symbol): Don't build stubs here. Set DT_PPC64_GLINK entry. Tweak DT_PLTGOT, DT_JMPREL, DT_PLTRELSZ in case output sections not separate. Adjust DT_RELASZ to not include plt relocs. Set reserved got entry. Set got and plt entry size. (elf_backend_got_header_size): Set to 8. * elf64-ppc.h: New file.
2002-01-16 06:50:03 +01:00
/* PowerPC64-specific support for 64-bit ELF.
Copyright 2002 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
2002-05-02 11:48:15 +02:00
bfd_vma ppc64_elf_toc
PARAMS ((bfd *));
* elf64-ppc.c (CROR_151515, CROR_313131): Define. (ppc64_elf_relocate_section): Use them. Don't look for plt calls on R_PPC64_ADDR24 relocs. Require a nop or no link reg on plt call branches. Correct undefined weak destination. (ppc64_elf_func_desc_adjust): Always create at least one blr in .sfpr, and correct case where either only savef* or restf* is needed. Long branch stubs, multiple stub sections. * elf64-ppc.h (ppc64_elf_setup_section_lists): Declare. (ppc64_elf_next_input_section): Declare. * elf64-ppc.c: Move linker-only prototypes. (STUB_SUFFIX): Define. (enum ppc_stub_type): New. (struct ppc_stub_hash_entry): New. (struct ppc_branch_hash_entry): New. (struct ppc_link_hash_entry): Add stub_cache, oh. (struct ppc_link_hash_table): Add stub_hash_table etc. Remove sstub. Add sbrlt, srelbrlt, has_14bit_branch, stub_iteration. Rename plt_overflow to stub_error. (ppc_stub_hash_lookup): Define. (ppc_branch_hash_lookup): Define. (stub_hash_newfunc): New function. (branch_hash_newfunc): New function. (link_hash_newfunc): Init new fields. (ppc64_elf_link_hash_table_create): Likewise. (ppc64_elf_link_hash_table_free): New function. (ppc_stub_name): New function. (ppc_get_stub_entry): New function. (ppc_add_stub): New function. (create_linkage_sections): Use bfd_make_section_anyway. Create .branch_lt and .rela.branch_lt sections. Don't create .stub. (ppc64_elf_check_relocs): Set has_14bit_branch on R_PPC64_REL14*, and set up for plt call stubs. Link func and func desc syms. (ppc64_elf_gc_sweep_hook): Handle REL14* as per REL24. (func_desc_adjust): Avoid hash lookup when func desc sym available via shortcut, and set links when processing. (ppc64_elf_hide_symbol): Likewise. (allocate_dynrelocs): Don't allocate stub section here. (ppc64_elf_size_dynamic_sections): Handle sbrlt and srelbrlt. Remove sstub code. (ppc_type_of_stub): New function. (build_one_stub): Delete. (ppc_build_one_stub): New function. (ppc_size_one_stub): New function. (ppc64_elf_setup_section_lists): New function. (ppc64_elf_next_input_section): New function. (group_sections): New function. (get_local_syms): New function. (ppc64_elf_size_stubs): Rewrite. (ppc64_elf_build_stubs): Rewrite. (ppc64_elf_relocate_section): Look up stub entry for REL24 relocs. Don't propagate REL14* to dynamic objects. Look for long branch stubs if REL14* or REL24 relocs won't reach. (bfd_elf64_bfd_link_hash_table_free): Define.
2002-05-01 04:34:20 +02:00
int ppc64_elf_setup_section_lists
PARAMS ((bfd *, struct bfd_link_info *));
void ppc64_elf_next_input_section
2002-05-02 11:48:15 +02:00
PARAMS ((struct bfd_link_info *, asection *));
* elf64-ppc.c (CROR_151515, CROR_313131): Define. (ppc64_elf_relocate_section): Use them. Don't look for plt calls on R_PPC64_ADDR24 relocs. Require a nop or no link reg on plt call branches. Correct undefined weak destination. (ppc64_elf_func_desc_adjust): Always create at least one blr in .sfpr, and correct case where either only savef* or restf* is needed. Long branch stubs, multiple stub sections. * elf64-ppc.h (ppc64_elf_setup_section_lists): Declare. (ppc64_elf_next_input_section): Declare. * elf64-ppc.c: Move linker-only prototypes. (STUB_SUFFIX): Define. (enum ppc_stub_type): New. (struct ppc_stub_hash_entry): New. (struct ppc_branch_hash_entry): New. (struct ppc_link_hash_entry): Add stub_cache, oh. (struct ppc_link_hash_table): Add stub_hash_table etc. Remove sstub. Add sbrlt, srelbrlt, has_14bit_branch, stub_iteration. Rename plt_overflow to stub_error. (ppc_stub_hash_lookup): Define. (ppc_branch_hash_lookup): Define. (stub_hash_newfunc): New function. (branch_hash_newfunc): New function. (link_hash_newfunc): Init new fields. (ppc64_elf_link_hash_table_create): Likewise. (ppc64_elf_link_hash_table_free): New function. (ppc_stub_name): New function. (ppc_get_stub_entry): New function. (ppc_add_stub): New function. (create_linkage_sections): Use bfd_make_section_anyway. Create .branch_lt and .rela.branch_lt sections. Don't create .stub. (ppc64_elf_check_relocs): Set has_14bit_branch on R_PPC64_REL14*, and set up for plt call stubs. Link func and func desc syms. (ppc64_elf_gc_sweep_hook): Handle REL14* as per REL24. (func_desc_adjust): Avoid hash lookup when func desc sym available via shortcut, and set links when processing. (ppc64_elf_hide_symbol): Likewise. (allocate_dynrelocs): Don't allocate stub section here. (ppc64_elf_size_dynamic_sections): Handle sbrlt and srelbrlt. Remove sstub code. (ppc_type_of_stub): New function. (build_one_stub): Delete. (ppc_build_one_stub): New function. (ppc_size_one_stub): New function. (ppc64_elf_setup_section_lists): New function. (ppc64_elf_next_input_section): New function. (group_sections): New function. (get_local_syms): New function. (ppc64_elf_size_stubs): Rewrite. (ppc64_elf_build_stubs): Rewrite. (ppc64_elf_relocate_section): Look up stub entry for REL24 relocs. Don't propagate REL14* to dynamic objects. Look for long branch stubs if REL14* or REL24 relocs won't reach. (bfd_elf64_bfd_link_hash_table_free): Define.
2002-05-01 04:34:20 +02:00
boolean ppc64_elf_size_stubs
PARAMS ((bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
asection *(*) (const char *, asection *), void (*) (void)));
boolean ppc64_elf_build_stubs
PARAMS ((struct bfd_link_info *));