aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf64-ppc.h
AgeCommit message (Collapse)AuthorFilesLines
2005-06-07missed committing fromAlan Modra1-1/+1
* elf64-ppc.h (ppc64_elf_edit_opd): Update prototype.
2005-05-04Update the address and phone number of the FSF organization in the GPL noticesNick Clifton1-1/+1
2005-05-04Update the FSF address in the copyright/GPL noticeNick Clifton1-1/+1
2005-03-03update copyright datesAlan Modra1-1/+1
2005-01-06bfd/Alan Modra1-1/+1
* elf64-ppc.c (struct ppc_link_hash_table): Add no_multi_toc and multi_toc_needed. (has_toc_reloc, makes_toc_func_call, call_check_in_progress): Define. (ppc64_elf_check_relocs): Update references to has_gp_reloc. (ppc64_elf_setup_section_lists): Add no_multi_toc parm, set htab bit. (ppc64_elf_next_toc_section): Heed no_multi_toc. (ppc64_elf_reinit_toc): Set multi_toc_needed. (toc_adjusting_stub_needed): Rewrite. (ppc64_elf_next_input_section): Use multi_toc_needed to shortcut toc tests. Adjust for toc_adjusting_stub_needed changes. (ppc64_elf_size_stubs): Update references to has_gp_reloc. * elf64-ppc.h (ppc64_elf_setup_section_lists): Update prototype. * section.c: Expand comment on backend bits. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. ld/ * emultempl/ppc64elf.em (no_multi_toc): New var. (gld${EMULATION_NAME}_finish): Pass to ppc64_elf_setup_section_lists. (OPTION_NO_MULTI_TOC): Define. (PARSE_AND_LIST_LONGOPTS): Add --no-multi-toc support. (PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Likewise.
2004-11-04bfd/Alan Modra1-0/+2
* elf64-ppc.h (ppc64_elf_edit_toc): Declare. * elf64-ppc.c (struct ppc_link_hash_entry <adjust_done>): Update comment. (struct adjust_toc_info): New. (adjust_toc_syms, ppc64_elf_edit_toc): New functions. ld/ * emultempl/ppc64elf.em (no_tls_opt): Rename from notlsopt. (no_opd_opt, no_toc_opt): New static vars. (ppc_before_allocation): Don't edit opt if no_opd_opt. Call ppc64_elf_edit_toc. (OPTION_NO_OPD_OPT, OPTION_NO_TOC_OPT): Define. (PARSE_AND_LIST_LONGOPTS): Add no-opd-optimize and no-toc-optimize. (PARSE_AND_LIST_OPTIONS): Describe new options. (PARSE_AND_LIST_ARGS_CASES): Handle them.
2004-08-19 * elf64-ppc.c (ppc64_elf_edit_opd): Support 16 byte long .opdJakub Jelinek1-1/+1
entries (where fd_aux overlaps next entry's fd_func). Add non_overlapping argument, use it. (ppc64_elf_check_relocs, ppc64_elf_gc_mark_hook, adjust_opd_syms, ppc64_elf_size_stubs, ppc64_elf_relocate_section, ppc64_elf_output_symbol_hook): Use address / 8 instead of address / 24 as indexes into opd_sym_map/opd_adjust array. * elf64-ppc.h (ppc64_elf_edit_opd): Adjust prototype. * emultempl/ppc64elf.em (non_overlapping_opd): New variable. (ppc_before_allocation): Pass it to ppc64_elf_edit_opd). (OPTION_NON_OVERLAPPING_OPD): Define. (PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Add --non-overlapping-opd option.
2004-08-10bfd/Alan Modra1-0/+2
* elf64-ppc.c (struct ppc_link_hash_entry): Add was_undefined. (struct ppc_link_hash_table): Remove no_multi_toc, multi_toc_needed. Make emit_stub_syms, stub_error and has_14bit_branch bit-fields. Add twiddled_syms. (link_hash_newfunc): Init was_undefined. (add_symbol_adjust): Don't set undefined dot symbols to defweak; Use undefweak instead. (ppc64_elf_check_directives): Fix undefs chain. (ppc64_elf_next_toc_section): Remove no_multi_toc and multi_toc_needed references. (ppc64_elf_size_stubs): Adjust for add_symbol_adjust change. (undo_symbol_twiddle, ppc64_elf_restore_symbols): New functions. * elf64-ppc.h (ppc64_elf_restore_symbols): Declare. ld/ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_finish): Call ppc64_elf_restore_symbols.
2004-08-09bfd/Alan Modra1-3/+1
* elf-bfd.h (_bfd_elf_gc_mark): Declare. * elflink.c (elf_link_input_bfd): Formatting. (_bfd_elf_gc_mark): Rename from elf_gc_mark and make global. Adjust all callers. * elf64-ppc.c (struct ppc_link_hash_entry): Remove is_entry. (link_hash_newfunc): Don't set it. (ppc64_elf_copy_indirect_symbol): Nor copy it. (ppc64_elf_mark_entry_syms): Delete. (ppc64_elf_gc_mark_hook): Mark entry syms here. Also mark opd sections. Use get_opd_info. * elf64-ppc.h (ppc64_elf_mark_entry_syms): Delete. ld/ * emultempl/ppc64elf.em (ppc_after_open): Delete. (LDEMUL_AFTER_OPEN): Don't define.
2003-11-04 * bfd-in.h (_bfd_elf_tls_setup): Declare.Alan Modra1-1/+1
* bfd-in2.h: Regenerate. * elf-bfd.h (struct elf_link_tls_segment): Delete. (struct elf_link_hash_table): Add tls_sec and tls_size. * elf.c (_bfd_elf_link_hash_table_init): Init tls_sec and tls_size. * elflink.c (_bfd_elf_tls_setup): New function. * elflink.h (struct elf_final_link_info): Remove first_tls_sec. (elf_bfd_final_link): Don't set first_tls_sec here. Update code saving tls segment info, round segment size up. (elf_link_output_extsym): Adjust code using tls segment info. (elf_link_input_bfd): Likewise. * elf32-i386.c (dtpoff_base, tpoff): Likewise. * elf32-s390.c (dtpoff_base, tpoff): Likewise. * elf32-sh.c (dtpoff_base, tpoff): Likewise. * elf32-sparc.c (dtpoff_base, tpoff): Likewise. * elf64-s390.c (dtpoff_base, tpoff): Likewise. * elf64-x86-64.c (dtpoff_base, tpoff): Likewise. * elfxx-ia64.c (elfNN_ia64_tprel_base): Likewise. (elfNN_ia64_dtprel_base): Likewise. * elf64-alpha.c (alpha_get_dtprel_base): Likewise. (alpha_get_tprel_base): Likewise. (struct alpha_relax_info): Remove tls_segment. (elf64_alpha_relax_got_load): Adjust invocation of alpha_get_dtprel_base and alpha_get_tprel_base. (elf64_alpha_relax_tls_get_addr): Likewise. (elf64_alpha_relax_section): Likewise. (elf64_alpha_relocate_section): Likewise. (elf64_alpha_relax_find_tls_segment): Delete. * elf32-ppc.c (struct ppc_elf_link_hash_table): Remove tls_sec. (ppc_elf_tls_setup): Call _bfd_elf_tls_setup. Return section. (ppc_elf_relocate_section): Adjust to use elf.tls_sec. * elf32-ppc.h (ppc_elf_tls_setup): Update. * elf64-ppc.c (struct ppc_link_hash_table): Remove tls_sec. (ppc64_elf_tls_setup): Call _bfd_elf_tls_setup. Return section. (ppc64_elf_tls_optimize): Adjust to use elf.tls_sec. (ppc64_elf_relocate_section): Likewise. * elf64-ppc.h (ppc64_elf_tls_setup): Update. * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Call _bfd_elf_tls_setup.
2003-07-10 * elf64-ppc.c (bfd_elf64_mkobject): Define.Alan Modra1-1/+3
(struct ppc64_elf_obj_tdata): New. (ppc64_elf_tdata, ppc64_tlsld_got): Define. (ppc64_elf_mkobject): New function. (struct got_entry): Add "owner". Move "tls_type". (struct ppc_link_hash_table): Delete "relgot", "tlsld_got". (ppc64_elf_init_stub_bfd): New function. (create_got_section): Create header .got in dynobj. Create .got and .rela.got in each bfd. Stash pointers in ppc64_elf_obj_tdata. (ppc64_elf_create_dynamic_sections): Don't call create_got_section. Look for dynobj .got, and test it. (ppc64_elf_copy_indirect_symbol): Adjust for changed got. (update_local_sym_info): Likewise. (ppc64_elf_check_relocs): Likewise. (ppc64_elf_gc_sweep_hook): Likewise. (ppc64_elf_tls_optimize): Likewise. (allocate_dynrelocs): Likewise. (ppc64_elf_size_dynamic_sections): Likewise. (ppc64_elf_relocate_section): Likewise. (ppc64_elf_next_toc_section): Update comment. (toc_adjusting_stub_needed): Remove unneeded cast. (ppc64_elf_build_stubs): Check for stub sections in stub bfd by testing section flags. (ppc64_elf_build_stubs): Likewise. (ppc64_elf_size_stubs): Likewise. Remove stub_bfd param. (ppc64_elf_finish_dynamic_sections): Write out got sections. (func_desc_adjust): Copy over dynamic info for undef weaks. * elf64-ppc.h (ppc64_elf_init_stub_bfd): Declare. (ppc64_elf_size_stubs): Update prototype. * elflink.h (elf_link_sort_relocs): Use link_orders to find reldyn input sections rather than scanning dynobj.
2003-06-20 * elf64-ppc.c: Convert to C90 function definitions, remove unnecessaryAlan Modra1-12/+12
prototypes and casts. Replace PTR with void *. Format copyright. Mention ABI links. (struct ppc_link_hash_table): Rename sgot, srelgot, splt, srelplt, sdynbss, srelbss, sglink, sbrlt and srelbrlt to got, relgot .. relbrlt. (ppc_type_of_stub): Make r_type an enum. (ppc64_elf_size_stubs): Likewise. * elf64-ppc.h: Remove PARAMS macro.
2003-06-19 * elf64-ppc.c (ppc64_elf_reloc_type_lookup): Tidy prototype.Alan Modra1-1/+1
(ppc64_elf_info_to_howto): Likewise. (ppc64_elf_build_stubs): Add "stats" param, and print statistics. * elf64-ppc.h (ppc64_elf_build_stubs): Adjust prototype.
2003-06-19 * elf64-ppc.c (toc_adjusting_stub_needed): New function.Alan Modra1-1/+1
(ppc64_elf_next_input_section): Use it here to set has_gp_reloc. Return error condition. (ppc64_elf_size_stubs): Restrict toc adjusting stubs to sections that have has_gp_reloc set. (struct ppc_link_hash_table): Add stub_count. (ppc_build_one_stub): Increment it. (ppc64_elf_link_hash_table_create): zmalloc rather than clearing individual fields. * elf64-ppc.h (ppc64_elf_next_input_section): Update prototype.
2003-06-08 * elf64-ppc.c: Move TARGET_LITTLE_SYM and other macros used byAlan Modra1-1/+5
elfxx-target.h so that we can use elf_backend_got_header_size. (ELF_MACHINE_ALT1, ELF_MACHINE_ALT2): Delete. (GLINK_CALL_STUB_SIZE): Modify. Define new glink call stub and associated macros. (ppc64_elf_howto_raw <GOT_TPREL16_DS, GOT_TPREL16_LO_DS>): Correct dst_mask. (enum ppc_stub_type): Add ppc_stub_long_branch_r2off and ppc_stub_plt_branch_r2off. (struct ppc_stub_hash_entry): Reorganize. (struct ppc_link_hash_table): Add no_multi_toc, multi_toc_needed, toc_curr, toc_off and emit_stub_syms. (ppc64_elf_link_hash_table_create): Init them. (ppc_stub_name): Correct string size. (ppc64_elf_check_relocs): Set has_gp_reloc on GOT and TOC relocs. (ppc64_elf_size_dynamic_sections): Set no_multi_toc if GOT entries used. (ppc_type_of_stub): Tweak root.type test. (build_plt_stub): Remove glink code. Adjust for insn macro changes. (ppc_size_one_stub): Handle ppc_stub_long_branch_r2off and ppc_stub_plt_branch_r2off. (ppc_build_one_stub): Likewise. Fix var shadowing. Correct addis,addi range test. Use toc_off to calculte r2 values. Handle emit_stub_syms. (ppc64_elf_setup_section_lists): Remove htab creator flavour test. Initialize elf_gp and toc_curr. (ppc64_elf_next_toc_section, ppc64_elf_reinit_toc): New functions. (ppc64_elf_next_input_section): Set toc_off. (group_sections): Ensure groups have the same TOC. (ppc64_elf_size_stubs): Check whether we need a TOC adjusting stub. (ppc64_elf_build_stubs): Add emit_stub_syms param, and stash in htab. Build new glink stub. (ppc64_elf_relocate_section): Handle multiple TOCs. Fix comments. (ppc64_elf_finish_dynamic_sections): Adjust DT_PPC64_GLINK. * elf64-ppc.h (ppc64_elf_build_stubs): Update prototype. (ppc64_elf_next_toc_section, ppc64_elf_reinit_toc): Declare. * section.c (struct sec): Rename flag12 to has_gp_reloc. (STD_SECTION): Update. * ecoff.c (bfd_debug_section): Update comment. * bfd-in2.h: Regenerate.
2003-02-09 * elf64-ppc.c (TLS_GD_LD): Don't define..Alan Modra1-0/+2
(TLS_GD): ..define this instead and update all uses. (TLS_TPRELGD): Define. (ppc64_elf_link_hash_table_create): Tweak initialization of init_refcount and init_offset. (ppc64_elf_check_relocs): Add one extra element to t_symndx array. Mark second slot of GD or LD toc entries. (get_tls_type): Return an int. Distinguish toc GD and LD entries from other tls types. (ppc64_elf_tls_setup): New function, split out from.. (ppc64_elf_tls_optimize): ..here. Don't optimize when symbols are defined in a dynamic object. Fix LD optimization. Don't set TLS_TPREL on GD->IE optimization, use TLS_TPRELGD instead. Use get_tls_type return value to properly decide whether toc GD and LD entries can optimize away __tls_get_addr call. Check next reloc after DTPMOD64 to determine GD or LD rather than looking at TLS_LD flag. Don't attempt to adjust got entry tls_type here.. (allocate_dynrelocs): ..instead, adjust got entry tls_type here, and look for possible merges. (ppc64_elf_size_dynamic_sections): Adjust local got entries for optimization. (ppc64_elf_size_stubs): Tweak __tls_get_addr fudge. (ppc64_elf_relocate_section): Rename some vars to better reflect usage. Make use of return value from get_tls_type to properly detect GD and LD optimizations. Split tlsld/gd hi/ha from lo/ds case. Don't handle tls_get_addr removal when looking at REL24 relocs, do it when looking at the previous reloc. Check reloc after DTPMOD64 to determine GD or LD. * elf64-ppc.h (ppc64_elf_tls_setup): Declare.
2003-02-04 * reloc.c: Add PPC and PPC64 TLS relocs.Alan Modra1-1/+3
* 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.
2002-11-30s/boolean/bfd_boolean/ s/true/TRUE/ s/false/FALSE/. SimplifyAlan Modra1-4/+4
comparisons of bfd_boolean vars with TRUE/FALSE. Formatting.
2002-11-12 * elflink.h (elf_link_add_object_symbols): Optimize stabs forAlan Modra1-0/+2
relocatable link too. (elf_link_input_bfd): When emitting relocs, adjust offsets for eh_frame and stab sections. Zap deleted relocs. (elf_reloc_symbol_deleted_p): Return true for zero r_symndx. (elf_bfd_discard_info): Run for relocatable link too. * elf64-ppc.c (ppc64_elf_edit_opd): Rename from edit_opd. Make global. Handle ld -r case. (ppc64_elf_size_dynamic_sections): Don't call edit_opd from here. * elf64-ppc.h (ppc64_elf_edit_opd): Declare.
2002-07-01 * elflink.h (elf_gc_mark): Pass in the section whose relocs we areAlan Modra1-0/+2
examining to gc_mark_hook, rather than the bfd. (elf_gc_sections): Adjust. * elf-bfd.h (struct elf_backend_data <gc_mark_hook>): Likewise. * elf-m10300.c (mn10300_elf_gc_mark_hook): Likewise. * elf32-arm.h (elf32_arm_gc_mark_hook): Likewise. * elf32-avr.c (elf32_avr_gc_mark_hook): Likewise. * elf32-cris.c (cris_elf_gc_mark_hook): Likewise. * elf32-d10v.c (elf32_d10v_gc_mark_hook): Likewise. * elf32-fr30.c (fr30_elf_gc_mark_hook): Likewise. * elf32-hppa.c (elf32_hppa_gc_mark_hook): Likewise. * elf32-i386.c (elf_i386_gc_mark_hook): Likewise. * elf32-m32r.c (m32r_elf_gc_mark_hook): Likewise. * elf32-m68k.c (elf_m68k_gc_mark_hook): Likewise. * elf32-mcore.c (mcore_elf_gc_mark_hook): Likewise. * elf32-openrisc.c (openrisc_elf_gc_mark_hook): Likewise. * elf32-ppc.c (ppc_elf_gc_mark_hook): Likewise. * elf32-s390.c (elf_s390_gc_mark_hook): Likewise. * elf32-sh.c (sh_elf_gc_mark_hook): Likewise. * elf32-sparc.c (elf32_sparc_gc_mark_hook): Likewise. * elf32-v850.c (v850_elf_gc_mark_hook): Likewise. * elf32-vax.c (elf_vax_gc_mark_hook): Likewise. * elf32-xstormy16.c (xstormy16_elf_gc_mark_hook): Likewise. * elf64-mmix.c (mmix_elf_gc_mark_hook): Likewise. * elf64-ppc.c (ppc64_elf_gc_mark_hook): Likewise. * elf64-s390.c (elf_s390_gc_mark_hook): Likewise. * elf64-sh64.c (sh_elf64_gc_mark_hook): Likewise. * elfxx-mips.c (_bfd_mips_elf_gc_mark_hook): Likewise. * elfxx-mips.h (_bfd_mips_elf_gc_mark_hook): Likewise. * elf64-x86-64.c (elf64_x86_64_gc_mark_hook): Likewise. * elf32-frv.c (elf32_frv_gc_mark_hook): Likewise. Also remove redundant local sym tests. * elf64-ppc.c (struct ppc_link_hash_entry): Add is_entry. (link_hash_newfunc): Init is_entry. (ppc64_elf_copy_indirect_symbol): Copy is_entry. (ppc64_elf_link_hash_table_create): Init all_local_syms. (create_linkage_sections): Use bfd_make_section_anyway rather than bfd_make_section. (ppc64_elf_mark_entry_syms): New function. (ppc64_elf_check_relocs): Don't bother testing elf_bad_symtab. Set up opd entry to function section map. (ppc64_elf_gc_mark_hook): Special case opd section relocs, and relocs that reference the opd section. (edit_opd): New function. (ppc64_elf_size_dynamic_sections): Call get_local_syms and edit_opd. (ppc64_elf_setup_section_lists): Don't calculate htab->bfd_count here. (get_local_syms): Do so here. Exit if we already have local syms. Remove bogus comment imported from elf32-hppa.c. Don't attempt to read local syms on non-ELF input. (ppc64_elf_size_stubs): Call _bfd_elf64_link_read_relocs rather than duplicating it's function here. Adjust free of internal relocs to suit. (ppc64_elf_relocate_section): Adjust local syms in opd section. * elf64-ppc.h (ppc64_elf_mark_entry_syms): Declare. * elf32-hppa.c (elf32_hppa_size_stubs): Call _bfd_elf32_link_read_relocs rather than duplicating it's function here. Adjust free of internal relocs to suit.
2002-05-02 * elf64-ppc.c (ppc64_elf_addr16_ha_reloc): Delete.Alan Modra1-3/+3
(ppc64_elf_ha_reloc): New function. (ppc64_elf_brtaken_reloc): New function. (ppc64_elf_sectoff_reloc): New function. (ppc64_elf_sectoff_ha_reloc): New function. (ppc64_elf_toc_reloc): New function. (ppc64_elf_toc_ha_reloc): New function. (ppc64_elf_toc64_reloc): New function. (ppc64_elf_unhandled_reloc): New function. (ppc64_elf_howto_raw): Use the above. <R_PPC64_RELATIVE>: Mark pc_relative, pcrel_offset. <R_PPC64_SECTOFF>: Not pc_relative or pcrel_offset. Fix dst_mask. <R_PPC64_SECTOFF_DS>: Likewise. (IS_ABSOLUTE_RELOC): Update. (struct ppc_link_hash_table): Add have_undefweak. (ppc64_elf_link_hash_table_create): Init. (func_desc_adjust): Set have_undefweak. (ppc64_elf_func_desc_adjust): Call func_desc_adjust earlier. Only add the .sfpr blr when have_undefweak. (ppc64_elf_setup_section_lists): Check hash table flavour. (ppc64_elf_next_input_section): Move output_section->owner test to ppc64elf.em. (ppc64_elf_set_toc): Rename to ppc64_elf_toc, remove info param and relocatable test. Return TOCstart and don't set elf_gp. (ppc64_elf_relocate_section): Correct BRTAKEN/BRNTAKEN branch offset calculation. Add assert on weak sym branch tweaks. * elf64-ppc.h (ppc64_elf_set_toc): Delete. (ppc64_elf_toc): Declare. (ppc64_elf_next_input_section): Update. * emultempl/ppc64elf.em (gld${EMULATION_NAME}_after_allocation): Adjust for ppc64_elf_set_toc change. #include libbfd.h. (build_section_lists): Do output_section tests here.
2002-05-01 * elf64-ppc.c (CROR_151515, CROR_313131): Define.Alan Modra1-3/+11
(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-01-16 * elflink.c (_bfd_elf_create_dynamic_sections): Don't set SEC_CODEAlan Modra1-0/+22
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.