binutils-gdb/bfd/elf64-mips.c

3356 lines
103 KiB
C
Raw Normal View History

1999-05-03 09:29:11 +02:00
/* MIPS-specific support for 64-bit ELF
* aout-adobe.c (aout_32_bfd_reloc_name_lookup): Define. * aout-arm.c (MY_bfd_reloc_name_lookup): Define. (MY (bfd_reloc_name_lookup)): New function. * aout-ns32k.c (MY (bfd_reloc_name_lookup)): New function. * aout-target.h (NAME (aout, reloc_name_lookup)): Declare. (MY_bfd_reloc_name_lookup): Define. * aout-tic30.c (tic30_aout_reloc_name_lookup): New function. (MY_bfd_reloc_name_lookup): Define. * aoutx.h (NAME (aout, reloc_type_lookup)): Don't declare. (NAME (aout, reloc_name_lookup)): New function. * bout.c (b_out_bfd_reloc_name_lookup): New function. * coff-alpha.c (alpha_bfd_reloc_name_lookup): New function. (_bfd_ecoff_bfd_reloc_name_lookup): Define. * coff-arm.c (coff_arm_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-i386.c (coff_bfd_reloc_name_lookup): Define. (coff_i386_reloc_name_lookup): New function. * coff-i860.c (coff_i860_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-i960.c (coff_i960_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-m68k.c (m68k_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-maxq.c (maxq_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-mcore.c (mcore_coff_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-mips.c (mips_bfd_reloc_name_lookup): New function. (_bfd_ecoff_bfd_reloc_name_lookup): Define. * coff-ppc.c (ppc_coff_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-rs6000.c (coff_bfd_reloc_name_lookup): Define. (_bfd_xcoff_reloc_name_lookup): New function. (rs6000coff_vec, pmac_xcoff_vec): Init new field. * coff-sh.c (coff_bfd_reloc_name_lookup): Define. (sh_coff_reloc_name_lookup): New function. * coff-sparc.c (coff_sparc_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-tic30.c (coff_bfd_reloc_name_lookup): Define. (tic30_coff_reloc_name_lookup): New function. * coff-tic4x.c (coff_bfd_reloc_name_lookup): Define. (tic4x_coff_reloc_name_lookup): New function. * coff-tic54x.c (coff_bfd_reloc_name_lookup): Define. (tic54x_coff_reloc_name_lookup): New function. * coff-x86_64.c (coff_bfd_reloc_name_lookup): Define. (coff_amd64_reloc_name_lookup): New function. * coff-z80.c (coff_z80_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-z8k.c (coff_z8k_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff64-rs6000.c (coff_bfd_reloc_name_lookup): Define. (xcoff64_reloc_name_lookup): New function. (rs6000coff64_vec, aix5coff64_vec): Init new field. * coffcode.h (coff_bfd_reloc_name_lookup): Define. * elf-hppa.h (elf_hppa_reloc_name_lookup): New function. * elf-m10200.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf-m10300.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-arc.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-arm.c (elf32_arm_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-avr.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-bfin.c (bfin_bfd_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-cr16c.c (elf_cr16c_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-cris.c (cris_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-crx.c (elf_crx_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-d10v.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-d30v.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-dlx.c (elf32_dlx_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-fr30.c (fr30_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-frv.c (frv_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-gen.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-h8300.c (elf32_h8_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-hppa.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i370.c (i370_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i386.c (elf_i386_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i860.c (elf32_i860_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i960.c (elf32_i960_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-ip2k.c (ip2k_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-iq2000.c (iq2000_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m32c.c (m32c_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m32r.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68hc11.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68hc12.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68k.c (reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m88k.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mcore.c (mcore_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mep.c (mep_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mips.c (bfd_elf32_bfd_reloc_name_lookup): New function. (mips_vxworks_bfd_reloc_name_lookup): Likewise. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-msp430.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-mt.c (mt_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-openrisc.c (openrisc_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-or32.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-pj.c (pj_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-ppc.c (ppc_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-s390.c (elf_s390_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-score.c (elf32_score_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-sh.c (sh_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-sparc.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-spu.c (spu_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-v850.c (v850_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-vax.c (reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xc16x.c (xc16x_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xstormy16.c (xstormy16_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xtensa.c (elf_xtensa_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf64-alpha.c (elf64_alpha_bfd_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-gen.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-hppa.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-mips.c (bfd_elf64_bfd_reloc_name_lookup): New function. * elf64-mmix.c (bfd_elf64_bfd_reloc_name_lookup): New function. * elf64-ppc.c (ppc64_elf_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-s390.c (elf_s390_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-sh64.c (sh_elf64_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-sparc.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-x86-64.c (elf64_x86_64_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elfn32-mips.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elfxx-ia64.c (elfNN_ia64_reloc_name_lookup): New function. (bfd_elfNN_bfd_reloc_name_lookup): Define. * elfxx-sparc.c (_bfd_sparc_elf_reloc_name_lookup): New function. * elfxx-sparc.h (_bfd_sparc_elf_reloc_name_lookup): Declare. * i386msdos.c (msdos_bfd_reloc_name_lookup): Define. * i386os9k.c (aout_32_bfd_reloc_name_lookup): Define. * ieee.c (ieee_bfd_reloc_name_lookup): Define. * libaout.h (NAME (aout, reloc_name_lookup)): Declare. * libbfd-in.h (_bfd_norelocs_bfd_reloc_name_lookup): Declare. * mipsbsd.c (MY_bfd_reloc_name_lookup): Define. (MY(reloc_type_lookup)): Rename from MY(reloc_howto_type_lookup). (MY(reloc_name_lookup)): New function. * nlm-target.h (nlm_bfd_reloc_name_lookup): Define. * oasys.c (oasys_bfd_reloc_name_lookup): Define. * pdp11.c (NAME (aout, reloc_name_lookup)): New function. * pe-mips.c (coff_mips_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * reloc.c (bfd_reloc_name_lookup): New function. * riscix.c (riscix_reloc_name_lookup): New function. (MY_bfd_reloc_name_lookup): Define. * som.c (som_bfd_reloc_name_lookup): New function. * targets.c (struct bfd_target): Add reloc_name_lookup. (BFD_JUMP_TABLE_RELOCS): Add NAME##_bfd_reloc_name_lookup. * versados.c (versados_bfd_reloc_name_lookup): Define. * vms.c (vms_bfd_reloc_name_lookup): New function. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate.
2007-03-26 14:23:03 +02:00
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2009-09-02 09:25:43 +02:00
2006, 2007, 2008 Free Software Foundation, Inc.
1999-05-03 09:29:11 +02:00
Ian Lance Taylor, Cygnus Support
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
Linker support added by Mark Mitchell, CodeSourcery, LLC.
<mark@codesourcery.com>
1999-05-03 09:29:11 +02:00
This file is part of BFD, the Binary File Descriptor library.
1999-05-03 09:29:11 +02:00
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 3 of the License, or
(at your option) any later version.
1999-05-03 09:29:11 +02:00
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., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
1999-05-03 09:29:11 +02:00
/* This file supports the 64-bit MIPS ELF ABI.
The MIPS 64-bit ELF ABI uses an unusual reloc format. This file
overrides the usual ELF reloc handling, and handles reading and
writing the relocations here. */
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* TODO: Many things are unsupported, even if there is some code for it
. (which was mostly stolen from elf32-mips.c and slightly adapted).
.
. - Relocation handling for REL relocs is wrong in many cases and
. generally untested.
. - Relocation handling for RELA relocs related to GOT support are
. also likely to be wrong.
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
. - Support for MIPS16 is untested.
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
. - Combined relocs with RSS_* entries are unsupported.
. - The whole GOT handling for NewABI is missing, some parts of
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
. the OldABI version is still lying around and should be removed.
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
*/
1999-05-03 09:29:11 +02:00
#include "sysdep.h"
#include "bfd.h"
1999-05-03 09:29:11 +02:00
#include "libbfd.h"
#include "aout/ar.h"
#include "bfdlink.h"
#include "genlink.h"
#include "elf-bfd.h"
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
#include "elfxx-mips.h"
1999-05-03 09:29:11 +02:00
#include "elf/mips.h"
/* Get the ECOFF swapping routines. The 64-bit ABI is not supposed to
use ECOFF. However, we support it anyhow for an easier changeover. */
#include "coff/sym.h"
#include "coff/symconst.h"
#include "coff/internal.h"
#include "coff/ecoff.h"
/* The 64 bit versions of the mdebug data structures are in alpha.h. */
#include "coff/alpha.h"
#define ECOFF_SIGNED_64
1999-05-03 09:29:11 +02:00
#include "ecoffswap.h"
static void mips_elf64_swap_reloc_in
(bfd *, const Elf64_Mips_External_Rel *, Elf64_Mips_Internal_Rela *);
1999-05-03 09:29:11 +02:00
static void mips_elf64_swap_reloca_in
(bfd *, const Elf64_Mips_External_Rela *, Elf64_Mips_Internal_Rela *);
1999-05-03 09:29:11 +02:00
static void mips_elf64_swap_reloc_out
(bfd *, const Elf64_Mips_Internal_Rela *, Elf64_Mips_External_Rel *);
1999-05-03 09:29:11 +02:00
static void mips_elf64_swap_reloca_out
(bfd *, const Elf64_Mips_Internal_Rela *, Elf64_Mips_External_Rela *);
static void mips_elf64_be_swap_reloc_in
(bfd *, const bfd_byte *, Elf_Internal_Rela *);
static void mips_elf64_be_swap_reloc_out
(bfd *, const Elf_Internal_Rela *, bfd_byte *);
static void mips_elf64_be_swap_reloca_in
(bfd *, const bfd_byte *, Elf_Internal_Rela *);
static void mips_elf64_be_swap_reloca_out
(bfd *, const Elf_Internal_Rela *, bfd_byte *);
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
static reloc_howto_type *bfd_elf64_bfd_reloc_type_lookup
(bfd *, bfd_reloc_code_real_type);
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
static reloc_howto_type *mips_elf64_rtype_to_howto
(unsigned int, bfd_boolean);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static void mips_elf64_info_to_howto_rel
(bfd *, arelent *, Elf_Internal_Rela *);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static void mips_elf64_info_to_howto_rela
(bfd *, arelent *, Elf_Internal_Rela *);
static long mips_elf64_get_reloc_upper_bound
(bfd *, asection *);
static long mips_elf64_canonicalize_reloc
(bfd *, asection *, arelent **, asymbol **);
static long mips_elf64_get_dynamic_reloc_upper_bound
(bfd *);
static long mips_elf64_canonicalize_dynamic_reloc
(bfd *, arelent **, asymbol **);
static bfd_boolean mips_elf64_slurp_one_reloc_table
(bfd *, asection *, Elf_Internal_Shdr *, bfd_size_type, arelent *,
asymbol **, bfd_boolean);
static bfd_boolean mips_elf64_slurp_reloc_table
(bfd *, asection *, asymbol **, bfd_boolean);
static void mips_elf64_write_relocs
(bfd *, asection *, void *);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static void mips_elf64_write_rel
(bfd *, asection *, Elf_Internal_Shdr *, int *, void *);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static void mips_elf64_write_rela
(bfd *, asection *, Elf_Internal_Shdr *, int *, void *);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static bfd_reloc_status_type mips_elf64_gprel16_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static bfd_reloc_status_type mips_elf64_literal_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static bfd_reloc_status_type mips_elf64_gprel32_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static bfd_reloc_status_type mips_elf64_shift6_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
static bfd_reloc_status_type mips16_gprel_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_boolean mips_elf64_assign_gp
(bfd *, bfd_vma *);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static bfd_reloc_status_type mips_elf64_final_gp
(bfd *, asymbol *, bfd_boolean, char **, bfd_vma *);
static bfd_boolean mips_elf64_object_p
(bfd *);
static irix_compat_t elf64_mips_irix_compat
(bfd *);
static bfd_boolean elf64_mips_grok_prstatus
(bfd *, Elf_Internal_Note *);
static bfd_boolean elf64_mips_grok_psinfo
(bfd *, Elf_Internal_Note *);
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
extern const bfd_target bfd_elf64_bigmips_vec;
extern const bfd_target bfd_elf64_littlemips_vec;
1999-05-03 09:29:11 +02:00
/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
from smaller values. Start with zero, widen, *then* decrement. */
#define MINUS_ONE (((bfd_vma)0) - 1)
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
/* The number of local .got entries we reserve. */
#define MIPS_RESERVED_GOTNO (2)
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
1999-05-03 09:29:11 +02:00
/* The relocation table used for SHT_REL sections. */
static reloc_howto_type mips_elf64_howto_table_rel[] =
{
/* No relocation. */
HOWTO (R_MIPS_NONE, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_NONE", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 16 bit relocation. */
HOWTO (R_MIPS_16, /* type */
0, /* rightshift */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
2, /* size (0 = byte, 1 = short, 2 = long) */
1999-05-03 09:29:11 +02:00
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 32 bit relocation. */
HOWTO (R_MIPS_32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_32", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 32 bit symbol relative relocation. */
HOWTO (R_MIPS_REL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_REL32", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 26 bit jump address. */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_26, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
26, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
/* This needs complex overflow
detection, because the upper 36
2001-02-12 00:21:01 +01:00
bits must match the PC + 4. */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_26", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x03ffffff, /* src_mask */
0x03ffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
/* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.
However, the native IRIX6 tools use them, so we try our best. */
1999-05-03 09:29:11 +02:00
/* High 16 bits of symbol value. */
HOWTO (R_MIPS_HI16, /* type */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
16, /* rightshift */
1999-05-03 09:29:11 +02:00
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_hi16_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_HI16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Low 16 bits of symbol value. */
HOWTO (R_MIPS_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_lo16_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_LO16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* GP relative reference. */
HOWTO (R_MIPS_GPREL16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mips_elf64_gprel16_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GPREL16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Reference to literal section. */
HOWTO (R_MIPS_LITERAL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mips_elf64_literal_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_LITERAL", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Reference to global offset table. */
HOWTO (R_MIPS_GOT16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_got16_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elf64-mips.c (mips_elf64_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_elf64_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf64_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfn32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (elf_mips_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfxx-mips.c: Formatting fixes. (mips_elf_calculate_relocation): Handle R_MIPS_GNU_REL16_S2 and R_MIPS_PC16 identically. gas/ * config/tc-mips.c (append_insn): Handle BFD_RELOC_16_PCREL_S2. (macro_build): Complain for invalid branch displacements. (mips_validate_fix): Delete. (md_apply_fix): Re-add pcrel support for branches. Use consistent text for misaligned branch targets. (tc_gen_reloc: Re-add pcrel support for branches. Handle strange BFD pcrel processing. Remove error for unresolved branches. * config/tc-mips.h (TC_VALIDATE_FIX, mips_validate_fix): Delete. gas/testsuite/ * gas/mips/bge.d, gas/mips/bge.s, gas/mips/bgeu.d, gas/mips/bgeu.s, gas/mips/blt.d, gas/mips/blt.s, gas/mips/bltu.d, gas/mips/bltu.s: Reactivate external branch tests. * gas/mips/branch-misc-2.d, gas/mips/branch-misc-2pic.d, gas/mips/branch-misc-2-64.d, gas/mips/branch-misc-2pic-64.d: New tests. * gas/mips/branch-misc-2.l, gas/mips/branch-misc-2pic.l, gas/testsuite/gas/mips/branch-misc-2pic.s: Remove. * gas/mips/mips.exp: Adjust branch-misc-2 tests. Add 64-bit variants.
2005-11-23 15:04:18 +01:00
/* 16 bit PC relative reference. Note that the ABI document has a typo
and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
We do the right thing here. */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_PC16, /* type */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elf64-mips.c (mips_elf64_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_elf64_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf64_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfn32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (elf_mips_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfxx-mips.c: Formatting fixes. (mips_elf_calculate_relocation): Handle R_MIPS_GNU_REL16_S2 and R_MIPS_PC16 identically. gas/ * config/tc-mips.c (append_insn): Handle BFD_RELOC_16_PCREL_S2. (macro_build): Complain for invalid branch displacements. (mips_validate_fix): Delete. (md_apply_fix): Re-add pcrel support for branches. Use consistent text for misaligned branch targets. (tc_gen_reloc: Re-add pcrel support for branches. Handle strange BFD pcrel processing. Remove error for unresolved branches. * config/tc-mips.h (TC_VALIDATE_FIX, mips_validate_fix): Delete. gas/testsuite/ * gas/mips/bge.d, gas/mips/bge.s, gas/mips/bgeu.d, gas/mips/bgeu.s, gas/mips/blt.d, gas/mips/blt.s, gas/mips/bltu.d, gas/mips/bltu.s: Reactivate external branch tests. * gas/mips/branch-misc-2.d, gas/mips/branch-misc-2pic.d, gas/mips/branch-misc-2-64.d, gas/mips/branch-misc-2pic-64.d: New tests. * gas/mips/branch-misc-2.l, gas/mips/branch-misc-2pic.l, gas/testsuite/gas/mips/branch-misc-2pic.s: Remove. * gas/mips/mips.exp: Adjust branch-misc-2 tests. Add 64-bit variants.
2005-11-23 15:04:18 +01:00
2, /* rightshift */
1999-05-03 09:29:11 +02:00
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
TRUE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_PC16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
TRUE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 16 bit call through global offset table. */
HOWTO (R_MIPS_CALL16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_CALL16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 32 bit GP relative reference. */
HOWTO (R_MIPS_GPREL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
complain_overflow_dont, /* complain_on_overflow */
mips_elf64_gprel32_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GPREL32", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
EMPTY_HOWTO (13),
EMPTY_HOWTO (14),
EMPTY_HOWTO (15),
1999-05-03 09:29:11 +02:00
/* A 5 bit shift field. */
HOWTO (R_MIPS_SHIFT5, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
5, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_SHIFT5", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0x000007c0, /* src_mask */
0x000007c0, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* A 6 bit shift field. */
HOWTO (R_MIPS_SHIFT6, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
6, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mips_elf64_shift6_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_SHIFT6", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0x000007c4, /* src_mask */
0x000007c4, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 64 bit relocation. */
HOWTO (R_MIPS_64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_64", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Displacement in the global offset table. */
HOWTO (R_MIPS_GOT_DISP, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_DISP", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Displacement to page pointer in the global offset table. */
HOWTO (R_MIPS_GOT_PAGE, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_PAGE", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Offset from page pointer in the global offset table. */
HOWTO (R_MIPS_GOT_OFST, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_OFST", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* High 16 bits of displacement in global offset table. */
HOWTO (R_MIPS_GOT_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_HI16", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Low 16 bits of displacement in global offset table. */
HOWTO (R_MIPS_GOT_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_LO16", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 64 bit subtraction. */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_SUB, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_SUB", /* name */
TRUE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Insert the addend as an instruction. */
/* FIXME: Not handled correctly. */
HOWTO (R_MIPS_INSERT_A, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_INSERT_A", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Insert the addend as an instruction, and change all relocations
to refer to the old instruction at the address. */
/* FIXME: Not handled correctly. */
HOWTO (R_MIPS_INSERT_B, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_INSERT_B", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Delete a 32 bit instruction. */
/* FIXME: Not handled correctly. */
HOWTO (R_MIPS_DELETE, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_DELETE", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
/* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.
We don't, because
a) It means building the addend from a R_MIPS_HIGHEST/R_MIPS_HIGHER/
R_MIPS_HI16/R_MIPS_LO16 sequence with varying ordering, using
fallable heuristics.
b) No other NewABI toolchain actually emits such relocations. */
EMPTY_HOWTO (R_MIPS_HIGHER),
EMPTY_HOWTO (R_MIPS_HIGHEST),
1999-05-03 09:29:11 +02:00
/* High 16 bits of displacement in global offset table. */
HOWTO (R_MIPS_CALL_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_CALL_HI16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Low 16 bits of displacement in global offset table. */
HOWTO (R_MIPS_CALL_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_CALL_LO16", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Section displacement, used by an associated event location section. */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_SCN_DISP, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_SCN_DISP", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_REL16, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_REL16", /* name */
TRUE, /* partial_inplace */
0xffff, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* These two are obsolete. */
EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
EMPTY_HOWTO (R_MIPS_PJUMP),
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Similiar to R_MIPS_REL32, but used for relocations in a GOT section.
It must be used for multigot GOT's (and only there). */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_RELGOT, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_RELGOT", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* Protected jump conversion. This is an optimization hint. No
relocation is required for correctness. */
HOWTO (R_MIPS_JALR, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_JALR", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x00000000, /* dst_mask */
FALSE), /* pcrel_offset */
* elfxx-mips.c (struct mips_got_entry): Add tls_type. (struct mips_got_info): Add tls_gotno, tls_assigned_gotno, and tls_ldm_offset. (struct mips_elf_got_per_bfd_arg): Add global_count. (struct mips_elf_count_tls_arg): New. (struct mips_elf_hash_sort_data): Update comment for min_got_dynindx. (struct mips_elf_link_hash_entry): Add tls_type and tls_got_offset. (GOT_NORMAL, GOT_TLS_GD, GOT_TLS_LDM, GOT_TLS_IE) (GOT_TLS_OFFSET_DONE, GOT_TLS_DONE): Define. (TLS_RELOC_P): Define. (TP_OFFSET, DTP_OFFSET): Define. (dtprel_base, tprel_base): New functions. (mips_elf_link_hash_newfunc): Initialize tls_type. (mips_elf_got_entry_hash, mips_elf_got_entry_eq) (mips_elf_multi_got_entry_hash, mips_elf_multi_got_entry_eq): Handle TLS entries. (mips_tls_got_relocs, mips_elf_count_local_tls_relocs) (mips_elf_count_global_tls_entries, mips_elf_count_global_tls_relocs) (mips_elf_output_dynamic_relocation, mips_elf_initialize_tls_slots) (mips_tls_got_index): New functions. (mips_elf_local_got_index): Add new R_SYMNDX, H, and R_TYPE arguments. Pass them to mips_elf_create_local_got_entry. Use mips_tls_got_index. (mips_elf_global_got_index): Add new R_TYPE and INFO arguments. Handle TLS entries. (mips_elf_got_page, mips_elf_got16_entry): Update calls to mips_elf_create_local_got_entry. (mips_elf_create_local_got_entry): Add new R_SYMNDX, H, and R_TYPE arguments. Handle TLS entries. (mips_elf_sort_hash_table_f): Add non-TLS assertions. (mips_elf_record_local_got_symbol): Add new TLS_FLAG argument. Handle TLS entries. (mips_elf_record_global_got_symbol): Likewise. (mips_elf_make_got_per_bfd): Initialize new mips_got_info members. Count TLS entries. (mips_elf_merge_gots): Handle TLS entries when merging. (mips_elf_initialize_tls_index): New function. (mips_elf_set_global_got_offset): Handle TLS entries. (mips_elf_adjust_gp): Handle TLS. (mips_elf_multi_got): Remove redundant call to mips_elf_resolve_final_got_entries. Initialize global_count. Correct a comment. Initialize new TLS members of mips_got_info. Assign TLS GOT indexes for new GOTs. (mips_elf_create_got_section): Initialize new TLS members of mips_got_info. (mips_elf_calculate_relocation): Handle TLS relocs. (_bfd_mips_elf_check_relocs): Likewise. Update calls to changed functions. (_bfd_mips_elf_always_size_sections): Handle TLS. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Update calls to changed functions. (_bfd_mips_elf_copy_indirect_symbol): Copy tls_type. (_bfd_mips_elf_hide_symbol): Handle TLS. * elfn32-mips.c (elf_mips_howto_table_rel, elf_mips_howto_table_rela) (mips_reloc_map): Add TLS relocs. * elf32-mips.c (elf_mips_howto_table_rel, mips_reloc_map): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel) (mips_elf64_howto_table_rela, mips_reloc_map): Likewise. * reloc.c: Define new MIPS TLS relocations. * libbfd.h, bfd-in2.h: Regenerated.
2005-03-02 22:23:21 +01:00
/* TLS relocations. */
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
HOWTO (R_MIPS_TLS_DTPMOD64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_DTPMOD64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_MIPS_TLS_DTPREL64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_DTPREL64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS general dynamic variable reference. */
HOWTO (R_MIPS_TLS_GD, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_GD", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS local dynamic variable reference. */
HOWTO (R_MIPS_TLS_LDM, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_LDM", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS local dynamic offset. */
HOWTO (R_MIPS_TLS_DTPREL_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_DTPREL_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS local dynamic offset. */
HOWTO (R_MIPS_TLS_DTPREL_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_DTPREL_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS thread pointer offset. */
HOWTO (R_MIPS_TLS_GOTTPREL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_GOTTPREL", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS IE dynamic relocations. */
EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
HOWTO (R_MIPS_TLS_TPREL64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_TPREL64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS thread pointer offset. */
HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_TPREL_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS thread pointer offset. */
HOWTO (R_MIPS_TLS_TPREL_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_TPREL_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* 32 bit relocation with no addend. */
HOWTO (R_MIPS_GLOB_DAT, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GLOB_DAT", /* name */
FALSE, /* partial_inplace */
0x0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
};
/* The relocation table used for SHT_RELA sections. */
static reloc_howto_type mips_elf64_howto_table_rela[] =
{
/* No relocation. */
HOWTO (R_MIPS_NONE, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_NONE", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 16 bit relocation. */
HOWTO (R_MIPS_16, /* type */
0, /* rightshift */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
2, /* size (0 = byte, 1 = short, 2 = long) */
1999-05-03 09:29:11 +02:00
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 32 bit relocation. */
HOWTO (R_MIPS_32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_32", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 32 bit symbol relative relocation. */
HOWTO (R_MIPS_REL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_REL32", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 26 bit jump address. */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_26, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
26, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
/* This needs complex overflow
detection, because the upper 36
2001-02-12 00:21:01 +01:00
bits must match the PC + 4. */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_26", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x03ffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* High 16 bits of symbol value. */
HOWTO (R_MIPS_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_HI16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Low 16 bits of symbol value. */
HOWTO (R_MIPS_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_LO16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* GP relative reference. */
HOWTO (R_MIPS_GPREL16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
mips_elf64_gprel16_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GPREL16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Reference to literal section. */
HOWTO (R_MIPS_LITERAL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mips_elf64_literal_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_LITERAL", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Reference to global offset table. */
HOWTO (R_MIPS_GOT16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elf64-mips.c (mips_elf64_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_elf64_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf64_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfn32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (elf_mips_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfxx-mips.c: Formatting fixes. (mips_elf_calculate_relocation): Handle R_MIPS_GNU_REL16_S2 and R_MIPS_PC16 identically. gas/ * config/tc-mips.c (append_insn): Handle BFD_RELOC_16_PCREL_S2. (macro_build): Complain for invalid branch displacements. (mips_validate_fix): Delete. (md_apply_fix): Re-add pcrel support for branches. Use consistent text for misaligned branch targets. (tc_gen_reloc: Re-add pcrel support for branches. Handle strange BFD pcrel processing. Remove error for unresolved branches. * config/tc-mips.h (TC_VALIDATE_FIX, mips_validate_fix): Delete. gas/testsuite/ * gas/mips/bge.d, gas/mips/bge.s, gas/mips/bgeu.d, gas/mips/bgeu.s, gas/mips/blt.d, gas/mips/blt.s, gas/mips/bltu.d, gas/mips/bltu.s: Reactivate external branch tests. * gas/mips/branch-misc-2.d, gas/mips/branch-misc-2pic.d, gas/mips/branch-misc-2-64.d, gas/mips/branch-misc-2pic-64.d: New tests. * gas/mips/branch-misc-2.l, gas/mips/branch-misc-2pic.l, gas/testsuite/gas/mips/branch-misc-2pic.s: Remove. * gas/mips/mips.exp: Adjust branch-misc-2 tests. Add 64-bit variants.
2005-11-23 15:04:18 +01:00
/* 16 bit PC relative reference. Note that the ABI document has a typo
and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
We do the right thing here. */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_PC16, /* type */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elf64-mips.c (mips_elf64_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_elf64_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf64_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfn32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (elf_mips_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfxx-mips.c: Formatting fixes. (mips_elf_calculate_relocation): Handle R_MIPS_GNU_REL16_S2 and R_MIPS_PC16 identically. gas/ * config/tc-mips.c (append_insn): Handle BFD_RELOC_16_PCREL_S2. (macro_build): Complain for invalid branch displacements. (mips_validate_fix): Delete. (md_apply_fix): Re-add pcrel support for branches. Use consistent text for misaligned branch targets. (tc_gen_reloc: Re-add pcrel support for branches. Handle strange BFD pcrel processing. Remove error for unresolved branches. * config/tc-mips.h (TC_VALIDATE_FIX, mips_validate_fix): Delete. gas/testsuite/ * gas/mips/bge.d, gas/mips/bge.s, gas/mips/bgeu.d, gas/mips/bgeu.s, gas/mips/blt.d, gas/mips/blt.s, gas/mips/bltu.d, gas/mips/bltu.s: Reactivate external branch tests. * gas/mips/branch-misc-2.d, gas/mips/branch-misc-2pic.d, gas/mips/branch-misc-2-64.d, gas/mips/branch-misc-2pic-64.d: New tests. * gas/mips/branch-misc-2.l, gas/mips/branch-misc-2pic.l, gas/testsuite/gas/mips/branch-misc-2pic.s: Remove. * gas/mips/mips.exp: Adjust branch-misc-2 tests. Add 64-bit variants.
2005-11-23 15:04:18 +01:00
2, /* rightshift */
1999-05-03 09:29:11 +02:00
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
TRUE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_PC16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
TRUE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 16 bit call through global offset table. */
HOWTO (R_MIPS_CALL16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_CALL16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 32 bit GP relative reference. */
HOWTO (R_MIPS_GPREL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
complain_overflow_dont, /* complain_on_overflow */
mips_elf64_gprel32_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GPREL32", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
EMPTY_HOWTO (13),
EMPTY_HOWTO (14),
EMPTY_HOWTO (15),
1999-05-03 09:29:11 +02:00
/* A 5 bit shift field. */
HOWTO (R_MIPS_SHIFT5, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
5, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_SHIFT5", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0x000007c0, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* A 6 bit shift field. */
HOWTO (R_MIPS_SHIFT6, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
6, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mips_elf64_shift6_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_SHIFT6", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0x000007c4, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 64 bit relocation. */
HOWTO (R_MIPS_64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_64", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Displacement in the global offset table. */
HOWTO (R_MIPS_GOT_DISP, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_DISP", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Displacement to page pointer in the global offset table. */
HOWTO (R_MIPS_GOT_PAGE, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_PAGE", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Offset from page pointer in the global offset table. */
HOWTO (R_MIPS_GOT_OFST, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_OFST", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* High 16 bits of displacement in global offset table. */
HOWTO (R_MIPS_GOT_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_HI16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Low 16 bits of displacement in global offset table. */
HOWTO (R_MIPS_GOT_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_GOT_LO16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* 64 bit subtraction. */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_SUB, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_SUB", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Insert the addend as an instruction. */
/* FIXME: Not handled correctly. */
HOWTO (R_MIPS_INSERT_A, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_INSERT_A", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Insert the addend as an instruction, and change all relocations
to refer to the old instruction at the address. */
/* FIXME: Not handled correctly. */
HOWTO (R_MIPS_INSERT_B, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_INSERT_B", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Delete a 32 bit instruction. */
/* FIXME: Not handled correctly. */
HOWTO (R_MIPS_DELETE, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_DELETE", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Get the higher value of a 64 bit addend. */
HOWTO (R_MIPS_HIGHER, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_HIGHER", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Get the highest value of a 64 bit addend. */
HOWTO (R_MIPS_HIGHEST, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_HIGHEST", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* High 16 bits of displacement in global offset table. */
HOWTO (R_MIPS_CALL_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_CALL_HI16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Low 16 bits of displacement in global offset table. */
HOWTO (R_MIPS_CALL_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_CALL_LO16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Section displacement, used by an associated event location section. */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_SCN_DISP, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_SCN_DISP", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_REL16, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_REL16", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* These two are obsolete. */
EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
EMPTY_HOWTO (R_MIPS_PJUMP),
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Similiar to R_MIPS_REL32, but used for relocations in a GOT section.
It must be used for multigot GOT's (and only there). */
1999-05-03 09:29:11 +02:00
HOWTO (R_MIPS_RELGOT, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
1999-05-03 09:29:11 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
1999-05-03 09:29:11 +02:00
"R_MIPS_RELGOT", /* name */
FALSE, /* partial_inplace */
1999-05-03 09:29:11 +02:00
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* Protected jump conversion. This is an optimization hint. No
relocation is required for correctness. */
HOWTO (R_MIPS_JALR, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_JALR", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
0x00000000, /* dst_mask */
FALSE), /* pcrel_offset */
* elfxx-mips.c (struct mips_got_entry): Add tls_type. (struct mips_got_info): Add tls_gotno, tls_assigned_gotno, and tls_ldm_offset. (struct mips_elf_got_per_bfd_arg): Add global_count. (struct mips_elf_count_tls_arg): New. (struct mips_elf_hash_sort_data): Update comment for min_got_dynindx. (struct mips_elf_link_hash_entry): Add tls_type and tls_got_offset. (GOT_NORMAL, GOT_TLS_GD, GOT_TLS_LDM, GOT_TLS_IE) (GOT_TLS_OFFSET_DONE, GOT_TLS_DONE): Define. (TLS_RELOC_P): Define. (TP_OFFSET, DTP_OFFSET): Define. (dtprel_base, tprel_base): New functions. (mips_elf_link_hash_newfunc): Initialize tls_type. (mips_elf_got_entry_hash, mips_elf_got_entry_eq) (mips_elf_multi_got_entry_hash, mips_elf_multi_got_entry_eq): Handle TLS entries. (mips_tls_got_relocs, mips_elf_count_local_tls_relocs) (mips_elf_count_global_tls_entries, mips_elf_count_global_tls_relocs) (mips_elf_output_dynamic_relocation, mips_elf_initialize_tls_slots) (mips_tls_got_index): New functions. (mips_elf_local_got_index): Add new R_SYMNDX, H, and R_TYPE arguments. Pass them to mips_elf_create_local_got_entry. Use mips_tls_got_index. (mips_elf_global_got_index): Add new R_TYPE and INFO arguments. Handle TLS entries. (mips_elf_got_page, mips_elf_got16_entry): Update calls to mips_elf_create_local_got_entry. (mips_elf_create_local_got_entry): Add new R_SYMNDX, H, and R_TYPE arguments. Handle TLS entries. (mips_elf_sort_hash_table_f): Add non-TLS assertions. (mips_elf_record_local_got_symbol): Add new TLS_FLAG argument. Handle TLS entries. (mips_elf_record_global_got_symbol): Likewise. (mips_elf_make_got_per_bfd): Initialize new mips_got_info members. Count TLS entries. (mips_elf_merge_gots): Handle TLS entries when merging. (mips_elf_initialize_tls_index): New function. (mips_elf_set_global_got_offset): Handle TLS entries. (mips_elf_adjust_gp): Handle TLS. (mips_elf_multi_got): Remove redundant call to mips_elf_resolve_final_got_entries. Initialize global_count. Correct a comment. Initialize new TLS members of mips_got_info. Assign TLS GOT indexes for new GOTs. (mips_elf_create_got_section): Initialize new TLS members of mips_got_info. (mips_elf_calculate_relocation): Handle TLS relocs. (_bfd_mips_elf_check_relocs): Likewise. Update calls to changed functions. (_bfd_mips_elf_always_size_sections): Handle TLS. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Update calls to changed functions. (_bfd_mips_elf_copy_indirect_symbol): Copy tls_type. (_bfd_mips_elf_hide_symbol): Handle TLS. * elfn32-mips.c (elf_mips_howto_table_rel, elf_mips_howto_table_rela) (mips_reloc_map): Add TLS relocs. * elf32-mips.c (elf_mips_howto_table_rel, mips_reloc_map): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel) (mips_elf64_howto_table_rela, mips_reloc_map): Likewise. * reloc.c: Define new MIPS TLS relocations. * libbfd.h, bfd-in2.h: Regenerated.
2005-03-02 22:23:21 +01:00
/* TLS relocations. */
EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
HOWTO (R_MIPS_TLS_DTPMOD64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_DTPMOD64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_MIPS_TLS_DTPREL64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_DTPREL64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
* elfxx-mips.c (struct mips_got_entry): Add tls_type. (struct mips_got_info): Add tls_gotno, tls_assigned_gotno, and tls_ldm_offset. (struct mips_elf_got_per_bfd_arg): Add global_count. (struct mips_elf_count_tls_arg): New. (struct mips_elf_hash_sort_data): Update comment for min_got_dynindx. (struct mips_elf_link_hash_entry): Add tls_type and tls_got_offset. (GOT_NORMAL, GOT_TLS_GD, GOT_TLS_LDM, GOT_TLS_IE) (GOT_TLS_OFFSET_DONE, GOT_TLS_DONE): Define. (TLS_RELOC_P): Define. (TP_OFFSET, DTP_OFFSET): Define. (dtprel_base, tprel_base): New functions. (mips_elf_link_hash_newfunc): Initialize tls_type. (mips_elf_got_entry_hash, mips_elf_got_entry_eq) (mips_elf_multi_got_entry_hash, mips_elf_multi_got_entry_eq): Handle TLS entries. (mips_tls_got_relocs, mips_elf_count_local_tls_relocs) (mips_elf_count_global_tls_entries, mips_elf_count_global_tls_relocs) (mips_elf_output_dynamic_relocation, mips_elf_initialize_tls_slots) (mips_tls_got_index): New functions. (mips_elf_local_got_index): Add new R_SYMNDX, H, and R_TYPE arguments. Pass them to mips_elf_create_local_got_entry. Use mips_tls_got_index. (mips_elf_global_got_index): Add new R_TYPE and INFO arguments. Handle TLS entries. (mips_elf_got_page, mips_elf_got16_entry): Update calls to mips_elf_create_local_got_entry. (mips_elf_create_local_got_entry): Add new R_SYMNDX, H, and R_TYPE arguments. Handle TLS entries. (mips_elf_sort_hash_table_f): Add non-TLS assertions. (mips_elf_record_local_got_symbol): Add new TLS_FLAG argument. Handle TLS entries. (mips_elf_record_global_got_symbol): Likewise. (mips_elf_make_got_per_bfd): Initialize new mips_got_info members. Count TLS entries. (mips_elf_merge_gots): Handle TLS entries when merging. (mips_elf_initialize_tls_index): New function. (mips_elf_set_global_got_offset): Handle TLS entries. (mips_elf_adjust_gp): Handle TLS. (mips_elf_multi_got): Remove redundant call to mips_elf_resolve_final_got_entries. Initialize global_count. Correct a comment. Initialize new TLS members of mips_got_info. Assign TLS GOT indexes for new GOTs. (mips_elf_create_got_section): Initialize new TLS members of mips_got_info. (mips_elf_calculate_relocation): Handle TLS relocs. (_bfd_mips_elf_check_relocs): Likewise. Update calls to changed functions. (_bfd_mips_elf_always_size_sections): Handle TLS. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Update calls to changed functions. (_bfd_mips_elf_copy_indirect_symbol): Copy tls_type. (_bfd_mips_elf_hide_symbol): Handle TLS. * elfn32-mips.c (elf_mips_howto_table_rel, elf_mips_howto_table_rela) (mips_reloc_map): Add TLS relocs. * elf32-mips.c (elf_mips_howto_table_rel, mips_reloc_map): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel) (mips_elf64_howto_table_rela, mips_reloc_map): Likewise. * reloc.c: Define new MIPS TLS relocations. * libbfd.h, bfd-in2.h: Regenerated.
2005-03-02 22:23:21 +01:00
/* TLS general dynamic variable reference. */
HOWTO (R_MIPS_TLS_GD, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_GD", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS local dynamic variable reference. */
HOWTO (R_MIPS_TLS_LDM, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_LDM", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS local dynamic offset. */
HOWTO (R_MIPS_TLS_DTPREL_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_DTPREL_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS local dynamic offset. */
HOWTO (R_MIPS_TLS_DTPREL_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_DTPREL_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS thread pointer offset. */
HOWTO (R_MIPS_TLS_GOTTPREL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_GOTTPREL", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS IE dynamic relocations. */
* elfxx-mips.c (struct mips_got_entry): Add tls_type. (struct mips_got_info): Add tls_gotno, tls_assigned_gotno, and tls_ldm_offset. (struct mips_elf_got_per_bfd_arg): Add global_count. (struct mips_elf_count_tls_arg): New. (struct mips_elf_hash_sort_data): Update comment for min_got_dynindx. (struct mips_elf_link_hash_entry): Add tls_type and tls_got_offset. (GOT_NORMAL, GOT_TLS_GD, GOT_TLS_LDM, GOT_TLS_IE) (GOT_TLS_OFFSET_DONE, GOT_TLS_DONE): Define. (TLS_RELOC_P): Define. (TP_OFFSET, DTP_OFFSET): Define. (dtprel_base, tprel_base): New functions. (mips_elf_link_hash_newfunc): Initialize tls_type. (mips_elf_got_entry_hash, mips_elf_got_entry_eq) (mips_elf_multi_got_entry_hash, mips_elf_multi_got_entry_eq): Handle TLS entries. (mips_tls_got_relocs, mips_elf_count_local_tls_relocs) (mips_elf_count_global_tls_entries, mips_elf_count_global_tls_relocs) (mips_elf_output_dynamic_relocation, mips_elf_initialize_tls_slots) (mips_tls_got_index): New functions. (mips_elf_local_got_index): Add new R_SYMNDX, H, and R_TYPE arguments. Pass them to mips_elf_create_local_got_entry. Use mips_tls_got_index. (mips_elf_global_got_index): Add new R_TYPE and INFO arguments. Handle TLS entries. (mips_elf_got_page, mips_elf_got16_entry): Update calls to mips_elf_create_local_got_entry. (mips_elf_create_local_got_entry): Add new R_SYMNDX, H, and R_TYPE arguments. Handle TLS entries. (mips_elf_sort_hash_table_f): Add non-TLS assertions. (mips_elf_record_local_got_symbol): Add new TLS_FLAG argument. Handle TLS entries. (mips_elf_record_global_got_symbol): Likewise. (mips_elf_make_got_per_bfd): Initialize new mips_got_info members. Count TLS entries. (mips_elf_merge_gots): Handle TLS entries when merging. (mips_elf_initialize_tls_index): New function. (mips_elf_set_global_got_offset): Handle TLS entries. (mips_elf_adjust_gp): Handle TLS. (mips_elf_multi_got): Remove redundant call to mips_elf_resolve_final_got_entries. Initialize global_count. Correct a comment. Initialize new TLS members of mips_got_info. Assign TLS GOT indexes for new GOTs. (mips_elf_create_got_section): Initialize new TLS members of mips_got_info. (mips_elf_calculate_relocation): Handle TLS relocs. (_bfd_mips_elf_check_relocs): Likewise. Update calls to changed functions. (_bfd_mips_elf_always_size_sections): Handle TLS. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Update calls to changed functions. (_bfd_mips_elf_copy_indirect_symbol): Copy tls_type. (_bfd_mips_elf_hide_symbol): Handle TLS. * elfn32-mips.c (elf_mips_howto_table_rel, elf_mips_howto_table_rela) (mips_reloc_map): Add TLS relocs. * elf32-mips.c (elf_mips_howto_table_rel, mips_reloc_map): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel) (mips_elf64_howto_table_rela, mips_reloc_map): Likewise. * reloc.c: Define new MIPS TLS relocations. * libbfd.h, bfd-in2.h: Regenerated.
2005-03-02 22:23:21 +01:00
EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
HOWTO (R_MIPS_TLS_TPREL64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_TPREL64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
* elfxx-mips.c (struct mips_got_entry): Add tls_type. (struct mips_got_info): Add tls_gotno, tls_assigned_gotno, and tls_ldm_offset. (struct mips_elf_got_per_bfd_arg): Add global_count. (struct mips_elf_count_tls_arg): New. (struct mips_elf_hash_sort_data): Update comment for min_got_dynindx. (struct mips_elf_link_hash_entry): Add tls_type and tls_got_offset. (GOT_NORMAL, GOT_TLS_GD, GOT_TLS_LDM, GOT_TLS_IE) (GOT_TLS_OFFSET_DONE, GOT_TLS_DONE): Define. (TLS_RELOC_P): Define. (TP_OFFSET, DTP_OFFSET): Define. (dtprel_base, tprel_base): New functions. (mips_elf_link_hash_newfunc): Initialize tls_type. (mips_elf_got_entry_hash, mips_elf_got_entry_eq) (mips_elf_multi_got_entry_hash, mips_elf_multi_got_entry_eq): Handle TLS entries. (mips_tls_got_relocs, mips_elf_count_local_tls_relocs) (mips_elf_count_global_tls_entries, mips_elf_count_global_tls_relocs) (mips_elf_output_dynamic_relocation, mips_elf_initialize_tls_slots) (mips_tls_got_index): New functions. (mips_elf_local_got_index): Add new R_SYMNDX, H, and R_TYPE arguments. Pass them to mips_elf_create_local_got_entry. Use mips_tls_got_index. (mips_elf_global_got_index): Add new R_TYPE and INFO arguments. Handle TLS entries. (mips_elf_got_page, mips_elf_got16_entry): Update calls to mips_elf_create_local_got_entry. (mips_elf_create_local_got_entry): Add new R_SYMNDX, H, and R_TYPE arguments. Handle TLS entries. (mips_elf_sort_hash_table_f): Add non-TLS assertions. (mips_elf_record_local_got_symbol): Add new TLS_FLAG argument. Handle TLS entries. (mips_elf_record_global_got_symbol): Likewise. (mips_elf_make_got_per_bfd): Initialize new mips_got_info members. Count TLS entries. (mips_elf_merge_gots): Handle TLS entries when merging. (mips_elf_initialize_tls_index): New function. (mips_elf_set_global_got_offset): Handle TLS entries. (mips_elf_adjust_gp): Handle TLS. (mips_elf_multi_got): Remove redundant call to mips_elf_resolve_final_got_entries. Initialize global_count. Correct a comment. Initialize new TLS members of mips_got_info. Assign TLS GOT indexes for new GOTs. (mips_elf_create_got_section): Initialize new TLS members of mips_got_info. (mips_elf_calculate_relocation): Handle TLS relocs. (_bfd_mips_elf_check_relocs): Likewise. Update calls to changed functions. (_bfd_mips_elf_always_size_sections): Handle TLS. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Update calls to changed functions. (_bfd_mips_elf_copy_indirect_symbol): Copy tls_type. (_bfd_mips_elf_hide_symbol): Handle TLS. * elfn32-mips.c (elf_mips_howto_table_rel, elf_mips_howto_table_rela) (mips_reloc_map): Add TLS relocs. * elf32-mips.c (elf_mips_howto_table_rel, mips_reloc_map): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel) (mips_elf64_howto_table_rela, mips_reloc_map): Likewise. * reloc.c: Define new MIPS TLS relocations. * libbfd.h, bfd-in2.h: Regenerated.
2005-03-02 22:23:21 +01:00
/* TLS thread pointer offset. */
HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_TPREL_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS thread pointer offset. */
HOWTO (R_MIPS_TLS_TPREL_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_TLS_TPREL_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* 32 bit relocation with no addend. */
HOWTO (R_MIPS_GLOB_DAT, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GLOB_DAT", /* name */
FALSE, /* partial_inplace */
0x0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
1999-05-03 09:29:11 +02:00
};
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
static reloc_howto_type mips16_elf64_howto_table_rel[] =
{
/* The reloc used for the mips16 jump instruction. */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
HOWTO (R_MIPS16_26, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
26, /* bitsize */
FALSE, /* pc_relative */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
/* This needs complex overflow
detection, because the upper four
bits must match the PC. */
_bfd_mips_elf_generic_reloc, /* special_function */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
"R_MIPS16_26", /* name */
TRUE, /* partial_inplace */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
0x3ffffff, /* src_mask */
0x3ffffff, /* dst_mask */
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
FALSE), /* pcrel_offset */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
/* The reloc used for the mips16 gprel instruction. */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
HOWTO (R_MIPS16_GPREL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
mips16_gprel_reloc, /* special_function */
"R_MIPS16_GPREL", /* name */
TRUE, /* partial_inplace */
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd/ * reloc.c (BFD_RELOC_MIPS16_GOT16, BFD_RELOC_MIPS16_CALL16): Declare. * libbfd.h, bfd-in2.h: Regenerate. * elf32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_reloc_map): Add mappings. * elf64-mips.c (mips16_elf64_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_elf64_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfn32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (elf_mips16_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfxx-mips.c (mips_elf_create_shadow_symbol): New function. (section_allows_mips16_refs_p): Likewise. (mips16_stub_symndx): Likewise. (mips_elf_check_mips16_stubs): Treat the data argument as a bfd_link_info. Mark every dynamic symbol as needing MIPS16 stubs and create a "shadow" symbol for the original MIPS16 definition. (mips16_reloc_p, got16_reloc_p, call16_reloc_p, hi16_reloc_p) (lo16_reloc_p, mips16_call_reloc_p): New functions. (_bfd_mips16_elf_reloc_unshuffle): Use mips16_reloc_p to generalize relocation checks. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Handle R_MIPS16_GOT16. (mips_elf_got16_entry): Add comment. (mips_elf_calculate_relocation): Use hi16_reloc_p, lo16_reloc_p, mips16_call_reloc_p, call16_reloc_p and got16_reloc_p to generalize relocation checks. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16, allowing the former to refer directly to a MIPS16 function if its stub is not needed. (mips16_stub_section_p): Delete. (_bfd_mips_elf_symbol_processing): Convert odd-valued function symbols into even MIPS16 symbols. (mips_elf_add_lo16_rel_addend): Use mips16_reloc_p to generalize a relocation check. (_bfd_mips_elf_check_relocs): Calculate "bed" and "rel_end" earlier in the function. Use mips16_stub_symndx to identify the target function. Avoid out-of-bounds accesses when the stub has no relocations; report an error instead. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Use mips16_call_reloc_p and got16_reloc_p to generalize relocation checks. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. Don't create dynamic relocations for absolute references to __gnu_local_gp. (_bfd_mips_elf_always_size_sections): Pass a bfd_link_info as the argument to mips_elf_check_mips16_stubs. Generalize comment. (_bfd_mips_elf_relocate_section): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (_bfd_mips_elf_finish_dynamic_symbol): If a dynamic MIPS16 function symbol has a non-MIPS16 stub, redirect the symbol to the stub. Fix an overly long line. Don't give dynamic symbols type STO_MIPS16. (_bfd_mips_elf_gc_sweep_hook): Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. gas/ * config/tc-mips.c (mips16_reloc_p, got16_reloc_p, hi16_reloc_p) (lo16_reloc_p): New functions. (reloc_needs_lo_p): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (matching_lo_reloc): New function. (fixup_has_matching_lo_p): Use it. (mips16_mark_labels): Don't clobber a symbol's visibility. (append_insn): Use hi16_reloc_p and lo16_reloc_p. (mips16_ip): Handle BFD_RELOC_MIPS16_GOT16 and BFD_RELOC_MIPS16_CALL16. (md_apply_fix): Likewise. (mips16_percent_op): Add %got and %call16. (mips_frob_file): Use got16_reloc_p to generalize relocation checks. Use matching_lo_reloc. (mips_force_relocation): Use hi16_reloc_p and lo16_reloc_p to generalize relocation checks. (mips_fix_adjustable): Use lo16_reloc_p to generalize relocation checks. gas/testsuite/ * gas/mips/elf-rel8-mips16.d, gas/mips/elf-rel8-mips16.s, * gas/mips/elf-rel9-mips16.d, gas/mips/elf-rel9-mips16.s, * gas/mips/elf-rel13-mips16.d, gas/mips/elf-rel13-mips16.s: New tests. * gas/mips/mips.exp: Run them. ld/testsuite/ * ld-mips-elf/mips16-local-stubs-1.d: Remove stub_for_h3, which was only referenced by the .pdr section, and was not actually needed by code. * ld-mips-elf/mips16-intermix.d: Remove unused static function stubs. * ld-mips-elf/mips16-pic-1a.s, ld-mips-elf/mips16-pic-1b.s, ld-mips-elf/mips16-pic-1-dummy.s, ld-mips-elf/mips16-pic-1.dd, ld-mips-elf/mips16-pic-1.gd, ld-mips-elf/mips16-pic-1.inc, ld-mips-elf/mips16-pic-1.ld, ld-mips-elf/mips16-pic-2a.s, ld-mips-elf/mips16-pic-2b.s, ld-mips-elf/mips16-pic-2.ad, ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd, ld-mips-elf/mips16-pic-2.nd, ld-mips-elf/mips16-pic-2.rd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-06 21:44:47 +02:00
/* A MIPS16 reference to the global offset table. */
HOWTO (R_MIPS16_GOT16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_got16_reloc, /* special_function */
"R_MIPS16_GOT16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
bfd/ * reloc.c (BFD_RELOC_MIPS16_GOT16, BFD_RELOC_MIPS16_CALL16): Declare. * libbfd.h, bfd-in2.h: Regenerate. * elf32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_reloc_map): Add mappings. * elf64-mips.c (mips16_elf64_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_elf64_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfn32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (elf_mips16_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfxx-mips.c (mips_elf_create_shadow_symbol): New function. (section_allows_mips16_refs_p): Likewise. (mips16_stub_symndx): Likewise. (mips_elf_check_mips16_stubs): Treat the data argument as a bfd_link_info. Mark every dynamic symbol as needing MIPS16 stubs and create a "shadow" symbol for the original MIPS16 definition. (mips16_reloc_p, got16_reloc_p, call16_reloc_p, hi16_reloc_p) (lo16_reloc_p, mips16_call_reloc_p): New functions. (_bfd_mips16_elf_reloc_unshuffle): Use mips16_reloc_p to generalize relocation checks. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Handle R_MIPS16_GOT16. (mips_elf_got16_entry): Add comment. (mips_elf_calculate_relocation): Use hi16_reloc_p, lo16_reloc_p, mips16_call_reloc_p, call16_reloc_p and got16_reloc_p to generalize relocation checks. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16, allowing the former to refer directly to a MIPS16 function if its stub is not needed. (mips16_stub_section_p): Delete. (_bfd_mips_elf_symbol_processing): Convert odd-valued function symbols into even MIPS16 symbols. (mips_elf_add_lo16_rel_addend): Use mips16_reloc_p to generalize a relocation check. (_bfd_mips_elf_check_relocs): Calculate "bed" and "rel_end" earlier in the function. Use mips16_stub_symndx to identify the target function. Avoid out-of-bounds accesses when the stub has no relocations; report an error instead. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Use mips16_call_reloc_p and got16_reloc_p to generalize relocation checks. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. Don't create dynamic relocations for absolute references to __gnu_local_gp. (_bfd_mips_elf_always_size_sections): Pass a bfd_link_info as the argument to mips_elf_check_mips16_stubs. Generalize comment. (_bfd_mips_elf_relocate_section): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (_bfd_mips_elf_finish_dynamic_symbol): If a dynamic MIPS16 function symbol has a non-MIPS16 stub, redirect the symbol to the stub. Fix an overly long line. Don't give dynamic symbols type STO_MIPS16. (_bfd_mips_elf_gc_sweep_hook): Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. gas/ * config/tc-mips.c (mips16_reloc_p, got16_reloc_p, hi16_reloc_p) (lo16_reloc_p): New functions. (reloc_needs_lo_p): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (matching_lo_reloc): New function. (fixup_has_matching_lo_p): Use it. (mips16_mark_labels): Don't clobber a symbol's visibility. (append_insn): Use hi16_reloc_p and lo16_reloc_p. (mips16_ip): Handle BFD_RELOC_MIPS16_GOT16 and BFD_RELOC_MIPS16_CALL16. (md_apply_fix): Likewise. (mips16_percent_op): Add %got and %call16. (mips_frob_file): Use got16_reloc_p to generalize relocation checks. Use matching_lo_reloc. (mips_force_relocation): Use hi16_reloc_p and lo16_reloc_p to generalize relocation checks. (mips_fix_adjustable): Use lo16_reloc_p to generalize relocation checks. gas/testsuite/ * gas/mips/elf-rel8-mips16.d, gas/mips/elf-rel8-mips16.s, * gas/mips/elf-rel9-mips16.d, gas/mips/elf-rel9-mips16.s, * gas/mips/elf-rel13-mips16.d, gas/mips/elf-rel13-mips16.s: New tests. * gas/mips/mips.exp: Run them. ld/testsuite/ * ld-mips-elf/mips16-local-stubs-1.d: Remove stub_for_h3, which was only referenced by the .pdr section, and was not actually needed by code. * ld-mips-elf/mips16-intermix.d: Remove unused static function stubs. * ld-mips-elf/mips16-pic-1a.s, ld-mips-elf/mips16-pic-1b.s, ld-mips-elf/mips16-pic-1-dummy.s, ld-mips-elf/mips16-pic-1.dd, ld-mips-elf/mips16-pic-1.gd, ld-mips-elf/mips16-pic-1.inc, ld-mips-elf/mips16-pic-1.ld, ld-mips-elf/mips16-pic-2a.s, ld-mips-elf/mips16-pic-2b.s, ld-mips-elf/mips16-pic-2.ad, ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd, ld-mips-elf/mips16-pic-2.nd, ld-mips-elf/mips16-pic-2.rd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-06 21:44:47 +02:00
/* A MIPS16 call through the global offset table. */
HOWTO (R_MIPS16_CALL16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_CALL16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
/* MIPS16 high 16 bits of symbol value. */
HOWTO (R_MIPS16_HI16, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_hi16_reloc, /* special_function */
"R_MIPS16_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* MIPS16 low 16 bits of symbol value. */
HOWTO (R_MIPS16_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_lo16_reloc, /* special_function */
"R_MIPS16_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
};
static reloc_howto_type mips16_elf64_howto_table_rela[] =
{
/* The reloc used for the mips16 jump instruction. */
HOWTO (R_MIPS16_26, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
26, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
/* This needs complex overflow
detection, because the upper four
bits must match the PC. */
_bfd_mips_elf_generic_reloc, /* special_function */
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
"R_MIPS16_26", /* name */
FALSE, /* partial_inplace */
0x3ffffff, /* src_mask */
0x3ffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* The reloc used for the mips16 gprel instruction. */
HOWTO (R_MIPS16_GPREL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
mips16_gprel_reloc, /* special_function */
"R_MIPS16_GPREL", /* name */
FALSE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd/ * reloc.c (BFD_RELOC_MIPS16_GOT16, BFD_RELOC_MIPS16_CALL16): Declare. * libbfd.h, bfd-in2.h: Regenerate. * elf32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_reloc_map): Add mappings. * elf64-mips.c (mips16_elf64_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_elf64_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfn32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (elf_mips16_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfxx-mips.c (mips_elf_create_shadow_symbol): New function. (section_allows_mips16_refs_p): Likewise. (mips16_stub_symndx): Likewise. (mips_elf_check_mips16_stubs): Treat the data argument as a bfd_link_info. Mark every dynamic symbol as needing MIPS16 stubs and create a "shadow" symbol for the original MIPS16 definition. (mips16_reloc_p, got16_reloc_p, call16_reloc_p, hi16_reloc_p) (lo16_reloc_p, mips16_call_reloc_p): New functions. (_bfd_mips16_elf_reloc_unshuffle): Use mips16_reloc_p to generalize relocation checks. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Handle R_MIPS16_GOT16. (mips_elf_got16_entry): Add comment. (mips_elf_calculate_relocation): Use hi16_reloc_p, lo16_reloc_p, mips16_call_reloc_p, call16_reloc_p and got16_reloc_p to generalize relocation checks. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16, allowing the former to refer directly to a MIPS16 function if its stub is not needed. (mips16_stub_section_p): Delete. (_bfd_mips_elf_symbol_processing): Convert odd-valued function symbols into even MIPS16 symbols. (mips_elf_add_lo16_rel_addend): Use mips16_reloc_p to generalize a relocation check. (_bfd_mips_elf_check_relocs): Calculate "bed" and "rel_end" earlier in the function. Use mips16_stub_symndx to identify the target function. Avoid out-of-bounds accesses when the stub has no relocations; report an error instead. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Use mips16_call_reloc_p and got16_reloc_p to generalize relocation checks. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. Don't create dynamic relocations for absolute references to __gnu_local_gp. (_bfd_mips_elf_always_size_sections): Pass a bfd_link_info as the argument to mips_elf_check_mips16_stubs. Generalize comment. (_bfd_mips_elf_relocate_section): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (_bfd_mips_elf_finish_dynamic_symbol): If a dynamic MIPS16 function symbol has a non-MIPS16 stub, redirect the symbol to the stub. Fix an overly long line. Don't give dynamic symbols type STO_MIPS16. (_bfd_mips_elf_gc_sweep_hook): Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. gas/ * config/tc-mips.c (mips16_reloc_p, got16_reloc_p, hi16_reloc_p) (lo16_reloc_p): New functions. (reloc_needs_lo_p): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (matching_lo_reloc): New function. (fixup_has_matching_lo_p): Use it. (mips16_mark_labels): Don't clobber a symbol's visibility. (append_insn): Use hi16_reloc_p and lo16_reloc_p. (mips16_ip): Handle BFD_RELOC_MIPS16_GOT16 and BFD_RELOC_MIPS16_CALL16. (md_apply_fix): Likewise. (mips16_percent_op): Add %got and %call16. (mips_frob_file): Use got16_reloc_p to generalize relocation checks. Use matching_lo_reloc. (mips_force_relocation): Use hi16_reloc_p and lo16_reloc_p to generalize relocation checks. (mips_fix_adjustable): Use lo16_reloc_p to generalize relocation checks. gas/testsuite/ * gas/mips/elf-rel8-mips16.d, gas/mips/elf-rel8-mips16.s, * gas/mips/elf-rel9-mips16.d, gas/mips/elf-rel9-mips16.s, * gas/mips/elf-rel13-mips16.d, gas/mips/elf-rel13-mips16.s: New tests. * gas/mips/mips.exp: Run them. ld/testsuite/ * ld-mips-elf/mips16-local-stubs-1.d: Remove stub_for_h3, which was only referenced by the .pdr section, and was not actually needed by code. * ld-mips-elf/mips16-intermix.d: Remove unused static function stubs. * ld-mips-elf/mips16-pic-1a.s, ld-mips-elf/mips16-pic-1b.s, ld-mips-elf/mips16-pic-1-dummy.s, ld-mips-elf/mips16-pic-1.dd, ld-mips-elf/mips16-pic-1.gd, ld-mips-elf/mips16-pic-1.inc, ld-mips-elf/mips16-pic-1.ld, ld-mips-elf/mips16-pic-2a.s, ld-mips-elf/mips16-pic-2b.s, ld-mips-elf/mips16-pic-2.ad, ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd, ld-mips-elf/mips16-pic-2.nd, ld-mips-elf/mips16-pic-2.rd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-06 21:44:47 +02:00
/* A MIPS16 reference to the global offset table. */
HOWTO (R_MIPS16_GOT16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_got16_reloc, /* special_function */
"R_MIPS16_GOT16", /* name */
FALSE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
bfd/ * reloc.c (BFD_RELOC_MIPS16_GOT16, BFD_RELOC_MIPS16_CALL16): Declare. * libbfd.h, bfd-in2.h: Regenerate. * elf32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_reloc_map): Add mappings. * elf64-mips.c (mips16_elf64_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_elf64_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfn32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (elf_mips16_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfxx-mips.c (mips_elf_create_shadow_symbol): New function. (section_allows_mips16_refs_p): Likewise. (mips16_stub_symndx): Likewise. (mips_elf_check_mips16_stubs): Treat the data argument as a bfd_link_info. Mark every dynamic symbol as needing MIPS16 stubs and create a "shadow" symbol for the original MIPS16 definition. (mips16_reloc_p, got16_reloc_p, call16_reloc_p, hi16_reloc_p) (lo16_reloc_p, mips16_call_reloc_p): New functions. (_bfd_mips16_elf_reloc_unshuffle): Use mips16_reloc_p to generalize relocation checks. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Handle R_MIPS16_GOT16. (mips_elf_got16_entry): Add comment. (mips_elf_calculate_relocation): Use hi16_reloc_p, lo16_reloc_p, mips16_call_reloc_p, call16_reloc_p and got16_reloc_p to generalize relocation checks. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16, allowing the former to refer directly to a MIPS16 function if its stub is not needed. (mips16_stub_section_p): Delete. (_bfd_mips_elf_symbol_processing): Convert odd-valued function symbols into even MIPS16 symbols. (mips_elf_add_lo16_rel_addend): Use mips16_reloc_p to generalize a relocation check. (_bfd_mips_elf_check_relocs): Calculate "bed" and "rel_end" earlier in the function. Use mips16_stub_symndx to identify the target function. Avoid out-of-bounds accesses when the stub has no relocations; report an error instead. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Use mips16_call_reloc_p and got16_reloc_p to generalize relocation checks. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. Don't create dynamic relocations for absolute references to __gnu_local_gp. (_bfd_mips_elf_always_size_sections): Pass a bfd_link_info as the argument to mips_elf_check_mips16_stubs. Generalize comment. (_bfd_mips_elf_relocate_section): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (_bfd_mips_elf_finish_dynamic_symbol): If a dynamic MIPS16 function symbol has a non-MIPS16 stub, redirect the symbol to the stub. Fix an overly long line. Don't give dynamic symbols type STO_MIPS16. (_bfd_mips_elf_gc_sweep_hook): Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. gas/ * config/tc-mips.c (mips16_reloc_p, got16_reloc_p, hi16_reloc_p) (lo16_reloc_p): New functions. (reloc_needs_lo_p): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (matching_lo_reloc): New function. (fixup_has_matching_lo_p): Use it. (mips16_mark_labels): Don't clobber a symbol's visibility. (append_insn): Use hi16_reloc_p and lo16_reloc_p. (mips16_ip): Handle BFD_RELOC_MIPS16_GOT16 and BFD_RELOC_MIPS16_CALL16. (md_apply_fix): Likewise. (mips16_percent_op): Add %got and %call16. (mips_frob_file): Use got16_reloc_p to generalize relocation checks. Use matching_lo_reloc. (mips_force_relocation): Use hi16_reloc_p and lo16_reloc_p to generalize relocation checks. (mips_fix_adjustable): Use lo16_reloc_p to generalize relocation checks. gas/testsuite/ * gas/mips/elf-rel8-mips16.d, gas/mips/elf-rel8-mips16.s, * gas/mips/elf-rel9-mips16.d, gas/mips/elf-rel9-mips16.s, * gas/mips/elf-rel13-mips16.d, gas/mips/elf-rel13-mips16.s: New tests. * gas/mips/mips.exp: Run them. ld/testsuite/ * ld-mips-elf/mips16-local-stubs-1.d: Remove stub_for_h3, which was only referenced by the .pdr section, and was not actually needed by code. * ld-mips-elf/mips16-intermix.d: Remove unused static function stubs. * ld-mips-elf/mips16-pic-1a.s, ld-mips-elf/mips16-pic-1b.s, ld-mips-elf/mips16-pic-1-dummy.s, ld-mips-elf/mips16-pic-1.dd, ld-mips-elf/mips16-pic-1.gd, ld-mips-elf/mips16-pic-1.inc, ld-mips-elf/mips16-pic-1.ld, ld-mips-elf/mips16-pic-2a.s, ld-mips-elf/mips16-pic-2b.s, ld-mips-elf/mips16-pic-2.ad, ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd, ld-mips-elf/mips16-pic-2.nd, ld-mips-elf/mips16-pic-2.rd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-06 21:44:47 +02:00
/* A MIPS16 call through the global offset table. */
HOWTO (R_MIPS16_CALL16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_CALL16", /* name */
FALSE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
/* MIPS16 high 16 bits of symbol value. */
HOWTO (R_MIPS16_HI16, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_hi16_reloc, /* special_function */
"R_MIPS16_HI16", /* name */
FALSE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* MIPS16 low 16 bits of symbol value. */
HOWTO (R_MIPS16_LO16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_mips_elf_lo16_reloc, /* special_function */
"R_MIPS16_LO16", /* name */
FALSE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
FALSE), /* pcrel_offset */
};
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
/* GNU extension to record C++ vtable hierarchy */
static reloc_howto_type elf_mips_gnu_vtinherit_howto =
HOWTO (R_MIPS_GNU_VTINHERIT, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
NULL, /* special_function */
"R_MIPS_GNU_VTINHERIT", /* name */
FALSE, /* partial_inplace */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
0, /* src_mask */
0, /* dst_mask */
FALSE); /* pcrel_offset */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
/* GNU extension to record C++ vtable member usage */
static reloc_howto_type elf_mips_gnu_vtentry_howto =
HOWTO (R_MIPS_GNU_VTENTRY, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
_bfd_elf_rel_vtable_reloc_fn, /* special_function */
"R_MIPS_GNU_VTENTRY", /* name */
FALSE, /* partial_inplace */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
0, /* src_mask */
0, /* dst_mask */
FALSE); /* pcrel_offset */
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
/* 16 bit offset for pc-relative branches. */
static reloc_howto_type elf_mips_gnu_rel16_s2 =
HOWTO (R_MIPS_GNU_REL16_S2, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GNU_REL16_S2", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
TRUE); /* pcrel_offset */
/* 16 bit offset for pc-relative branches. */
static reloc_howto_type elf_mips_gnu_rela16_s2 =
HOWTO (R_MIPS_GNU_REL16_S2, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
_bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GNU_REL16_S2", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x0000ffff, /* dst_mask */
TRUE); /* pcrel_offset */
2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> Maxim Kuvyrkov <maxim@codesourcery.com> * elf32-mips.c (mips_vxworks_copy_howto_rela): Replace with... (elf_mips_copy_howto): ...this howto. Clear the size fields. (mips_vxworks_jump_slot_howto_rela): Replace with... (elf_mips_jump_slot_howto): ...this howto. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_plt_readonly): Define. (elf_backend_plt_sym_val): Define for non-VxWorks targets. (mips_vxworks_bfd_reloc_type_lookup): Delete. (mips_vxworks_bfd_reloc_name_lookup): Likewise. (mips_vxworks_rtype_to_howto): Likewise. (elf_backend_want_dynbss): Don't define for VxWorks. (elf_backend_plt_readonly): Likewise. (bfd_elf32_bfd_reloc_type_lookup): Likewise. (bfd_elf32_bfd_reloc_name_lookup): Likewise. (elf_backend_mips_rtype_to_howto): Likewise. (elf_backend_adjust_dynamic_symbol): Likewise. (elf_backend_got_symbol_offset): Don't define. * elfn32-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_n32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elf64-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf64_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf64_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf64_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elfxx-mips.h (_bfd_mips_vxworks_adjust_dynamic_symbol): Delete. (_bfd_mips_elf_use_plts_and_copy_relocs, _bfd_mips_elf_init_stubs) (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): Declare. * elfxx-mips.c (mips_elf_la25_stub): New structure. (LA25_LUI, LA25_J, LA25_ADDIU): New macros. (mips_elf_link_hash_entry): Add "la25_stubs", "has_static_relocs" and "has_nonpic_branches" fields. Remove "is_relocation_target" and "is_branch_target". (mips_elf_link_hash_table): Add blank lines. Add "use_plts_and_copy_relocs", "reserved_gotno", "strampoline", "la25_stubs" and "add_stub_section" fields. (mips_htab_traverse_info): New structure. (PIC_OBJECT_P, MIPS_ELF_LOAD_WORD): New macros. (MIPS_RESERVED_GOTNO): Delete. (mips_o32_exec_plt0_entry, mips_n32_exec_plt0_entry) (mips_n64_exec_plt0_entry, mips_exec_plt_entry): New tables. (mips_elf_link_hash_newfunc): Update after the changes to mips_elf_link_hash_entry. (mips_elf_check_mips16_stubs): Replace the DATA parameter with an INFO parameter. Don't look through warnings symbols here; do it in mips_elf_check_symbols instead. (mips_elf_create_stub_symbol): New function. (mips_elf_la25_stub_hash, mips_elf_la25_stub_eq): New functions. (_bfd_mips_elf_init_stubs, mips_elf_local_pic_function_p): Likewise. (mips_elf_add_la25_intro, mips_elf_add_la25_trampoline): Likewise. (mips_elf_add_la25_stub, mips_elf_check_symbols): New functions. (mips_elf_gotplt_index): Check for VxWorks. (mips_elf_output_dynamic_relocation): Take the relocation index as an extra parameter. Do not increment reloc_count here. (mips_elf_initialize_tls_slots): Update the calls to mips_elf_output_dynamic_relocation accordingly. (mips_elf_multi_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (mips_elf_create_got_section): Don't allocate reserved GOT entries here. Unconditionally create .got.plt, but don't set its alignment here. (mips_elf_relocation_needs_la25_stub): New function. (mips_elf_calculate_relocation): Redirect branches and jumps to a non-PIC stub if one exists. Check !h->has_static_relocs instead of !htab->is_vxworks when deciding whether to create dynamic relocations for R_MIPS_32, R_MIPS_REL32 and R_MIPS_64. (_bfd_mips_elf_create_dynamic_sections): Unconditionally call _bfd_elf_create_dynamic_sections. Unconditionally set up htab->splt and htab->sdynbss. Set htab->srelplt to ".rel.plt" if !htab->is_vxworks. Add non-VxWorks values of htab->plt_header_size and htab->plt_entry_size. (_bfd_mips_elf_check_relocs): Set pointer_equality_needed for non-branch static relocations. Set has_nonpic_branches when an la25 stub might be required. Set can_make_dynamic_p to TRUE if R_MIPS_32, R_MIPS_REL32 and R_MIPS_64 relocations can be made dynamic, rather than duplicating the condition. Do not make them dynamic for read-only sections in non-PIC executable objects. Do not protect this code with dynobj == NULL || htab->sgot == NULL; handle each group of cases separately. Add a default case that sets has_static_relocs for non-GOT relocations that cannot be made dynamic. Don't set is_relocation_target and is_branch_target. Reject non-PIC static relocations in shared objects. (_bfd_mips_vxworks_adjust_dynamic_symbol): Fold into... (_bfd_mips_elf_adjust_dynamic_symbol): ...here, using htab->use_plts_and_copy_relocs instead of htab->is_vxworks to select PLT and copy-reloc handling. Set the alignment of .plt and .got.plt when allocating the first entry. Generalize code to handle REL as well as RELA sections and 64-bit as well as 32-bit GOT entries. Complain if we find a static-only reloc against an externally-defined symbol and if we cannot create dynamic relocations for it. Allocate copy relocs using mips_elf_allocate_dynamic_relocations on non-VxWorks targets. Set possibly_dynamic_relocs to 0 when using PLTs or copy relocs. Skip reserved .got.plt entries. (_bfd_mips_elf_always_size_sections): Use mips_elf_check_symbols instead of mips_elf_check_mips16_stubs to process each symbol. Do the traversal for relocatable objects too. (mips_elf_lay_out_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (_bfd_mips_elf_size_dynamic_sections): Exclude sdynbss if it is empty. Extend the DT_PLTREL, DT_JMPREL and DT_PLTRELSZ handling to non-VxWorks targets. Only add DT_REL{,A}, DT_REL{,A}SZ and DT_REL{,A}ENT if .rel.dyn is nonempty. Create a symbol for the PLT. Allocate a nop at the end of the PLT. Allocate DT_MIPS_PLTGOT. (mips_elf_create_la25_stub_info): New function. (_bfd_mips_elf_finish_dynamic_symbol): Write out PLT entries and copy relocs where necessary. Check pointer_equality_needed. (mips_finish_exec_plt): New function. (_bfd_mips_elf_finish_dynamic_sections): Always set DT_PLTGOT to the beginning of htab->sgot. Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. Assert htab->use_plts_and_copy_relocs instead of htab->is_vxworks for DT_PLTREL, DT_PLTRELSZ and DT_JMPREL. Set DT_PLTREL to DT_REL instead of DT_RELA on non-VxWorks targets. Use mips_finish_exec_plt to create non-VxWorks PLT headers. Set DT_MIPS_PLTGOT. (_bfd_mips_elf_copy_indirect_symbol): Copy has_static_relocs from the indirect symbol to the direct symbol. Also copy has_nonpic_branches for indirect symbols. (_bfd_mips_elf_get_target_dtag): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (_bfd_mips_elf_link_hash_table_create): Initialize the new mips_elf_link_hash_table fields. (_bfd_mips_vxworks_link_hash_table_create): Set use_plts_and_copy_relocs to TRUE. Use TRUE rather than 1 when setting is_vxworks. (_bfd_mips_elf_use_plts_and_copy_relocs): New function. (_bfd_mips_elf_final_link): Call mips_elf_create_la25_stub for each la25_stub. (_bfd_mips_elf_merge_private_bfd_data): Treat dynamic objects as PIC. Generalize message about linking PIC and non-PIC. (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): New functions. * reloc.c: Update comment near BFD_RELOC_MIPS_JUMP_SLOT. * bfd-in2.h: Regenerated. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * readelf.c (get_mips_symbol_other): Handle STO_MIPS_PLT and STO_MIPS_PIC. (slurp_rela_relocs, slurp_rel_relocs): Handle MIPS ELF64 here. (dump_relocations, debug_apply_relocations): Don't handle it here. (get_mips_dynamic_type): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (print_mips_pltgot_entry): New function. (process_mips_specific): Dump the PLT GOT. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * config/tc-mips.c (OPTION_CALL_NONPIC): New macro. (OPTION_NON_SHARED, OPTION_XGOT, OPTION_MABI, OPTION_32) (OPTION_N32, OPTION_64, OPTION_MDEBUG, OPTION_NO_MDEBUG) (OPTION_PDR, OPTION_NO_PDR, OPTION_MVXWORKS_PIC): Bump by 1. (md_longopts): Add -call_nonpic. (md_parse_option): Handle OPTION_CALL_NONPIC. (md_show_usage): Add -call_nonpic. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> * gas/mips/call-nonpic-1.s, gas/mips/call-nonpic-1.d: New test. * gas/mips/mips.exp: Run it. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * mips.h (STO_MIPS_PLT, ELF_ST_IS_MIPS_PLT, ELF_ST_SET_MIPS_PLT) (STO_MIPS_PIC, DT_MIPS_PLTGOT, DT_MIPS_RWPLT): New macros. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * emulparams/elf32bmip.sh (GOT): Define, moving .got.plt to... (OTHER_RELRO_SECTIONS, OTHER_READWRITE_SECTIONS): ...one of these two variables. * emulparams/elf32bmipn32-defs.sh: Likewise. * emultempl/mipself.em: Include ldctor.h, elf/mips.h and elfxx-mips.h. (is_mips_elf): New macro. (stub_file, stub_bfd): New variables. (hook_stub_info): New structure. (hook_in_stub): New function. (mips_add_stub_section): Likewise. (mips_create_output_section_statements): Likewise. (mips_before_allocation): Likewise. (real_func): New variable. (mips_for_each_input_file_wrapper): New function. (mips_lang_for_each_input_file): Likewise. (lang_for_each_input_file): Define. (LDEMUL_BEFORE_ALLOCATION): Likewise. (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Likewise. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * ld-mips-elf/mips16-pic-3a.s, ld-mips-elf/mips16-pic-3b.s, ld-mips-elf/mips16-pic-3.dd, ld-mips-elf/mips16-pic-3.gd, ld-mips-elf/mips16-pic-3.rd, ld-mips-elf/mips16-pic-3.inc, ld-mips-elf/pic-and-nonpic-1a.s, ld-mips-elf/pic-and-nonpic-1b.s, ld-mips-elf/pic-and-nonpic-1.ld, ld-mips-elf/pic-and-nonpic-1.dd, ld-mips-elf/pic-and-nonpic-1.nd, ld-mips-elf/pic-and-nonpic-1-rel.dd, ld-mips-elf/pic-and-nonpic-1-rel.nd, ld-mips-elf/pic-and-nonpic-2a.s, ld-mips-elf/pic-and-nonpic-2b.s, ld-mips-elf/pic-and-nonpic-2.d, ld-mips-elf/pic-and-nonpic-3a.s, ld-mips-elf/pic-and-nonpic-3a.ld, ld-mips-elf/pic-and-nonpic-3a.dd, ld-mips-elf/pic-and-nonpic-3a.gd, ld-mips-elf/pic-and-nonpic-3a.sd, ld-mips-elf/pic-and-nonpic-3b.s, ld-mips-elf/pic-and-nonpic-3b.ld, ld-mips-elf/pic-and-nonpic-3b.ad, ld-mips-elf/pic-and-nonpic-3b.dd, ld-mips-elf/pic-and-nonpic-3b.gd, ld-mips-elf/pic-and-nonpic-3b.nd, ld-mips-elf/pic-and-nonpic-3b.pd, ld-mips-elf/pic-and-nonpic-3b.rd, ld-mips-elf/pic-and-nonpic-3b.sd, ld-mips-elf/pic-and-nonpic-3-error.d, ld-mips-elf/pic-and-nonpic-4a.s, ld-mips-elf/pic-and-nonpic-4b.s, ld-mips-elf/pic-and-nonpic-4b.ld, ld-mips-elf/pic-and-nonpic-4b.ad, ld-mips-elf/pic-and-nonpic-4b.dd, ld-mips-elf/pic-and-nonpic-4b.gd, ld-mips-elf/pic-and-nonpic-4b.nd, ld-mips-elf/pic-and-nonpic-4b.rd, ld-mips-elf/pic-and-nonpic-4b.sd, ld-mips-elf/pic-and-nonpic-4-error.d, ld-mips-elf/pic-and-nonpic-5a.s, ld-mips-elf/pic-and-nonpic-5b.s, ld-mips-elf/pic-and-nonpic-5b.ld, ld-mips-elf/pic-and-nonpic-5b.ad, ld-mips-elf/pic-and-nonpic-5b.dd, ld-mips-elf/pic-and-nonpic-5b.gd, ld-mips-elf/pic-and-nonpic-5b.nd, ld-mips-elf/pic-and-nonpic-5b.rd, ld-mips-elf/pic-and-nonpic-5b.sd, ld-mips-elf/pic-and-nonpic-5b.pd, ld-mips-elf/pic-and-nonpic-6.ld, ld-mips-elf/pic-and-nonpic-6-o32a.s, ld-mips-elf/pic-and-nonpic-6-o32b.s, ld-mips-elf/pic-and-nonpic-6-o32c.s, ld-mips-elf/pic-and-nonpic-6-o32.ad, ld-mips-elf/pic-and-nonpic-6-o32.dd, ld-mips-elf/pic-and-nonpic-6-o32.gd, ld-mips-elf/pic-and-nonpic-6-o32.nd, ld-mips-elf/pic-and-nonpic-6-o32.pd, ld-mips-elf/pic-and-nonpic-6-o32.rd, ld-mips-elf/pic-and-nonpic-6-o32.sd, ld-mips-elf/pic-and-nonpic-6-n32a.s, ld-mips-elf/pic-and-nonpic-6-n32b.s, ld-mips-elf/pic-and-nonpic-6-n32c.s, ld-mips-elf/pic-and-nonpic-6-n32.ad, ld-mips-elf/pic-and-nonpic-6-n32.dd, ld-mips-elf/pic-and-nonpic-6-n32.gd, ld-mips-elf/pic-and-nonpic-6-n32.nd, ld-mips-elf/pic-and-nonpic-6-n32.pd, ld-mips-elf/pic-and-nonpic-6-n32.rd, ld-mips-elf/pic-and-nonpic-6-n32.sd, ld-mips-elf/pic-and-nonpic-6-n64a.s, ld-mips-elf/pic-and-nonpic-6-n64b.s, ld-mips-elf/pic-and-nonpic-6-n64c.s, ld-mips-elf/pic-and-nonpic-6-n64.ad, ld-mips-elf/pic-and-nonpic-6-n64.dd, ld-mips-elf/pic-and-nonpic-6-n64.gd, ld-mips-elf/pic-and-nonpic-6-n64.nd, ld-mips-elf/pic-and-nonpic-6-n64.pd, ld-mips-elf/pic-and-nonpic-6-n64.rd, ld-mips-elf/pic-and-nonpic-6-n64.sd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-08 21:24:49 +02:00
/* Originally a VxWorks extension, but now used for other systems too. */
static reloc_howto_type elf_mips_copy_howto =
HOWTO (R_MIPS_COPY, /* type */
0, /* rightshift */
0, /* this one is variable size */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_MIPS_COPY", /* name */
FALSE, /* partial_inplace */
0x0, /* src_mask */
0x0, /* dst_mask */
FALSE); /* pcrel_offset */
/* Originally a VxWorks extension, but now used for other systems too. */
static reloc_howto_type elf_mips_jump_slot_howto =
HOWTO (R_MIPS_JUMP_SLOT, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_MIPS_JUMP_SLOT", /* name */
FALSE, /* partial_inplace */
0x0, /* src_mask */
0x0, /* dst_mask */
FALSE); /* pcrel_offset */
1999-05-03 09:29:11 +02:00
/* Swap in a MIPS 64-bit Rel reloc. */
static void
mips_elf64_swap_reloc_in (bfd *abfd, const Elf64_Mips_External_Rel *src,
Elf64_Mips_Internal_Rela *dst)
1999-05-03 09:29:11 +02:00
{
dst->r_offset = H_GET_64 (abfd, src->r_offset);
dst->r_sym = H_GET_32 (abfd, src->r_sym);
dst->r_ssym = H_GET_8 (abfd, src->r_ssym);
dst->r_type3 = H_GET_8 (abfd, src->r_type3);
dst->r_type2 = H_GET_8 (abfd, src->r_type2);
dst->r_type = H_GET_8 (abfd, src->r_type);
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
dst->r_addend = 0;
1999-05-03 09:29:11 +02:00
}
/* Swap in a MIPS 64-bit Rela reloc. */
static void
mips_elf64_swap_reloca_in (bfd *abfd, const Elf64_Mips_External_Rela *src,
Elf64_Mips_Internal_Rela *dst)
1999-05-03 09:29:11 +02:00
{
dst->r_offset = H_GET_64 (abfd, src->r_offset);
dst->r_sym = H_GET_32 (abfd, src->r_sym);
dst->r_ssym = H_GET_8 (abfd, src->r_ssym);
dst->r_type3 = H_GET_8 (abfd, src->r_type3);
dst->r_type2 = H_GET_8 (abfd, src->r_type2);
dst->r_type = H_GET_8 (abfd, src->r_type);
dst->r_addend = H_GET_S64 (abfd, src->r_addend);
1999-05-03 09:29:11 +02:00
}
/* Swap out a MIPS 64-bit Rel reloc. */
static void
mips_elf64_swap_reloc_out (bfd *abfd, const Elf64_Mips_Internal_Rela *src,
Elf64_Mips_External_Rel *dst)
1999-05-03 09:29:11 +02:00
{
H_PUT_64 (abfd, src->r_offset, dst->r_offset);
H_PUT_32 (abfd, src->r_sym, dst->r_sym);
H_PUT_8 (abfd, src->r_ssym, dst->r_ssym);
H_PUT_8 (abfd, src->r_type3, dst->r_type3);
H_PUT_8 (abfd, src->r_type2, dst->r_type2);
H_PUT_8 (abfd, src->r_type, dst->r_type);
1999-05-03 09:29:11 +02:00
}
/* Swap out a MIPS 64-bit Rela reloc. */
static void
mips_elf64_swap_reloca_out (bfd *abfd, const Elf64_Mips_Internal_Rela *src,
Elf64_Mips_External_Rela *dst)
1999-05-03 09:29:11 +02:00
{
H_PUT_64 (abfd, src->r_offset, dst->r_offset);
H_PUT_32 (abfd, src->r_sym, dst->r_sym);
H_PUT_8 (abfd, src->r_ssym, dst->r_ssym);
H_PUT_8 (abfd, src->r_type3, dst->r_type3);
H_PUT_8 (abfd, src->r_type2, dst->r_type2);
H_PUT_8 (abfd, src->r_type, dst->r_type);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
H_PUT_S64 (abfd, src->r_addend, dst->r_addend);
1999-05-03 09:29:11 +02:00
}
/* Swap in a MIPS 64-bit Rel reloc. */
static void
mips_elf64_be_swap_reloc_in (bfd *abfd, const bfd_byte *src,
Elf_Internal_Rela *dst)
{
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
Elf64_Mips_Internal_Rela mirel;
mips_elf64_swap_reloc_in (abfd,
(const Elf64_Mips_External_Rel *) src,
&mirel);
dst[0].r_offset = mirel.r_offset;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
dst[0].r_info = ELF64_R_INFO (mirel.r_sym, mirel.r_type);
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
dst[0].r_addend = 0;
dst[1].r_offset = mirel.r_offset;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
dst[1].r_info = ELF64_R_INFO (mirel.r_ssym, mirel.r_type2);
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
dst[1].r_addend = 0;
dst[2].r_offset = mirel.r_offset;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
dst[2].r_info = ELF64_R_INFO (STN_UNDEF, mirel.r_type3);
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
dst[2].r_addend = 0;
}
/* Swap in a MIPS 64-bit Rela reloc. */
static void
mips_elf64_be_swap_reloca_in (bfd *abfd, const bfd_byte *src,
Elf_Internal_Rela *dst)
{
Elf64_Mips_Internal_Rela mirela;
mips_elf64_swap_reloca_in (abfd,
(const Elf64_Mips_External_Rela *) src,
&mirela);
dst[0].r_offset = mirela.r_offset;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
dst[0].r_info = ELF64_R_INFO (mirela.r_sym, mirela.r_type);
dst[0].r_addend = mirela.r_addend;
dst[1].r_offset = mirela.r_offset;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
dst[1].r_info = ELF64_R_INFO (mirela.r_ssym, mirela.r_type2);
dst[1].r_addend = 0;
dst[2].r_offset = mirela.r_offset;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
dst[2].r_info = ELF64_R_INFO (STN_UNDEF, mirela.r_type3);
dst[2].r_addend = 0;
}
/* Swap out a MIPS 64-bit Rel reloc. */
static void
mips_elf64_be_swap_reloc_out (bfd *abfd, const Elf_Internal_Rela *src,
bfd_byte *dst)
{
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
Elf64_Mips_Internal_Rela mirel;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mirel.r_offset = src[0].r_offset;
BFD_ASSERT(src[0].r_offset == src[1].r_offset);
mirel.r_type = ELF64_MIPS_R_TYPE (src[0].r_info);
mirel.r_sym = ELF64_R_SYM (src[0].r_info);
mirel.r_type2 = ELF64_MIPS_R_TYPE (src[1].r_info);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mirel.r_ssym = ELF64_MIPS_R_SSYM (src[1].r_info);
mirel.r_type3 = ELF64_MIPS_R_TYPE (src[2].r_info);
mips_elf64_swap_reloc_out (abfd, &mirel,
(Elf64_Mips_External_Rel *) dst);
}
/* Swap out a MIPS 64-bit Rela reloc. */
static void
mips_elf64_be_swap_reloca_out (bfd *abfd, const Elf_Internal_Rela *src,
bfd_byte *dst)
{
Elf64_Mips_Internal_Rela mirela;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mirela.r_offset = src[0].r_offset;
BFD_ASSERT(src[0].r_offset == src[1].r_offset);
BFD_ASSERT(src[0].r_offset == src[2].r_offset);
mirela.r_type = ELF64_MIPS_R_TYPE (src[0].r_info);
mirela.r_sym = ELF64_R_SYM (src[0].r_info);
mirela.r_addend = src[0].r_addend;
BFD_ASSERT(src[1].r_addend == 0);
BFD_ASSERT(src[2].r_addend == 0);
mirela.r_type2 = ELF64_MIPS_R_TYPE (src[1].r_info);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mirela.r_ssym = ELF64_MIPS_R_SSYM (src[1].r_info);
mirela.r_type3 = ELF64_MIPS_R_TYPE (src[2].r_info);
mips_elf64_swap_reloca_out (abfd, &mirela,
(Elf64_Mips_External_Rela *) dst);
}
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
/* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
dangerous relocation. */
1999-05-03 09:29:11 +02:00
static bfd_boolean
mips_elf64_assign_gp (bfd *output_bfd, bfd_vma *pgp)
1999-05-03 09:29:11 +02:00
{
unsigned int count;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
asymbol **sym;
1999-05-03 09:29:11 +02:00
unsigned int i;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* If we've already figured out what GP will be, just return it. */
*pgp = _bfd_get_gp_value (output_bfd);
if (*pgp)
return TRUE;
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
count = bfd_get_symcount (output_bfd);
sym = bfd_get_outsymbols (output_bfd);
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* The linker script will have created a symbol named `_gp' with the
appropriate value. */
if (sym == NULL)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
i = count;
else
{
for (i = 0; i < count; i++, sym++)
{
register const char *name;
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
name = bfd_asymbol_name (*sym);
if (*name == '_' && strcmp (name, "_gp") == 0)
{
*pgp = bfd_asymbol_value (*sym);
_bfd_set_gp_value (output_bfd, *pgp);
break;
}
}
}
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
if (i >= count)
{
/* Only get the error once. */
*pgp = 4;
_bfd_set_gp_value (output_bfd, *pgp);
return FALSE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
1999-05-03 09:29:11 +02:00
return TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* We have to figure out the gp value, so that we can adjust the
symbol value correctly. We look up the symbol _gp in the output
BFD. If we can't find it, we're stuck. We cache it in the ELF
target data. We don't need to adjust the symbol value for an
2003-06-25 08:40:27 +02:00
external symbol if we are producing relocatable output. */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static bfd_reloc_status_type
mips_elf64_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable,
char **error_message, bfd_vma *pgp)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
if (bfd_is_und_section (symbol->section)
2003-06-25 08:40:27 +02:00
&& ! relocatable)
1999-05-03 09:29:11 +02:00
{
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
*pgp = 0;
return bfd_reloc_undefined;
}
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
*pgp = _bfd_get_gp_value (output_bfd);
if (*pgp == 0
2003-06-25 08:40:27 +02:00
&& (! relocatable
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
|| (symbol->flags & BSF_SECTION_SYM) != 0))
{
2003-06-25 08:40:27 +02:00
if (relocatable)
1999-05-03 09:29:11 +02:00
{
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Make up a value. */
*pgp = symbol->section->output_section->vma /*+ 0x4000*/;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
_bfd_set_gp_value (output_bfd, *pgp);
}
else if (!mips_elf64_assign_gp (output_bfd, pgp))
{
*error_message =
(char *) _("GP relative relocation when _gp not defined");
return bfd_reloc_dangerous;
1999-05-03 09:29:11 +02:00
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
return bfd_reloc_ok;
}
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Do a R_MIPS_GPREL16 relocation. This is a 16 bit value which must
become the offset from the gp register. */
1999-05-03 09:29:11 +02:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
static bfd_reloc_status_type
mips_elf64_gprel16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
void *data, asection *input_section, bfd *output_bfd,
char **error_message)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
2003-06-25 08:40:27 +02:00
bfd_boolean relocatable;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
bfd_reloc_status_type ret;
bfd_vma gp;
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
/* If we're relocating, and this is an external symbol, we don't want
to change anything. */
if (output_bfd != NULL
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
&& (symbol->flags & BSF_SECTION_SYM) == 0
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
&& (symbol->flags & BSF_LOCAL) != 0)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
reloc_entry->address += input_section->output_offset;
return bfd_reloc_ok;
}
if (output_bfd != NULL)
2003-06-25 08:40:27 +02:00
relocatable = TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
else
{
2003-06-25 08:40:27 +02:00
relocatable = FALSE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
output_bfd = symbol->section->output_section->owner;
}
2003-06-25 08:40:27 +02:00
ret = mips_elf64_final_gp (output_bfd, symbol, relocatable, error_message,
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
&gp);
if (ret != bfd_reloc_ok)
return ret;
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
return _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
2003-06-25 08:40:27 +02:00
input_section, relocatable,
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
data, gp);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
/* Do a R_MIPS_LITERAL relocation. */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
static bfd_reloc_status_type
mips_elf64_literal_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
void *data, asection *input_section, bfd *output_bfd,
char **error_message)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
2003-06-25 08:40:27 +02:00
bfd_boolean relocatable;
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
bfd_reloc_status_type ret;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
bfd_vma gp;
/* R_MIPS_LITERAL relocations are defined for local symbols only. */
if (output_bfd != NULL
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
&& (symbol->flags & BSF_SECTION_SYM) == 0
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
&& (symbol->flags & BSF_LOCAL) != 0)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
*error_message = (char *)
_("literal relocation occurs for an external symbol");
return bfd_reloc_outofrange;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
/* FIXME: The entries in the .lit8 and .lit4 sections should be merged. */
if (output_bfd != NULL)
2003-06-25 08:40:27 +02:00
relocatable = TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
else
{
2003-06-25 08:40:27 +02:00
relocatable = FALSE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
output_bfd = symbol->section->output_section->owner;
}
2003-06-25 08:40:27 +02:00
ret = mips_elf64_final_gp (output_bfd, symbol, relocatable, error_message,
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
&gp);
if (ret != bfd_reloc_ok)
return ret;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
return _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
2003-06-25 08:40:27 +02:00
input_section, relocatable,
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
data, gp);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
/* Do a R_MIPS_GPREL32 relocation. This is a 32 bit value which must
become the offset from the gp register. */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
static bfd_reloc_status_type
mips_elf64_gprel32_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
void *data, asection *input_section, bfd *output_bfd,
char **error_message)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
2003-06-25 08:40:27 +02:00
bfd_boolean relocatable;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
bfd_reloc_status_type ret;
bfd_vma gp;
bfd_vma relocation;
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
bfd_vma val;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* R_MIPS_GPREL32 relocations are defined for local symbols only. */
if (output_bfd != NULL
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
&& (symbol->flags & BSF_SECTION_SYM) == 0
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
&& (symbol->flags & BSF_LOCAL) != 0)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
*error_message = (char *)
_("32bits gp relative relocation occurs for an external symbol");
return bfd_reloc_outofrange;
}
if (output_bfd != NULL)
2003-06-25 08:40:27 +02:00
relocatable = TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
else
{
2003-06-25 08:40:27 +02:00
relocatable = FALSE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
output_bfd = symbol->section->output_section->owner;
}
ret = mips_elf64_final_gp (output_bfd, symbol, relocatable,
error_message, &gp);
if (ret != bfd_reloc_ok)
return ret;
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
if (bfd_is_com_section (symbol->section))
relocation = 0;
else
relocation = symbol->value;
relocation += symbol->section->output_section->vma;
relocation += symbol->section->output_offset;
* bfd-in.h (bfd_get_section_limit): Define. * reloc.c (bfd_perform_relocation, bfd_install_relocation) (_bfd_final_link_relocate): Use bfd_get_section_limit. * aout-tic30.c (tic30_aout_final_link_relocate): Likewise. * coff-arm.c (coff_arm_relocate_section): Likewise. * coff-mips.c (mips_refhi_reloc, mips_gprel_reloc): Likewise. * cpu-ns32k.c (do_ns32k_reloc): Likewise. (bfd_ns32k_final_link_relocate): Likewise. * elf32-d30v.c (bfd_elf_d30v_reloc, bfd_elf_d30v_reloc_21): Likwise. * elf32-dlx.c (_bfd_dlx_elf_hi16_reloc): Likewise. * elf32-i860.c (i860_howto_pc26_reloc, i860_howto_pc16_reloc) (i860_howto_highadj_reloc, i860_howto_splitn_reloc): Likewise. * elf32-m32r.c (m32r_elf_do_10_pcrel_reloc, m32r_elf_hi16_reloc) (m32r_elf_generic_reloc, m32r_elf_relocate_section): Likewise. * elf32-m68hc1x.c (m68hc11_elf_special_reloc): Likewise. * elf32-mips.c (gprel32_with_gp, mips16_gprel_reloc): Likewise. * elf32-or32.c (or32_elf_consth_reloc): Likewise. * elf32-ppc.c (ppc_elf_addr16_ha_reloc): Likewise. * elf32-s390.c (s390_elf_ldisp_reloc): Likewise. * elf32-sh.c (sh_elf_reloc_loop): Likewise. * elf32-sparc.c (sparc_elf_wdisp16_reloc): Likewise. (sparc_elf_hix22_reloc, sparc_elf_lox10_reloc): Likwise. * elf32-v850.c (v850_elf_reloc): Likewise. * elf32-xstormy16.c (xstormy16_elf_24_reloc): Likewise. * elf32-xtensa.c (bfd_elf_xtensa_reloc): Likewise. * elf64-alpha.c (elf64_alpha_reloc_gpdisp): Likewise. * elf64-mips.c (mips_elf64_gprel32_reloc) (mips16_gprel_reloc): Likewise. * elf64-mmix.c (mmix_elf_reloc): Likewise. * elf64-s390.c (s390_elf_ldisp_reloc): Likewise. * elf64-sparc.c (init_insn_reloc): Likewise. * elfn32-mips.c (gprel32_with_gp, mips16_gprel_reloc): Likewise. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp) (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_lo16_reloc) (_bfd_mips_elf_generic_reloc): Likewise. * bfd-in2.h: Regenerate.
2004-06-29 15:46:34 +02:00
if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
return bfd_reloc_outofrange;
/* Set val to the offset into the section or symbol. */
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
val = reloc_entry->addend;
if (reloc_entry->howto->partial_inplace)
val += bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Adjust val for the final section location and GP value. If we
2003-06-25 08:40:27 +02:00
are producing relocatable output, we don't want to do this for
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
an external symbol. */
2003-06-25 08:40:27 +02:00
if (! relocatable
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
|| (symbol->flags & BSF_SECTION_SYM) != 0)
val += relocation - gp;
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
if (reloc_entry->howto->partial_inplace)
bfd_put_32 (abfd, val, (bfd_byte *) data + reloc_entry->address);
else
reloc_entry->addend = val;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
2003-06-25 08:40:27 +02:00
if (relocatable)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
reloc_entry->address += input_section->output_offset;
return bfd_reloc_ok;
}
/* Do a R_MIPS_SHIFT6 relocation. The MSB of the shift is stored at bit 2,
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
the rest is at bits 6-10. The bitpos already got right by the howto. */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
static bfd_reloc_status_type
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
mips_elf64_shift6_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
void *data, asection *input_section, bfd *output_bfd,
char **error_message)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
if (reloc_entry->howto->partial_inplace)
{
reloc_entry->addend = ((reloc_entry->addend & 0x00007c0)
| (reloc_entry->addend & 0x00000800) >> 9);
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and R_MIPS_GNU_REL_LO16, and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change rightshift to 16 for R_MIPS_HI16 and R_MIPS_GNU_REL_HI16. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (_bfd_mips_elf32_gprel16_reloc): Remove special case. (mips_elf_gprel32_reloc, mips32_64bit_reloc): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_hi16_reloc for R_MIPS_HI16, _bfd_mips_elf_lo16_reloc for R_MIPS_LO16 and _bfd_mips_elf_got16_reloc for R_MIPS_GOT16. Change R_MIPS_HI16's rightshift to 16. (mips_elf64_howto_table_rela): Replace all uses of mips_elf_generic_reloc with _bfd_mips_elf_generic_reloc. Use _bfd_mips_elf_generic_reloc for R_MIPS_GOT16 as well. (mips_elf64_hi16_reloc, mips_elf64_got16_reloc): Delete. (mips_elf64_shift6_reloc): Remove special case. Use _bfd_mips_elf_generic_reloc instead of returning bfd_reloc_continue. * elfn32-mips.c (prev_reloc_section): Delete. (prev_reloc_address, prev_reloc_addend): Delete. (elf_mips_howto_table_rel, elf_mips_howto_table_rela): As for elf64-mips.c (GET_RELOC_ADDEND, SET_RELOC_ADDEND): Delete. (mips_elf_generic_reloc, struct mips_hi16, mips_elf_hi16_reloc) (mips_elf_lo16_reloc, mips_elf_got16_reloc): Delete. (mips_elf_gprel16_reloc): Delete use of GET_RELOC_ADDEND. (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. (mips16_jump_reloc, mips16_gprel_reloc): Likewise. (mips_elf_shift6_reloc): Likewise. Delete use of SET_RELOC_ADDEND. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Use _bfd_relocate_contents to install an in-place addend. (mips_hi16): New structure. (mips_hi16_list): Moved from elf32-mips.c. (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_got16_reloc): New functions. (_bfd_mips_elf_lo16_reloc, _bfd_mips_elf_generic_reloc): New functions. (mips_elf_calculate_relocation): Assume addend is unshifted. (_bfd_mips_elf_relocate_section): Don't apply the howto rightshift on top of the usual high-part shift. Don't shift the addend right before calling mips_elf_calculate_relocation. * elfxx-mips.h (_bfd_mips_elf_hi16_reloc): Declare. (_bfd_mips_elf_got16_reloc, _bfd_mips_elf_lo16_reloc): Declare. (_bfd_mips_elf_generic_reloc): Declare. gas/ * config/tc-mips.c (mips_need_elf_addend_fixup): Delete. (md_apply_fix3): Remove bfd_install_relocation workarounds. (tc_gen_reloc): Likewise. Factor handling of pc-relative relocations and treat fx_addnumber as relative to the relocation address. gas/testsuite/ * gas/mips/mips16-jalx.d: Use -mabi=o64. * gas/mips/mips16.d: Likewise. * gas/mips/elf-rel17.[sd]: New test. * gas/mips/mips.exp: Run it.
2003-12-18 11:23:10 +01:00
return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
input_section, output_bfd,
error_message);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
/* Handle a mips16 GP relative reloc. */
static bfd_reloc_status_type
mips16_gprel_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
void *data, asection *input_section, bfd *output_bfd,
char **error_message)
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
{
2003-06-25 08:40:27 +02:00
bfd_boolean relocatable;
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
bfd_reloc_status_type ret;
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
bfd_byte *location;
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
bfd_vma gp;
/* If we're relocating, and this is an external symbol, we don't want
to change anything. */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
if (output_bfd != NULL
&& (symbol->flags & BSF_SECTION_SYM) == 0
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
&& (symbol->flags & BSF_LOCAL) != 0)
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
{
reloc_entry->address += input_section->output_offset;
return bfd_reloc_ok;
}
if (output_bfd != NULL)
2003-06-25 08:40:27 +02:00
relocatable = TRUE;
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
else
{
2003-06-25 08:40:27 +02:00
relocatable = FALSE;
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
output_bfd = symbol->section->output_section->owner;
}
2003-06-25 08:40:27 +02:00
ret = mips_elf64_final_gp (output_bfd, symbol, relocatable, error_message,
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
&gp);
if (ret != bfd_reloc_ok)
return ret;
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
location = (bfd_byte *) data + reloc_entry->address;
_bfd_mips16_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
location);
ret = _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
input_section, relocatable,
data, gp);
_bfd_mips16_elf_reloc_shuffle (abfd, reloc_entry->howto->type, !relocatable,
location);
* elf32-mips.c (mips_elf_generic_reloc): New Function. (elf_mips_howto_table_rel): Use it. (gprel32_with_gp): Move prototype. (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Use mips_elf_generic_reloc. (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. Code cleanup. (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. (gprel32_with_gp): Handle partial_inplace properly. (mips32_64bit_reloc): Use mips_elf_generic_reloc. (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly. * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment logic as in the other *_gprel*_reloc functions. Handle partial_inplace properly. (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero addend. Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL. (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead of zero addend. (mips_elf_shift6_reloc): Handle partial_inplace properly. (mips16_gprel_reloc): Likewise. Do addend handling directly instead of calling _bfd_mips_elf_gprel16_with_gp. * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle partial_inplace properly. Fix wrong addend handling. Fix overflow check. (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and exported. (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend. (_bfd_mips_elf_relocate_section): Likewise. (mips_elf_create_dynamic_relocation): Update sec_info_type access. * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration. (_bfd_mips_elf_sign_extend): New prototype. * config/tc-mips.c (md_pcrel_from): Return actual pcrel address. (md_apply_fix3): Ignore non-special relocations. Remove superfluous exceptions from size assert. Remove most of the addend fixup specialcasing. Remove value, use valP directly. simplify fx_addnumber handling. Remove zero addend specialcases. (tc_gen_reloc): Use appropriate value for reloc2 addend. Remove the addend fixup specialcase. * config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.
2003-06-11 18:22:26 +02:00
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
return ret;
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
}
/* A mapping from BFD reloc types to MIPS ELF reloc types. */
struct elf_reloc_map {
bfd_reloc_code_real_type bfd_val;
enum elf_mips_reloc_type elf_val;
};
static const struct elf_reloc_map mips_reloc_map[] =
{
{ BFD_RELOC_NONE, R_MIPS_NONE },
{ BFD_RELOC_16, R_MIPS_16 },
{ BFD_RELOC_32, R_MIPS_32 },
/* There is no BFD reloc for R_MIPS_REL32. */
{ BFD_RELOC_64, R_MIPS_64 },
{ BFD_RELOC_CTOR, R_MIPS_64 },
bfd/ * elf32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elf64-mips.c (mips_elf64_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (mips_elf64_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf64_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfn32-mips.c (elf_mips_howto_table_rel): Use rightshift 2 for R_MIPS_PC16. (elf_mips_howto_table_rela): Likewise. (mips_reloc_map): Map BFD_RELOC_16_PCREL_S2 to R_MIPS_PC16. (bfd_elf32_bfd_reloc_type_lookup): Don't handle BFD_RELOC_16_PCREL_S2. * elfxx-mips.c: Formatting fixes. (mips_elf_calculate_relocation): Handle R_MIPS_GNU_REL16_S2 and R_MIPS_PC16 identically. gas/ * config/tc-mips.c (append_insn): Handle BFD_RELOC_16_PCREL_S2. (macro_build): Complain for invalid branch displacements. (mips_validate_fix): Delete. (md_apply_fix): Re-add pcrel support for branches. Use consistent text for misaligned branch targets. (tc_gen_reloc: Re-add pcrel support for branches. Handle strange BFD pcrel processing. Remove error for unresolved branches. * config/tc-mips.h (TC_VALIDATE_FIX, mips_validate_fix): Delete. gas/testsuite/ * gas/mips/bge.d, gas/mips/bge.s, gas/mips/bgeu.d, gas/mips/bgeu.s, gas/mips/blt.d, gas/mips/blt.s, gas/mips/bltu.d, gas/mips/bltu.s: Reactivate external branch tests. * gas/mips/branch-misc-2.d, gas/mips/branch-misc-2pic.d, gas/mips/branch-misc-2-64.d, gas/mips/branch-misc-2pic-64.d: New tests. * gas/mips/branch-misc-2.l, gas/mips/branch-misc-2pic.l, gas/testsuite/gas/mips/branch-misc-2pic.s: Remove. * gas/mips/mips.exp: Adjust branch-misc-2 tests. Add 64-bit variants.
2005-11-23 15:04:18 +01:00
{ BFD_RELOC_16_PCREL_S2, R_MIPS_PC16 },
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
{ BFD_RELOC_HI16_S, R_MIPS_HI16 },
{ BFD_RELOC_LO16, R_MIPS_LO16 },
{ BFD_RELOC_GPREL16, R_MIPS_GPREL16 },
{ BFD_RELOC_GPREL32, R_MIPS_GPREL32 },
{ BFD_RELOC_MIPS_JMP, R_MIPS_26 },
{ BFD_RELOC_MIPS_LITERAL, R_MIPS_LITERAL },
{ BFD_RELOC_MIPS_GOT16, R_MIPS_GOT16 },
{ BFD_RELOC_MIPS_CALL16, R_MIPS_CALL16 },
{ BFD_RELOC_MIPS_SHIFT5, R_MIPS_SHIFT5 },
{ BFD_RELOC_MIPS_SHIFT6, R_MIPS_SHIFT6 },
{ BFD_RELOC_MIPS_GOT_DISP, R_MIPS_GOT_DISP },
{ BFD_RELOC_MIPS_GOT_PAGE, R_MIPS_GOT_PAGE },
{ BFD_RELOC_MIPS_GOT_OFST, R_MIPS_GOT_OFST },
{ BFD_RELOC_MIPS_GOT_HI16, R_MIPS_GOT_HI16 },
{ BFD_RELOC_MIPS_GOT_LO16, R_MIPS_GOT_LO16 },
{ BFD_RELOC_MIPS_SUB, R_MIPS_SUB },
{ BFD_RELOC_MIPS_INSERT_A, R_MIPS_INSERT_A },
{ BFD_RELOC_MIPS_INSERT_B, R_MIPS_INSERT_B },
{ BFD_RELOC_MIPS_DELETE, R_MIPS_DELETE },
{ BFD_RELOC_MIPS_HIGHEST, R_MIPS_HIGHEST },
{ BFD_RELOC_MIPS_HIGHER, R_MIPS_HIGHER },
{ BFD_RELOC_MIPS_CALL_HI16, R_MIPS_CALL_HI16 },
{ BFD_RELOC_MIPS_CALL_LO16, R_MIPS_CALL_LO16 },
{ BFD_RELOC_MIPS_SCN_DISP, R_MIPS_SCN_DISP },
{ BFD_RELOC_MIPS_REL16, R_MIPS_REL16 },
/* Use of R_MIPS_ADD_IMMEDIATE and R_MIPS_PJUMP is deprecated. */
{ BFD_RELOC_MIPS_RELGOT, R_MIPS_RELGOT },
* elfxx-mips.c (struct mips_got_entry): Add tls_type. (struct mips_got_info): Add tls_gotno, tls_assigned_gotno, and tls_ldm_offset. (struct mips_elf_got_per_bfd_arg): Add global_count. (struct mips_elf_count_tls_arg): New. (struct mips_elf_hash_sort_data): Update comment for min_got_dynindx. (struct mips_elf_link_hash_entry): Add tls_type and tls_got_offset. (GOT_NORMAL, GOT_TLS_GD, GOT_TLS_LDM, GOT_TLS_IE) (GOT_TLS_OFFSET_DONE, GOT_TLS_DONE): Define. (TLS_RELOC_P): Define. (TP_OFFSET, DTP_OFFSET): Define. (dtprel_base, tprel_base): New functions. (mips_elf_link_hash_newfunc): Initialize tls_type. (mips_elf_got_entry_hash, mips_elf_got_entry_eq) (mips_elf_multi_got_entry_hash, mips_elf_multi_got_entry_eq): Handle TLS entries. (mips_tls_got_relocs, mips_elf_count_local_tls_relocs) (mips_elf_count_global_tls_entries, mips_elf_count_global_tls_relocs) (mips_elf_output_dynamic_relocation, mips_elf_initialize_tls_slots) (mips_tls_got_index): New functions. (mips_elf_local_got_index): Add new R_SYMNDX, H, and R_TYPE arguments. Pass them to mips_elf_create_local_got_entry. Use mips_tls_got_index. (mips_elf_global_got_index): Add new R_TYPE and INFO arguments. Handle TLS entries. (mips_elf_got_page, mips_elf_got16_entry): Update calls to mips_elf_create_local_got_entry. (mips_elf_create_local_got_entry): Add new R_SYMNDX, H, and R_TYPE arguments. Handle TLS entries. (mips_elf_sort_hash_table_f): Add non-TLS assertions. (mips_elf_record_local_got_symbol): Add new TLS_FLAG argument. Handle TLS entries. (mips_elf_record_global_got_symbol): Likewise. (mips_elf_make_got_per_bfd): Initialize new mips_got_info members. Count TLS entries. (mips_elf_merge_gots): Handle TLS entries when merging. (mips_elf_initialize_tls_index): New function. (mips_elf_set_global_got_offset): Handle TLS entries. (mips_elf_adjust_gp): Handle TLS. (mips_elf_multi_got): Remove redundant call to mips_elf_resolve_final_got_entries. Initialize global_count. Correct a comment. Initialize new TLS members of mips_got_info. Assign TLS GOT indexes for new GOTs. (mips_elf_create_got_section): Initialize new TLS members of mips_got_info. (mips_elf_calculate_relocation): Handle TLS relocs. (_bfd_mips_elf_check_relocs): Likewise. Update calls to changed functions. (_bfd_mips_elf_always_size_sections): Handle TLS. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. Update calls to changed functions. (_bfd_mips_elf_copy_indirect_symbol): Copy tls_type. (_bfd_mips_elf_hide_symbol): Handle TLS. * elfn32-mips.c (elf_mips_howto_table_rel, elf_mips_howto_table_rela) (mips_reloc_map): Add TLS relocs. * elf32-mips.c (elf_mips_howto_table_rel, mips_reloc_map): Likewise. * elf64-mips.c (mips_elf64_howto_table_rel) (mips_elf64_howto_table_rela, mips_reloc_map): Likewise. * reloc.c: Define new MIPS TLS relocations. * libbfd.h, bfd-in2.h: Regenerated.
2005-03-02 22:23:21 +01:00
{ BFD_RELOC_MIPS_JALR, R_MIPS_JALR },
{ BFD_RELOC_MIPS_TLS_DTPMOD32, R_MIPS_TLS_DTPMOD32 },
{ BFD_RELOC_MIPS_TLS_DTPREL32, R_MIPS_TLS_DTPREL32 },
{ BFD_RELOC_MIPS_TLS_DTPMOD64, R_MIPS_TLS_DTPMOD64 },
{ BFD_RELOC_MIPS_TLS_DTPREL64, R_MIPS_TLS_DTPREL64 },
{ BFD_RELOC_MIPS_TLS_GD, R_MIPS_TLS_GD },
{ BFD_RELOC_MIPS_TLS_LDM, R_MIPS_TLS_LDM },
{ BFD_RELOC_MIPS_TLS_DTPREL_HI16, R_MIPS_TLS_DTPREL_HI16 },
{ BFD_RELOC_MIPS_TLS_DTPREL_LO16, R_MIPS_TLS_DTPREL_LO16 },
{ BFD_RELOC_MIPS_TLS_GOTTPREL, R_MIPS_TLS_GOTTPREL },
{ BFD_RELOC_MIPS_TLS_TPREL32, R_MIPS_TLS_TPREL32 },
{ BFD_RELOC_MIPS_TLS_TPREL64, R_MIPS_TLS_TPREL64 },
{ BFD_RELOC_MIPS_TLS_TPREL_HI16, R_MIPS_TLS_TPREL_HI16 },
{ BFD_RELOC_MIPS_TLS_TPREL_LO16, R_MIPS_TLS_TPREL_LO16 }
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
};
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
static const struct elf_reloc_map mips16_reloc_map[] =
{
{ BFD_RELOC_MIPS16_JMP, R_MIPS16_26 - R_MIPS16_min },
{ BFD_RELOC_MIPS16_GPREL, R_MIPS16_GPREL - R_MIPS16_min },
bfd/ * reloc.c (BFD_RELOC_MIPS16_GOT16, BFD_RELOC_MIPS16_CALL16): Declare. * libbfd.h, bfd-in2.h: Regenerate. * elf32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_reloc_map): Add mappings. * elf64-mips.c (mips16_elf64_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (mips16_elf64_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfn32-mips.c (elf_mips16_howto_table_rel): Fill in reserved R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. (elf_mips16_howto_table_rela): Likewise. (mips16_reloc_map): Add mappings. * elfxx-mips.c (mips_elf_create_shadow_symbol): New function. (section_allows_mips16_refs_p): Likewise. (mips16_stub_symndx): Likewise. (mips_elf_check_mips16_stubs): Treat the data argument as a bfd_link_info. Mark every dynamic symbol as needing MIPS16 stubs and create a "shadow" symbol for the original MIPS16 definition. (mips16_reloc_p, got16_reloc_p, call16_reloc_p, hi16_reloc_p) (lo16_reloc_p, mips16_call_reloc_p): New functions. (_bfd_mips16_elf_reloc_unshuffle): Use mips16_reloc_p to generalize relocation checks. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Handle R_MIPS16_GOT16. (mips_elf_got16_entry): Add comment. (mips_elf_calculate_relocation): Use hi16_reloc_p, lo16_reloc_p, mips16_call_reloc_p, call16_reloc_p and got16_reloc_p to generalize relocation checks. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16, allowing the former to refer directly to a MIPS16 function if its stub is not needed. (mips16_stub_section_p): Delete. (_bfd_mips_elf_symbol_processing): Convert odd-valued function symbols into even MIPS16 symbols. (mips_elf_add_lo16_rel_addend): Use mips16_reloc_p to generalize a relocation check. (_bfd_mips_elf_check_relocs): Calculate "bed" and "rel_end" earlier in the function. Use mips16_stub_symndx to identify the target function. Avoid out-of-bounds accesses when the stub has no relocations; report an error instead. Use section_allows_mips16_refs_p instead of mips16_stub_section_p. Use mips16_call_reloc_p and got16_reloc_p to generalize relocation checks. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. Don't create dynamic relocations for absolute references to __gnu_local_gp. (_bfd_mips_elf_always_size_sections): Pass a bfd_link_info as the argument to mips_elf_check_mips16_stubs. Generalize comment. (_bfd_mips_elf_relocate_section): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (_bfd_mips_elf_finish_dynamic_symbol): If a dynamic MIPS16 function symbol has a non-MIPS16 stub, redirect the symbol to the stub. Fix an overly long line. Don't give dynamic symbols type STO_MIPS16. (_bfd_mips_elf_gc_sweep_hook): Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. gas/ * config/tc-mips.c (mips16_reloc_p, got16_reloc_p, hi16_reloc_p) (lo16_reloc_p): New functions. (reloc_needs_lo_p): Use hi16_reloc_p and got16_reloc_p to generalize relocation checks. (matching_lo_reloc): New function. (fixup_has_matching_lo_p): Use it. (mips16_mark_labels): Don't clobber a symbol's visibility. (append_insn): Use hi16_reloc_p and lo16_reloc_p. (mips16_ip): Handle BFD_RELOC_MIPS16_GOT16 and BFD_RELOC_MIPS16_CALL16. (md_apply_fix): Likewise. (mips16_percent_op): Add %got and %call16. (mips_frob_file): Use got16_reloc_p to generalize relocation checks. Use matching_lo_reloc. (mips_force_relocation): Use hi16_reloc_p and lo16_reloc_p to generalize relocation checks. (mips_fix_adjustable): Use lo16_reloc_p to generalize relocation checks. gas/testsuite/ * gas/mips/elf-rel8-mips16.d, gas/mips/elf-rel8-mips16.s, * gas/mips/elf-rel9-mips16.d, gas/mips/elf-rel9-mips16.s, * gas/mips/elf-rel13-mips16.d, gas/mips/elf-rel13-mips16.s: New tests. * gas/mips/mips.exp: Run them. ld/testsuite/ * ld-mips-elf/mips16-local-stubs-1.d: Remove stub_for_h3, which was only referenced by the .pdr section, and was not actually needed by code. * ld-mips-elf/mips16-intermix.d: Remove unused static function stubs. * ld-mips-elf/mips16-pic-1a.s, ld-mips-elf/mips16-pic-1b.s, ld-mips-elf/mips16-pic-1-dummy.s, ld-mips-elf/mips16-pic-1.dd, ld-mips-elf/mips16-pic-1.gd, ld-mips-elf/mips16-pic-1.inc, ld-mips-elf/mips16-pic-1.ld, ld-mips-elf/mips16-pic-2a.s, ld-mips-elf/mips16-pic-2b.s, ld-mips-elf/mips16-pic-2.ad, ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd, ld-mips-elf/mips16-pic-2.nd, ld-mips-elf/mips16-pic-2.rd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-06 21:44:47 +02:00
{ BFD_RELOC_MIPS16_GOT16, R_MIPS16_GOT16 - R_MIPS16_min },
{ BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min },
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
{ BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
{ BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
};
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Given a BFD reloc type, return a howto structure. */
static reloc_howto_type *
bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
bfd_reloc_code_real_type code)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
unsigned int i;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* FIXME: We default to RELA here instead of choosing the right
relocation variant. */
reloc_howto_type *howto_table = mips_elf64_howto_table_rela;
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
reloc_howto_type *howto16_table = mips16_elf64_howto_table_rela;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
for (i = 0; i < sizeof (mips_reloc_map) / sizeof (struct elf_reloc_map);
i++)
{
if (mips_reloc_map[i].bfd_val == code)
return &howto_table[(int) mips_reloc_map[i].elf_val];
}
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
for (i = 0; i < sizeof (mips16_reloc_map) / sizeof (struct elf_reloc_map);
i++)
{
if (mips16_reloc_map[i].bfd_val == code)
return &howto16_table[(int) mips16_reloc_map[i].elf_val];
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
switch (code)
{
case BFD_RELOC_VTABLE_INHERIT:
return &elf_mips_gnu_vtinherit_howto;
case BFD_RELOC_VTABLE_ENTRY:
return &elf_mips_gnu_vtentry_howto;
2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> Maxim Kuvyrkov <maxim@codesourcery.com> * elf32-mips.c (mips_vxworks_copy_howto_rela): Replace with... (elf_mips_copy_howto): ...this howto. Clear the size fields. (mips_vxworks_jump_slot_howto_rela): Replace with... (elf_mips_jump_slot_howto): ...this howto. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_plt_readonly): Define. (elf_backend_plt_sym_val): Define for non-VxWorks targets. (mips_vxworks_bfd_reloc_type_lookup): Delete. (mips_vxworks_bfd_reloc_name_lookup): Likewise. (mips_vxworks_rtype_to_howto): Likewise. (elf_backend_want_dynbss): Don't define for VxWorks. (elf_backend_plt_readonly): Likewise. (bfd_elf32_bfd_reloc_type_lookup): Likewise. (bfd_elf32_bfd_reloc_name_lookup): Likewise. (elf_backend_mips_rtype_to_howto): Likewise. (elf_backend_adjust_dynamic_symbol): Likewise. (elf_backend_got_symbol_offset): Don't define. * elfn32-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_n32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elf64-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf64_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf64_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf64_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elfxx-mips.h (_bfd_mips_vxworks_adjust_dynamic_symbol): Delete. (_bfd_mips_elf_use_plts_and_copy_relocs, _bfd_mips_elf_init_stubs) (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): Declare. * elfxx-mips.c (mips_elf_la25_stub): New structure. (LA25_LUI, LA25_J, LA25_ADDIU): New macros. (mips_elf_link_hash_entry): Add "la25_stubs", "has_static_relocs" and "has_nonpic_branches" fields. Remove "is_relocation_target" and "is_branch_target". (mips_elf_link_hash_table): Add blank lines. Add "use_plts_and_copy_relocs", "reserved_gotno", "strampoline", "la25_stubs" and "add_stub_section" fields. (mips_htab_traverse_info): New structure. (PIC_OBJECT_P, MIPS_ELF_LOAD_WORD): New macros. (MIPS_RESERVED_GOTNO): Delete. (mips_o32_exec_plt0_entry, mips_n32_exec_plt0_entry) (mips_n64_exec_plt0_entry, mips_exec_plt_entry): New tables. (mips_elf_link_hash_newfunc): Update after the changes to mips_elf_link_hash_entry. (mips_elf_check_mips16_stubs): Replace the DATA parameter with an INFO parameter. Don't look through warnings symbols here; do it in mips_elf_check_symbols instead. (mips_elf_create_stub_symbol): New function. (mips_elf_la25_stub_hash, mips_elf_la25_stub_eq): New functions. (_bfd_mips_elf_init_stubs, mips_elf_local_pic_function_p): Likewise. (mips_elf_add_la25_intro, mips_elf_add_la25_trampoline): Likewise. (mips_elf_add_la25_stub, mips_elf_check_symbols): New functions. (mips_elf_gotplt_index): Check for VxWorks. (mips_elf_output_dynamic_relocation): Take the relocation index as an extra parameter. Do not increment reloc_count here. (mips_elf_initialize_tls_slots): Update the calls to mips_elf_output_dynamic_relocation accordingly. (mips_elf_multi_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (mips_elf_create_got_section): Don't allocate reserved GOT entries here. Unconditionally create .got.plt, but don't set its alignment here. (mips_elf_relocation_needs_la25_stub): New function. (mips_elf_calculate_relocation): Redirect branches and jumps to a non-PIC stub if one exists. Check !h->has_static_relocs instead of !htab->is_vxworks when deciding whether to create dynamic relocations for R_MIPS_32, R_MIPS_REL32 and R_MIPS_64. (_bfd_mips_elf_create_dynamic_sections): Unconditionally call _bfd_elf_create_dynamic_sections. Unconditionally set up htab->splt and htab->sdynbss. Set htab->srelplt to ".rel.plt" if !htab->is_vxworks. Add non-VxWorks values of htab->plt_header_size and htab->plt_entry_size. (_bfd_mips_elf_check_relocs): Set pointer_equality_needed for non-branch static relocations. Set has_nonpic_branches when an la25 stub might be required. Set can_make_dynamic_p to TRUE if R_MIPS_32, R_MIPS_REL32 and R_MIPS_64 relocations can be made dynamic, rather than duplicating the condition. Do not make them dynamic for read-only sections in non-PIC executable objects. Do not protect this code with dynobj == NULL || htab->sgot == NULL; handle each group of cases separately. Add a default case that sets has_static_relocs for non-GOT relocations that cannot be made dynamic. Don't set is_relocation_target and is_branch_target. Reject non-PIC static relocations in shared objects. (_bfd_mips_vxworks_adjust_dynamic_symbol): Fold into... (_bfd_mips_elf_adjust_dynamic_symbol): ...here, using htab->use_plts_and_copy_relocs instead of htab->is_vxworks to select PLT and copy-reloc handling. Set the alignment of .plt and .got.plt when allocating the first entry. Generalize code to handle REL as well as RELA sections and 64-bit as well as 32-bit GOT entries. Complain if we find a static-only reloc against an externally-defined symbol and if we cannot create dynamic relocations for it. Allocate copy relocs using mips_elf_allocate_dynamic_relocations on non-VxWorks targets. Set possibly_dynamic_relocs to 0 when using PLTs or copy relocs. Skip reserved .got.plt entries. (_bfd_mips_elf_always_size_sections): Use mips_elf_check_symbols instead of mips_elf_check_mips16_stubs to process each symbol. Do the traversal for relocatable objects too. (mips_elf_lay_out_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (_bfd_mips_elf_size_dynamic_sections): Exclude sdynbss if it is empty. Extend the DT_PLTREL, DT_JMPREL and DT_PLTRELSZ handling to non-VxWorks targets. Only add DT_REL{,A}, DT_REL{,A}SZ and DT_REL{,A}ENT if .rel.dyn is nonempty. Create a symbol for the PLT. Allocate a nop at the end of the PLT. Allocate DT_MIPS_PLTGOT. (mips_elf_create_la25_stub_info): New function. (_bfd_mips_elf_finish_dynamic_symbol): Write out PLT entries and copy relocs where necessary. Check pointer_equality_needed. (mips_finish_exec_plt): New function. (_bfd_mips_elf_finish_dynamic_sections): Always set DT_PLTGOT to the beginning of htab->sgot. Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. Assert htab->use_plts_and_copy_relocs instead of htab->is_vxworks for DT_PLTREL, DT_PLTRELSZ and DT_JMPREL. Set DT_PLTREL to DT_REL instead of DT_RELA on non-VxWorks targets. Use mips_finish_exec_plt to create non-VxWorks PLT headers. Set DT_MIPS_PLTGOT. (_bfd_mips_elf_copy_indirect_symbol): Copy has_static_relocs from the indirect symbol to the direct symbol. Also copy has_nonpic_branches for indirect symbols. (_bfd_mips_elf_get_target_dtag): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (_bfd_mips_elf_link_hash_table_create): Initialize the new mips_elf_link_hash_table fields. (_bfd_mips_vxworks_link_hash_table_create): Set use_plts_and_copy_relocs to TRUE. Use TRUE rather than 1 when setting is_vxworks. (_bfd_mips_elf_use_plts_and_copy_relocs): New function. (_bfd_mips_elf_final_link): Call mips_elf_create_la25_stub for each la25_stub. (_bfd_mips_elf_merge_private_bfd_data): Treat dynamic objects as PIC. Generalize message about linking PIC and non-PIC. (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): New functions. * reloc.c: Update comment near BFD_RELOC_MIPS_JUMP_SLOT. * bfd-in2.h: Regenerated. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * readelf.c (get_mips_symbol_other): Handle STO_MIPS_PLT and STO_MIPS_PIC. (slurp_rela_relocs, slurp_rel_relocs): Handle MIPS ELF64 here. (dump_relocations, debug_apply_relocations): Don't handle it here. (get_mips_dynamic_type): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (print_mips_pltgot_entry): New function. (process_mips_specific): Dump the PLT GOT. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * config/tc-mips.c (OPTION_CALL_NONPIC): New macro. (OPTION_NON_SHARED, OPTION_XGOT, OPTION_MABI, OPTION_32) (OPTION_N32, OPTION_64, OPTION_MDEBUG, OPTION_NO_MDEBUG) (OPTION_PDR, OPTION_NO_PDR, OPTION_MVXWORKS_PIC): Bump by 1. (md_longopts): Add -call_nonpic. (md_parse_option): Handle OPTION_CALL_NONPIC. (md_show_usage): Add -call_nonpic. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> * gas/mips/call-nonpic-1.s, gas/mips/call-nonpic-1.d: New test. * gas/mips/mips.exp: Run it. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * mips.h (STO_MIPS_PLT, ELF_ST_IS_MIPS_PLT, ELF_ST_SET_MIPS_PLT) (STO_MIPS_PIC, DT_MIPS_PLTGOT, DT_MIPS_RWPLT): New macros. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * emulparams/elf32bmip.sh (GOT): Define, moving .got.plt to... (OTHER_RELRO_SECTIONS, OTHER_READWRITE_SECTIONS): ...one of these two variables. * emulparams/elf32bmipn32-defs.sh: Likewise. * emultempl/mipself.em: Include ldctor.h, elf/mips.h and elfxx-mips.h. (is_mips_elf): New macro. (stub_file, stub_bfd): New variables. (hook_stub_info): New structure. (hook_in_stub): New function. (mips_add_stub_section): Likewise. (mips_create_output_section_statements): Likewise. (mips_before_allocation): Likewise. (real_func): New variable. (mips_for_each_input_file_wrapper): New function. (mips_lang_for_each_input_file): Likewise. (lang_for_each_input_file): Define. (LDEMUL_BEFORE_ALLOCATION): Likewise. (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Likewise. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * ld-mips-elf/mips16-pic-3a.s, ld-mips-elf/mips16-pic-3b.s, ld-mips-elf/mips16-pic-3.dd, ld-mips-elf/mips16-pic-3.gd, ld-mips-elf/mips16-pic-3.rd, ld-mips-elf/mips16-pic-3.inc, ld-mips-elf/pic-and-nonpic-1a.s, ld-mips-elf/pic-and-nonpic-1b.s, ld-mips-elf/pic-and-nonpic-1.ld, ld-mips-elf/pic-and-nonpic-1.dd, ld-mips-elf/pic-and-nonpic-1.nd, ld-mips-elf/pic-and-nonpic-1-rel.dd, ld-mips-elf/pic-and-nonpic-1-rel.nd, ld-mips-elf/pic-and-nonpic-2a.s, ld-mips-elf/pic-and-nonpic-2b.s, ld-mips-elf/pic-and-nonpic-2.d, ld-mips-elf/pic-and-nonpic-3a.s, ld-mips-elf/pic-and-nonpic-3a.ld, ld-mips-elf/pic-and-nonpic-3a.dd, ld-mips-elf/pic-and-nonpic-3a.gd, ld-mips-elf/pic-and-nonpic-3a.sd, ld-mips-elf/pic-and-nonpic-3b.s, ld-mips-elf/pic-and-nonpic-3b.ld, ld-mips-elf/pic-and-nonpic-3b.ad, ld-mips-elf/pic-and-nonpic-3b.dd, ld-mips-elf/pic-and-nonpic-3b.gd, ld-mips-elf/pic-and-nonpic-3b.nd, ld-mips-elf/pic-and-nonpic-3b.pd, ld-mips-elf/pic-and-nonpic-3b.rd, ld-mips-elf/pic-and-nonpic-3b.sd, ld-mips-elf/pic-and-nonpic-3-error.d, ld-mips-elf/pic-and-nonpic-4a.s, ld-mips-elf/pic-and-nonpic-4b.s, ld-mips-elf/pic-and-nonpic-4b.ld, ld-mips-elf/pic-and-nonpic-4b.ad, ld-mips-elf/pic-and-nonpic-4b.dd, ld-mips-elf/pic-and-nonpic-4b.gd, ld-mips-elf/pic-and-nonpic-4b.nd, ld-mips-elf/pic-and-nonpic-4b.rd, ld-mips-elf/pic-and-nonpic-4b.sd, ld-mips-elf/pic-and-nonpic-4-error.d, ld-mips-elf/pic-and-nonpic-5a.s, ld-mips-elf/pic-and-nonpic-5b.s, ld-mips-elf/pic-and-nonpic-5b.ld, ld-mips-elf/pic-and-nonpic-5b.ad, ld-mips-elf/pic-and-nonpic-5b.dd, ld-mips-elf/pic-and-nonpic-5b.gd, ld-mips-elf/pic-and-nonpic-5b.nd, ld-mips-elf/pic-and-nonpic-5b.rd, ld-mips-elf/pic-and-nonpic-5b.sd, ld-mips-elf/pic-and-nonpic-5b.pd, ld-mips-elf/pic-and-nonpic-6.ld, ld-mips-elf/pic-and-nonpic-6-o32a.s, ld-mips-elf/pic-and-nonpic-6-o32b.s, ld-mips-elf/pic-and-nonpic-6-o32c.s, ld-mips-elf/pic-and-nonpic-6-o32.ad, ld-mips-elf/pic-and-nonpic-6-o32.dd, ld-mips-elf/pic-and-nonpic-6-o32.gd, ld-mips-elf/pic-and-nonpic-6-o32.nd, ld-mips-elf/pic-and-nonpic-6-o32.pd, ld-mips-elf/pic-and-nonpic-6-o32.rd, ld-mips-elf/pic-and-nonpic-6-o32.sd, ld-mips-elf/pic-and-nonpic-6-n32a.s, ld-mips-elf/pic-and-nonpic-6-n32b.s, ld-mips-elf/pic-and-nonpic-6-n32c.s, ld-mips-elf/pic-and-nonpic-6-n32.ad, ld-mips-elf/pic-and-nonpic-6-n32.dd, ld-mips-elf/pic-and-nonpic-6-n32.gd, ld-mips-elf/pic-and-nonpic-6-n32.nd, ld-mips-elf/pic-and-nonpic-6-n32.pd, ld-mips-elf/pic-and-nonpic-6-n32.rd, ld-mips-elf/pic-and-nonpic-6-n32.sd, ld-mips-elf/pic-and-nonpic-6-n64a.s, ld-mips-elf/pic-and-nonpic-6-n64b.s, ld-mips-elf/pic-and-nonpic-6-n64c.s, ld-mips-elf/pic-and-nonpic-6-n64.ad, ld-mips-elf/pic-and-nonpic-6-n64.dd, ld-mips-elf/pic-and-nonpic-6-n64.gd, ld-mips-elf/pic-and-nonpic-6-n64.nd, ld-mips-elf/pic-and-nonpic-6-n64.pd, ld-mips-elf/pic-and-nonpic-6-n64.rd, ld-mips-elf/pic-and-nonpic-6-n64.sd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-08 21:24:49 +02:00
case BFD_RELOC_MIPS_COPY:
return &elf_mips_copy_howto;
case BFD_RELOC_MIPS_JUMP_SLOT:
return &elf_mips_jump_slot_howto;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
default:
bfd_set_error (bfd_error_bad_value);
return NULL;
}
}
* aout-adobe.c (aout_32_bfd_reloc_name_lookup): Define. * aout-arm.c (MY_bfd_reloc_name_lookup): Define. (MY (bfd_reloc_name_lookup)): New function. * aout-ns32k.c (MY (bfd_reloc_name_lookup)): New function. * aout-target.h (NAME (aout, reloc_name_lookup)): Declare. (MY_bfd_reloc_name_lookup): Define. * aout-tic30.c (tic30_aout_reloc_name_lookup): New function. (MY_bfd_reloc_name_lookup): Define. * aoutx.h (NAME (aout, reloc_type_lookup)): Don't declare. (NAME (aout, reloc_name_lookup)): New function. * bout.c (b_out_bfd_reloc_name_lookup): New function. * coff-alpha.c (alpha_bfd_reloc_name_lookup): New function. (_bfd_ecoff_bfd_reloc_name_lookup): Define. * coff-arm.c (coff_arm_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-i386.c (coff_bfd_reloc_name_lookup): Define. (coff_i386_reloc_name_lookup): New function. * coff-i860.c (coff_i860_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-i960.c (coff_i960_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-m68k.c (m68k_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-maxq.c (maxq_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-mcore.c (mcore_coff_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-mips.c (mips_bfd_reloc_name_lookup): New function. (_bfd_ecoff_bfd_reloc_name_lookup): Define. * coff-ppc.c (ppc_coff_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-rs6000.c (coff_bfd_reloc_name_lookup): Define. (_bfd_xcoff_reloc_name_lookup): New function. (rs6000coff_vec, pmac_xcoff_vec): Init new field. * coff-sh.c (coff_bfd_reloc_name_lookup): Define. (sh_coff_reloc_name_lookup): New function. * coff-sparc.c (coff_sparc_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-tic30.c (coff_bfd_reloc_name_lookup): Define. (tic30_coff_reloc_name_lookup): New function. * coff-tic4x.c (coff_bfd_reloc_name_lookup): Define. (tic4x_coff_reloc_name_lookup): New function. * coff-tic54x.c (coff_bfd_reloc_name_lookup): Define. (tic54x_coff_reloc_name_lookup): New function. * coff-x86_64.c (coff_bfd_reloc_name_lookup): Define. (coff_amd64_reloc_name_lookup): New function. * coff-z80.c (coff_z80_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-z8k.c (coff_z8k_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff64-rs6000.c (coff_bfd_reloc_name_lookup): Define. (xcoff64_reloc_name_lookup): New function. (rs6000coff64_vec, aix5coff64_vec): Init new field. * coffcode.h (coff_bfd_reloc_name_lookup): Define. * elf-hppa.h (elf_hppa_reloc_name_lookup): New function. * elf-m10200.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf-m10300.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-arc.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-arm.c (elf32_arm_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-avr.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-bfin.c (bfin_bfd_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-cr16c.c (elf_cr16c_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-cris.c (cris_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-crx.c (elf_crx_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-d10v.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-d30v.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-dlx.c (elf32_dlx_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-fr30.c (fr30_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-frv.c (frv_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-gen.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-h8300.c (elf32_h8_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-hppa.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i370.c (i370_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i386.c (elf_i386_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i860.c (elf32_i860_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i960.c (elf32_i960_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-ip2k.c (ip2k_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-iq2000.c (iq2000_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m32c.c (m32c_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m32r.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68hc11.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68hc12.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68k.c (reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m88k.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mcore.c (mcore_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mep.c (mep_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mips.c (bfd_elf32_bfd_reloc_name_lookup): New function. (mips_vxworks_bfd_reloc_name_lookup): Likewise. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-msp430.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-mt.c (mt_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-openrisc.c (openrisc_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-or32.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-pj.c (pj_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-ppc.c (ppc_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-s390.c (elf_s390_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-score.c (elf32_score_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-sh.c (sh_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-sparc.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-spu.c (spu_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-v850.c (v850_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-vax.c (reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xc16x.c (xc16x_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xstormy16.c (xstormy16_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xtensa.c (elf_xtensa_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf64-alpha.c (elf64_alpha_bfd_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-gen.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-hppa.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-mips.c (bfd_elf64_bfd_reloc_name_lookup): New function. * elf64-mmix.c (bfd_elf64_bfd_reloc_name_lookup): New function. * elf64-ppc.c (ppc64_elf_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-s390.c (elf_s390_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-sh64.c (sh_elf64_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-sparc.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-x86-64.c (elf64_x86_64_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elfn32-mips.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elfxx-ia64.c (elfNN_ia64_reloc_name_lookup): New function. (bfd_elfNN_bfd_reloc_name_lookup): Define. * elfxx-sparc.c (_bfd_sparc_elf_reloc_name_lookup): New function. * elfxx-sparc.h (_bfd_sparc_elf_reloc_name_lookup): Declare. * i386msdos.c (msdos_bfd_reloc_name_lookup): Define. * i386os9k.c (aout_32_bfd_reloc_name_lookup): Define. * ieee.c (ieee_bfd_reloc_name_lookup): Define. * libaout.h (NAME (aout, reloc_name_lookup)): Declare. * libbfd-in.h (_bfd_norelocs_bfd_reloc_name_lookup): Declare. * mipsbsd.c (MY_bfd_reloc_name_lookup): Define. (MY(reloc_type_lookup)): Rename from MY(reloc_howto_type_lookup). (MY(reloc_name_lookup)): New function. * nlm-target.h (nlm_bfd_reloc_name_lookup): Define. * oasys.c (oasys_bfd_reloc_name_lookup): Define. * pdp11.c (NAME (aout, reloc_name_lookup)): New function. * pe-mips.c (coff_mips_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * reloc.c (bfd_reloc_name_lookup): New function. * riscix.c (riscix_reloc_name_lookup): New function. (MY_bfd_reloc_name_lookup): Define. * som.c (som_bfd_reloc_name_lookup): New function. * targets.c (struct bfd_target): Add reloc_name_lookup. (BFD_JUMP_TABLE_RELOCS): Add NAME##_bfd_reloc_name_lookup. * versados.c (versados_bfd_reloc_name_lookup): Define. * vms.c (vms_bfd_reloc_name_lookup): New function. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate.
2007-03-26 14:23:03 +02:00
static reloc_howto_type *
bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
const char *r_name)
{
unsigned int i;
for (i = 0;
i < (sizeof (mips_elf64_howto_table_rela)
/ sizeof (mips_elf64_howto_table_rela[0])); i++)
if (mips_elf64_howto_table_rela[i].name != NULL
&& strcasecmp (mips_elf64_howto_table_rela[i].name, r_name) == 0)
return &mips_elf64_howto_table_rela[i];
for (i = 0;
i < (sizeof (mips16_elf64_howto_table_rela)
/ sizeof (mips16_elf64_howto_table_rela[0]));
i++)
if (mips16_elf64_howto_table_rela[i].name != NULL
&& strcasecmp (mips16_elf64_howto_table_rela[i].name, r_name) == 0)
return &mips16_elf64_howto_table_rela[i];
if (strcasecmp (elf_mips_gnu_vtinherit_howto.name, r_name) == 0)
return &elf_mips_gnu_vtinherit_howto;
if (strcasecmp (elf_mips_gnu_vtentry_howto.name, r_name) == 0)
return &elf_mips_gnu_vtentry_howto;
if (strcasecmp (elf_mips_gnu_rel16_s2.name, r_name) == 0)
return &elf_mips_gnu_rel16_s2;
if (strcasecmp (elf_mips_gnu_rela16_s2.name, r_name) == 0)
return &elf_mips_gnu_rela16_s2;
2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> Maxim Kuvyrkov <maxim@codesourcery.com> * elf32-mips.c (mips_vxworks_copy_howto_rela): Replace with... (elf_mips_copy_howto): ...this howto. Clear the size fields. (mips_vxworks_jump_slot_howto_rela): Replace with... (elf_mips_jump_slot_howto): ...this howto. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_plt_readonly): Define. (elf_backend_plt_sym_val): Define for non-VxWorks targets. (mips_vxworks_bfd_reloc_type_lookup): Delete. (mips_vxworks_bfd_reloc_name_lookup): Likewise. (mips_vxworks_rtype_to_howto): Likewise. (elf_backend_want_dynbss): Don't define for VxWorks. (elf_backend_plt_readonly): Likewise. (bfd_elf32_bfd_reloc_type_lookup): Likewise. (bfd_elf32_bfd_reloc_name_lookup): Likewise. (elf_backend_mips_rtype_to_howto): Likewise. (elf_backend_adjust_dynamic_symbol): Likewise. (elf_backend_got_symbol_offset): Don't define. * elfn32-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_n32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elf64-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf64_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf64_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf64_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elfxx-mips.h (_bfd_mips_vxworks_adjust_dynamic_symbol): Delete. (_bfd_mips_elf_use_plts_and_copy_relocs, _bfd_mips_elf_init_stubs) (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): Declare. * elfxx-mips.c (mips_elf_la25_stub): New structure. (LA25_LUI, LA25_J, LA25_ADDIU): New macros. (mips_elf_link_hash_entry): Add "la25_stubs", "has_static_relocs" and "has_nonpic_branches" fields. Remove "is_relocation_target" and "is_branch_target". (mips_elf_link_hash_table): Add blank lines. Add "use_plts_and_copy_relocs", "reserved_gotno", "strampoline", "la25_stubs" and "add_stub_section" fields. (mips_htab_traverse_info): New structure. (PIC_OBJECT_P, MIPS_ELF_LOAD_WORD): New macros. (MIPS_RESERVED_GOTNO): Delete. (mips_o32_exec_plt0_entry, mips_n32_exec_plt0_entry) (mips_n64_exec_plt0_entry, mips_exec_plt_entry): New tables. (mips_elf_link_hash_newfunc): Update after the changes to mips_elf_link_hash_entry. (mips_elf_check_mips16_stubs): Replace the DATA parameter with an INFO parameter. Don't look through warnings symbols here; do it in mips_elf_check_symbols instead. (mips_elf_create_stub_symbol): New function. (mips_elf_la25_stub_hash, mips_elf_la25_stub_eq): New functions. (_bfd_mips_elf_init_stubs, mips_elf_local_pic_function_p): Likewise. (mips_elf_add_la25_intro, mips_elf_add_la25_trampoline): Likewise. (mips_elf_add_la25_stub, mips_elf_check_symbols): New functions. (mips_elf_gotplt_index): Check for VxWorks. (mips_elf_output_dynamic_relocation): Take the relocation index as an extra parameter. Do not increment reloc_count here. (mips_elf_initialize_tls_slots): Update the calls to mips_elf_output_dynamic_relocation accordingly. (mips_elf_multi_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (mips_elf_create_got_section): Don't allocate reserved GOT entries here. Unconditionally create .got.plt, but don't set its alignment here. (mips_elf_relocation_needs_la25_stub): New function. (mips_elf_calculate_relocation): Redirect branches and jumps to a non-PIC stub if one exists. Check !h->has_static_relocs instead of !htab->is_vxworks when deciding whether to create dynamic relocations for R_MIPS_32, R_MIPS_REL32 and R_MIPS_64. (_bfd_mips_elf_create_dynamic_sections): Unconditionally call _bfd_elf_create_dynamic_sections. Unconditionally set up htab->splt and htab->sdynbss. Set htab->srelplt to ".rel.plt" if !htab->is_vxworks. Add non-VxWorks values of htab->plt_header_size and htab->plt_entry_size. (_bfd_mips_elf_check_relocs): Set pointer_equality_needed for non-branch static relocations. Set has_nonpic_branches when an la25 stub might be required. Set can_make_dynamic_p to TRUE if R_MIPS_32, R_MIPS_REL32 and R_MIPS_64 relocations can be made dynamic, rather than duplicating the condition. Do not make them dynamic for read-only sections in non-PIC executable objects. Do not protect this code with dynobj == NULL || htab->sgot == NULL; handle each group of cases separately. Add a default case that sets has_static_relocs for non-GOT relocations that cannot be made dynamic. Don't set is_relocation_target and is_branch_target. Reject non-PIC static relocations in shared objects. (_bfd_mips_vxworks_adjust_dynamic_symbol): Fold into... (_bfd_mips_elf_adjust_dynamic_symbol): ...here, using htab->use_plts_and_copy_relocs instead of htab->is_vxworks to select PLT and copy-reloc handling. Set the alignment of .plt and .got.plt when allocating the first entry. Generalize code to handle REL as well as RELA sections and 64-bit as well as 32-bit GOT entries. Complain if we find a static-only reloc against an externally-defined symbol and if we cannot create dynamic relocations for it. Allocate copy relocs using mips_elf_allocate_dynamic_relocations on non-VxWorks targets. Set possibly_dynamic_relocs to 0 when using PLTs or copy relocs. Skip reserved .got.plt entries. (_bfd_mips_elf_always_size_sections): Use mips_elf_check_symbols instead of mips_elf_check_mips16_stubs to process each symbol. Do the traversal for relocatable objects too. (mips_elf_lay_out_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (_bfd_mips_elf_size_dynamic_sections): Exclude sdynbss if it is empty. Extend the DT_PLTREL, DT_JMPREL and DT_PLTRELSZ handling to non-VxWorks targets. Only add DT_REL{,A}, DT_REL{,A}SZ and DT_REL{,A}ENT if .rel.dyn is nonempty. Create a symbol for the PLT. Allocate a nop at the end of the PLT. Allocate DT_MIPS_PLTGOT. (mips_elf_create_la25_stub_info): New function. (_bfd_mips_elf_finish_dynamic_symbol): Write out PLT entries and copy relocs where necessary. Check pointer_equality_needed. (mips_finish_exec_plt): New function. (_bfd_mips_elf_finish_dynamic_sections): Always set DT_PLTGOT to the beginning of htab->sgot. Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. Assert htab->use_plts_and_copy_relocs instead of htab->is_vxworks for DT_PLTREL, DT_PLTRELSZ and DT_JMPREL. Set DT_PLTREL to DT_REL instead of DT_RELA on non-VxWorks targets. Use mips_finish_exec_plt to create non-VxWorks PLT headers. Set DT_MIPS_PLTGOT. (_bfd_mips_elf_copy_indirect_symbol): Copy has_static_relocs from the indirect symbol to the direct symbol. Also copy has_nonpic_branches for indirect symbols. (_bfd_mips_elf_get_target_dtag): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (_bfd_mips_elf_link_hash_table_create): Initialize the new mips_elf_link_hash_table fields. (_bfd_mips_vxworks_link_hash_table_create): Set use_plts_and_copy_relocs to TRUE. Use TRUE rather than 1 when setting is_vxworks. (_bfd_mips_elf_use_plts_and_copy_relocs): New function. (_bfd_mips_elf_final_link): Call mips_elf_create_la25_stub for each la25_stub. (_bfd_mips_elf_merge_private_bfd_data): Treat dynamic objects as PIC. Generalize message about linking PIC and non-PIC. (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): New functions. * reloc.c: Update comment near BFD_RELOC_MIPS_JUMP_SLOT. * bfd-in2.h: Regenerated. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * readelf.c (get_mips_symbol_other): Handle STO_MIPS_PLT and STO_MIPS_PIC. (slurp_rela_relocs, slurp_rel_relocs): Handle MIPS ELF64 here. (dump_relocations, debug_apply_relocations): Don't handle it here. (get_mips_dynamic_type): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (print_mips_pltgot_entry): New function. (process_mips_specific): Dump the PLT GOT. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * config/tc-mips.c (OPTION_CALL_NONPIC): New macro. (OPTION_NON_SHARED, OPTION_XGOT, OPTION_MABI, OPTION_32) (OPTION_N32, OPTION_64, OPTION_MDEBUG, OPTION_NO_MDEBUG) (OPTION_PDR, OPTION_NO_PDR, OPTION_MVXWORKS_PIC): Bump by 1. (md_longopts): Add -call_nonpic. (md_parse_option): Handle OPTION_CALL_NONPIC. (md_show_usage): Add -call_nonpic. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> * gas/mips/call-nonpic-1.s, gas/mips/call-nonpic-1.d: New test. * gas/mips/mips.exp: Run it. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * mips.h (STO_MIPS_PLT, ELF_ST_IS_MIPS_PLT, ELF_ST_SET_MIPS_PLT) (STO_MIPS_PIC, DT_MIPS_PLTGOT, DT_MIPS_RWPLT): New macros. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * emulparams/elf32bmip.sh (GOT): Define, moving .got.plt to... (OTHER_RELRO_SECTIONS, OTHER_READWRITE_SECTIONS): ...one of these two variables. * emulparams/elf32bmipn32-defs.sh: Likewise. * emultempl/mipself.em: Include ldctor.h, elf/mips.h and elfxx-mips.h. (is_mips_elf): New macro. (stub_file, stub_bfd): New variables. (hook_stub_info): New structure. (hook_in_stub): New function. (mips_add_stub_section): Likewise. (mips_create_output_section_statements): Likewise. (mips_before_allocation): Likewise. (real_func): New variable. (mips_for_each_input_file_wrapper): New function. (mips_lang_for_each_input_file): Likewise. (lang_for_each_input_file): Define. (LDEMUL_BEFORE_ALLOCATION): Likewise. (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Likewise. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * ld-mips-elf/mips16-pic-3a.s, ld-mips-elf/mips16-pic-3b.s, ld-mips-elf/mips16-pic-3.dd, ld-mips-elf/mips16-pic-3.gd, ld-mips-elf/mips16-pic-3.rd, ld-mips-elf/mips16-pic-3.inc, ld-mips-elf/pic-and-nonpic-1a.s, ld-mips-elf/pic-and-nonpic-1b.s, ld-mips-elf/pic-and-nonpic-1.ld, ld-mips-elf/pic-and-nonpic-1.dd, ld-mips-elf/pic-and-nonpic-1.nd, ld-mips-elf/pic-and-nonpic-1-rel.dd, ld-mips-elf/pic-and-nonpic-1-rel.nd, ld-mips-elf/pic-and-nonpic-2a.s, ld-mips-elf/pic-and-nonpic-2b.s, ld-mips-elf/pic-and-nonpic-2.d, ld-mips-elf/pic-and-nonpic-3a.s, ld-mips-elf/pic-and-nonpic-3a.ld, ld-mips-elf/pic-and-nonpic-3a.dd, ld-mips-elf/pic-and-nonpic-3a.gd, ld-mips-elf/pic-and-nonpic-3a.sd, ld-mips-elf/pic-and-nonpic-3b.s, ld-mips-elf/pic-and-nonpic-3b.ld, ld-mips-elf/pic-and-nonpic-3b.ad, ld-mips-elf/pic-and-nonpic-3b.dd, ld-mips-elf/pic-and-nonpic-3b.gd, ld-mips-elf/pic-and-nonpic-3b.nd, ld-mips-elf/pic-and-nonpic-3b.pd, ld-mips-elf/pic-and-nonpic-3b.rd, ld-mips-elf/pic-and-nonpic-3b.sd, ld-mips-elf/pic-and-nonpic-3-error.d, ld-mips-elf/pic-and-nonpic-4a.s, ld-mips-elf/pic-and-nonpic-4b.s, ld-mips-elf/pic-and-nonpic-4b.ld, ld-mips-elf/pic-and-nonpic-4b.ad, ld-mips-elf/pic-and-nonpic-4b.dd, ld-mips-elf/pic-and-nonpic-4b.gd, ld-mips-elf/pic-and-nonpic-4b.nd, ld-mips-elf/pic-and-nonpic-4b.rd, ld-mips-elf/pic-and-nonpic-4b.sd, ld-mips-elf/pic-and-nonpic-4-error.d, ld-mips-elf/pic-and-nonpic-5a.s, ld-mips-elf/pic-and-nonpic-5b.s, ld-mips-elf/pic-and-nonpic-5b.ld, ld-mips-elf/pic-and-nonpic-5b.ad, ld-mips-elf/pic-and-nonpic-5b.dd, ld-mips-elf/pic-and-nonpic-5b.gd, ld-mips-elf/pic-and-nonpic-5b.nd, ld-mips-elf/pic-and-nonpic-5b.rd, ld-mips-elf/pic-and-nonpic-5b.sd, ld-mips-elf/pic-and-nonpic-5b.pd, ld-mips-elf/pic-and-nonpic-6.ld, ld-mips-elf/pic-and-nonpic-6-o32a.s, ld-mips-elf/pic-and-nonpic-6-o32b.s, ld-mips-elf/pic-and-nonpic-6-o32c.s, ld-mips-elf/pic-and-nonpic-6-o32.ad, ld-mips-elf/pic-and-nonpic-6-o32.dd, ld-mips-elf/pic-and-nonpic-6-o32.gd, ld-mips-elf/pic-and-nonpic-6-o32.nd, ld-mips-elf/pic-and-nonpic-6-o32.pd, ld-mips-elf/pic-and-nonpic-6-o32.rd, ld-mips-elf/pic-and-nonpic-6-o32.sd, ld-mips-elf/pic-and-nonpic-6-n32a.s, ld-mips-elf/pic-and-nonpic-6-n32b.s, ld-mips-elf/pic-and-nonpic-6-n32c.s, ld-mips-elf/pic-and-nonpic-6-n32.ad, ld-mips-elf/pic-and-nonpic-6-n32.dd, ld-mips-elf/pic-and-nonpic-6-n32.gd, ld-mips-elf/pic-and-nonpic-6-n32.nd, ld-mips-elf/pic-and-nonpic-6-n32.pd, ld-mips-elf/pic-and-nonpic-6-n32.rd, ld-mips-elf/pic-and-nonpic-6-n32.sd, ld-mips-elf/pic-and-nonpic-6-n64a.s, ld-mips-elf/pic-and-nonpic-6-n64b.s, ld-mips-elf/pic-and-nonpic-6-n64c.s, ld-mips-elf/pic-and-nonpic-6-n64.ad, ld-mips-elf/pic-and-nonpic-6-n64.dd, ld-mips-elf/pic-and-nonpic-6-n64.gd, ld-mips-elf/pic-and-nonpic-6-n64.nd, ld-mips-elf/pic-and-nonpic-6-n64.pd, ld-mips-elf/pic-and-nonpic-6-n64.rd, ld-mips-elf/pic-and-nonpic-6-n64.sd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-08 21:24:49 +02:00
if (strcasecmp (elf_mips_copy_howto.name, r_name) == 0)
return &elf_mips_copy_howto;
if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0)
return &elf_mips_jump_slot_howto;
* aout-adobe.c (aout_32_bfd_reloc_name_lookup): Define. * aout-arm.c (MY_bfd_reloc_name_lookup): Define. (MY (bfd_reloc_name_lookup)): New function. * aout-ns32k.c (MY (bfd_reloc_name_lookup)): New function. * aout-target.h (NAME (aout, reloc_name_lookup)): Declare. (MY_bfd_reloc_name_lookup): Define. * aout-tic30.c (tic30_aout_reloc_name_lookup): New function. (MY_bfd_reloc_name_lookup): Define. * aoutx.h (NAME (aout, reloc_type_lookup)): Don't declare. (NAME (aout, reloc_name_lookup)): New function. * bout.c (b_out_bfd_reloc_name_lookup): New function. * coff-alpha.c (alpha_bfd_reloc_name_lookup): New function. (_bfd_ecoff_bfd_reloc_name_lookup): Define. * coff-arm.c (coff_arm_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-i386.c (coff_bfd_reloc_name_lookup): Define. (coff_i386_reloc_name_lookup): New function. * coff-i860.c (coff_i860_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-i960.c (coff_i960_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-m68k.c (m68k_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-maxq.c (maxq_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-mcore.c (mcore_coff_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-mips.c (mips_bfd_reloc_name_lookup): New function. (_bfd_ecoff_bfd_reloc_name_lookup): Define. * coff-ppc.c (ppc_coff_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-rs6000.c (coff_bfd_reloc_name_lookup): Define. (_bfd_xcoff_reloc_name_lookup): New function. (rs6000coff_vec, pmac_xcoff_vec): Init new field. * coff-sh.c (coff_bfd_reloc_name_lookup): Define. (sh_coff_reloc_name_lookup): New function. * coff-sparc.c (coff_sparc_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-tic30.c (coff_bfd_reloc_name_lookup): Define. (tic30_coff_reloc_name_lookup): New function. * coff-tic4x.c (coff_bfd_reloc_name_lookup): Define. (tic4x_coff_reloc_name_lookup): New function. * coff-tic54x.c (coff_bfd_reloc_name_lookup): Define. (tic54x_coff_reloc_name_lookup): New function. * coff-x86_64.c (coff_bfd_reloc_name_lookup): Define. (coff_amd64_reloc_name_lookup): New function. * coff-z80.c (coff_z80_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff-z8k.c (coff_z8k_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * coff64-rs6000.c (coff_bfd_reloc_name_lookup): Define. (xcoff64_reloc_name_lookup): New function. (rs6000coff64_vec, aix5coff64_vec): Init new field. * coffcode.h (coff_bfd_reloc_name_lookup): Define. * elf-hppa.h (elf_hppa_reloc_name_lookup): New function. * elf-m10200.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf-m10300.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-arc.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-arm.c (elf32_arm_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-avr.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-bfin.c (bfin_bfd_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-cr16c.c (elf_cr16c_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-cris.c (cris_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-crx.c (elf_crx_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-d10v.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-d30v.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-dlx.c (elf32_dlx_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-fr30.c (fr30_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-frv.c (frv_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-gen.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-h8300.c (elf32_h8_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-hppa.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i370.c (i370_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i386.c (elf_i386_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i860.c (elf32_i860_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-i960.c (elf32_i960_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-ip2k.c (ip2k_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-iq2000.c (iq2000_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m32c.c (m32c_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m32r.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68hc11.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68hc12.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-m68k.c (reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-m88k.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mcore.c (mcore_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mep.c (mep_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-mips.c (bfd_elf32_bfd_reloc_name_lookup): New function. (mips_vxworks_bfd_reloc_name_lookup): Likewise. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-msp430.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-mt.c (mt_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-openrisc.c (openrisc_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-or32.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elf32-pj.c (pj_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-ppc.c (ppc_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-s390.c (elf_s390_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-score.c (elf32_score_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-sh.c (sh_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-sparc.c (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-spu.c (spu_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-v850.c (v850_elf_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-vax.c (reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xc16x.c (xc16x_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xstormy16.c (xstormy16_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf32-xtensa.c (elf_xtensa_reloc_name_lookup): New function. (bfd_elf32_bfd_reloc_name_lookup): Define. * elf64-alpha.c (elf64_alpha_bfd_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-gen.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-hppa.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-mips.c (bfd_elf64_bfd_reloc_name_lookup): New function. * elf64-mmix.c (bfd_elf64_bfd_reloc_name_lookup): New function. * elf64-ppc.c (ppc64_elf_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-s390.c (elf_s390_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-sh64.c (sh_elf64_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-sparc.c (bfd_elf64_bfd_reloc_name_lookup): Define. * elf64-x86-64.c (elf64_x86_64_reloc_name_lookup): New function. (bfd_elf64_bfd_reloc_name_lookup): Define. * elfn32-mips.c (bfd_elf32_bfd_reloc_name_lookup): New function. * elfxx-ia64.c (elfNN_ia64_reloc_name_lookup): New function. (bfd_elfNN_bfd_reloc_name_lookup): Define. * elfxx-sparc.c (_bfd_sparc_elf_reloc_name_lookup): New function. * elfxx-sparc.h (_bfd_sparc_elf_reloc_name_lookup): Declare. * i386msdos.c (msdos_bfd_reloc_name_lookup): Define. * i386os9k.c (aout_32_bfd_reloc_name_lookup): Define. * ieee.c (ieee_bfd_reloc_name_lookup): Define. * libaout.h (NAME (aout, reloc_name_lookup)): Declare. * libbfd-in.h (_bfd_norelocs_bfd_reloc_name_lookup): Declare. * mipsbsd.c (MY_bfd_reloc_name_lookup): Define. (MY(reloc_type_lookup)): Rename from MY(reloc_howto_type_lookup). (MY(reloc_name_lookup)): New function. * nlm-target.h (nlm_bfd_reloc_name_lookup): Define. * oasys.c (oasys_bfd_reloc_name_lookup): Define. * pdp11.c (NAME (aout, reloc_name_lookup)): New function. * pe-mips.c (coff_mips_reloc_name_lookup): New function. (coff_bfd_reloc_name_lookup): Define. * reloc.c (bfd_reloc_name_lookup): New function. * riscix.c (riscix_reloc_name_lookup): New function. (MY_bfd_reloc_name_lookup): Define. * som.c (som_bfd_reloc_name_lookup): New function. * targets.c (struct bfd_target): Add reloc_name_lookup. (BFD_JUMP_TABLE_RELOCS): Add NAME##_bfd_reloc_name_lookup. * versados.c (versados_bfd_reloc_name_lookup): Define. * vms.c (vms_bfd_reloc_name_lookup): New function. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate.
2007-03-26 14:23:03 +02:00
return NULL;
}
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure. */
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
static reloc_howto_type *
mips_elf64_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p)
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
{
switch (r_type)
{
case R_MIPS_GNU_VTINHERIT:
return &elf_mips_gnu_vtinherit_howto;
case R_MIPS_GNU_VTENTRY:
return &elf_mips_gnu_vtentry_howto;
case R_MIPS_GNU_REL16_S2:
if (rela_p)
return &elf_mips_gnu_rela16_s2;
else
return &elf_mips_gnu_rel16_s2;
2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> Maxim Kuvyrkov <maxim@codesourcery.com> * elf32-mips.c (mips_vxworks_copy_howto_rela): Replace with... (elf_mips_copy_howto): ...this howto. Clear the size fields. (mips_vxworks_jump_slot_howto_rela): Replace with... (elf_mips_jump_slot_howto): ...this howto. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_plt_readonly): Define. (elf_backend_plt_sym_val): Define for non-VxWorks targets. (mips_vxworks_bfd_reloc_type_lookup): Delete. (mips_vxworks_bfd_reloc_name_lookup): Likewise. (mips_vxworks_rtype_to_howto): Likewise. (elf_backend_want_dynbss): Don't define for VxWorks. (elf_backend_plt_readonly): Likewise. (bfd_elf32_bfd_reloc_type_lookup): Likewise. (bfd_elf32_bfd_reloc_name_lookup): Likewise. (elf_backend_mips_rtype_to_howto): Likewise. (elf_backend_adjust_dynamic_symbol): Likewise. (elf_backend_got_symbol_offset): Don't define. * elfn32-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_n32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elf64-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf64_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf64_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf64_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elfxx-mips.h (_bfd_mips_vxworks_adjust_dynamic_symbol): Delete. (_bfd_mips_elf_use_plts_and_copy_relocs, _bfd_mips_elf_init_stubs) (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): Declare. * elfxx-mips.c (mips_elf_la25_stub): New structure. (LA25_LUI, LA25_J, LA25_ADDIU): New macros. (mips_elf_link_hash_entry): Add "la25_stubs", "has_static_relocs" and "has_nonpic_branches" fields. Remove "is_relocation_target" and "is_branch_target". (mips_elf_link_hash_table): Add blank lines. Add "use_plts_and_copy_relocs", "reserved_gotno", "strampoline", "la25_stubs" and "add_stub_section" fields. (mips_htab_traverse_info): New structure. (PIC_OBJECT_P, MIPS_ELF_LOAD_WORD): New macros. (MIPS_RESERVED_GOTNO): Delete. (mips_o32_exec_plt0_entry, mips_n32_exec_plt0_entry) (mips_n64_exec_plt0_entry, mips_exec_plt_entry): New tables. (mips_elf_link_hash_newfunc): Update after the changes to mips_elf_link_hash_entry. (mips_elf_check_mips16_stubs): Replace the DATA parameter with an INFO parameter. Don't look through warnings symbols here; do it in mips_elf_check_symbols instead. (mips_elf_create_stub_symbol): New function. (mips_elf_la25_stub_hash, mips_elf_la25_stub_eq): New functions. (_bfd_mips_elf_init_stubs, mips_elf_local_pic_function_p): Likewise. (mips_elf_add_la25_intro, mips_elf_add_la25_trampoline): Likewise. (mips_elf_add_la25_stub, mips_elf_check_symbols): New functions. (mips_elf_gotplt_index): Check for VxWorks. (mips_elf_output_dynamic_relocation): Take the relocation index as an extra parameter. Do not increment reloc_count here. (mips_elf_initialize_tls_slots): Update the calls to mips_elf_output_dynamic_relocation accordingly. (mips_elf_multi_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (mips_elf_create_got_section): Don't allocate reserved GOT entries here. Unconditionally create .got.plt, but don't set its alignment here. (mips_elf_relocation_needs_la25_stub): New function. (mips_elf_calculate_relocation): Redirect branches and jumps to a non-PIC stub if one exists. Check !h->has_static_relocs instead of !htab->is_vxworks when deciding whether to create dynamic relocations for R_MIPS_32, R_MIPS_REL32 and R_MIPS_64. (_bfd_mips_elf_create_dynamic_sections): Unconditionally call _bfd_elf_create_dynamic_sections. Unconditionally set up htab->splt and htab->sdynbss. Set htab->srelplt to ".rel.plt" if !htab->is_vxworks. Add non-VxWorks values of htab->plt_header_size and htab->plt_entry_size. (_bfd_mips_elf_check_relocs): Set pointer_equality_needed for non-branch static relocations. Set has_nonpic_branches when an la25 stub might be required. Set can_make_dynamic_p to TRUE if R_MIPS_32, R_MIPS_REL32 and R_MIPS_64 relocations can be made dynamic, rather than duplicating the condition. Do not make them dynamic for read-only sections in non-PIC executable objects. Do not protect this code with dynobj == NULL || htab->sgot == NULL; handle each group of cases separately. Add a default case that sets has_static_relocs for non-GOT relocations that cannot be made dynamic. Don't set is_relocation_target and is_branch_target. Reject non-PIC static relocations in shared objects. (_bfd_mips_vxworks_adjust_dynamic_symbol): Fold into... (_bfd_mips_elf_adjust_dynamic_symbol): ...here, using htab->use_plts_and_copy_relocs instead of htab->is_vxworks to select PLT and copy-reloc handling. Set the alignment of .plt and .got.plt when allocating the first entry. Generalize code to handle REL as well as RELA sections and 64-bit as well as 32-bit GOT entries. Complain if we find a static-only reloc against an externally-defined symbol and if we cannot create dynamic relocations for it. Allocate copy relocs using mips_elf_allocate_dynamic_relocations on non-VxWorks targets. Set possibly_dynamic_relocs to 0 when using PLTs or copy relocs. Skip reserved .got.plt entries. (_bfd_mips_elf_always_size_sections): Use mips_elf_check_symbols instead of mips_elf_check_mips16_stubs to process each symbol. Do the traversal for relocatable objects too. (mips_elf_lay_out_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (_bfd_mips_elf_size_dynamic_sections): Exclude sdynbss if it is empty. Extend the DT_PLTREL, DT_JMPREL and DT_PLTRELSZ handling to non-VxWorks targets. Only add DT_REL{,A}, DT_REL{,A}SZ and DT_REL{,A}ENT if .rel.dyn is nonempty. Create a symbol for the PLT. Allocate a nop at the end of the PLT. Allocate DT_MIPS_PLTGOT. (mips_elf_create_la25_stub_info): New function. (_bfd_mips_elf_finish_dynamic_symbol): Write out PLT entries and copy relocs where necessary. Check pointer_equality_needed. (mips_finish_exec_plt): New function. (_bfd_mips_elf_finish_dynamic_sections): Always set DT_PLTGOT to the beginning of htab->sgot. Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. Assert htab->use_plts_and_copy_relocs instead of htab->is_vxworks for DT_PLTREL, DT_PLTRELSZ and DT_JMPREL. Set DT_PLTREL to DT_REL instead of DT_RELA on non-VxWorks targets. Use mips_finish_exec_plt to create non-VxWorks PLT headers. Set DT_MIPS_PLTGOT. (_bfd_mips_elf_copy_indirect_symbol): Copy has_static_relocs from the indirect symbol to the direct symbol. Also copy has_nonpic_branches for indirect symbols. (_bfd_mips_elf_get_target_dtag): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (_bfd_mips_elf_link_hash_table_create): Initialize the new mips_elf_link_hash_table fields. (_bfd_mips_vxworks_link_hash_table_create): Set use_plts_and_copy_relocs to TRUE. Use TRUE rather than 1 when setting is_vxworks. (_bfd_mips_elf_use_plts_and_copy_relocs): New function. (_bfd_mips_elf_final_link): Call mips_elf_create_la25_stub for each la25_stub. (_bfd_mips_elf_merge_private_bfd_data): Treat dynamic objects as PIC. Generalize message about linking PIC and non-PIC. (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): New functions. * reloc.c: Update comment near BFD_RELOC_MIPS_JUMP_SLOT. * bfd-in2.h: Regenerated. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * readelf.c (get_mips_symbol_other): Handle STO_MIPS_PLT and STO_MIPS_PIC. (slurp_rela_relocs, slurp_rel_relocs): Handle MIPS ELF64 here. (dump_relocations, debug_apply_relocations): Don't handle it here. (get_mips_dynamic_type): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (print_mips_pltgot_entry): New function. (process_mips_specific): Dump the PLT GOT. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * config/tc-mips.c (OPTION_CALL_NONPIC): New macro. (OPTION_NON_SHARED, OPTION_XGOT, OPTION_MABI, OPTION_32) (OPTION_N32, OPTION_64, OPTION_MDEBUG, OPTION_NO_MDEBUG) (OPTION_PDR, OPTION_NO_PDR, OPTION_MVXWORKS_PIC): Bump by 1. (md_longopts): Add -call_nonpic. (md_parse_option): Handle OPTION_CALL_NONPIC. (md_show_usage): Add -call_nonpic. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> * gas/mips/call-nonpic-1.s, gas/mips/call-nonpic-1.d: New test. * gas/mips/mips.exp: Run it. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * mips.h (STO_MIPS_PLT, ELF_ST_IS_MIPS_PLT, ELF_ST_SET_MIPS_PLT) (STO_MIPS_PIC, DT_MIPS_PLTGOT, DT_MIPS_RWPLT): New macros. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * emulparams/elf32bmip.sh (GOT): Define, moving .got.plt to... (OTHER_RELRO_SECTIONS, OTHER_READWRITE_SECTIONS): ...one of these two variables. * emulparams/elf32bmipn32-defs.sh: Likewise. * emultempl/mipself.em: Include ldctor.h, elf/mips.h and elfxx-mips.h. (is_mips_elf): New macro. (stub_file, stub_bfd): New variables. (hook_stub_info): New structure. (hook_in_stub): New function. (mips_add_stub_section): Likewise. (mips_create_output_section_statements): Likewise. (mips_before_allocation): Likewise. (real_func): New variable. (mips_for_each_input_file_wrapper): New function. (mips_lang_for_each_input_file): Likewise. (lang_for_each_input_file): Define. (LDEMUL_BEFORE_ALLOCATION): Likewise. (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Likewise. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * ld-mips-elf/mips16-pic-3a.s, ld-mips-elf/mips16-pic-3b.s, ld-mips-elf/mips16-pic-3.dd, ld-mips-elf/mips16-pic-3.gd, ld-mips-elf/mips16-pic-3.rd, ld-mips-elf/mips16-pic-3.inc, ld-mips-elf/pic-and-nonpic-1a.s, ld-mips-elf/pic-and-nonpic-1b.s, ld-mips-elf/pic-and-nonpic-1.ld, ld-mips-elf/pic-and-nonpic-1.dd, ld-mips-elf/pic-and-nonpic-1.nd, ld-mips-elf/pic-and-nonpic-1-rel.dd, ld-mips-elf/pic-and-nonpic-1-rel.nd, ld-mips-elf/pic-and-nonpic-2a.s, ld-mips-elf/pic-and-nonpic-2b.s, ld-mips-elf/pic-and-nonpic-2.d, ld-mips-elf/pic-and-nonpic-3a.s, ld-mips-elf/pic-and-nonpic-3a.ld, ld-mips-elf/pic-and-nonpic-3a.dd, ld-mips-elf/pic-and-nonpic-3a.gd, ld-mips-elf/pic-and-nonpic-3a.sd, ld-mips-elf/pic-and-nonpic-3b.s, ld-mips-elf/pic-and-nonpic-3b.ld, ld-mips-elf/pic-and-nonpic-3b.ad, ld-mips-elf/pic-and-nonpic-3b.dd, ld-mips-elf/pic-and-nonpic-3b.gd, ld-mips-elf/pic-and-nonpic-3b.nd, ld-mips-elf/pic-and-nonpic-3b.pd, ld-mips-elf/pic-and-nonpic-3b.rd, ld-mips-elf/pic-and-nonpic-3b.sd, ld-mips-elf/pic-and-nonpic-3-error.d, ld-mips-elf/pic-and-nonpic-4a.s, ld-mips-elf/pic-and-nonpic-4b.s, ld-mips-elf/pic-and-nonpic-4b.ld, ld-mips-elf/pic-and-nonpic-4b.ad, ld-mips-elf/pic-and-nonpic-4b.dd, ld-mips-elf/pic-and-nonpic-4b.gd, ld-mips-elf/pic-and-nonpic-4b.nd, ld-mips-elf/pic-and-nonpic-4b.rd, ld-mips-elf/pic-and-nonpic-4b.sd, ld-mips-elf/pic-and-nonpic-4-error.d, ld-mips-elf/pic-and-nonpic-5a.s, ld-mips-elf/pic-and-nonpic-5b.s, ld-mips-elf/pic-and-nonpic-5b.ld, ld-mips-elf/pic-and-nonpic-5b.ad, ld-mips-elf/pic-and-nonpic-5b.dd, ld-mips-elf/pic-and-nonpic-5b.gd, ld-mips-elf/pic-and-nonpic-5b.nd, ld-mips-elf/pic-and-nonpic-5b.rd, ld-mips-elf/pic-and-nonpic-5b.sd, ld-mips-elf/pic-and-nonpic-5b.pd, ld-mips-elf/pic-and-nonpic-6.ld, ld-mips-elf/pic-and-nonpic-6-o32a.s, ld-mips-elf/pic-and-nonpic-6-o32b.s, ld-mips-elf/pic-and-nonpic-6-o32c.s, ld-mips-elf/pic-and-nonpic-6-o32.ad, ld-mips-elf/pic-and-nonpic-6-o32.dd, ld-mips-elf/pic-and-nonpic-6-o32.gd, ld-mips-elf/pic-and-nonpic-6-o32.nd, ld-mips-elf/pic-and-nonpic-6-o32.pd, ld-mips-elf/pic-and-nonpic-6-o32.rd, ld-mips-elf/pic-and-nonpic-6-o32.sd, ld-mips-elf/pic-and-nonpic-6-n32a.s, ld-mips-elf/pic-and-nonpic-6-n32b.s, ld-mips-elf/pic-and-nonpic-6-n32c.s, ld-mips-elf/pic-and-nonpic-6-n32.ad, ld-mips-elf/pic-and-nonpic-6-n32.dd, ld-mips-elf/pic-and-nonpic-6-n32.gd, ld-mips-elf/pic-and-nonpic-6-n32.nd, ld-mips-elf/pic-and-nonpic-6-n32.pd, ld-mips-elf/pic-and-nonpic-6-n32.rd, ld-mips-elf/pic-and-nonpic-6-n32.sd, ld-mips-elf/pic-and-nonpic-6-n64a.s, ld-mips-elf/pic-and-nonpic-6-n64b.s, ld-mips-elf/pic-and-nonpic-6-n64c.s, ld-mips-elf/pic-and-nonpic-6-n64.ad, ld-mips-elf/pic-and-nonpic-6-n64.dd, ld-mips-elf/pic-and-nonpic-6-n64.gd, ld-mips-elf/pic-and-nonpic-6-n64.nd, ld-mips-elf/pic-and-nonpic-6-n64.pd, ld-mips-elf/pic-and-nonpic-6-n64.rd, ld-mips-elf/pic-and-nonpic-6-n64.sd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-08 21:24:49 +02:00
case R_MIPS_COPY:
return &elf_mips_copy_howto;
case R_MIPS_JUMP_SLOT:
return &elf_mips_jump_slot_howto;
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
default:
bfd/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rel. * elf64-mips.c (mips16_elf64_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into mips16_elf64_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_elf64_howto_table_rela): New array for MIPS16 RELA reloc howtos. Add R_MIPS16_26, R_MIPS16_GPREL, R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf64_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf64_rtype_to_howto): Fetch MIPS16 howtos from mips16_elf64_howto_table_rela or mips16_elf64_howto_table_rel. * elfn32-mips.c (elf_mips16_howto_table_rel): New array for MIPS16 REL reloc howtos. Add R_MIPS16_HI16 and R_MIPS16_LO16 relocs and R_MIPS16_GOT16 and R_MIPS16_CALL16 placeholders. (elf_mips16_jump_howto): Move into elf_mips16_howto_table_rel. (elf_mips16_gprel_howto): Likewise. Redefine src_mask and dst_mask. (mips16_gprel_reloc): Remove bit shuffling; call _bfd_mips16_elf_reloc_unshuffle(), _bfd_mips_elf_gprel16_with_gp() and _bfd_mips16_elf_reloc_shuffle() instead. (mips16_reloc_map): New reloc map for MIPS16 relocs. (bfd_elf32_bfd_reloc_type_lookup): Use mips16_reloc_map for MIPS16 relocs. (mips_elf_n32_rtype_to_howto): Fetch MIPS16 howtos from elf_mips16_howto_table_rela or elf_mips16_howto_table_rel. * elfxx-mips.c (_bfd_mips16_elf_reloc_unshuffle): New function to handle bit shuffling for MIPS16 relocs. (_bfd_mips16_elf_reloc_shuffle): Likewise. (_bfd_mips_elf_lo16_reloc): Use _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle(). (_bfd_mips_elf_generic_reloc): Likewise. (mips_elf_calculate_relocation): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. (mips_elf_obtain_contents): Remove bit shuffling. (mips_elf_perform_relocation): Likewise; call _bfd_mips16_elf_reloc_unshuffle() and _bfd_mips16_elf_reloc_shuffle() instead. (_bfd_mips_elf_relocate_section): Likewise. Handle R_MIPS16_HI16 and R_MIPS16_LO16. * elfxx-mips.h (_bfd_mips16_elf_reloc_unshuffle): Declare. (_bfd_mips16_elf_reloc_shuffle): Likewise. * reloc.c (BFD_RELOC_MIPS16_HI16): New reloc. (BFD_RELOC_MIPS16_HI16_S): Likewise. (BFD_RELOC_MIPS16_LO16): Likewise. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * config/tc-mips.c (reloc_needs_lo_p): Handle BFD_RELOC_MIPS16_HI16_S. (fixup_has_matching_lo_p): Handle BFD_RELOC_MIPS16_LO16. (append_insn): Add BFD_RELOC_MIPS16_GPREL, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16 to relocs to suppress overflow complaints on. (mips16_ip): Resolve BFD_RELOC_MIPS16_HI16_S, BFD_RELOC_MIPS16_HI16 and BFD_RELOC_MIPS16_LO16 for constants. Call my_getSmallExpression() to parse percent operators. (percent_op_match, mips_percent_op): Separate definitions. (mips16_percent_op): Define percent operators for the MIPS16 mode. (parse_relocation): Handle the MIPS16 mode using mips16_percent_op. (md_apply_fix3): Handle BFD_RELOC_MIPS16_HI16, BFD_RELOC_MIPS16_HI16_S and BFD_RELOC_MIPS16_LO16. gas/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * gas/mips/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * gas/mips/mips16-hilo-n32.d: Likewise, for the n32 ABI. * gas/mips/mips16-hilo.s: Source for the new tests. * gas/mips/mips.exp: Run the new tests. include/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * elf/mips.h (R_MIPS16_GOT16): New reloc code. (R_MIPS16_CALL16): Likewise. (R_MIPS16_HI16): Likewise. (R_MIPS16_LO16): Likewise. (R_MIPS16_min): New fake reloc code. (R_MIPS16_max): Likewise. ld/testsuite/: 2005-02-15 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * ld-mips-elf/mips16-hilo.d: New test for the R_MIPS16_HI16 and R_MIPS16_LO16 relocs. * ld-mips-elf/mips16-hilo-n32.d: Likewise, for the n32 ABI. * ld-mips-elf/mips16-hilo.s: Auxiliary source for the new tests. * ld-mips-elf/mips-elf.exp: Run the new tests.
2005-02-15 20:57:54 +01:00
if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)
{
if (rela_p)
return &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];
else
return &mips16_elf64_howto_table_rel[r_type - R_MIPS16_min];
}
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
BFD_ASSERT (r_type < (unsigned int) R_MIPS_max);
if (rela_p)
return &mips_elf64_howto_table_rela[r_type];
else
return &mips_elf64_howto_table_rel[r_type];
break;
}
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Prevent relocation handling by bfd for MIPS ELF64. */
static void
mips_elf64_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
arelent *cache_ptr ATTRIBUTE_UNUSED,
Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
BFD_ASSERT (0);
}
static void
mips_elf64_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
arelent *cache_ptr ATTRIBUTE_UNUSED,
Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
BFD_ASSERT (0);
}
/* Since each entry in an SHT_REL or SHT_RELA section can represent up
to three relocs, we must tell the user to allocate more space. */
static long
mips_elf64_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
return (sec->reloc_count * 3 + 1) * sizeof (arelent *);
}
static long
mips_elf64_get_dynamic_reloc_upper_bound (bfd *abfd)
{
return _bfd_elf_get_dynamic_reloc_upper_bound (abfd) * 3;
}
/* We must also copy more relocations than the corresponding functions
in elf.c would, so the two following functions are slightly
modified from elf.c, that multiply the external relocation count by
3 to obtain the internal relocation count. */
static long
mips_elf64_canonicalize_reloc (bfd *abfd, sec_ptr section,
arelent **relptr, asymbol **symbols)
{
arelent *tblptr;
unsigned int i;
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
return -1;
tblptr = section->relocation;
for (i = 0; i < section->reloc_count * 3; i++)
*relptr++ = tblptr++;
*relptr = NULL;
return section->reloc_count * 3;
}
static long
mips_elf64_canonicalize_dynamic_reloc (bfd *abfd, arelent **storage,
asymbol **syms)
{
bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
asection *s;
long ret;
if (elf_dynsymtab (abfd) == 0)
{
bfd_set_error (bfd_error_invalid_operation);
return -1;
}
slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
ret = 0;
for (s = abfd->sections; s != NULL; s = s->next)
{
if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
|| elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
{
arelent *p;
long count, i;
if (! (*slurp_relocs) (abfd, s, syms, TRUE))
return -1;
bfd/ * section.c (struct sec): Rename "_cooked_size" to "size". Rename "_raw_size" to "rawsize". (STD_SECTION): Adjust comments. (bfd_set_section_size, bfd_get_section_contents): Use size. (bfd_malloc_and_get_section): New function. * bfd-in.h (bfd_section_size, bfd_get_section_size): Use size. * coff-sh.c (sh_relax_section): Alloc coff_section_data struct early. Correctly free reloc and contents memory. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Delete FIXME and fake CIE now that we can shink section size to zero. (_bfd_elf_write_section_eh_frame): Likewise.. * elf32-ppc.c (ppc_elf_relax_section): Delay reading section contents. * elf-m10300.c (mn10300_elf_final_link_relocate): Don't use _bfd_stab_section_offset. Use _bfd_elf_section_offset. * stabs.c (_bfd_stab_section_offset_): Remove unused args and unneeded indirection. * elf.c (_bfd_elf_section_offset): .. and update call. * libbfd-in.h (_bfd_stab_section_offset): Update prototype. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. Replace occurrences of "_raw_size" and "_cooked_size" in most places with "size". Set new "rawsize" for stabs, eh_frame, and SEC_MERGE sections. Use "rawsize", if non-zero, for bfd_get_section_contents calls if the section might be a stabs, eh_frame, or SEC_MERGE section. Similarly use "rawsize", if non-zero, in reloc functions to validate reloc addresses. Use new bfd_malloc_and_get_section in most places where bfd_get_section_contents was called. Expand all occurrences of bfd_section_size and bfd_get_section_size. Rename "raw_size" var in grok_prstatus and similar functions to "size". * aix386-core.c (aix386_core_file_p): .. * aix5ppc-core.c (xcoff64_core_p): .. * aout-adobe.c (aout_adobe_callback, aout_adobe_write_object_contents, aout_adobe_set_section_contents): .. * aout-target.h (callback): .. * aout-tic30.c (tic30_aout_callback, tic30_aout_final_link_relocate, MY_bfd_final_link): .. * aoutf1.h (sunos4_core_file_p): .. * aoutx.h (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, translate_from_native_sym_flags, final_link, aout_link_input_section): .. * binary.c (binary_object_p, binary_canonicalize_symtab, binary_set_section_contents): .. * bout.c (b_out_callback, b_out_write_object_contents, b_out_set_section_contents, b_out_bfd_relax_section, b_out_bfd_get_relocated_section_contents): .. * cisco-core.c (cisco_core_file_validate): .. * coff-alpha.c (alpha_ecoff_object_p, alpha_ecoff_get_relocated_section_conten, alpha_relocate_section): .. * coff-arm.c (coff_arm_relocate_section, bfd_arm_allocate_interworking_sections): .. * coff-h8300.c (h8300_reloc16_extra_cases, h8300_bfd_link_add_symbols): .. * coff-mips.c (mips_refhi_reloc, mips_gprel_reloc): .. * coff-ppc.c (coff_ppc_relocate_section, ppc_allocate_toc_section, ppc_bfd_coff_final_link): .. * coff-rs6000.c (xcoff_reloc_type_br, xcoff_ppc_relocate_section): .. * coff-sh.c (sh_relax_section, sh_relax_delete_bytes, sh_align_loads, sh_coff_get_relocated_section_contents): .. * coff64-rs6000.c (xcoff64_write_object_contents, xcoff64_reloc_type_br, xcoff64_ppc_relocate_section): .. * coffcode.h (coff_compute_section_file_positions, coff_write_object_contents): .. * coffgen.c (make_a_section_from_file, coff_write_symbols, coff_section_symbol, build_debug_section): .. * cofflink.c (coff_link_add_symbols, _bfd_coff_final_link, process_embedded_commands, _bfd_coff_link_input_bfd, _bfd_coff_write_global_sym): .. * cpu-arm.c (bfd_arm_update_notes, bfd_arm_get_mach_from_notes): .. * cpu-ns32k.c (do_ns32k_reloc, _bfd_ns32k_final_link_relocate): .. * dwarf1.c (parse_line_table, _bfd_dwarf1_find_nearest_line): .. * dwarf2.c (read_indirect_string, read_abbrevs, decode_line_info, _bfd_dwarf2_find_nearest_line): .. * ecoff.c (bfd_debug_section, ecoff_set_symbol_info, ecoff_compute_section_file_positions, _bfd_ecoff_write_object_contents, ecoff_indirect_link_order): .. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame, _bfd_elf_discard_section_eh_frame_hdr, _bfd_elf_maybe_strip_eh_frame_hdr, _bfd_elf_eh_frame_section_offset, _bfd_elf_write_section_eh_frame, _bfd_elf_write_section_eh_frame_hdr): .. * elf-hppa.h (elf_hppa_sort_unwind): .. * elf-m10200.c (mn10200_elf_relax_section, mn10200_elf_relax_delete_bytes, mn10200_elf_get_relocated_section_contents): .. * elf-m10300.c (_bfd_mn10300_elf_create_got_section, mn10300_elf_check_relocs, mn10300_elf_relax_section, mn10300_elf_relax_delete_bytes, mn10300_elf_get_relocated_section_contents, _bfd_mn10300_elf_adjust_dynamic_symbol, _bfd_mn10300_elf_discard_copies, _bfd_mn10300_elf_size_dynamic_sections, _bfd_mn10300_elf_finish_dynamic_sections): .. * elf.c (_bfd_elf_print_private_bfd_data, bfd_elf_get_bfd_needed_list, _bfd_elf_make_section_from_phdr, elf_fake_sections, bfd_elf_set_group_contents, map_sections_to_segments, elf_sort_sections, assign_file_positions_for_segments, SECTION_SIZE, copy_private_bfd_data, _bfd_elf_get_dynamic_reloc_upper_bound, _bfd_elf_canonicalize_dynamic_reloc, elfcore_maybe_make_sect, _bfd_elfcore_make_pseudosection, elfcore_grok_prstatus, elfcore_grok_lwpstatus, elfcore_grok_win32pstatus, elfcore_grok_note, elfcore_grok_nto_status, elfcore_grok_nto_gregs, _bfd_elf_rel_local_sym, _bfd_elf_get_synthetic_symtab): .. * elf32-arm.h (bfd_elf32_arm_allocate_interworking_sect, bfd_elf32_arm_process_before_allocation, elf32_arm_adjust_dynamic_symbol, allocate_dynrelocs, elf32_arm_size_dynamic_sections, elf32_arm_finish_dynamic_sections, elf32_arm_write_section): .. * elf32-cris.c (cris_elf_grok_prstatus, elf_cris_finish_dynamic_sections, cris_elf_gc_sweep_hook, elf_cris_adjust_gotplt_to_got, elf_cris_adjust_dynamic_symbol, cris_elf_check_relocs, elf_cris_size_dynamic_sections, elf_cris_discard_excess_dso_dynamics, elf_cris_discard_excess_program_dynamics): .. * elf32-d30v.c (bfd_elf_d30v_reloc, bfd_elf_d30v_reloc_21): .. * elf32-dlx.c (_bfd_dlx_elf_hi16_reloc): .. * elf32-frv.c (_frvfdpic_add_dyn_reloc, _frvfdpic_add_rofixup, _frv_create_got_section, _frvfdpic_assign_plt_entries, elf32_frvfdpic_size_dynamic_sections, elf32_frvfdpic_modify_segment_map, elf32_frvfdpic_finish_dynamic_sections): .. * elf32-h8300.c (elf32_h8_relax_section, elf32_h8_relax_delete_bytes, elf32_h8_get_relocated_section_contents): .. * elf32-hppa.c (hppa_build_one_stub, hppa_size_one_stub, elf32_hppa_adjust_dynamic_symbol, allocate_plt_static, allocate_dynrelocs, elf32_hppa_size_dynamic_sections, group_sections, elf32_hppa_size_stubs, elf32_hppa_set_gp, elf32_hppa_build_stubs, elf32_hppa_finish_dynamic_sections): .. * elf32-i370.c (i370_elf_adjust_dynamic_symbol, i370_elf_size_dynamic_sections, i370_elf_check_relocs, i370_elf_finish_dynamic_sections): .. * elf32-i386.c (elf_i386_grok_prstatus, elf_i386_adjust_dynamic_symbol, allocate_dynrelocs, elf_i386_size_dynamic_sections, elf_i386_relocate_section, elf_i386_finish_dynamic_sections): .. * elf32-i860.c (i860_howto_pc26_reloc, i860_howto_pc16_reloc, i860_howto_highadj_reloc, i860_howto_splitn_reloc): .. * elf32-ip2k.c (ip2k_is_switch_table_128, ip2k_relax_switch_table_128, ip2k_is_switch_table_256, ip2k_relax_switch_table_256, ip2k_elf_relax_section, adjust_all_relocations, ip2k_elf_relax_delete_bytes): .. * elf32-m32r.c (m32r_elf_do_10_pcrel_reloc, m32r_elf_hi16_reloc, m32r_elf_generic_reloc, m32r_elf_adjust_dynamic_symbol, allocate_dynrelocs, m32r_elf_size_dynamic_sections, m32r_elf_relocate_section, m32r_elf_finish_dynamic_sections, m32r_elf_relax_section, m32r_elf_relax_delete_bytes, m32r_elf_get_relocated_section_contents): .. * elf32-m68hc11.c (m68hc11_elf_build_one_stub, m68hc11_elf_size_one_stub, m68hc11_elf_relax_section, m68hc11_elf_relax_delete_bytes): .. * elf32-m68hc12.c (m68hc12_elf_build_one_stub, m68hc12_elf_size_one_stub): .. * elf32-m68hc1x.c (elf32_m68hc11_size_stubs, elf32_m68hc11_build_stubs, m68hc11_elf_special_reloc): .. * elf32-m68k.c (elf_m68k_check_relocs, elf_m68k_gc_sweep_hook, elf_m68k_adjust_dynamic_symbol, elf_m68k_size_dynamic_sections, elf_m68k_discard_copies, elf_m68k_finish_dynamic_sections): .. * elf32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elf32-or32.c (or32_elf_consth_reloc): .. * elf32-ppc.c (ppc_elf_relax_section, ppc_elf_addr16_ha_reloc, elf_create_pointer_linker_section, ppc_elf_create_linker_section, ppc_elf_additional_program_headers, ppc_elf_adjust_dynamic_symbol, allocate_dynrelocs, ppc_elf_size_dynamic_sections, ppc_elf_finish_dynamic_sections, ppc_elf_grok_prstatus, ppc_elf_final_write_processing): .. * elf32-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections, elf_s390_grok_prstatus): .. * elf32-sh.c (sh_elf_reloc_loop, sh_elf_relax_section, sh_elf_relax_delete_bytes, sh_elf_align_loads, sh_elf_adjust_dynamic_symbol, allocate_dynrelocs, sh_elf_size_dynamic_sections, sh_elf_get_relocated_section_contents, sh_elf_finish_dynamic_sections, elf32_shlin_grok_prstatus): .. * elf32-sh64-com.c (sh64_address_in_cranges, sh64_get_contents_type): .. * elf32-sh64.c (sh64_find_section_for_address, sh64_elf_final_write_processing): .. * elf32-sparc.c (sparc_elf_wdisp16_reloc, sparc_elf_hix22_reloc, sparc_elf_lox10_reloc, elf32_sparc_adjust_dynamic_symbol, allocate_dynrelocs, elf32_sparc_size_dynamic_sections, elf32_sparc_relocate_section, elf32_sparc_finish_dynamic_sections): .. * elf32-v850.c (v850_elf_reloc, v850_elf_relax_section): .. * elf32-vax.c (elf_vax_check_relocs, elf_vax_adjust_dynamic_symbol, elf_vax_size_dynamic_sections, elf_vax_discard_copies, elf_vax_instantiate_got_entries, elf_vax_relocate_section, elf_vax_finish_dynamic_sections): .. * elf32-xstormy16.c (xstormy16_elf_24_reloc, xstormy16_elf_check_relocs, xstormy16_relax_plt_check, xstormy16_elf_relax_section, xstormy16_elf_always_size_sections, xstormy16_elf_finish_dynamic_sections): .. * elf32-xtensa.c (xtensa_read_table_entries, elf_xtensa_allocate_got_size, elf_xtensa_allocate_local_got_size, elf_xtensa_size_dynamic_sections, elf_xtensa_do_reloc, bfd_elf_xtensa_reloc, elf_xtensa_relocate_section, elf_xtensa_combine_prop_entries, elf_xtensa_finish_dynamic_sections, elf_xtensa_discard_info_for_section, elf_xtensa_grok_prstatus, get_relocation_opcode, retrieve_contents, find_relaxable_sections, collect_source_relocs, is_resolvable_asm_expansion, remove_literals, relax_section, shrink_dynamic_reloc_sections, relax_property_section, xtensa_callback_required_dependence): .. * elf64-alpha.c (elf64_alpha_reloc_gpdisp, elf64_alpha_relax_section, elf64_alpha_check_relocs, elf64_alpha_adjust_dynamic_symbol, elf64_alpha_calc_got_offsets_for_symbol, elf64_alpha_calc_got_offsets, elf64_alpha_size_plt_section, elf64_alpha_size_plt_section_1, elf64_alpha_always_size_sections, elf64_alpha_calc_dynrel_sizes, elf64_alpha_size_rela_got_section, elf64_alpha_size_rela_got_1, elf64_alpha_size_dynamic_sections, elf64_alpha_emit_dynrel, elf64_alpha_finish_dynamic_sections, elf64_alpha_final_link): .. * elf64-hppa.c (allocate_dynrel_entries, elf64_hppa_size_dynamic_sections, elf64_hppa_finish_dynamic_sections): .. * elf64-mips.c (mips_elf64_gprel32_reloc, mips16_gprel_reloc, mips_elf64_canonicalize_dynamic_reloc, mips_elf64_slurp_reloc_table, elf64_mips_grok_prstatus): .. * elf64-mmix.c (mmix_elf_perform_relocation, mmix_elf_reloc, mmix_elf_relocate_section, mmix_elf_final_link, mmix_set_relaxable_size, _bfd_mmix_after_linker_allocation, mmix_elf_relax_section, mmix_elf_get_section_contents): .. * elf64-ppc.c (ppc64_elf_object_p, ppc64_elf_grok_prstatus, ppc64_elf_check_relocs, ppc64_elf_func_desc_adjust, ppc64_elf_adjust_dynamic_symbol, ppc64_elf_edit_opd, allocate_dynrelocs, ppc64_elf_size_dynamic_sections, ppc_build_one_stub, ppc_size_one_stub, ppc64_elf_next_toc_section, toc_adjusting_stub_needed, group_sections, ppc64_elf_size_stubs, ppc64_elf_build_stubs, ppc64_elf_relocate_section, ppc64_elf_finish_dynamic_sections): .. * elf64-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections): .. * elf64-sh64.c (sh_elf64_get_relocated_section_contents, sh_elf64_check_relocs, sh64_elf64_adjust_dynamic_symbol, sh64_elf64_discard_copies, sh64_elf64_size_dynamic_sections, sh64_elf64_finish_dynamic_sections): .. * elf64-sparc.c (sparc64_elf_slurp_reloc_table, init_insn_reloc, sparc64_elf_check_relocs, sparc64_elf_adjust_dynamic_symbol, sparc64_elf_size_dynamic_sections, sparc64_elf_relocate_section, sparc64_elf_finish_dynamic_symbol, sparc64_elf_finish_dynamic_sections): .. * elf64-x86-64.c (elf64_x86_64_grok_prstatus, elf64_x86_64_adjust_dynamic_symbol, allocate_dynrelocs, elf64_x86_64_size_dynamic_sections, elf64_x86_64_relocate_section, elf64_x86_64_finish_dynamic_sections): .. * elfarm-nabi.c (elf32_arm_nabi_grok_prstatus): .. * elfcode.h (elf_slurp_reloc_table): .. * elflink.c (_bfd_elf_create_got_section, elf_add_dt_needed_tag, elf_finalize_dynstr, elf_link_add_object_symbols, bfd_elf_size_dynamic_sections, elf_link_sort_relocs, elf_link_input_bfd, bfd_elf_final_link, bfd_elf_discard_info): .. * elfn32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elfxx-ia64.c (elfNN_ia64_relax_section, allocate_dynrel_entries, elfNN_ia64_size_dynamic_sections, elfNN_ia64_install_dyn_reloc, elfNN_ia64_choose_gp, elfNN_ia64_final_link, elfNN_ia64_finish_dynamic_sections): .. * elfxx-mips.c (mips_elf_create_procedure_table, mips_elf_check_mips16_stubs, _bfd_mips_elf_gprel16_with_gp, _bfd_mips_elf_hi16_reloc, _bfd_mips_elf_generic_reloc, mips_elf_global_got_index, mips_elf_multi_got, mips_elf_create_compact_rel_section, mips_elf_calculate_relocation, mips_elf_allocate_dynamic_relocations, mips_elf_create_dynamic_relocation, _bfd_mips_elf_fake_sections, _bfd_mips_relax_section, _bfd_mips_elf_adjust_dynamic_symbol, _bfd_mips_elf_always_size_sections, _bfd_mips_elf_size_dynamic_sections, _bfd_mips_elf_finish_dynamic_symbol, _bfd_mips_elf_finish_dynamic_sections, _bfd_mips_elf_modify_segment_map, _bfd_mips_elf_discard_info, _bfd_mips_elf_write_section, _bfd_mips_elf_set_section_contents, _bfd_elf_mips_get_relocated_section_contents, _bfd_mips_elf_final_link, _bfd_mips_elf_merge_private_bfd_data): .. * hp300hpux.c (callback): .. * hppabsd-core.c (make_bfd_asection): .. * hpux-core.c (make_bfd_asection): .. * i386linux.c (linux_link_create_dynamic_sections, bfd_i386linux_size_dynamic_sections, linux_finish_dynamic_link): .. * i386msdos.c (msdos_write_object_contents): .. * i386os9k.c (os9k_callback, os9k_write_object_contents, os9k_set_section_contents): .. * ieee.c (parse_expression, ieee_slurp_external_symbols, ieee_slurp_sections, ieee_slurp_debug, ieee_slurp_section_data, ieee_write_section_part, do_with_relocs, do_as_repeat, do_without_relocs, ieee_write_debug_part, init_for_output, ieee_set_section_contents): .. * ihex.c (ihex_scan, ihex_read_section, ihex_get_section_contents): .. * irix-core.c (do_sections, make_bfd_asection): .. * libaout.h (aout_section_merge_with_text_p): .. * libbfd.c (_bfd_generic_get_section_contents, _bfd_generic_get_section_contents_in_window): .. * linker.c (default_indirect_link_order): .. * lynx-core.c (make_bfd_asection): .. * m68klinux.c (linux_link_create_dynamic_sections, bfd_m68klinux_size_dynamic_sections, linux_finish_dynamic_link): .. * mach-o.c (bfd_mach_o_make_bfd_section, bfd_mach_o_scan_read_dylinker, bfd_mach_o_scan_read_dylib, bfd_mach_o_scan_read_thread, bfd_mach_o_scan_read_symtab, bfd_mach_o_scan_read_segment): .. * merge.c (_bfd_add_merge_section, record_section, merge_strings, _bfd_merge_sections): .. * mmo.c (mmo_find_sec_w_addr, mmo_get_spec_section, mmo_get_loc, mmo_map_set_sizes, mmo_canonicalize_symtab, mmo_internal_write_section, mmo_write_object_contents): .. * netbsd-core.c (netbsd_core_file_p): .. * nlm32-alpha.c (nlm_alpha_read_reloc, nlm_alpha_write_import, nlm_alpha_set_public_section): .. * nlm32-ppc.c (nlm_powerpc_read_reloc, nlm_powerpc_write_reloc): .. * nlm32-sparc.c (nlm_sparc_write_import): .. * nlmcode.h (add_bfd_section, nlm_swap_auxiliary_headers_in, nlm_compute_section_file_positions): .. * oasys.c (oasys_object_p, oasys_slurp_section_data, oasys_write_sections, oasys_write_data, oasys_set_section_contents): .. * opncls.c (get_debug_link_info): .. * osf-core.c (make_bfd_asection): .. * pdp11.c (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, squirt_out_relocs, final_link, aout_link_input_section): .. * peXXigen.c (_bfd_XXi_swap_sym_in, _bfd_XXi_swap_aouthdr_out, pe_print_idata, pe_print_edata, pe_print_pdata, pe_print_reloc): .. * pef.c (bfd_pef_make_bfd_section, bfd_pef_print_loader_section, bfd_pef_scan_start_address, bfd_pef_parse_symbols): .. * ppcboot.c (ppcboot_object_p, ppcboot_canonicalize_symtab): .. * ptrace-core.c (ptrace_unix_core_file_p): .. * reloc.c (bfd_perform_relocation, bfd_install_relocation, _bfd_final_link_relocate, bfd_generic_relax_section, bfd_generic_get_relocated_section_contents): .. * reloc16.c (bfd_coff_reloc16_relax_section, bfd_coff_reloc16_get_relocated_section_c): .. * riscix.c (riscix_some_aout_object_p): .. * rs6000-core.c (read_hdr, make_bfd_asection): .. * sco5-core.c (make_bfd_asection): .. * simple.c (bfd_simple_get_relocated_section_contents): .. * som.c (som_object_setup, setup_sections, som_prep_headers, som_write_fixups, som_begin_writing, bfd_section_from_som_symbol, som_set_reloc_info, som_get_section_contents, som_bfd_link_split_section): .. * sparclinux.c (linux_link_create_dynamic_sections, bfd_sparclinux_size_dynamic_sections, linux_finish_dynamic_link): .. * srec.c (srec_scan, srec_read_section, srec_get_section_contents): .. * stabs.c (_bfd_link_section_stabs, _bfd_discard_section_stabs, _bfd_write_stab_strings, _bfd_stab_section_offset): .. * sunos.c (sunos_read_dynamic_info, sunos_create_dynamic_sections, bfd_sunos_size_dynamic_sections, sunos_scan_std_relocs, sunos_scan_ext_relocs, sunos_scan_dynamic_symbol, sunos_write_dynamic_symbol, sunos_check_dynamic_reloc, sunos_finish_dynamic_link): .. * syms.c (_bfd_stab_section_find_nearest_line): .. * tekhex.c (first_phase, tekhex_set_section_contents, tekhex_write_object_contents): .. * trad-core.c (trad_unix_core_file_p): .. * versados.c (process_esd, process_otr, process_otr): .. * vms-gsd.c (_bfd_vms_slurp_gsd, _bfd_vms_write_gsd): .. * vms-misc.c (add_new_contents): .. * vms-tir.c (check_section, new_section, _bfd_vms_write_tir): .. * vms.c (vms_set_section_contents): .. * xcofflink.c (xcoff_get_section_contents, xcoff_link_add_symbols, xcoff_sweep, bfd_xcoff_size_dynamic_sections, xcoff_build_ldsyms, _bfd_xcoff_bfd_final_link, xcoff_link_input_bfd): .. * xsym.c (bfd_sym_scan): .. See above. binutils/ * objcopy.c (copy_section): Don't set _cooked_size. include/ * bfdlink.h (struct bfd_link_order): Update comment. ld/ * ldlang.c (print_output_section_statement): Don't print size before relaxation. (IGNORE_SECTION): Remove bfd arg. Update all callers. * ldexp.c (fold_name): .. See below. * ldlang.c (section_already_linked, print_output_section_statement, print_input_section, insert_pad, size_input_section, lang_check_section_addresses, lang_size_sections_1, lang_size_sections, lang_do_assignments_1, lang_set_startof, lang_one_common, lang_reset_memory_regions, lang_process, lang_abs_symbol_at_end_of, lang_do_version_exports_section): .. * ldwrite.c (build_link_order, clone_section, ds, split_sections): .. * pe-dll.c (process_def_file, generate_reloc): .. * emultempl/elf32.em (gld${EMULATION_NAME}_find_statement_assignment, gld${EMULATION_NAME}_before_allocation): .. * emultempl/mmix-elfnmmo.em (mmix_after_allocation): .. * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_before_allocation, sh64_elf_${EMULATION_NAME}_after_allocation): .. * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): .. * emultempl/xtensaelf.em (ld_assign_relative_paged_dot, ld_local_file_relocations_fit, ld_xtensa_insert_page_offsets): Use "size" instead of "_raw_size" and "_cooked_size". Expand bfd_section_size macro invocations.
2004-06-24 06:46:28 +02:00
count = s->size / elf_section_data (s)->this_hdr.sh_entsize * 3;
p = s->relocation;
for (i = 0; i < count; i++)
*storage++ = p++;
ret += count;
}
}
*storage = NULL;
return ret;
}
/* Read the relocations from one reloc section. This is mostly copied
from elfcode.h, except for the changes to expand one external
relocation to 3 internal ones. We must unfortunately set
reloc_count to the number of external relocations, because a lot of
generic code seems to depend on this. */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static bfd_boolean
mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
Elf_Internal_Shdr *rel_hdr,
bfd_size_type reloc_count,
arelent *relents, asymbol **symbols,
bfd_boolean dynamic)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
void *allocated;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
bfd_byte *native_relocs;
arelent *relent;
bfd_vma i;
int entsize;
bfd_boolean rela_p;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
allocated = bfd_malloc (rel_hdr->sh_size);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
if (allocated == NULL)
return FALSE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0
|| (bfd_bread (allocated, rel_hdr->sh_size, abfd)
!= rel_hdr->sh_size))
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
goto error_return;
native_relocs = allocated;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
entsize = rel_hdr->sh_entsize;
BFD_ASSERT (entsize == sizeof (Elf64_Mips_External_Rel)
|| entsize == sizeof (Elf64_Mips_External_Rela));
if (entsize == sizeof (Elf64_Mips_External_Rel))
rela_p = FALSE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
else
rela_p = TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
for (i = 0, relent = relents;
i < reloc_count;
i++, native_relocs += entsize)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
Elf64_Mips_Internal_Rela rela;
bfd_boolean used_sym, used_ssym;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
int ir;
if (entsize == sizeof (Elf64_Mips_External_Rela))
mips_elf64_swap_reloca_in (abfd,
(Elf64_Mips_External_Rela *) native_relocs,
&rela);
else
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
mips_elf64_swap_reloc_in (abfd,
(Elf64_Mips_External_Rel *) native_relocs,
&rela);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Each entry represents exactly three actual relocations. */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
used_sym = FALSE;
used_ssym = FALSE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
for (ir = 0; ir < 3; ir++)
{
enum elf_mips_reloc_type type;
switch (ir)
1999-05-03 09:29:11 +02:00
{
default:
abort ();
case 0:
type = (enum elf_mips_reloc_type) rela.r_type;
break;
case 1:
type = (enum elf_mips_reloc_type) rela.r_type2;
break;
case 2:
type = (enum elf_mips_reloc_type) rela.r_type3;
break;
}
/* Some types require symbols, whereas some do not. */
switch (type)
{
case R_MIPS_NONE:
case R_MIPS_LITERAL:
case R_MIPS_INSERT_A:
case R_MIPS_INSERT_B:
case R_MIPS_DELETE:
relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
break;
default:
if (! used_sym)
{
if (rela.r_sym == 0)
relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
else
{
asymbol **ps, *s;
ps = symbols + rela.r_sym - 1;
s = *ps;
if ((s->flags & BSF_SECTION_SYM) == 0)
relent->sym_ptr_ptr = ps;
else
relent->sym_ptr_ptr = s->section->symbol_ptr_ptr;
}
used_sym = TRUE;
1999-05-03 09:29:11 +02:00
}
else if (! used_ssym)
{
switch (rela.r_ssym)
{
case RSS_UNDEF:
relent->sym_ptr_ptr =
bfd_abs_section_ptr->symbol_ptr_ptr;
break;
case RSS_GP:
case RSS_GP0:
case RSS_LOC:
/* FIXME: I think these need to be handled using
special howto structures. */
1999-05-03 09:29:11 +02:00
BFD_ASSERT (0);
break;
default:
BFD_ASSERT (0);
break;
}
used_ssym = TRUE;
1999-05-03 09:29:11 +02:00
}
else
relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
break;
}
/* The address of an ELF reloc is section relative for an
object file, and absolute for an executable file or
shared library. The address of a BFD reloc is always
section relative. */
if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0 || dynamic)
1999-05-03 09:29:11 +02:00
relent->address = rela.r_offset;
else
relent->address = rela.r_offset - asect->vma;
relent->addend = rela.r_addend;
relent->howto = mips_elf64_rtype_to_howto (type, rela_p);
1999-05-03 09:29:11 +02:00
++relent;
}
}
asect->reloc_count += (relent - relents) / 3;
1999-05-03 09:29:11 +02:00
if (allocated != NULL)
free (allocated);
return TRUE;
1999-05-03 09:29:11 +02:00
error_return:
if (allocated != NULL)
free (allocated);
return FALSE;
1999-05-03 09:29:11 +02:00
}
/* Read the relocations. On Irix 6, there can be two reloc sections
associated with a single data section. This is copied from
elfcode.h as well, with changes as small as accounting for 3
internal relocs per external reloc and resetting reloc_count to
zero before processing the relocs of a section. */
1999-05-03 09:29:11 +02:00
static bfd_boolean
mips_elf64_slurp_reloc_table (bfd *abfd, asection *asect,
asymbol **symbols, bfd_boolean dynamic)
1999-05-03 09:29:11 +02:00
{
struct bfd_elf_section_data * const d = elf_section_data (asect);
Elf_Internal_Shdr *rel_hdr;
Elf_Internal_Shdr *rel_hdr2;
bfd_size_type reloc_count;
bfd_size_type reloc_count2;
arelent *relents;
bfd_size_type amt;
if (asect->relocation != NULL)
return TRUE;
1999-05-03 09:29:11 +02:00
if (! dynamic)
1999-05-03 09:29:11 +02:00
{
if ((asect->flags & SEC_RELOC) == 0
|| asect->reloc_count == 0)
return TRUE;
1999-05-03 09:29:11 +02:00
rel_hdr = &d->rel_hdr;
reloc_count = NUM_SHDR_ENTRIES (rel_hdr);
rel_hdr2 = d->rel_hdr2;
reloc_count2 = (rel_hdr2 ? NUM_SHDR_ENTRIES (rel_hdr2) : 0);
BFD_ASSERT (asect->reloc_count == reloc_count + reloc_count2);
BFD_ASSERT (asect->rel_filepos == rel_hdr->sh_offset
|| (rel_hdr2 && asect->rel_filepos == rel_hdr2->sh_offset));
}
else
{
/* Note that ASECT->RELOC_COUNT tends not to be accurate in this
case because relocations against this section may use the
dynamic symbol table, and in that case bfd_section_from_shdr
in elf.c does not update the RELOC_COUNT. */
bfd/ * section.c (struct sec): Rename "_cooked_size" to "size". Rename "_raw_size" to "rawsize". (STD_SECTION): Adjust comments. (bfd_set_section_size, bfd_get_section_contents): Use size. (bfd_malloc_and_get_section): New function. * bfd-in.h (bfd_section_size, bfd_get_section_size): Use size. * coff-sh.c (sh_relax_section): Alloc coff_section_data struct early. Correctly free reloc and contents memory. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Delete FIXME and fake CIE now that we can shink section size to zero. (_bfd_elf_write_section_eh_frame): Likewise.. * elf32-ppc.c (ppc_elf_relax_section): Delay reading section contents. * elf-m10300.c (mn10300_elf_final_link_relocate): Don't use _bfd_stab_section_offset. Use _bfd_elf_section_offset. * stabs.c (_bfd_stab_section_offset_): Remove unused args and unneeded indirection. * elf.c (_bfd_elf_section_offset): .. and update call. * libbfd-in.h (_bfd_stab_section_offset): Update prototype. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. Replace occurrences of "_raw_size" and "_cooked_size" in most places with "size". Set new "rawsize" for stabs, eh_frame, and SEC_MERGE sections. Use "rawsize", if non-zero, for bfd_get_section_contents calls if the section might be a stabs, eh_frame, or SEC_MERGE section. Similarly use "rawsize", if non-zero, in reloc functions to validate reloc addresses. Use new bfd_malloc_and_get_section in most places where bfd_get_section_contents was called. Expand all occurrences of bfd_section_size and bfd_get_section_size. Rename "raw_size" var in grok_prstatus and similar functions to "size". * aix386-core.c (aix386_core_file_p): .. * aix5ppc-core.c (xcoff64_core_p): .. * aout-adobe.c (aout_adobe_callback, aout_adobe_write_object_contents, aout_adobe_set_section_contents): .. * aout-target.h (callback): .. * aout-tic30.c (tic30_aout_callback, tic30_aout_final_link_relocate, MY_bfd_final_link): .. * aoutf1.h (sunos4_core_file_p): .. * aoutx.h (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, translate_from_native_sym_flags, final_link, aout_link_input_section): .. * binary.c (binary_object_p, binary_canonicalize_symtab, binary_set_section_contents): .. * bout.c (b_out_callback, b_out_write_object_contents, b_out_set_section_contents, b_out_bfd_relax_section, b_out_bfd_get_relocated_section_contents): .. * cisco-core.c (cisco_core_file_validate): .. * coff-alpha.c (alpha_ecoff_object_p, alpha_ecoff_get_relocated_section_conten, alpha_relocate_section): .. * coff-arm.c (coff_arm_relocate_section, bfd_arm_allocate_interworking_sections): .. * coff-h8300.c (h8300_reloc16_extra_cases, h8300_bfd_link_add_symbols): .. * coff-mips.c (mips_refhi_reloc, mips_gprel_reloc): .. * coff-ppc.c (coff_ppc_relocate_section, ppc_allocate_toc_section, ppc_bfd_coff_final_link): .. * coff-rs6000.c (xcoff_reloc_type_br, xcoff_ppc_relocate_section): .. * coff-sh.c (sh_relax_section, sh_relax_delete_bytes, sh_align_loads, sh_coff_get_relocated_section_contents): .. * coff64-rs6000.c (xcoff64_write_object_contents, xcoff64_reloc_type_br, xcoff64_ppc_relocate_section): .. * coffcode.h (coff_compute_section_file_positions, coff_write_object_contents): .. * coffgen.c (make_a_section_from_file, coff_write_symbols, coff_section_symbol, build_debug_section): .. * cofflink.c (coff_link_add_symbols, _bfd_coff_final_link, process_embedded_commands, _bfd_coff_link_input_bfd, _bfd_coff_write_global_sym): .. * cpu-arm.c (bfd_arm_update_notes, bfd_arm_get_mach_from_notes): .. * cpu-ns32k.c (do_ns32k_reloc, _bfd_ns32k_final_link_relocate): .. * dwarf1.c (parse_line_table, _bfd_dwarf1_find_nearest_line): .. * dwarf2.c (read_indirect_string, read_abbrevs, decode_line_info, _bfd_dwarf2_find_nearest_line): .. * ecoff.c (bfd_debug_section, ecoff_set_symbol_info, ecoff_compute_section_file_positions, _bfd_ecoff_write_object_contents, ecoff_indirect_link_order): .. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame, _bfd_elf_discard_section_eh_frame_hdr, _bfd_elf_maybe_strip_eh_frame_hdr, _bfd_elf_eh_frame_section_offset, _bfd_elf_write_section_eh_frame, _bfd_elf_write_section_eh_frame_hdr): .. * elf-hppa.h (elf_hppa_sort_unwind): .. * elf-m10200.c (mn10200_elf_relax_section, mn10200_elf_relax_delete_bytes, mn10200_elf_get_relocated_section_contents): .. * elf-m10300.c (_bfd_mn10300_elf_create_got_section, mn10300_elf_check_relocs, mn10300_elf_relax_section, mn10300_elf_relax_delete_bytes, mn10300_elf_get_relocated_section_contents, _bfd_mn10300_elf_adjust_dynamic_symbol, _bfd_mn10300_elf_discard_copies, _bfd_mn10300_elf_size_dynamic_sections, _bfd_mn10300_elf_finish_dynamic_sections): .. * elf.c (_bfd_elf_print_private_bfd_data, bfd_elf_get_bfd_needed_list, _bfd_elf_make_section_from_phdr, elf_fake_sections, bfd_elf_set_group_contents, map_sections_to_segments, elf_sort_sections, assign_file_positions_for_segments, SECTION_SIZE, copy_private_bfd_data, _bfd_elf_get_dynamic_reloc_upper_bound, _bfd_elf_canonicalize_dynamic_reloc, elfcore_maybe_make_sect, _bfd_elfcore_make_pseudosection, elfcore_grok_prstatus, elfcore_grok_lwpstatus, elfcore_grok_win32pstatus, elfcore_grok_note, elfcore_grok_nto_status, elfcore_grok_nto_gregs, _bfd_elf_rel_local_sym, _bfd_elf_get_synthetic_symtab): .. * elf32-arm.h (bfd_elf32_arm_allocate_interworking_sect, bfd_elf32_arm_process_before_allocation, elf32_arm_adjust_dynamic_symbol, allocate_dynrelocs, elf32_arm_size_dynamic_sections, elf32_arm_finish_dynamic_sections, elf32_arm_write_section): .. * elf32-cris.c (cris_elf_grok_prstatus, elf_cris_finish_dynamic_sections, cris_elf_gc_sweep_hook, elf_cris_adjust_gotplt_to_got, elf_cris_adjust_dynamic_symbol, cris_elf_check_relocs, elf_cris_size_dynamic_sections, elf_cris_discard_excess_dso_dynamics, elf_cris_discard_excess_program_dynamics): .. * elf32-d30v.c (bfd_elf_d30v_reloc, bfd_elf_d30v_reloc_21): .. * elf32-dlx.c (_bfd_dlx_elf_hi16_reloc): .. * elf32-frv.c (_frvfdpic_add_dyn_reloc, _frvfdpic_add_rofixup, _frv_create_got_section, _frvfdpic_assign_plt_entries, elf32_frvfdpic_size_dynamic_sections, elf32_frvfdpic_modify_segment_map, elf32_frvfdpic_finish_dynamic_sections): .. * elf32-h8300.c (elf32_h8_relax_section, elf32_h8_relax_delete_bytes, elf32_h8_get_relocated_section_contents): .. * elf32-hppa.c (hppa_build_one_stub, hppa_size_one_stub, elf32_hppa_adjust_dynamic_symbol, allocate_plt_static, allocate_dynrelocs, elf32_hppa_size_dynamic_sections, group_sections, elf32_hppa_size_stubs, elf32_hppa_set_gp, elf32_hppa_build_stubs, elf32_hppa_finish_dynamic_sections): .. * elf32-i370.c (i370_elf_adjust_dynamic_symbol, i370_elf_size_dynamic_sections, i370_elf_check_relocs, i370_elf_finish_dynamic_sections): .. * elf32-i386.c (elf_i386_grok_prstatus, elf_i386_adjust_dynamic_symbol, allocate_dynrelocs, elf_i386_size_dynamic_sections, elf_i386_relocate_section, elf_i386_finish_dynamic_sections): .. * elf32-i860.c (i860_howto_pc26_reloc, i860_howto_pc16_reloc, i860_howto_highadj_reloc, i860_howto_splitn_reloc): .. * elf32-ip2k.c (ip2k_is_switch_table_128, ip2k_relax_switch_table_128, ip2k_is_switch_table_256, ip2k_relax_switch_table_256, ip2k_elf_relax_section, adjust_all_relocations, ip2k_elf_relax_delete_bytes): .. * elf32-m32r.c (m32r_elf_do_10_pcrel_reloc, m32r_elf_hi16_reloc, m32r_elf_generic_reloc, m32r_elf_adjust_dynamic_symbol, allocate_dynrelocs, m32r_elf_size_dynamic_sections, m32r_elf_relocate_section, m32r_elf_finish_dynamic_sections, m32r_elf_relax_section, m32r_elf_relax_delete_bytes, m32r_elf_get_relocated_section_contents): .. * elf32-m68hc11.c (m68hc11_elf_build_one_stub, m68hc11_elf_size_one_stub, m68hc11_elf_relax_section, m68hc11_elf_relax_delete_bytes): .. * elf32-m68hc12.c (m68hc12_elf_build_one_stub, m68hc12_elf_size_one_stub): .. * elf32-m68hc1x.c (elf32_m68hc11_size_stubs, elf32_m68hc11_build_stubs, m68hc11_elf_special_reloc): .. * elf32-m68k.c (elf_m68k_check_relocs, elf_m68k_gc_sweep_hook, elf_m68k_adjust_dynamic_symbol, elf_m68k_size_dynamic_sections, elf_m68k_discard_copies, elf_m68k_finish_dynamic_sections): .. * elf32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elf32-or32.c (or32_elf_consth_reloc): .. * elf32-ppc.c (ppc_elf_relax_section, ppc_elf_addr16_ha_reloc, elf_create_pointer_linker_section, ppc_elf_create_linker_section, ppc_elf_additional_program_headers, ppc_elf_adjust_dynamic_symbol, allocate_dynrelocs, ppc_elf_size_dynamic_sections, ppc_elf_finish_dynamic_sections, ppc_elf_grok_prstatus, ppc_elf_final_write_processing): .. * elf32-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections, elf_s390_grok_prstatus): .. * elf32-sh.c (sh_elf_reloc_loop, sh_elf_relax_section, sh_elf_relax_delete_bytes, sh_elf_align_loads, sh_elf_adjust_dynamic_symbol, allocate_dynrelocs, sh_elf_size_dynamic_sections, sh_elf_get_relocated_section_contents, sh_elf_finish_dynamic_sections, elf32_shlin_grok_prstatus): .. * elf32-sh64-com.c (sh64_address_in_cranges, sh64_get_contents_type): .. * elf32-sh64.c (sh64_find_section_for_address, sh64_elf_final_write_processing): .. * elf32-sparc.c (sparc_elf_wdisp16_reloc, sparc_elf_hix22_reloc, sparc_elf_lox10_reloc, elf32_sparc_adjust_dynamic_symbol, allocate_dynrelocs, elf32_sparc_size_dynamic_sections, elf32_sparc_relocate_section, elf32_sparc_finish_dynamic_sections): .. * elf32-v850.c (v850_elf_reloc, v850_elf_relax_section): .. * elf32-vax.c (elf_vax_check_relocs, elf_vax_adjust_dynamic_symbol, elf_vax_size_dynamic_sections, elf_vax_discard_copies, elf_vax_instantiate_got_entries, elf_vax_relocate_section, elf_vax_finish_dynamic_sections): .. * elf32-xstormy16.c (xstormy16_elf_24_reloc, xstormy16_elf_check_relocs, xstormy16_relax_plt_check, xstormy16_elf_relax_section, xstormy16_elf_always_size_sections, xstormy16_elf_finish_dynamic_sections): .. * elf32-xtensa.c (xtensa_read_table_entries, elf_xtensa_allocate_got_size, elf_xtensa_allocate_local_got_size, elf_xtensa_size_dynamic_sections, elf_xtensa_do_reloc, bfd_elf_xtensa_reloc, elf_xtensa_relocate_section, elf_xtensa_combine_prop_entries, elf_xtensa_finish_dynamic_sections, elf_xtensa_discard_info_for_section, elf_xtensa_grok_prstatus, get_relocation_opcode, retrieve_contents, find_relaxable_sections, collect_source_relocs, is_resolvable_asm_expansion, remove_literals, relax_section, shrink_dynamic_reloc_sections, relax_property_section, xtensa_callback_required_dependence): .. * elf64-alpha.c (elf64_alpha_reloc_gpdisp, elf64_alpha_relax_section, elf64_alpha_check_relocs, elf64_alpha_adjust_dynamic_symbol, elf64_alpha_calc_got_offsets_for_symbol, elf64_alpha_calc_got_offsets, elf64_alpha_size_plt_section, elf64_alpha_size_plt_section_1, elf64_alpha_always_size_sections, elf64_alpha_calc_dynrel_sizes, elf64_alpha_size_rela_got_section, elf64_alpha_size_rela_got_1, elf64_alpha_size_dynamic_sections, elf64_alpha_emit_dynrel, elf64_alpha_finish_dynamic_sections, elf64_alpha_final_link): .. * elf64-hppa.c (allocate_dynrel_entries, elf64_hppa_size_dynamic_sections, elf64_hppa_finish_dynamic_sections): .. * elf64-mips.c (mips_elf64_gprel32_reloc, mips16_gprel_reloc, mips_elf64_canonicalize_dynamic_reloc, mips_elf64_slurp_reloc_table, elf64_mips_grok_prstatus): .. * elf64-mmix.c (mmix_elf_perform_relocation, mmix_elf_reloc, mmix_elf_relocate_section, mmix_elf_final_link, mmix_set_relaxable_size, _bfd_mmix_after_linker_allocation, mmix_elf_relax_section, mmix_elf_get_section_contents): .. * elf64-ppc.c (ppc64_elf_object_p, ppc64_elf_grok_prstatus, ppc64_elf_check_relocs, ppc64_elf_func_desc_adjust, ppc64_elf_adjust_dynamic_symbol, ppc64_elf_edit_opd, allocate_dynrelocs, ppc64_elf_size_dynamic_sections, ppc_build_one_stub, ppc_size_one_stub, ppc64_elf_next_toc_section, toc_adjusting_stub_needed, group_sections, ppc64_elf_size_stubs, ppc64_elf_build_stubs, ppc64_elf_relocate_section, ppc64_elf_finish_dynamic_sections): .. * elf64-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections): .. * elf64-sh64.c (sh_elf64_get_relocated_section_contents, sh_elf64_check_relocs, sh64_elf64_adjust_dynamic_symbol, sh64_elf64_discard_copies, sh64_elf64_size_dynamic_sections, sh64_elf64_finish_dynamic_sections): .. * elf64-sparc.c (sparc64_elf_slurp_reloc_table, init_insn_reloc, sparc64_elf_check_relocs, sparc64_elf_adjust_dynamic_symbol, sparc64_elf_size_dynamic_sections, sparc64_elf_relocate_section, sparc64_elf_finish_dynamic_symbol, sparc64_elf_finish_dynamic_sections): .. * elf64-x86-64.c (elf64_x86_64_grok_prstatus, elf64_x86_64_adjust_dynamic_symbol, allocate_dynrelocs, elf64_x86_64_size_dynamic_sections, elf64_x86_64_relocate_section, elf64_x86_64_finish_dynamic_sections): .. * elfarm-nabi.c (elf32_arm_nabi_grok_prstatus): .. * elfcode.h (elf_slurp_reloc_table): .. * elflink.c (_bfd_elf_create_got_section, elf_add_dt_needed_tag, elf_finalize_dynstr, elf_link_add_object_symbols, bfd_elf_size_dynamic_sections, elf_link_sort_relocs, elf_link_input_bfd, bfd_elf_final_link, bfd_elf_discard_info): .. * elfn32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elfxx-ia64.c (elfNN_ia64_relax_section, allocate_dynrel_entries, elfNN_ia64_size_dynamic_sections, elfNN_ia64_install_dyn_reloc, elfNN_ia64_choose_gp, elfNN_ia64_final_link, elfNN_ia64_finish_dynamic_sections): .. * elfxx-mips.c (mips_elf_create_procedure_table, mips_elf_check_mips16_stubs, _bfd_mips_elf_gprel16_with_gp, _bfd_mips_elf_hi16_reloc, _bfd_mips_elf_generic_reloc, mips_elf_global_got_index, mips_elf_multi_got, mips_elf_create_compact_rel_section, mips_elf_calculate_relocation, mips_elf_allocate_dynamic_relocations, mips_elf_create_dynamic_relocation, _bfd_mips_elf_fake_sections, _bfd_mips_relax_section, _bfd_mips_elf_adjust_dynamic_symbol, _bfd_mips_elf_always_size_sections, _bfd_mips_elf_size_dynamic_sections, _bfd_mips_elf_finish_dynamic_symbol, _bfd_mips_elf_finish_dynamic_sections, _bfd_mips_elf_modify_segment_map, _bfd_mips_elf_discard_info, _bfd_mips_elf_write_section, _bfd_mips_elf_set_section_contents, _bfd_elf_mips_get_relocated_section_contents, _bfd_mips_elf_final_link, _bfd_mips_elf_merge_private_bfd_data): .. * hp300hpux.c (callback): .. * hppabsd-core.c (make_bfd_asection): .. * hpux-core.c (make_bfd_asection): .. * i386linux.c (linux_link_create_dynamic_sections, bfd_i386linux_size_dynamic_sections, linux_finish_dynamic_link): .. * i386msdos.c (msdos_write_object_contents): .. * i386os9k.c (os9k_callback, os9k_write_object_contents, os9k_set_section_contents): .. * ieee.c (parse_expression, ieee_slurp_external_symbols, ieee_slurp_sections, ieee_slurp_debug, ieee_slurp_section_data, ieee_write_section_part, do_with_relocs, do_as_repeat, do_without_relocs, ieee_write_debug_part, init_for_output, ieee_set_section_contents): .. * ihex.c (ihex_scan, ihex_read_section, ihex_get_section_contents): .. * irix-core.c (do_sections, make_bfd_asection): .. * libaout.h (aout_section_merge_with_text_p): .. * libbfd.c (_bfd_generic_get_section_contents, _bfd_generic_get_section_contents_in_window): .. * linker.c (default_indirect_link_order): .. * lynx-core.c (make_bfd_asection): .. * m68klinux.c (linux_link_create_dynamic_sections, bfd_m68klinux_size_dynamic_sections, linux_finish_dynamic_link): .. * mach-o.c (bfd_mach_o_make_bfd_section, bfd_mach_o_scan_read_dylinker, bfd_mach_o_scan_read_dylib, bfd_mach_o_scan_read_thread, bfd_mach_o_scan_read_symtab, bfd_mach_o_scan_read_segment): .. * merge.c (_bfd_add_merge_section, record_section, merge_strings, _bfd_merge_sections): .. * mmo.c (mmo_find_sec_w_addr, mmo_get_spec_section, mmo_get_loc, mmo_map_set_sizes, mmo_canonicalize_symtab, mmo_internal_write_section, mmo_write_object_contents): .. * netbsd-core.c (netbsd_core_file_p): .. * nlm32-alpha.c (nlm_alpha_read_reloc, nlm_alpha_write_import, nlm_alpha_set_public_section): .. * nlm32-ppc.c (nlm_powerpc_read_reloc, nlm_powerpc_write_reloc): .. * nlm32-sparc.c (nlm_sparc_write_import): .. * nlmcode.h (add_bfd_section, nlm_swap_auxiliary_headers_in, nlm_compute_section_file_positions): .. * oasys.c (oasys_object_p, oasys_slurp_section_data, oasys_write_sections, oasys_write_data, oasys_set_section_contents): .. * opncls.c (get_debug_link_info): .. * osf-core.c (make_bfd_asection): .. * pdp11.c (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, squirt_out_relocs, final_link, aout_link_input_section): .. * peXXigen.c (_bfd_XXi_swap_sym_in, _bfd_XXi_swap_aouthdr_out, pe_print_idata, pe_print_edata, pe_print_pdata, pe_print_reloc): .. * pef.c (bfd_pef_make_bfd_section, bfd_pef_print_loader_section, bfd_pef_scan_start_address, bfd_pef_parse_symbols): .. * ppcboot.c (ppcboot_object_p, ppcboot_canonicalize_symtab): .. * ptrace-core.c (ptrace_unix_core_file_p): .. * reloc.c (bfd_perform_relocation, bfd_install_relocation, _bfd_final_link_relocate, bfd_generic_relax_section, bfd_generic_get_relocated_section_contents): .. * reloc16.c (bfd_coff_reloc16_relax_section, bfd_coff_reloc16_get_relocated_section_c): .. * riscix.c (riscix_some_aout_object_p): .. * rs6000-core.c (read_hdr, make_bfd_asection): .. * sco5-core.c (make_bfd_asection): .. * simple.c (bfd_simple_get_relocated_section_contents): .. * som.c (som_object_setup, setup_sections, som_prep_headers, som_write_fixups, som_begin_writing, bfd_section_from_som_symbol, som_set_reloc_info, som_get_section_contents, som_bfd_link_split_section): .. * sparclinux.c (linux_link_create_dynamic_sections, bfd_sparclinux_size_dynamic_sections, linux_finish_dynamic_link): .. * srec.c (srec_scan, srec_read_section, srec_get_section_contents): .. * stabs.c (_bfd_link_section_stabs, _bfd_discard_section_stabs, _bfd_write_stab_strings, _bfd_stab_section_offset): .. * sunos.c (sunos_read_dynamic_info, sunos_create_dynamic_sections, bfd_sunos_size_dynamic_sections, sunos_scan_std_relocs, sunos_scan_ext_relocs, sunos_scan_dynamic_symbol, sunos_write_dynamic_symbol, sunos_check_dynamic_reloc, sunos_finish_dynamic_link): .. * syms.c (_bfd_stab_section_find_nearest_line): .. * tekhex.c (first_phase, tekhex_set_section_contents, tekhex_write_object_contents): .. * trad-core.c (trad_unix_core_file_p): .. * versados.c (process_esd, process_otr, process_otr): .. * vms-gsd.c (_bfd_vms_slurp_gsd, _bfd_vms_write_gsd): .. * vms-misc.c (add_new_contents): .. * vms-tir.c (check_section, new_section, _bfd_vms_write_tir): .. * vms.c (vms_set_section_contents): .. * xcofflink.c (xcoff_get_section_contents, xcoff_link_add_symbols, xcoff_sweep, bfd_xcoff_size_dynamic_sections, xcoff_build_ldsyms, _bfd_xcoff_bfd_final_link, xcoff_link_input_bfd): .. * xsym.c (bfd_sym_scan): .. See above. binutils/ * objcopy.c (copy_section): Don't set _cooked_size. include/ * bfdlink.h (struct bfd_link_order): Update comment. ld/ * ldlang.c (print_output_section_statement): Don't print size before relaxation. (IGNORE_SECTION): Remove bfd arg. Update all callers. * ldexp.c (fold_name): .. See below. * ldlang.c (section_already_linked, print_output_section_statement, print_input_section, insert_pad, size_input_section, lang_check_section_addresses, lang_size_sections_1, lang_size_sections, lang_do_assignments_1, lang_set_startof, lang_one_common, lang_reset_memory_regions, lang_process, lang_abs_symbol_at_end_of, lang_do_version_exports_section): .. * ldwrite.c (build_link_order, clone_section, ds, split_sections): .. * pe-dll.c (process_def_file, generate_reloc): .. * emultempl/elf32.em (gld${EMULATION_NAME}_find_statement_assignment, gld${EMULATION_NAME}_before_allocation): .. * emultempl/mmix-elfnmmo.em (mmix_after_allocation): .. * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_before_allocation, sh64_elf_${EMULATION_NAME}_after_allocation): .. * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): .. * emultempl/xtensaelf.em (ld_assign_relative_paged_dot, ld_local_file_relocations_fit, ld_xtensa_insert_page_offsets): Use "size" instead of "_raw_size" and "_cooked_size". Expand bfd_section_size macro invocations.
2004-06-24 06:46:28 +02:00
if (asect->size == 0)
return TRUE;
rel_hdr = &d->this_hdr;
reloc_count = NUM_SHDR_ENTRIES (rel_hdr);
rel_hdr2 = NULL;
reloc_count2 = 0;
}
1999-05-03 09:29:11 +02:00
/* Allocate space for 3 arelent structures for each Rel structure. */
amt = (reloc_count + reloc_count2) * 3 * sizeof (arelent);
relents = bfd_alloc (abfd, amt);
if (relents == NULL)
return FALSE;
1999-05-03 09:29:11 +02:00
/* The slurp_one_reloc_table routine increments reloc_count. */
asect->reloc_count = 0;
if (! mips_elf64_slurp_one_reloc_table (abfd, asect,
rel_hdr, reloc_count,
relents,
symbols, dynamic))
return FALSE;
1999-05-03 09:29:11 +02:00
if (d->rel_hdr2 != NULL)
{
if (! mips_elf64_slurp_one_reloc_table (abfd, asect,
rel_hdr2, reloc_count2,
relents + reloc_count * 3,
symbols, dynamic))
return FALSE;
1999-05-03 09:29:11 +02:00
}
asect->relocation = relents;
return TRUE;
1999-05-03 09:29:11 +02:00
}
/* Write out the relocations. */
static void
mips_elf64_write_relocs (bfd *abfd, asection *sec, void *data)
1999-05-03 09:29:11 +02:00
{
bfd_boolean *failedp = data;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
int count;
Elf_Internal_Shdr *rel_hdr;
1999-05-03 09:29:11 +02:00
unsigned int idx;
/* If we have already failed, don't do anything. */
if (*failedp)
return;
if ((sec->flags & SEC_RELOC) == 0)
return;
/* The linker backend writes the relocs out itself, and sets the
reloc_count field to zero to inhibit writing them here. Also,
sometimes the SEC_RELOC flag gets set even when there aren't any
relocs. */
if (sec->reloc_count == 0)
return;
/* We can combine up to three relocs that refer to the same address
if the latter relocs have no associated symbol. */
count = 0;
for (idx = 0; idx < sec->reloc_count; idx++)
{
bfd_vma addr;
unsigned int i;
++count;
addr = sec->orelocation[idx]->address;
for (i = 0; i < 2; i++)
{
arelent *r;
if (idx + 1 >= sec->reloc_count)
break;
r = sec->orelocation[idx + 1];
if (r->address != addr
|| ! bfd_is_abs_section ((*r->sym_ptr_ptr)->section)
|| (*r->sym_ptr_ptr)->value != 0)
break;
/* We can merge the reloc at IDX + 1 with the reloc at IDX. */
++idx;
}
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
rel_hdr = &elf_section_data (sec)->rel_hdr;
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Do the actual relocation. */
if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rel))
mips_elf64_write_rel (abfd, sec, rel_hdr, &count, data);
else if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rela))
mips_elf64_write_rela (abfd, sec, rel_hdr, &count, data);
else
BFD_ASSERT (0);
}
static void
mips_elf64_write_rel (bfd *abfd, asection *sec,
Elf_Internal_Shdr *rel_hdr,
int *count, void *data)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
bfd_boolean *failedp = data;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
Elf64_Mips_External_Rel *ext_rel;
unsigned int idx;
asymbol *last_sym = 0;
int last_sym_idx = 0;
rel_hdr->sh_size = rel_hdr->sh_entsize * *count;
rel_hdr->contents = bfd_alloc (abfd, rel_hdr->sh_size);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
if (rel_hdr->contents == NULL)
1999-05-03 09:29:11 +02:00
{
*failedp = TRUE;
1999-05-03 09:29:11 +02:00
return;
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
ext_rel = (Elf64_Mips_External_Rel *) rel_hdr->contents;
for (idx = 0; idx < sec->reloc_count; idx++, ext_rel++)
1999-05-03 09:29:11 +02:00
{
arelent *ptr;
include/elf/ChangeLog * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. (Elf_Internal_Rel): Delete. bfd/ChangeLog * elf-bfd.h: Replace occurrences of Elf32_Internal_* and Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel with Elf_Internal_Rela. * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h, elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c, elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c, elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c, elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto. * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr throughout instead. * elf.c (_bfd_elf_no_info_to_howto_rel): Delete. * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *. Remove INLINE keyword. (elf_swap_reloc_in): Likewise. Also clear r_addend. (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand as a bfd_byte *. (elf_write_relocs): Consolidate REL and RELA code. (elf_slurp_reloc_table_from_section): Simplify REL code. (NAME(_bfd_elf,size_info)): Populate reloc swap entries. * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define. * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and RELA code. (elf_link_adjust_relocs): Likewise. Don't malloc space for temp reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL. (elf_link_output_relocs): Likewise. (elf_reloc_link_order): Likewise. (elf_finish_pointer_linker_section): Likewise. (struct elf_link_sort_rela): Remove union. (elf_link_sort_cmp1): Update to suit. (elf_link_sort_cmp2): Here too. (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory over-allocation for int_rels_per_ext_rel != 1 case. * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls. * elf32-i386.c: Likewise. * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out. * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise. * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out. * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c: Likewise. * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out. * elfxx-mips.c (sort_dynamic_relocs): Likewise for bfd_elf32_swap_reloc_in. * elf32-arm.h: Update elf32_arm_info_to_howto calls. * elf32-mips.c: Likewise for mips_info_to_howto_rel. (mips_elf64_swap_reloc_in): Zero r_addend. (mips_elf64_be_swap_reloc_in): Likewise. (mips_elf64_slurp_one_reloc_table): Simplify. * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-11-28 12:55:43 +01:00
Elf64_Mips_Internal_Rela int_rel;
1999-05-03 09:29:11 +02:00
asymbol *sym;
int n;
unsigned int i;
ptr = sec->orelocation[idx];
/* The address of an ELF reloc is section relative for an object
file, and absolute for an executable file or shared library.
The address of a BFD reloc is always section relative. */
if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
int_rel.r_offset = ptr->address;
1999-05-03 09:29:11 +02:00
else
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
int_rel.r_offset = ptr->address + sec->vma;
1999-05-03 09:29:11 +02:00
sym = *ptr->sym_ptr_ptr;
if (sym == last_sym)
n = last_sym_idx;
else if (bfd_is_abs_section (sym->section) && sym->value == 0)
n = STN_UNDEF;
1999-05-03 09:29:11 +02:00
else
{
last_sym = sym;
n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
if (n < 0)
{
*failedp = TRUE;
1999-05-03 09:29:11 +02:00
return;
}
last_sym_idx = n;
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
int_rel.r_sym = n;
int_rel.r_ssym = RSS_UNDEF;
1999-05-03 09:29:11 +02:00
if ((*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
&& ! _bfd_elf_validate_reloc (abfd, ptr))
{
*failedp = TRUE;
1999-05-03 09:29:11 +02:00
return;
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
int_rel.r_type = ptr->howto->type;
int_rel.r_type2 = (int) R_MIPS_NONE;
int_rel.r_type3 = (int) R_MIPS_NONE;
1999-05-03 09:29:11 +02:00
for (i = 0; i < 2; i++)
{
arelent *r;
if (idx + 1 >= sec->reloc_count)
break;
r = sec->orelocation[idx + 1];
if (r->address != ptr->address
|| ! bfd_is_abs_section ((*r->sym_ptr_ptr)->section)
|| (*r->sym_ptr_ptr)->value != 0)
break;
/* We can merge the reloc at IDX + 1 with the reloc at IDX. */
if (i == 0)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
int_rel.r_type2 = r->howto->type;
1999-05-03 09:29:11 +02:00
else
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
int_rel.r_type3 = r->howto->type;
1999-05-03 09:29:11 +02:00
++idx;
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
mips_elf64_swap_reloc_out (abfd, &int_rel, ext_rel);
1999-05-03 09:29:11 +02:00
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
BFD_ASSERT (ext_rel - (Elf64_Mips_External_Rel *) rel_hdr->contents
== *count);
1999-05-03 09:29:11 +02:00
}
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static void
mips_elf64_write_rela (bfd *abfd, asection *sec,
Elf_Internal_Shdr *rela_hdr,
int *count, void *data)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
bfd_boolean *failedp = data;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
Elf64_Mips_External_Rela *ext_rela;
unsigned int idx;
asymbol *last_sym = 0;
int last_sym_idx = 0;
rela_hdr->sh_size = rela_hdr->sh_entsize * *count;
rela_hdr->contents = bfd_alloc (abfd, rela_hdr->sh_size);
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
if (rela_hdr->contents == NULL)
{
*failedp = TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
return;
}
ext_rela = (Elf64_Mips_External_Rela *) rela_hdr->contents;
for (idx = 0; idx < sec->reloc_count; idx++, ext_rela++)
{
arelent *ptr;
Elf64_Mips_Internal_Rela int_rela;
asymbol *sym;
int n;
unsigned int i;
ptr = sec->orelocation[idx];
/* The address of an ELF reloc is section relative for an object
file, and absolute for an executable file or shared library.
The address of a BFD reloc is always section relative. */
if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
int_rela.r_offset = ptr->address;
else
int_rela.r_offset = ptr->address + sec->vma;
sym = *ptr->sym_ptr_ptr;
if (sym == last_sym)
n = last_sym_idx;
else if (bfd_is_abs_section (sym->section) && sym->value == 0)
n = STN_UNDEF;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
else
{
last_sym = sym;
n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
if (n < 0)
{
*failedp = TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
return;
}
last_sym_idx = n;
}
int_rela.r_sym = n;
int_rela.r_addend = ptr->addend;
int_rela.r_ssym = RSS_UNDEF;
if ((*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
&& ! _bfd_elf_validate_reloc (abfd, ptr))
{
*failedp = TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
return;
}
int_rela.r_type = ptr->howto->type;
int_rela.r_type2 = (int) R_MIPS_NONE;
int_rela.r_type3 = (int) R_MIPS_NONE;
for (i = 0; i < 2; i++)
{
arelent *r;
if (idx + 1 >= sec->reloc_count)
break;
r = sec->orelocation[idx + 1];
if (r->address != ptr->address
|| ! bfd_is_abs_section ((*r->sym_ptr_ptr)->section)
|| (*r->sym_ptr_ptr)->value != 0)
break;
/* We can merge the reloc at IDX + 1 with the reloc at IDX. */
if (i == 0)
int_rela.r_type2 = r->howto->type;
else
int_rela.r_type3 = r->howto->type;
++idx;
}
mips_elf64_swap_reloca_out (abfd, &int_rela, ext_rela);
}
BFD_ASSERT (ext_rela - (Elf64_Mips_External_Rela *) rela_hdr->contents
== *count);
}
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
/* Set the right machine number for a MIPS ELF file. */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
static bfd_boolean
mips_elf64_object_p (bfd *abfd)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
unsigned long mach;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
/* Irix 6 is broken. Object file symbol tables are not always
sorted correctly such that local symbols precede global symbols,
and the sh_info field in the symbol table is not always right. */
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
if (elf64_mips_irix_compat (abfd) != ict_none)
elf_bad_symtab (abfd) = TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags);
bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach);
return TRUE;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
/* Depending on the target vector we generate some version of Irix
executables or "normal" MIPS ELF ABI executables. */
static irix_compat_t
elf64_mips_irix_compat (bfd *abfd)
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
if ((abfd->xvec == &bfd_elf64_bigmips_vec)
|| (abfd->xvec == &bfd_elf64_littlemips_vec))
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
return ict_irix6;
* elf64-mips.c: Update TODO comment. (mips_elf64_higher_reloc,mips_elf64_highest_reloc, mips_elf64_gprel16_reloca): Remove prototypes. (mips16_jump_reloc,mips16_gprel_reloc): Add functions. (UNUSED_RELOC): Replace by EMPTY_RELOC. (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove wrong comments. Remove disfunctional support of R_MIPS_HIGHER and R_MIPS_HIGHEST. (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and R_MIPS_GOT16. Remove wrong comments. (elf_mips16_jump_howto,elf_mips16_gprel_howto, elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code from elf32-mips.c. (mips_elf64_hi16_reloc): Fix formatting. (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove. (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code. Better comment. Fall back to R_MIPS_GOT_DISP instead of abort(). (mips_elf64_gprel16_reloc): Make static. Add check for partial_inplace. (mips_elf64_gprel16_reloca): Remove. (mips_elf64_literal_reloc): New function. (mips_elf64_gprel32_reloc): Fix formatting. (mips_elf64_shift6_reloc): Fix comment. Make static. (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from elf32-mips.c. (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in elf32-mips.c (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU specific relocations. (mips_elf64_rtype_to_howto): Enable GNU specific relocations. (mips_elf64_object_p): Invert logic to check for SGI-ish ABI. (ELF_MAXPAGESIZE): Add comment.
2002-07-25 17:35:14 +02:00
else
return ict_none;
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
}
/* Support for core dump NOTE sections. */
static bfd_boolean
elf64_mips_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
{
int offset;
bfd/ * section.c (struct sec): Rename "_cooked_size" to "size". Rename "_raw_size" to "rawsize". (STD_SECTION): Adjust comments. (bfd_set_section_size, bfd_get_section_contents): Use size. (bfd_malloc_and_get_section): New function. * bfd-in.h (bfd_section_size, bfd_get_section_size): Use size. * coff-sh.c (sh_relax_section): Alloc coff_section_data struct early. Correctly free reloc and contents memory. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Delete FIXME and fake CIE now that we can shink section size to zero. (_bfd_elf_write_section_eh_frame): Likewise.. * elf32-ppc.c (ppc_elf_relax_section): Delay reading section contents. * elf-m10300.c (mn10300_elf_final_link_relocate): Don't use _bfd_stab_section_offset. Use _bfd_elf_section_offset. * stabs.c (_bfd_stab_section_offset_): Remove unused args and unneeded indirection. * elf.c (_bfd_elf_section_offset): .. and update call. * libbfd-in.h (_bfd_stab_section_offset): Update prototype. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. Replace occurrences of "_raw_size" and "_cooked_size" in most places with "size". Set new "rawsize" for stabs, eh_frame, and SEC_MERGE sections. Use "rawsize", if non-zero, for bfd_get_section_contents calls if the section might be a stabs, eh_frame, or SEC_MERGE section. Similarly use "rawsize", if non-zero, in reloc functions to validate reloc addresses. Use new bfd_malloc_and_get_section in most places where bfd_get_section_contents was called. Expand all occurrences of bfd_section_size and bfd_get_section_size. Rename "raw_size" var in grok_prstatus and similar functions to "size". * aix386-core.c (aix386_core_file_p): .. * aix5ppc-core.c (xcoff64_core_p): .. * aout-adobe.c (aout_adobe_callback, aout_adobe_write_object_contents, aout_adobe_set_section_contents): .. * aout-target.h (callback): .. * aout-tic30.c (tic30_aout_callback, tic30_aout_final_link_relocate, MY_bfd_final_link): .. * aoutf1.h (sunos4_core_file_p): .. * aoutx.h (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, translate_from_native_sym_flags, final_link, aout_link_input_section): .. * binary.c (binary_object_p, binary_canonicalize_symtab, binary_set_section_contents): .. * bout.c (b_out_callback, b_out_write_object_contents, b_out_set_section_contents, b_out_bfd_relax_section, b_out_bfd_get_relocated_section_contents): .. * cisco-core.c (cisco_core_file_validate): .. * coff-alpha.c (alpha_ecoff_object_p, alpha_ecoff_get_relocated_section_conten, alpha_relocate_section): .. * coff-arm.c (coff_arm_relocate_section, bfd_arm_allocate_interworking_sections): .. * coff-h8300.c (h8300_reloc16_extra_cases, h8300_bfd_link_add_symbols): .. * coff-mips.c (mips_refhi_reloc, mips_gprel_reloc): .. * coff-ppc.c (coff_ppc_relocate_section, ppc_allocate_toc_section, ppc_bfd_coff_final_link): .. * coff-rs6000.c (xcoff_reloc_type_br, xcoff_ppc_relocate_section): .. * coff-sh.c (sh_relax_section, sh_relax_delete_bytes, sh_align_loads, sh_coff_get_relocated_section_contents): .. * coff64-rs6000.c (xcoff64_write_object_contents, xcoff64_reloc_type_br, xcoff64_ppc_relocate_section): .. * coffcode.h (coff_compute_section_file_positions, coff_write_object_contents): .. * coffgen.c (make_a_section_from_file, coff_write_symbols, coff_section_symbol, build_debug_section): .. * cofflink.c (coff_link_add_symbols, _bfd_coff_final_link, process_embedded_commands, _bfd_coff_link_input_bfd, _bfd_coff_write_global_sym): .. * cpu-arm.c (bfd_arm_update_notes, bfd_arm_get_mach_from_notes): .. * cpu-ns32k.c (do_ns32k_reloc, _bfd_ns32k_final_link_relocate): .. * dwarf1.c (parse_line_table, _bfd_dwarf1_find_nearest_line): .. * dwarf2.c (read_indirect_string, read_abbrevs, decode_line_info, _bfd_dwarf2_find_nearest_line): .. * ecoff.c (bfd_debug_section, ecoff_set_symbol_info, ecoff_compute_section_file_positions, _bfd_ecoff_write_object_contents, ecoff_indirect_link_order): .. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame, _bfd_elf_discard_section_eh_frame_hdr, _bfd_elf_maybe_strip_eh_frame_hdr, _bfd_elf_eh_frame_section_offset, _bfd_elf_write_section_eh_frame, _bfd_elf_write_section_eh_frame_hdr): .. * elf-hppa.h (elf_hppa_sort_unwind): .. * elf-m10200.c (mn10200_elf_relax_section, mn10200_elf_relax_delete_bytes, mn10200_elf_get_relocated_section_contents): .. * elf-m10300.c (_bfd_mn10300_elf_create_got_section, mn10300_elf_check_relocs, mn10300_elf_relax_section, mn10300_elf_relax_delete_bytes, mn10300_elf_get_relocated_section_contents, _bfd_mn10300_elf_adjust_dynamic_symbol, _bfd_mn10300_elf_discard_copies, _bfd_mn10300_elf_size_dynamic_sections, _bfd_mn10300_elf_finish_dynamic_sections): .. * elf.c (_bfd_elf_print_private_bfd_data, bfd_elf_get_bfd_needed_list, _bfd_elf_make_section_from_phdr, elf_fake_sections, bfd_elf_set_group_contents, map_sections_to_segments, elf_sort_sections, assign_file_positions_for_segments, SECTION_SIZE, copy_private_bfd_data, _bfd_elf_get_dynamic_reloc_upper_bound, _bfd_elf_canonicalize_dynamic_reloc, elfcore_maybe_make_sect, _bfd_elfcore_make_pseudosection, elfcore_grok_prstatus, elfcore_grok_lwpstatus, elfcore_grok_win32pstatus, elfcore_grok_note, elfcore_grok_nto_status, elfcore_grok_nto_gregs, _bfd_elf_rel_local_sym, _bfd_elf_get_synthetic_symtab): .. * elf32-arm.h (bfd_elf32_arm_allocate_interworking_sect, bfd_elf32_arm_process_before_allocation, elf32_arm_adjust_dynamic_symbol, allocate_dynrelocs, elf32_arm_size_dynamic_sections, elf32_arm_finish_dynamic_sections, elf32_arm_write_section): .. * elf32-cris.c (cris_elf_grok_prstatus, elf_cris_finish_dynamic_sections, cris_elf_gc_sweep_hook, elf_cris_adjust_gotplt_to_got, elf_cris_adjust_dynamic_symbol, cris_elf_check_relocs, elf_cris_size_dynamic_sections, elf_cris_discard_excess_dso_dynamics, elf_cris_discard_excess_program_dynamics): .. * elf32-d30v.c (bfd_elf_d30v_reloc, bfd_elf_d30v_reloc_21): .. * elf32-dlx.c (_bfd_dlx_elf_hi16_reloc): .. * elf32-frv.c (_frvfdpic_add_dyn_reloc, _frvfdpic_add_rofixup, _frv_create_got_section, _frvfdpic_assign_plt_entries, elf32_frvfdpic_size_dynamic_sections, elf32_frvfdpic_modify_segment_map, elf32_frvfdpic_finish_dynamic_sections): .. * elf32-h8300.c (elf32_h8_relax_section, elf32_h8_relax_delete_bytes, elf32_h8_get_relocated_section_contents): .. * elf32-hppa.c (hppa_build_one_stub, hppa_size_one_stub, elf32_hppa_adjust_dynamic_symbol, allocate_plt_static, allocate_dynrelocs, elf32_hppa_size_dynamic_sections, group_sections, elf32_hppa_size_stubs, elf32_hppa_set_gp, elf32_hppa_build_stubs, elf32_hppa_finish_dynamic_sections): .. * elf32-i370.c (i370_elf_adjust_dynamic_symbol, i370_elf_size_dynamic_sections, i370_elf_check_relocs, i370_elf_finish_dynamic_sections): .. * elf32-i386.c (elf_i386_grok_prstatus, elf_i386_adjust_dynamic_symbol, allocate_dynrelocs, elf_i386_size_dynamic_sections, elf_i386_relocate_section, elf_i386_finish_dynamic_sections): .. * elf32-i860.c (i860_howto_pc26_reloc, i860_howto_pc16_reloc, i860_howto_highadj_reloc, i860_howto_splitn_reloc): .. * elf32-ip2k.c (ip2k_is_switch_table_128, ip2k_relax_switch_table_128, ip2k_is_switch_table_256, ip2k_relax_switch_table_256, ip2k_elf_relax_section, adjust_all_relocations, ip2k_elf_relax_delete_bytes): .. * elf32-m32r.c (m32r_elf_do_10_pcrel_reloc, m32r_elf_hi16_reloc, m32r_elf_generic_reloc, m32r_elf_adjust_dynamic_symbol, allocate_dynrelocs, m32r_elf_size_dynamic_sections, m32r_elf_relocate_section, m32r_elf_finish_dynamic_sections, m32r_elf_relax_section, m32r_elf_relax_delete_bytes, m32r_elf_get_relocated_section_contents): .. * elf32-m68hc11.c (m68hc11_elf_build_one_stub, m68hc11_elf_size_one_stub, m68hc11_elf_relax_section, m68hc11_elf_relax_delete_bytes): .. * elf32-m68hc12.c (m68hc12_elf_build_one_stub, m68hc12_elf_size_one_stub): .. * elf32-m68hc1x.c (elf32_m68hc11_size_stubs, elf32_m68hc11_build_stubs, m68hc11_elf_special_reloc): .. * elf32-m68k.c (elf_m68k_check_relocs, elf_m68k_gc_sweep_hook, elf_m68k_adjust_dynamic_symbol, elf_m68k_size_dynamic_sections, elf_m68k_discard_copies, elf_m68k_finish_dynamic_sections): .. * elf32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elf32-or32.c (or32_elf_consth_reloc): .. * elf32-ppc.c (ppc_elf_relax_section, ppc_elf_addr16_ha_reloc, elf_create_pointer_linker_section, ppc_elf_create_linker_section, ppc_elf_additional_program_headers, ppc_elf_adjust_dynamic_symbol, allocate_dynrelocs, ppc_elf_size_dynamic_sections, ppc_elf_finish_dynamic_sections, ppc_elf_grok_prstatus, ppc_elf_final_write_processing): .. * elf32-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections, elf_s390_grok_prstatus): .. * elf32-sh.c (sh_elf_reloc_loop, sh_elf_relax_section, sh_elf_relax_delete_bytes, sh_elf_align_loads, sh_elf_adjust_dynamic_symbol, allocate_dynrelocs, sh_elf_size_dynamic_sections, sh_elf_get_relocated_section_contents, sh_elf_finish_dynamic_sections, elf32_shlin_grok_prstatus): .. * elf32-sh64-com.c (sh64_address_in_cranges, sh64_get_contents_type): .. * elf32-sh64.c (sh64_find_section_for_address, sh64_elf_final_write_processing): .. * elf32-sparc.c (sparc_elf_wdisp16_reloc, sparc_elf_hix22_reloc, sparc_elf_lox10_reloc, elf32_sparc_adjust_dynamic_symbol, allocate_dynrelocs, elf32_sparc_size_dynamic_sections, elf32_sparc_relocate_section, elf32_sparc_finish_dynamic_sections): .. * elf32-v850.c (v850_elf_reloc, v850_elf_relax_section): .. * elf32-vax.c (elf_vax_check_relocs, elf_vax_adjust_dynamic_symbol, elf_vax_size_dynamic_sections, elf_vax_discard_copies, elf_vax_instantiate_got_entries, elf_vax_relocate_section, elf_vax_finish_dynamic_sections): .. * elf32-xstormy16.c (xstormy16_elf_24_reloc, xstormy16_elf_check_relocs, xstormy16_relax_plt_check, xstormy16_elf_relax_section, xstormy16_elf_always_size_sections, xstormy16_elf_finish_dynamic_sections): .. * elf32-xtensa.c (xtensa_read_table_entries, elf_xtensa_allocate_got_size, elf_xtensa_allocate_local_got_size, elf_xtensa_size_dynamic_sections, elf_xtensa_do_reloc, bfd_elf_xtensa_reloc, elf_xtensa_relocate_section, elf_xtensa_combine_prop_entries, elf_xtensa_finish_dynamic_sections, elf_xtensa_discard_info_for_section, elf_xtensa_grok_prstatus, get_relocation_opcode, retrieve_contents, find_relaxable_sections, collect_source_relocs, is_resolvable_asm_expansion, remove_literals, relax_section, shrink_dynamic_reloc_sections, relax_property_section, xtensa_callback_required_dependence): .. * elf64-alpha.c (elf64_alpha_reloc_gpdisp, elf64_alpha_relax_section, elf64_alpha_check_relocs, elf64_alpha_adjust_dynamic_symbol, elf64_alpha_calc_got_offsets_for_symbol, elf64_alpha_calc_got_offsets, elf64_alpha_size_plt_section, elf64_alpha_size_plt_section_1, elf64_alpha_always_size_sections, elf64_alpha_calc_dynrel_sizes, elf64_alpha_size_rela_got_section, elf64_alpha_size_rela_got_1, elf64_alpha_size_dynamic_sections, elf64_alpha_emit_dynrel, elf64_alpha_finish_dynamic_sections, elf64_alpha_final_link): .. * elf64-hppa.c (allocate_dynrel_entries, elf64_hppa_size_dynamic_sections, elf64_hppa_finish_dynamic_sections): .. * elf64-mips.c (mips_elf64_gprel32_reloc, mips16_gprel_reloc, mips_elf64_canonicalize_dynamic_reloc, mips_elf64_slurp_reloc_table, elf64_mips_grok_prstatus): .. * elf64-mmix.c (mmix_elf_perform_relocation, mmix_elf_reloc, mmix_elf_relocate_section, mmix_elf_final_link, mmix_set_relaxable_size, _bfd_mmix_after_linker_allocation, mmix_elf_relax_section, mmix_elf_get_section_contents): .. * elf64-ppc.c (ppc64_elf_object_p, ppc64_elf_grok_prstatus, ppc64_elf_check_relocs, ppc64_elf_func_desc_adjust, ppc64_elf_adjust_dynamic_symbol, ppc64_elf_edit_opd, allocate_dynrelocs, ppc64_elf_size_dynamic_sections, ppc_build_one_stub, ppc_size_one_stub, ppc64_elf_next_toc_section, toc_adjusting_stub_needed, group_sections, ppc64_elf_size_stubs, ppc64_elf_build_stubs, ppc64_elf_relocate_section, ppc64_elf_finish_dynamic_sections): .. * elf64-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections): .. * elf64-sh64.c (sh_elf64_get_relocated_section_contents, sh_elf64_check_relocs, sh64_elf64_adjust_dynamic_symbol, sh64_elf64_discard_copies, sh64_elf64_size_dynamic_sections, sh64_elf64_finish_dynamic_sections): .. * elf64-sparc.c (sparc64_elf_slurp_reloc_table, init_insn_reloc, sparc64_elf_check_relocs, sparc64_elf_adjust_dynamic_symbol, sparc64_elf_size_dynamic_sections, sparc64_elf_relocate_section, sparc64_elf_finish_dynamic_symbol, sparc64_elf_finish_dynamic_sections): .. * elf64-x86-64.c (elf64_x86_64_grok_prstatus, elf64_x86_64_adjust_dynamic_symbol, allocate_dynrelocs, elf64_x86_64_size_dynamic_sections, elf64_x86_64_relocate_section, elf64_x86_64_finish_dynamic_sections): .. * elfarm-nabi.c (elf32_arm_nabi_grok_prstatus): .. * elfcode.h (elf_slurp_reloc_table): .. * elflink.c (_bfd_elf_create_got_section, elf_add_dt_needed_tag, elf_finalize_dynstr, elf_link_add_object_symbols, bfd_elf_size_dynamic_sections, elf_link_sort_relocs, elf_link_input_bfd, bfd_elf_final_link, bfd_elf_discard_info): .. * elfn32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elfxx-ia64.c (elfNN_ia64_relax_section, allocate_dynrel_entries, elfNN_ia64_size_dynamic_sections, elfNN_ia64_install_dyn_reloc, elfNN_ia64_choose_gp, elfNN_ia64_final_link, elfNN_ia64_finish_dynamic_sections): .. * elfxx-mips.c (mips_elf_create_procedure_table, mips_elf_check_mips16_stubs, _bfd_mips_elf_gprel16_with_gp, _bfd_mips_elf_hi16_reloc, _bfd_mips_elf_generic_reloc, mips_elf_global_got_index, mips_elf_multi_got, mips_elf_create_compact_rel_section, mips_elf_calculate_relocation, mips_elf_allocate_dynamic_relocations, mips_elf_create_dynamic_relocation, _bfd_mips_elf_fake_sections, _bfd_mips_relax_section, _bfd_mips_elf_adjust_dynamic_symbol, _bfd_mips_elf_always_size_sections, _bfd_mips_elf_size_dynamic_sections, _bfd_mips_elf_finish_dynamic_symbol, _bfd_mips_elf_finish_dynamic_sections, _bfd_mips_elf_modify_segment_map, _bfd_mips_elf_discard_info, _bfd_mips_elf_write_section, _bfd_mips_elf_set_section_contents, _bfd_elf_mips_get_relocated_section_contents, _bfd_mips_elf_final_link, _bfd_mips_elf_merge_private_bfd_data): .. * hp300hpux.c (callback): .. * hppabsd-core.c (make_bfd_asection): .. * hpux-core.c (make_bfd_asection): .. * i386linux.c (linux_link_create_dynamic_sections, bfd_i386linux_size_dynamic_sections, linux_finish_dynamic_link): .. * i386msdos.c (msdos_write_object_contents): .. * i386os9k.c (os9k_callback, os9k_write_object_contents, os9k_set_section_contents): .. * ieee.c (parse_expression, ieee_slurp_external_symbols, ieee_slurp_sections, ieee_slurp_debug, ieee_slurp_section_data, ieee_write_section_part, do_with_relocs, do_as_repeat, do_without_relocs, ieee_write_debug_part, init_for_output, ieee_set_section_contents): .. * ihex.c (ihex_scan, ihex_read_section, ihex_get_section_contents): .. * irix-core.c (do_sections, make_bfd_asection): .. * libaout.h (aout_section_merge_with_text_p): .. * libbfd.c (_bfd_generic_get_section_contents, _bfd_generic_get_section_contents_in_window): .. * linker.c (default_indirect_link_order): .. * lynx-core.c (make_bfd_asection): .. * m68klinux.c (linux_link_create_dynamic_sections, bfd_m68klinux_size_dynamic_sections, linux_finish_dynamic_link): .. * mach-o.c (bfd_mach_o_make_bfd_section, bfd_mach_o_scan_read_dylinker, bfd_mach_o_scan_read_dylib, bfd_mach_o_scan_read_thread, bfd_mach_o_scan_read_symtab, bfd_mach_o_scan_read_segment): .. * merge.c (_bfd_add_merge_section, record_section, merge_strings, _bfd_merge_sections): .. * mmo.c (mmo_find_sec_w_addr, mmo_get_spec_section, mmo_get_loc, mmo_map_set_sizes, mmo_canonicalize_symtab, mmo_internal_write_section, mmo_write_object_contents): .. * netbsd-core.c (netbsd_core_file_p): .. * nlm32-alpha.c (nlm_alpha_read_reloc, nlm_alpha_write_import, nlm_alpha_set_public_section): .. * nlm32-ppc.c (nlm_powerpc_read_reloc, nlm_powerpc_write_reloc): .. * nlm32-sparc.c (nlm_sparc_write_import): .. * nlmcode.h (add_bfd_section, nlm_swap_auxiliary_headers_in, nlm_compute_section_file_positions): .. * oasys.c (oasys_object_p, oasys_slurp_section_data, oasys_write_sections, oasys_write_data, oasys_set_section_contents): .. * opncls.c (get_debug_link_info): .. * osf-core.c (make_bfd_asection): .. * pdp11.c (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, squirt_out_relocs, final_link, aout_link_input_section): .. * peXXigen.c (_bfd_XXi_swap_sym_in, _bfd_XXi_swap_aouthdr_out, pe_print_idata, pe_print_edata, pe_print_pdata, pe_print_reloc): .. * pef.c (bfd_pef_make_bfd_section, bfd_pef_print_loader_section, bfd_pef_scan_start_address, bfd_pef_parse_symbols): .. * ppcboot.c (ppcboot_object_p, ppcboot_canonicalize_symtab): .. * ptrace-core.c (ptrace_unix_core_file_p): .. * reloc.c (bfd_perform_relocation, bfd_install_relocation, _bfd_final_link_relocate, bfd_generic_relax_section, bfd_generic_get_relocated_section_contents): .. * reloc16.c (bfd_coff_reloc16_relax_section, bfd_coff_reloc16_get_relocated_section_c): .. * riscix.c (riscix_some_aout_object_p): .. * rs6000-core.c (read_hdr, make_bfd_asection): .. * sco5-core.c (make_bfd_asection): .. * simple.c (bfd_simple_get_relocated_section_contents): .. * som.c (som_object_setup, setup_sections, som_prep_headers, som_write_fixups, som_begin_writing, bfd_section_from_som_symbol, som_set_reloc_info, som_get_section_contents, som_bfd_link_split_section): .. * sparclinux.c (linux_link_create_dynamic_sections, bfd_sparclinux_size_dynamic_sections, linux_finish_dynamic_link): .. * srec.c (srec_scan, srec_read_section, srec_get_section_contents): .. * stabs.c (_bfd_link_section_stabs, _bfd_discard_section_stabs, _bfd_write_stab_strings, _bfd_stab_section_offset): .. * sunos.c (sunos_read_dynamic_info, sunos_create_dynamic_sections, bfd_sunos_size_dynamic_sections, sunos_scan_std_relocs, sunos_scan_ext_relocs, sunos_scan_dynamic_symbol, sunos_write_dynamic_symbol, sunos_check_dynamic_reloc, sunos_finish_dynamic_link): .. * syms.c (_bfd_stab_section_find_nearest_line): .. * tekhex.c (first_phase, tekhex_set_section_contents, tekhex_write_object_contents): .. * trad-core.c (trad_unix_core_file_p): .. * versados.c (process_esd, process_otr, process_otr): .. * vms-gsd.c (_bfd_vms_slurp_gsd, _bfd_vms_write_gsd): .. * vms-misc.c (add_new_contents): .. * vms-tir.c (check_section, new_section, _bfd_vms_write_tir): .. * vms.c (vms_set_section_contents): .. * xcofflink.c (xcoff_get_section_contents, xcoff_link_add_symbols, xcoff_sweep, bfd_xcoff_size_dynamic_sections, xcoff_build_ldsyms, _bfd_xcoff_bfd_final_link, xcoff_link_input_bfd): .. * xsym.c (bfd_sym_scan): .. See above. binutils/ * objcopy.c (copy_section): Don't set _cooked_size. include/ * bfdlink.h (struct bfd_link_order): Update comment. ld/ * ldlang.c (print_output_section_statement): Don't print size before relaxation. (IGNORE_SECTION): Remove bfd arg. Update all callers. * ldexp.c (fold_name): .. See below. * ldlang.c (section_already_linked, print_output_section_statement, print_input_section, insert_pad, size_input_section, lang_check_section_addresses, lang_size_sections_1, lang_size_sections, lang_do_assignments_1, lang_set_startof, lang_one_common, lang_reset_memory_regions, lang_process, lang_abs_symbol_at_end_of, lang_do_version_exports_section): .. * ldwrite.c (build_link_order, clone_section, ds, split_sections): .. * pe-dll.c (process_def_file, generate_reloc): .. * emultempl/elf32.em (gld${EMULATION_NAME}_find_statement_assignment, gld${EMULATION_NAME}_before_allocation): .. * emultempl/mmix-elfnmmo.em (mmix_after_allocation): .. * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_before_allocation, sh64_elf_${EMULATION_NAME}_after_allocation): .. * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): .. * emultempl/xtensaelf.em (ld_assign_relative_paged_dot, ld_local_file_relocations_fit, ld_xtensa_insert_page_offsets): Use "size" instead of "_raw_size" and "_cooked_size". Expand bfd_section_size macro invocations.
2004-06-24 06:46:28 +02:00
unsigned int size;
switch (note->descsz)
{
default:
return FALSE;
case 480: /* Linux/MIPS - N64 kernel */
/* pr_cursig */
elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
/* pr_pid */
elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 32);
/* pr_reg */
offset = 112;
bfd/ * section.c (struct sec): Rename "_cooked_size" to "size". Rename "_raw_size" to "rawsize". (STD_SECTION): Adjust comments. (bfd_set_section_size, bfd_get_section_contents): Use size. (bfd_malloc_and_get_section): New function. * bfd-in.h (bfd_section_size, bfd_get_section_size): Use size. * coff-sh.c (sh_relax_section): Alloc coff_section_data struct early. Correctly free reloc and contents memory. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Delete FIXME and fake CIE now that we can shink section size to zero. (_bfd_elf_write_section_eh_frame): Likewise.. * elf32-ppc.c (ppc_elf_relax_section): Delay reading section contents. * elf-m10300.c (mn10300_elf_final_link_relocate): Don't use _bfd_stab_section_offset. Use _bfd_elf_section_offset. * stabs.c (_bfd_stab_section_offset_): Remove unused args and unneeded indirection. * elf.c (_bfd_elf_section_offset): .. and update call. * libbfd-in.h (_bfd_stab_section_offset): Update prototype. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. Replace occurrences of "_raw_size" and "_cooked_size" in most places with "size". Set new "rawsize" for stabs, eh_frame, and SEC_MERGE sections. Use "rawsize", if non-zero, for bfd_get_section_contents calls if the section might be a stabs, eh_frame, or SEC_MERGE section. Similarly use "rawsize", if non-zero, in reloc functions to validate reloc addresses. Use new bfd_malloc_and_get_section in most places where bfd_get_section_contents was called. Expand all occurrences of bfd_section_size and bfd_get_section_size. Rename "raw_size" var in grok_prstatus and similar functions to "size". * aix386-core.c (aix386_core_file_p): .. * aix5ppc-core.c (xcoff64_core_p): .. * aout-adobe.c (aout_adobe_callback, aout_adobe_write_object_contents, aout_adobe_set_section_contents): .. * aout-target.h (callback): .. * aout-tic30.c (tic30_aout_callback, tic30_aout_final_link_relocate, MY_bfd_final_link): .. * aoutf1.h (sunos4_core_file_p): .. * aoutx.h (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, translate_from_native_sym_flags, final_link, aout_link_input_section): .. * binary.c (binary_object_p, binary_canonicalize_symtab, binary_set_section_contents): .. * bout.c (b_out_callback, b_out_write_object_contents, b_out_set_section_contents, b_out_bfd_relax_section, b_out_bfd_get_relocated_section_contents): .. * cisco-core.c (cisco_core_file_validate): .. * coff-alpha.c (alpha_ecoff_object_p, alpha_ecoff_get_relocated_section_conten, alpha_relocate_section): .. * coff-arm.c (coff_arm_relocate_section, bfd_arm_allocate_interworking_sections): .. * coff-h8300.c (h8300_reloc16_extra_cases, h8300_bfd_link_add_symbols): .. * coff-mips.c (mips_refhi_reloc, mips_gprel_reloc): .. * coff-ppc.c (coff_ppc_relocate_section, ppc_allocate_toc_section, ppc_bfd_coff_final_link): .. * coff-rs6000.c (xcoff_reloc_type_br, xcoff_ppc_relocate_section): .. * coff-sh.c (sh_relax_section, sh_relax_delete_bytes, sh_align_loads, sh_coff_get_relocated_section_contents): .. * coff64-rs6000.c (xcoff64_write_object_contents, xcoff64_reloc_type_br, xcoff64_ppc_relocate_section): .. * coffcode.h (coff_compute_section_file_positions, coff_write_object_contents): .. * coffgen.c (make_a_section_from_file, coff_write_symbols, coff_section_symbol, build_debug_section): .. * cofflink.c (coff_link_add_symbols, _bfd_coff_final_link, process_embedded_commands, _bfd_coff_link_input_bfd, _bfd_coff_write_global_sym): .. * cpu-arm.c (bfd_arm_update_notes, bfd_arm_get_mach_from_notes): .. * cpu-ns32k.c (do_ns32k_reloc, _bfd_ns32k_final_link_relocate): .. * dwarf1.c (parse_line_table, _bfd_dwarf1_find_nearest_line): .. * dwarf2.c (read_indirect_string, read_abbrevs, decode_line_info, _bfd_dwarf2_find_nearest_line): .. * ecoff.c (bfd_debug_section, ecoff_set_symbol_info, ecoff_compute_section_file_positions, _bfd_ecoff_write_object_contents, ecoff_indirect_link_order): .. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame, _bfd_elf_discard_section_eh_frame_hdr, _bfd_elf_maybe_strip_eh_frame_hdr, _bfd_elf_eh_frame_section_offset, _bfd_elf_write_section_eh_frame, _bfd_elf_write_section_eh_frame_hdr): .. * elf-hppa.h (elf_hppa_sort_unwind): .. * elf-m10200.c (mn10200_elf_relax_section, mn10200_elf_relax_delete_bytes, mn10200_elf_get_relocated_section_contents): .. * elf-m10300.c (_bfd_mn10300_elf_create_got_section, mn10300_elf_check_relocs, mn10300_elf_relax_section, mn10300_elf_relax_delete_bytes, mn10300_elf_get_relocated_section_contents, _bfd_mn10300_elf_adjust_dynamic_symbol, _bfd_mn10300_elf_discard_copies, _bfd_mn10300_elf_size_dynamic_sections, _bfd_mn10300_elf_finish_dynamic_sections): .. * elf.c (_bfd_elf_print_private_bfd_data, bfd_elf_get_bfd_needed_list, _bfd_elf_make_section_from_phdr, elf_fake_sections, bfd_elf_set_group_contents, map_sections_to_segments, elf_sort_sections, assign_file_positions_for_segments, SECTION_SIZE, copy_private_bfd_data, _bfd_elf_get_dynamic_reloc_upper_bound, _bfd_elf_canonicalize_dynamic_reloc, elfcore_maybe_make_sect, _bfd_elfcore_make_pseudosection, elfcore_grok_prstatus, elfcore_grok_lwpstatus, elfcore_grok_win32pstatus, elfcore_grok_note, elfcore_grok_nto_status, elfcore_grok_nto_gregs, _bfd_elf_rel_local_sym, _bfd_elf_get_synthetic_symtab): .. * elf32-arm.h (bfd_elf32_arm_allocate_interworking_sect, bfd_elf32_arm_process_before_allocation, elf32_arm_adjust_dynamic_symbol, allocate_dynrelocs, elf32_arm_size_dynamic_sections, elf32_arm_finish_dynamic_sections, elf32_arm_write_section): .. * elf32-cris.c (cris_elf_grok_prstatus, elf_cris_finish_dynamic_sections, cris_elf_gc_sweep_hook, elf_cris_adjust_gotplt_to_got, elf_cris_adjust_dynamic_symbol, cris_elf_check_relocs, elf_cris_size_dynamic_sections, elf_cris_discard_excess_dso_dynamics, elf_cris_discard_excess_program_dynamics): .. * elf32-d30v.c (bfd_elf_d30v_reloc, bfd_elf_d30v_reloc_21): .. * elf32-dlx.c (_bfd_dlx_elf_hi16_reloc): .. * elf32-frv.c (_frvfdpic_add_dyn_reloc, _frvfdpic_add_rofixup, _frv_create_got_section, _frvfdpic_assign_plt_entries, elf32_frvfdpic_size_dynamic_sections, elf32_frvfdpic_modify_segment_map, elf32_frvfdpic_finish_dynamic_sections): .. * elf32-h8300.c (elf32_h8_relax_section, elf32_h8_relax_delete_bytes, elf32_h8_get_relocated_section_contents): .. * elf32-hppa.c (hppa_build_one_stub, hppa_size_one_stub, elf32_hppa_adjust_dynamic_symbol, allocate_plt_static, allocate_dynrelocs, elf32_hppa_size_dynamic_sections, group_sections, elf32_hppa_size_stubs, elf32_hppa_set_gp, elf32_hppa_build_stubs, elf32_hppa_finish_dynamic_sections): .. * elf32-i370.c (i370_elf_adjust_dynamic_symbol, i370_elf_size_dynamic_sections, i370_elf_check_relocs, i370_elf_finish_dynamic_sections): .. * elf32-i386.c (elf_i386_grok_prstatus, elf_i386_adjust_dynamic_symbol, allocate_dynrelocs, elf_i386_size_dynamic_sections, elf_i386_relocate_section, elf_i386_finish_dynamic_sections): .. * elf32-i860.c (i860_howto_pc26_reloc, i860_howto_pc16_reloc, i860_howto_highadj_reloc, i860_howto_splitn_reloc): .. * elf32-ip2k.c (ip2k_is_switch_table_128, ip2k_relax_switch_table_128, ip2k_is_switch_table_256, ip2k_relax_switch_table_256, ip2k_elf_relax_section, adjust_all_relocations, ip2k_elf_relax_delete_bytes): .. * elf32-m32r.c (m32r_elf_do_10_pcrel_reloc, m32r_elf_hi16_reloc, m32r_elf_generic_reloc, m32r_elf_adjust_dynamic_symbol, allocate_dynrelocs, m32r_elf_size_dynamic_sections, m32r_elf_relocate_section, m32r_elf_finish_dynamic_sections, m32r_elf_relax_section, m32r_elf_relax_delete_bytes, m32r_elf_get_relocated_section_contents): .. * elf32-m68hc11.c (m68hc11_elf_build_one_stub, m68hc11_elf_size_one_stub, m68hc11_elf_relax_section, m68hc11_elf_relax_delete_bytes): .. * elf32-m68hc12.c (m68hc12_elf_build_one_stub, m68hc12_elf_size_one_stub): .. * elf32-m68hc1x.c (elf32_m68hc11_size_stubs, elf32_m68hc11_build_stubs, m68hc11_elf_special_reloc): .. * elf32-m68k.c (elf_m68k_check_relocs, elf_m68k_gc_sweep_hook, elf_m68k_adjust_dynamic_symbol, elf_m68k_size_dynamic_sections, elf_m68k_discard_copies, elf_m68k_finish_dynamic_sections): .. * elf32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elf32-or32.c (or32_elf_consth_reloc): .. * elf32-ppc.c (ppc_elf_relax_section, ppc_elf_addr16_ha_reloc, elf_create_pointer_linker_section, ppc_elf_create_linker_section, ppc_elf_additional_program_headers, ppc_elf_adjust_dynamic_symbol, allocate_dynrelocs, ppc_elf_size_dynamic_sections, ppc_elf_finish_dynamic_sections, ppc_elf_grok_prstatus, ppc_elf_final_write_processing): .. * elf32-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections, elf_s390_grok_prstatus): .. * elf32-sh.c (sh_elf_reloc_loop, sh_elf_relax_section, sh_elf_relax_delete_bytes, sh_elf_align_loads, sh_elf_adjust_dynamic_symbol, allocate_dynrelocs, sh_elf_size_dynamic_sections, sh_elf_get_relocated_section_contents, sh_elf_finish_dynamic_sections, elf32_shlin_grok_prstatus): .. * elf32-sh64-com.c (sh64_address_in_cranges, sh64_get_contents_type): .. * elf32-sh64.c (sh64_find_section_for_address, sh64_elf_final_write_processing): .. * elf32-sparc.c (sparc_elf_wdisp16_reloc, sparc_elf_hix22_reloc, sparc_elf_lox10_reloc, elf32_sparc_adjust_dynamic_symbol, allocate_dynrelocs, elf32_sparc_size_dynamic_sections, elf32_sparc_relocate_section, elf32_sparc_finish_dynamic_sections): .. * elf32-v850.c (v850_elf_reloc, v850_elf_relax_section): .. * elf32-vax.c (elf_vax_check_relocs, elf_vax_adjust_dynamic_symbol, elf_vax_size_dynamic_sections, elf_vax_discard_copies, elf_vax_instantiate_got_entries, elf_vax_relocate_section, elf_vax_finish_dynamic_sections): .. * elf32-xstormy16.c (xstormy16_elf_24_reloc, xstormy16_elf_check_relocs, xstormy16_relax_plt_check, xstormy16_elf_relax_section, xstormy16_elf_always_size_sections, xstormy16_elf_finish_dynamic_sections): .. * elf32-xtensa.c (xtensa_read_table_entries, elf_xtensa_allocate_got_size, elf_xtensa_allocate_local_got_size, elf_xtensa_size_dynamic_sections, elf_xtensa_do_reloc, bfd_elf_xtensa_reloc, elf_xtensa_relocate_section, elf_xtensa_combine_prop_entries, elf_xtensa_finish_dynamic_sections, elf_xtensa_discard_info_for_section, elf_xtensa_grok_prstatus, get_relocation_opcode, retrieve_contents, find_relaxable_sections, collect_source_relocs, is_resolvable_asm_expansion, remove_literals, relax_section, shrink_dynamic_reloc_sections, relax_property_section, xtensa_callback_required_dependence): .. * elf64-alpha.c (elf64_alpha_reloc_gpdisp, elf64_alpha_relax_section, elf64_alpha_check_relocs, elf64_alpha_adjust_dynamic_symbol, elf64_alpha_calc_got_offsets_for_symbol, elf64_alpha_calc_got_offsets, elf64_alpha_size_plt_section, elf64_alpha_size_plt_section_1, elf64_alpha_always_size_sections, elf64_alpha_calc_dynrel_sizes, elf64_alpha_size_rela_got_section, elf64_alpha_size_rela_got_1, elf64_alpha_size_dynamic_sections, elf64_alpha_emit_dynrel, elf64_alpha_finish_dynamic_sections, elf64_alpha_final_link): .. * elf64-hppa.c (allocate_dynrel_entries, elf64_hppa_size_dynamic_sections, elf64_hppa_finish_dynamic_sections): .. * elf64-mips.c (mips_elf64_gprel32_reloc, mips16_gprel_reloc, mips_elf64_canonicalize_dynamic_reloc, mips_elf64_slurp_reloc_table, elf64_mips_grok_prstatus): .. * elf64-mmix.c (mmix_elf_perform_relocation, mmix_elf_reloc, mmix_elf_relocate_section, mmix_elf_final_link, mmix_set_relaxable_size, _bfd_mmix_after_linker_allocation, mmix_elf_relax_section, mmix_elf_get_section_contents): .. * elf64-ppc.c (ppc64_elf_object_p, ppc64_elf_grok_prstatus, ppc64_elf_check_relocs, ppc64_elf_func_desc_adjust, ppc64_elf_adjust_dynamic_symbol, ppc64_elf_edit_opd, allocate_dynrelocs, ppc64_elf_size_dynamic_sections, ppc_build_one_stub, ppc_size_one_stub, ppc64_elf_next_toc_section, toc_adjusting_stub_needed, group_sections, ppc64_elf_size_stubs, ppc64_elf_build_stubs, ppc64_elf_relocate_section, ppc64_elf_finish_dynamic_sections): .. * elf64-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections): .. * elf64-sh64.c (sh_elf64_get_relocated_section_contents, sh_elf64_check_relocs, sh64_elf64_adjust_dynamic_symbol, sh64_elf64_discard_copies, sh64_elf64_size_dynamic_sections, sh64_elf64_finish_dynamic_sections): .. * elf64-sparc.c (sparc64_elf_slurp_reloc_table, init_insn_reloc, sparc64_elf_check_relocs, sparc64_elf_adjust_dynamic_symbol, sparc64_elf_size_dynamic_sections, sparc64_elf_relocate_section, sparc64_elf_finish_dynamic_symbol, sparc64_elf_finish_dynamic_sections): .. * elf64-x86-64.c (elf64_x86_64_grok_prstatus, elf64_x86_64_adjust_dynamic_symbol, allocate_dynrelocs, elf64_x86_64_size_dynamic_sections, elf64_x86_64_relocate_section, elf64_x86_64_finish_dynamic_sections): .. * elfarm-nabi.c (elf32_arm_nabi_grok_prstatus): .. * elfcode.h (elf_slurp_reloc_table): .. * elflink.c (_bfd_elf_create_got_section, elf_add_dt_needed_tag, elf_finalize_dynstr, elf_link_add_object_symbols, bfd_elf_size_dynamic_sections, elf_link_sort_relocs, elf_link_input_bfd, bfd_elf_final_link, bfd_elf_discard_info): .. * elfn32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elfxx-ia64.c (elfNN_ia64_relax_section, allocate_dynrel_entries, elfNN_ia64_size_dynamic_sections, elfNN_ia64_install_dyn_reloc, elfNN_ia64_choose_gp, elfNN_ia64_final_link, elfNN_ia64_finish_dynamic_sections): .. * elfxx-mips.c (mips_elf_create_procedure_table, mips_elf_check_mips16_stubs, _bfd_mips_elf_gprel16_with_gp, _bfd_mips_elf_hi16_reloc, _bfd_mips_elf_generic_reloc, mips_elf_global_got_index, mips_elf_multi_got, mips_elf_create_compact_rel_section, mips_elf_calculate_relocation, mips_elf_allocate_dynamic_relocations, mips_elf_create_dynamic_relocation, _bfd_mips_elf_fake_sections, _bfd_mips_relax_section, _bfd_mips_elf_adjust_dynamic_symbol, _bfd_mips_elf_always_size_sections, _bfd_mips_elf_size_dynamic_sections, _bfd_mips_elf_finish_dynamic_symbol, _bfd_mips_elf_finish_dynamic_sections, _bfd_mips_elf_modify_segment_map, _bfd_mips_elf_discard_info, _bfd_mips_elf_write_section, _bfd_mips_elf_set_section_contents, _bfd_elf_mips_get_relocated_section_contents, _bfd_mips_elf_final_link, _bfd_mips_elf_merge_private_bfd_data): .. * hp300hpux.c (callback): .. * hppabsd-core.c (make_bfd_asection): .. * hpux-core.c (make_bfd_asection): .. * i386linux.c (linux_link_create_dynamic_sections, bfd_i386linux_size_dynamic_sections, linux_finish_dynamic_link): .. * i386msdos.c (msdos_write_object_contents): .. * i386os9k.c (os9k_callback, os9k_write_object_contents, os9k_set_section_contents): .. * ieee.c (parse_expression, ieee_slurp_external_symbols, ieee_slurp_sections, ieee_slurp_debug, ieee_slurp_section_data, ieee_write_section_part, do_with_relocs, do_as_repeat, do_without_relocs, ieee_write_debug_part, init_for_output, ieee_set_section_contents): .. * ihex.c (ihex_scan, ihex_read_section, ihex_get_section_contents): .. * irix-core.c (do_sections, make_bfd_asection): .. * libaout.h (aout_section_merge_with_text_p): .. * libbfd.c (_bfd_generic_get_section_contents, _bfd_generic_get_section_contents_in_window): .. * linker.c (default_indirect_link_order): .. * lynx-core.c (make_bfd_asection): .. * m68klinux.c (linux_link_create_dynamic_sections, bfd_m68klinux_size_dynamic_sections, linux_finish_dynamic_link): .. * mach-o.c (bfd_mach_o_make_bfd_section, bfd_mach_o_scan_read_dylinker, bfd_mach_o_scan_read_dylib, bfd_mach_o_scan_read_thread, bfd_mach_o_scan_read_symtab, bfd_mach_o_scan_read_segment): .. * merge.c (_bfd_add_merge_section, record_section, merge_strings, _bfd_merge_sections): .. * mmo.c (mmo_find_sec_w_addr, mmo_get_spec_section, mmo_get_loc, mmo_map_set_sizes, mmo_canonicalize_symtab, mmo_internal_write_section, mmo_write_object_contents): .. * netbsd-core.c (netbsd_core_file_p): .. * nlm32-alpha.c (nlm_alpha_read_reloc, nlm_alpha_write_import, nlm_alpha_set_public_section): .. * nlm32-ppc.c (nlm_powerpc_read_reloc, nlm_powerpc_write_reloc): .. * nlm32-sparc.c (nlm_sparc_write_import): .. * nlmcode.h (add_bfd_section, nlm_swap_auxiliary_headers_in, nlm_compute_section_file_positions): .. * oasys.c (oasys_object_p, oasys_slurp_section_data, oasys_write_sections, oasys_write_data, oasys_set_section_contents): .. * opncls.c (get_debug_link_info): .. * osf-core.c (make_bfd_asection): .. * pdp11.c (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, squirt_out_relocs, final_link, aout_link_input_section): .. * peXXigen.c (_bfd_XXi_swap_sym_in, _bfd_XXi_swap_aouthdr_out, pe_print_idata, pe_print_edata, pe_print_pdata, pe_print_reloc): .. * pef.c (bfd_pef_make_bfd_section, bfd_pef_print_loader_section, bfd_pef_scan_start_address, bfd_pef_parse_symbols): .. * ppcboot.c (ppcboot_object_p, ppcboot_canonicalize_symtab): .. * ptrace-core.c (ptrace_unix_core_file_p): .. * reloc.c (bfd_perform_relocation, bfd_install_relocation, _bfd_final_link_relocate, bfd_generic_relax_section, bfd_generic_get_relocated_section_contents): .. * reloc16.c (bfd_coff_reloc16_relax_section, bfd_coff_reloc16_get_relocated_section_c): .. * riscix.c (riscix_some_aout_object_p): .. * rs6000-core.c (read_hdr, make_bfd_asection): .. * sco5-core.c (make_bfd_asection): .. * simple.c (bfd_simple_get_relocated_section_contents): .. * som.c (som_object_setup, setup_sections, som_prep_headers, som_write_fixups, som_begin_writing, bfd_section_from_som_symbol, som_set_reloc_info, som_get_section_contents, som_bfd_link_split_section): .. * sparclinux.c (linux_link_create_dynamic_sections, bfd_sparclinux_size_dynamic_sections, linux_finish_dynamic_link): .. * srec.c (srec_scan, srec_read_section, srec_get_section_contents): .. * stabs.c (_bfd_link_section_stabs, _bfd_discard_section_stabs, _bfd_write_stab_strings, _bfd_stab_section_offset): .. * sunos.c (sunos_read_dynamic_info, sunos_create_dynamic_sections, bfd_sunos_size_dynamic_sections, sunos_scan_std_relocs, sunos_scan_ext_relocs, sunos_scan_dynamic_symbol, sunos_write_dynamic_symbol, sunos_check_dynamic_reloc, sunos_finish_dynamic_link): .. * syms.c (_bfd_stab_section_find_nearest_line): .. * tekhex.c (first_phase, tekhex_set_section_contents, tekhex_write_object_contents): .. * trad-core.c (trad_unix_core_file_p): .. * versados.c (process_esd, process_otr, process_otr): .. * vms-gsd.c (_bfd_vms_slurp_gsd, _bfd_vms_write_gsd): .. * vms-misc.c (add_new_contents): .. * vms-tir.c (check_section, new_section, _bfd_vms_write_tir): .. * vms.c (vms_set_section_contents): .. * xcofflink.c (xcoff_get_section_contents, xcoff_link_add_symbols, xcoff_sweep, bfd_xcoff_size_dynamic_sections, xcoff_build_ldsyms, _bfd_xcoff_bfd_final_link, xcoff_link_input_bfd): .. * xsym.c (bfd_sym_scan): .. See above. binutils/ * objcopy.c (copy_section): Don't set _cooked_size. include/ * bfdlink.h (struct bfd_link_order): Update comment. ld/ * ldlang.c (print_output_section_statement): Don't print size before relaxation. (IGNORE_SECTION): Remove bfd arg. Update all callers. * ldexp.c (fold_name): .. See below. * ldlang.c (section_already_linked, print_output_section_statement, print_input_section, insert_pad, size_input_section, lang_check_section_addresses, lang_size_sections_1, lang_size_sections, lang_do_assignments_1, lang_set_startof, lang_one_common, lang_reset_memory_regions, lang_process, lang_abs_symbol_at_end_of, lang_do_version_exports_section): .. * ldwrite.c (build_link_order, clone_section, ds, split_sections): .. * pe-dll.c (process_def_file, generate_reloc): .. * emultempl/elf32.em (gld${EMULATION_NAME}_find_statement_assignment, gld${EMULATION_NAME}_before_allocation): .. * emultempl/mmix-elfnmmo.em (mmix_after_allocation): .. * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_before_allocation, sh64_elf_${EMULATION_NAME}_after_allocation): .. * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): .. * emultempl/xtensaelf.em (ld_assign_relative_paged_dot, ld_local_file_relocations_fit, ld_xtensa_insert_page_offsets): Use "size" instead of "_raw_size" and "_cooked_size". Expand bfd_section_size macro invocations.
2004-06-24 06:46:28 +02:00
size = 360;
break;
}
/* Make a ".reg/999" section. */
return _bfd_elfcore_make_pseudosection (abfd, ".reg",
bfd/ * section.c (struct sec): Rename "_cooked_size" to "size". Rename "_raw_size" to "rawsize". (STD_SECTION): Adjust comments. (bfd_set_section_size, bfd_get_section_contents): Use size. (bfd_malloc_and_get_section): New function. * bfd-in.h (bfd_section_size, bfd_get_section_size): Use size. * coff-sh.c (sh_relax_section): Alloc coff_section_data struct early. Correctly free reloc and contents memory. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Delete FIXME and fake CIE now that we can shink section size to zero. (_bfd_elf_write_section_eh_frame): Likewise.. * elf32-ppc.c (ppc_elf_relax_section): Delay reading section contents. * elf-m10300.c (mn10300_elf_final_link_relocate): Don't use _bfd_stab_section_offset. Use _bfd_elf_section_offset. * stabs.c (_bfd_stab_section_offset_): Remove unused args and unneeded indirection. * elf.c (_bfd_elf_section_offset): .. and update call. * libbfd-in.h (_bfd_stab_section_offset): Update prototype. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. Replace occurrences of "_raw_size" and "_cooked_size" in most places with "size". Set new "rawsize" for stabs, eh_frame, and SEC_MERGE sections. Use "rawsize", if non-zero, for bfd_get_section_contents calls if the section might be a stabs, eh_frame, or SEC_MERGE section. Similarly use "rawsize", if non-zero, in reloc functions to validate reloc addresses. Use new bfd_malloc_and_get_section in most places where bfd_get_section_contents was called. Expand all occurrences of bfd_section_size and bfd_get_section_size. Rename "raw_size" var in grok_prstatus and similar functions to "size". * aix386-core.c (aix386_core_file_p): .. * aix5ppc-core.c (xcoff64_core_p): .. * aout-adobe.c (aout_adobe_callback, aout_adobe_write_object_contents, aout_adobe_set_section_contents): .. * aout-target.h (callback): .. * aout-tic30.c (tic30_aout_callback, tic30_aout_final_link_relocate, MY_bfd_final_link): .. * aoutf1.h (sunos4_core_file_p): .. * aoutx.h (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, translate_from_native_sym_flags, final_link, aout_link_input_section): .. * binary.c (binary_object_p, binary_canonicalize_symtab, binary_set_section_contents): .. * bout.c (b_out_callback, b_out_write_object_contents, b_out_set_section_contents, b_out_bfd_relax_section, b_out_bfd_get_relocated_section_contents): .. * cisco-core.c (cisco_core_file_validate): .. * coff-alpha.c (alpha_ecoff_object_p, alpha_ecoff_get_relocated_section_conten, alpha_relocate_section): .. * coff-arm.c (coff_arm_relocate_section, bfd_arm_allocate_interworking_sections): .. * coff-h8300.c (h8300_reloc16_extra_cases, h8300_bfd_link_add_symbols): .. * coff-mips.c (mips_refhi_reloc, mips_gprel_reloc): .. * coff-ppc.c (coff_ppc_relocate_section, ppc_allocate_toc_section, ppc_bfd_coff_final_link): .. * coff-rs6000.c (xcoff_reloc_type_br, xcoff_ppc_relocate_section): .. * coff-sh.c (sh_relax_section, sh_relax_delete_bytes, sh_align_loads, sh_coff_get_relocated_section_contents): .. * coff64-rs6000.c (xcoff64_write_object_contents, xcoff64_reloc_type_br, xcoff64_ppc_relocate_section): .. * coffcode.h (coff_compute_section_file_positions, coff_write_object_contents): .. * coffgen.c (make_a_section_from_file, coff_write_symbols, coff_section_symbol, build_debug_section): .. * cofflink.c (coff_link_add_symbols, _bfd_coff_final_link, process_embedded_commands, _bfd_coff_link_input_bfd, _bfd_coff_write_global_sym): .. * cpu-arm.c (bfd_arm_update_notes, bfd_arm_get_mach_from_notes): .. * cpu-ns32k.c (do_ns32k_reloc, _bfd_ns32k_final_link_relocate): .. * dwarf1.c (parse_line_table, _bfd_dwarf1_find_nearest_line): .. * dwarf2.c (read_indirect_string, read_abbrevs, decode_line_info, _bfd_dwarf2_find_nearest_line): .. * ecoff.c (bfd_debug_section, ecoff_set_symbol_info, ecoff_compute_section_file_positions, _bfd_ecoff_write_object_contents, ecoff_indirect_link_order): .. * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame, _bfd_elf_discard_section_eh_frame_hdr, _bfd_elf_maybe_strip_eh_frame_hdr, _bfd_elf_eh_frame_section_offset, _bfd_elf_write_section_eh_frame, _bfd_elf_write_section_eh_frame_hdr): .. * elf-hppa.h (elf_hppa_sort_unwind): .. * elf-m10200.c (mn10200_elf_relax_section, mn10200_elf_relax_delete_bytes, mn10200_elf_get_relocated_section_contents): .. * elf-m10300.c (_bfd_mn10300_elf_create_got_section, mn10300_elf_check_relocs, mn10300_elf_relax_section, mn10300_elf_relax_delete_bytes, mn10300_elf_get_relocated_section_contents, _bfd_mn10300_elf_adjust_dynamic_symbol, _bfd_mn10300_elf_discard_copies, _bfd_mn10300_elf_size_dynamic_sections, _bfd_mn10300_elf_finish_dynamic_sections): .. * elf.c (_bfd_elf_print_private_bfd_data, bfd_elf_get_bfd_needed_list, _bfd_elf_make_section_from_phdr, elf_fake_sections, bfd_elf_set_group_contents, map_sections_to_segments, elf_sort_sections, assign_file_positions_for_segments, SECTION_SIZE, copy_private_bfd_data, _bfd_elf_get_dynamic_reloc_upper_bound, _bfd_elf_canonicalize_dynamic_reloc, elfcore_maybe_make_sect, _bfd_elfcore_make_pseudosection, elfcore_grok_prstatus, elfcore_grok_lwpstatus, elfcore_grok_win32pstatus, elfcore_grok_note, elfcore_grok_nto_status, elfcore_grok_nto_gregs, _bfd_elf_rel_local_sym, _bfd_elf_get_synthetic_symtab): .. * elf32-arm.h (bfd_elf32_arm_allocate_interworking_sect, bfd_elf32_arm_process_before_allocation, elf32_arm_adjust_dynamic_symbol, allocate_dynrelocs, elf32_arm_size_dynamic_sections, elf32_arm_finish_dynamic_sections, elf32_arm_write_section): .. * elf32-cris.c (cris_elf_grok_prstatus, elf_cris_finish_dynamic_sections, cris_elf_gc_sweep_hook, elf_cris_adjust_gotplt_to_got, elf_cris_adjust_dynamic_symbol, cris_elf_check_relocs, elf_cris_size_dynamic_sections, elf_cris_discard_excess_dso_dynamics, elf_cris_discard_excess_program_dynamics): .. * elf32-d30v.c (bfd_elf_d30v_reloc, bfd_elf_d30v_reloc_21): .. * elf32-dlx.c (_bfd_dlx_elf_hi16_reloc): .. * elf32-frv.c (_frvfdpic_add_dyn_reloc, _frvfdpic_add_rofixup, _frv_create_got_section, _frvfdpic_assign_plt_entries, elf32_frvfdpic_size_dynamic_sections, elf32_frvfdpic_modify_segment_map, elf32_frvfdpic_finish_dynamic_sections): .. * elf32-h8300.c (elf32_h8_relax_section, elf32_h8_relax_delete_bytes, elf32_h8_get_relocated_section_contents): .. * elf32-hppa.c (hppa_build_one_stub, hppa_size_one_stub, elf32_hppa_adjust_dynamic_symbol, allocate_plt_static, allocate_dynrelocs, elf32_hppa_size_dynamic_sections, group_sections, elf32_hppa_size_stubs, elf32_hppa_set_gp, elf32_hppa_build_stubs, elf32_hppa_finish_dynamic_sections): .. * elf32-i370.c (i370_elf_adjust_dynamic_symbol, i370_elf_size_dynamic_sections, i370_elf_check_relocs, i370_elf_finish_dynamic_sections): .. * elf32-i386.c (elf_i386_grok_prstatus, elf_i386_adjust_dynamic_symbol, allocate_dynrelocs, elf_i386_size_dynamic_sections, elf_i386_relocate_section, elf_i386_finish_dynamic_sections): .. * elf32-i860.c (i860_howto_pc26_reloc, i860_howto_pc16_reloc, i860_howto_highadj_reloc, i860_howto_splitn_reloc): .. * elf32-ip2k.c (ip2k_is_switch_table_128, ip2k_relax_switch_table_128, ip2k_is_switch_table_256, ip2k_relax_switch_table_256, ip2k_elf_relax_section, adjust_all_relocations, ip2k_elf_relax_delete_bytes): .. * elf32-m32r.c (m32r_elf_do_10_pcrel_reloc, m32r_elf_hi16_reloc, m32r_elf_generic_reloc, m32r_elf_adjust_dynamic_symbol, allocate_dynrelocs, m32r_elf_size_dynamic_sections, m32r_elf_relocate_section, m32r_elf_finish_dynamic_sections, m32r_elf_relax_section, m32r_elf_relax_delete_bytes, m32r_elf_get_relocated_section_contents): .. * elf32-m68hc11.c (m68hc11_elf_build_one_stub, m68hc11_elf_size_one_stub, m68hc11_elf_relax_section, m68hc11_elf_relax_delete_bytes): .. * elf32-m68hc12.c (m68hc12_elf_build_one_stub, m68hc12_elf_size_one_stub): .. * elf32-m68hc1x.c (elf32_m68hc11_size_stubs, elf32_m68hc11_build_stubs, m68hc11_elf_special_reloc): .. * elf32-m68k.c (elf_m68k_check_relocs, elf_m68k_gc_sweep_hook, elf_m68k_adjust_dynamic_symbol, elf_m68k_size_dynamic_sections, elf_m68k_discard_copies, elf_m68k_finish_dynamic_sections): .. * elf32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elf32-or32.c (or32_elf_consth_reloc): .. * elf32-ppc.c (ppc_elf_relax_section, ppc_elf_addr16_ha_reloc, elf_create_pointer_linker_section, ppc_elf_create_linker_section, ppc_elf_additional_program_headers, ppc_elf_adjust_dynamic_symbol, allocate_dynrelocs, ppc_elf_size_dynamic_sections, ppc_elf_finish_dynamic_sections, ppc_elf_grok_prstatus, ppc_elf_final_write_processing): .. * elf32-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections, elf_s390_grok_prstatus): .. * elf32-sh.c (sh_elf_reloc_loop, sh_elf_relax_section, sh_elf_relax_delete_bytes, sh_elf_align_loads, sh_elf_adjust_dynamic_symbol, allocate_dynrelocs, sh_elf_size_dynamic_sections, sh_elf_get_relocated_section_contents, sh_elf_finish_dynamic_sections, elf32_shlin_grok_prstatus): .. * elf32-sh64-com.c (sh64_address_in_cranges, sh64_get_contents_type): .. * elf32-sh64.c (sh64_find_section_for_address, sh64_elf_final_write_processing): .. * elf32-sparc.c (sparc_elf_wdisp16_reloc, sparc_elf_hix22_reloc, sparc_elf_lox10_reloc, elf32_sparc_adjust_dynamic_symbol, allocate_dynrelocs, elf32_sparc_size_dynamic_sections, elf32_sparc_relocate_section, elf32_sparc_finish_dynamic_sections): .. * elf32-v850.c (v850_elf_reloc, v850_elf_relax_section): .. * elf32-vax.c (elf_vax_check_relocs, elf_vax_adjust_dynamic_symbol, elf_vax_size_dynamic_sections, elf_vax_discard_copies, elf_vax_instantiate_got_entries, elf_vax_relocate_section, elf_vax_finish_dynamic_sections): .. * elf32-xstormy16.c (xstormy16_elf_24_reloc, xstormy16_elf_check_relocs, xstormy16_relax_plt_check, xstormy16_elf_relax_section, xstormy16_elf_always_size_sections, xstormy16_elf_finish_dynamic_sections): .. * elf32-xtensa.c (xtensa_read_table_entries, elf_xtensa_allocate_got_size, elf_xtensa_allocate_local_got_size, elf_xtensa_size_dynamic_sections, elf_xtensa_do_reloc, bfd_elf_xtensa_reloc, elf_xtensa_relocate_section, elf_xtensa_combine_prop_entries, elf_xtensa_finish_dynamic_sections, elf_xtensa_discard_info_for_section, elf_xtensa_grok_prstatus, get_relocation_opcode, retrieve_contents, find_relaxable_sections, collect_source_relocs, is_resolvable_asm_expansion, remove_literals, relax_section, shrink_dynamic_reloc_sections, relax_property_section, xtensa_callback_required_dependence): .. * elf64-alpha.c (elf64_alpha_reloc_gpdisp, elf64_alpha_relax_section, elf64_alpha_check_relocs, elf64_alpha_adjust_dynamic_symbol, elf64_alpha_calc_got_offsets_for_symbol, elf64_alpha_calc_got_offsets, elf64_alpha_size_plt_section, elf64_alpha_size_plt_section_1, elf64_alpha_always_size_sections, elf64_alpha_calc_dynrel_sizes, elf64_alpha_size_rela_got_section, elf64_alpha_size_rela_got_1, elf64_alpha_size_dynamic_sections, elf64_alpha_emit_dynrel, elf64_alpha_finish_dynamic_sections, elf64_alpha_final_link): .. * elf64-hppa.c (allocate_dynrel_entries, elf64_hppa_size_dynamic_sections, elf64_hppa_finish_dynamic_sections): .. * elf64-mips.c (mips_elf64_gprel32_reloc, mips16_gprel_reloc, mips_elf64_canonicalize_dynamic_reloc, mips_elf64_slurp_reloc_table, elf64_mips_grok_prstatus): .. * elf64-mmix.c (mmix_elf_perform_relocation, mmix_elf_reloc, mmix_elf_relocate_section, mmix_elf_final_link, mmix_set_relaxable_size, _bfd_mmix_after_linker_allocation, mmix_elf_relax_section, mmix_elf_get_section_contents): .. * elf64-ppc.c (ppc64_elf_object_p, ppc64_elf_grok_prstatus, ppc64_elf_check_relocs, ppc64_elf_func_desc_adjust, ppc64_elf_adjust_dynamic_symbol, ppc64_elf_edit_opd, allocate_dynrelocs, ppc64_elf_size_dynamic_sections, ppc_build_one_stub, ppc_size_one_stub, ppc64_elf_next_toc_section, toc_adjusting_stub_needed, group_sections, ppc64_elf_size_stubs, ppc64_elf_build_stubs, ppc64_elf_relocate_section, ppc64_elf_finish_dynamic_sections): .. * elf64-s390.c (s390_elf_ldisp_reloc, elf_s390_adjust_dynamic_symbol, allocate_dynrelocs, elf_s390_size_dynamic_sections, elf_s390_finish_dynamic_sections): .. * elf64-sh64.c (sh_elf64_get_relocated_section_contents, sh_elf64_check_relocs, sh64_elf64_adjust_dynamic_symbol, sh64_elf64_discard_copies, sh64_elf64_size_dynamic_sections, sh64_elf64_finish_dynamic_sections): .. * elf64-sparc.c (sparc64_elf_slurp_reloc_table, init_insn_reloc, sparc64_elf_check_relocs, sparc64_elf_adjust_dynamic_symbol, sparc64_elf_size_dynamic_sections, sparc64_elf_relocate_section, sparc64_elf_finish_dynamic_symbol, sparc64_elf_finish_dynamic_sections): .. * elf64-x86-64.c (elf64_x86_64_grok_prstatus, elf64_x86_64_adjust_dynamic_symbol, allocate_dynrelocs, elf64_x86_64_size_dynamic_sections, elf64_x86_64_relocate_section, elf64_x86_64_finish_dynamic_sections): .. * elfarm-nabi.c (elf32_arm_nabi_grok_prstatus): .. * elfcode.h (elf_slurp_reloc_table): .. * elflink.c (_bfd_elf_create_got_section, elf_add_dt_needed_tag, elf_finalize_dynstr, elf_link_add_object_symbols, bfd_elf_size_dynamic_sections, elf_link_sort_relocs, elf_link_input_bfd, bfd_elf_final_link, bfd_elf_discard_info): .. * elfn32-mips.c (gprel32_with_gp, mips16_gprel_reloc, elf32_mips_grok_prstatus): .. * elfxx-ia64.c (elfNN_ia64_relax_section, allocate_dynrel_entries, elfNN_ia64_size_dynamic_sections, elfNN_ia64_install_dyn_reloc, elfNN_ia64_choose_gp, elfNN_ia64_final_link, elfNN_ia64_finish_dynamic_sections): .. * elfxx-mips.c (mips_elf_create_procedure_table, mips_elf_check_mips16_stubs, _bfd_mips_elf_gprel16_with_gp, _bfd_mips_elf_hi16_reloc, _bfd_mips_elf_generic_reloc, mips_elf_global_got_index, mips_elf_multi_got, mips_elf_create_compact_rel_section, mips_elf_calculate_relocation, mips_elf_allocate_dynamic_relocations, mips_elf_create_dynamic_relocation, _bfd_mips_elf_fake_sections, _bfd_mips_relax_section, _bfd_mips_elf_adjust_dynamic_symbol, _bfd_mips_elf_always_size_sections, _bfd_mips_elf_size_dynamic_sections, _bfd_mips_elf_finish_dynamic_symbol, _bfd_mips_elf_finish_dynamic_sections, _bfd_mips_elf_modify_segment_map, _bfd_mips_elf_discard_info, _bfd_mips_elf_write_section, _bfd_mips_elf_set_section_contents, _bfd_elf_mips_get_relocated_section_contents, _bfd_mips_elf_final_link, _bfd_mips_elf_merge_private_bfd_data): .. * hp300hpux.c (callback): .. * hppabsd-core.c (make_bfd_asection): .. * hpux-core.c (make_bfd_asection): .. * i386linux.c (linux_link_create_dynamic_sections, bfd_i386linux_size_dynamic_sections, linux_finish_dynamic_link): .. * i386msdos.c (msdos_write_object_contents): .. * i386os9k.c (os9k_callback, os9k_write_object_contents, os9k_set_section_contents): .. * ieee.c (parse_expression, ieee_slurp_external_symbols, ieee_slurp_sections, ieee_slurp_debug, ieee_slurp_section_data, ieee_write_section_part, do_with_relocs, do_as_repeat, do_without_relocs, ieee_write_debug_part, init_for_output, ieee_set_section_contents): .. * ihex.c (ihex_scan, ihex_read_section, ihex_get_section_contents): .. * irix-core.c (do_sections, make_bfd_asection): .. * libaout.h (aout_section_merge_with_text_p): .. * libbfd.c (_bfd_generic_get_section_contents, _bfd_generic_get_section_contents_in_window): .. * linker.c (default_indirect_link_order): .. * lynx-core.c (make_bfd_asection): .. * m68klinux.c (linux_link_create_dynamic_sections, bfd_m68klinux_size_dynamic_sections, linux_finish_dynamic_link): .. * mach-o.c (bfd_mach_o_make_bfd_section, bfd_mach_o_scan_read_dylinker, bfd_mach_o_scan_read_dylib, bfd_mach_o_scan_read_thread, bfd_mach_o_scan_read_symtab, bfd_mach_o_scan_read_segment): .. * merge.c (_bfd_add_merge_section, record_section, merge_strings, _bfd_merge_sections): .. * mmo.c (mmo_find_sec_w_addr, mmo_get_spec_section, mmo_get_loc, mmo_map_set_sizes, mmo_canonicalize_symtab, mmo_internal_write_section, mmo_write_object_contents): .. * netbsd-core.c (netbsd_core_file_p): .. * nlm32-alpha.c (nlm_alpha_read_reloc, nlm_alpha_write_import, nlm_alpha_set_public_section): .. * nlm32-ppc.c (nlm_powerpc_read_reloc, nlm_powerpc_write_reloc): .. * nlm32-sparc.c (nlm_sparc_write_import): .. * nlmcode.h (add_bfd_section, nlm_swap_auxiliary_headers_in, nlm_compute_section_file_positions): .. * oasys.c (oasys_object_p, oasys_slurp_section_data, oasys_write_sections, oasys_write_data, oasys_set_section_contents): .. * opncls.c (get_debug_link_info): .. * osf-core.c (make_bfd_asection): .. * pdp11.c (some_aout_object_p, adjust_o_magic, adjust_z_magic, adjust_n_magic, adjust_sizes_and_vmas, squirt_out_relocs, final_link, aout_link_input_section): .. * peXXigen.c (_bfd_XXi_swap_sym_in, _bfd_XXi_swap_aouthdr_out, pe_print_idata, pe_print_edata, pe_print_pdata, pe_print_reloc): .. * pef.c (bfd_pef_make_bfd_section, bfd_pef_print_loader_section, bfd_pef_scan_start_address, bfd_pef_parse_symbols): .. * ppcboot.c (ppcboot_object_p, ppcboot_canonicalize_symtab): .. * ptrace-core.c (ptrace_unix_core_file_p): .. * reloc.c (bfd_perform_relocation, bfd_install_relocation, _bfd_final_link_relocate, bfd_generic_relax_section, bfd_generic_get_relocated_section_contents): .. * reloc16.c (bfd_coff_reloc16_relax_section, bfd_coff_reloc16_get_relocated_section_c): .. * riscix.c (riscix_some_aout_object_p): .. * rs6000-core.c (read_hdr, make_bfd_asection): .. * sco5-core.c (make_bfd_asection): .. * simple.c (bfd_simple_get_relocated_section_contents): .. * som.c (som_object_setup, setup_sections, som_prep_headers, som_write_fixups, som_begin_writing, bfd_section_from_som_symbol, som_set_reloc_info, som_get_section_contents, som_bfd_link_split_section): .. * sparclinux.c (linux_link_create_dynamic_sections, bfd_sparclinux_size_dynamic_sections, linux_finish_dynamic_link): .. * srec.c (srec_scan, srec_read_section, srec_get_section_contents): .. * stabs.c (_bfd_link_section_stabs, _bfd_discard_section_stabs, _bfd_write_stab_strings, _bfd_stab_section_offset): .. * sunos.c (sunos_read_dynamic_info, sunos_create_dynamic_sections, bfd_sunos_size_dynamic_sections, sunos_scan_std_relocs, sunos_scan_ext_relocs, sunos_scan_dynamic_symbol, sunos_write_dynamic_symbol, sunos_check_dynamic_reloc, sunos_finish_dynamic_link): .. * syms.c (_bfd_stab_section_find_nearest_line): .. * tekhex.c (first_phase, tekhex_set_section_contents, tekhex_write_object_contents): .. * trad-core.c (trad_unix_core_file_p): .. * versados.c (process_esd, process_otr, process_otr): .. * vms-gsd.c (_bfd_vms_slurp_gsd, _bfd_vms_write_gsd): .. * vms-misc.c (add_new_contents): .. * vms-tir.c (check_section, new_section, _bfd_vms_write_tir): .. * vms.c (vms_set_section_contents): .. * xcofflink.c (xcoff_get_section_contents, xcoff_link_add_symbols, xcoff_sweep, bfd_xcoff_size_dynamic_sections, xcoff_build_ldsyms, _bfd_xcoff_bfd_final_link, xcoff_link_input_bfd): .. * xsym.c (bfd_sym_scan): .. See above. binutils/ * objcopy.c (copy_section): Don't set _cooked_size. include/ * bfdlink.h (struct bfd_link_order): Update comment. ld/ * ldlang.c (print_output_section_statement): Don't print size before relaxation. (IGNORE_SECTION): Remove bfd arg. Update all callers. * ldexp.c (fold_name): .. See below. * ldlang.c (section_already_linked, print_output_section_statement, print_input_section, insert_pad, size_input_section, lang_check_section_addresses, lang_size_sections_1, lang_size_sections, lang_do_assignments_1, lang_set_startof, lang_one_common, lang_reset_memory_regions, lang_process, lang_abs_symbol_at_end_of, lang_do_version_exports_section): .. * ldwrite.c (build_link_order, clone_section, ds, split_sections): .. * pe-dll.c (process_def_file, generate_reloc): .. * emultempl/elf32.em (gld${EMULATION_NAME}_find_statement_assignment, gld${EMULATION_NAME}_before_allocation): .. * emultempl/mmix-elfnmmo.em (mmix_after_allocation): .. * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_before_allocation, sh64_elf_${EMULATION_NAME}_after_allocation): .. * emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): .. * emultempl/xtensaelf.em (ld_assign_relative_paged_dot, ld_local_file_relocations_fit, ld_xtensa_insert_page_offsets): Use "size" instead of "_raw_size" and "_cooked_size". Expand bfd_section_size macro invocations.
2004-06-24 06:46:28 +02:00
size, note->descpos + offset);
}
static bfd_boolean
elf64_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
{
switch (note->descsz)
{
default:
return FALSE;
case 136: /* Linux/MIPS - N64 kernel elf_prpsinfo */
elf_tdata (abfd)->core_program
= _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
elf_tdata (abfd)->core_command
= _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
}
/* Note that for some reason, a spurious space is tacked
onto the end of the args in some (at least one anyway)
implementations, so strip it off if it exists. */
{
char *command = elf_tdata (abfd)->core_command;
int n = strlen (command);
if (0 < n && command[n - 1] == ' ')
command[n - 1] = '\0';
}
return TRUE;
}
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
/* ECOFF swapping routines. These are used when dealing with the
.mdebug section, which is in the ECOFF debugging format. */
static const struct ecoff_debug_swap mips_elf64_ecoff_debug_swap =
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
/* Symbol table magic number. */
magicSym2,
/* Alignment of debugging information. E.g., 4. */
8,
/* Sizes of external symbolic information. */
sizeof (struct hdr_ext),
sizeof (struct dnr_ext),
sizeof (struct pdr_ext),
sizeof (struct sym_ext),
sizeof (struct opt_ext),
sizeof (struct fdr_ext),
sizeof (struct rfd_ext),
sizeof (struct ext_ext),
/* Functions to swap in external symbolic data. */
ecoff_swap_hdr_in,
ecoff_swap_dnr_in,
ecoff_swap_pdr_in,
ecoff_swap_sym_in,
ecoff_swap_opt_in,
ecoff_swap_fdr_in,
ecoff_swap_rfd_in,
ecoff_swap_ext_in,
_bfd_ecoff_swap_tir_in,
_bfd_ecoff_swap_rndx_in,
/* Functions to swap out external symbolic data. */
ecoff_swap_hdr_out,
ecoff_swap_dnr_out,
ecoff_swap_pdr_out,
ecoff_swap_sym_out,
ecoff_swap_opt_out,
ecoff_swap_fdr_out,
ecoff_swap_rfd_out,
ecoff_swap_ext_out,
_bfd_ecoff_swap_tir_out,
_bfd_ecoff_swap_rndx_out,
/* Function to read in symbolic data. */
_bfd_mips_elf_read_ecoff_info
};
/* Relocations in the 64 bit MIPS ELF ABI are more complex than in
standard ELF. This structure is used to redirect the relocation
handling routines. */
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
const struct elf_size_info mips_elf64_size_info =
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
{
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
sizeof (Elf64_External_Ehdr),
sizeof (Elf64_External_Phdr),
sizeof (Elf64_External_Shdr),
sizeof (Elf64_Mips_External_Rel),
sizeof (Elf64_Mips_External_Rela),
sizeof (Elf64_External_Sym),
sizeof (Elf64_External_Dyn),
sizeof (Elf_External_Note),
4, /* hash-table entry size */
3, /* internal relocations per external relocations */
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
64, /* arch_size */
* elflink.c (_bfd_elf_link_create_dynamic_sections): Move from elflink.h. Replace LOG_FILE_ALIGN with bed->s->log_file_align. (_bfd_elf_create_dynamic_sections): Use bed->s->log_file_align. (bfd_elf_record_link_assignment): Move from elflink.h. (_bfd_elf_merge_symbol): Likewise. (_bfd_elf_add_default_symbol): Likewise. (_bfd_elf_export_symbol): Likewise. (_bfd_elf_link_find_version_dependencies): Likewise. (_bfd_elf_link_assign_sym_version): Likewise. (_bfd_elf_link_read_relocs): Likewise. (_bfd_elf_link_size_reloc_section): Likewise. (_bfd_elf_fix_symbol_flags): Likewise. (_bfd_elf_adjust_dynamic_symbol): Likewise. (_bfd_elf_link_sec_merge_syms): Likewise. (elf_link_read_relocs_from_section): Likewise. Use bed->s->sizeof_rel and bed->s->sizeof_rela. (_bfd_elf_link_output_relocs): Likewise. * elf-bfd.h (struct elf_size_info): Rename file_align to log_file_align. (struct elf_info_failed): Move from elflink.h. (struct elf_assign_sym_version_info): Likewise. (struct elf_find_verdep_info): Likewise. (_bfd_elf_create_dynamic_sections): Delete duplicate declaration. (_bfd_elf_merge_symbol, _bfd_elf_add_default_symbol, _bfd_elf_export_symbol, _bfd_elf_link_find_version_dependencies, _bfd_elf_link_assign_sym_version, _bfd_elf_link_create_dynamic_sections, _bfd_elf_link_read_relocs, _bfd_elf_link_size_reloc_section, _bfd_elf_link_output_relocs, _bfd_elf_fix_symbol_flags, _bfd_elf_adjust_dynamic_symbol, _bfd_elf_link_sec_merge_syms): Declare. (bfd_elf32_link_create_dynamic_sections): Don't declare. (_bfd_elf32_link_read_relocs): Likewise. (bfd_elf64_link_create_dynamic_sections): Likewise. (_bfd_elf64_link_read_relocs): Likewise. * elflink.h: Move lots o' stuff elsewhere. * bfd-in.h (bfd_elf32_record_link_assignment): Don't declare. (bfd_elf64_record_link_assignment): Likewise. (bfd_elf_record_link_assignment): Declare. * bfd-in2.h: Regenerate. * elfcode.h (elf_link_create_dynamic_sections): Don't declare. (NAME(_bfd_elf,size_info)): Adjust for log_file_align. * elf.c (_bfd_elf_init_reloc_shdr): Adjust for bed->s->log_file_align. (assign_file_positions_for_segments): Likewise. (assign_file_positions_except_relocs): Likewise. (swap_out_syms, elfcore_write_note): Likewise. * elf-m10200.c: Adjust for changed function names. * elf-m10300.c: Likewise. * elf32-arm.h: Likewise. * elf32-h8300.c: Likewise. * elf32-hppa.c: Likewise. * elf32-ip2k.c: Likewise. * elf32-m32r.c: Likewise. * elf32-m68hc11.c: Likewise. * elf32-m68hc1x.c: Likewise. * elf32-m68k.c: Likewise. * elf32-mips.c: Likewise. * elf32-ppc.c: Likewise. * elf32-sh.c: Likewise. * elf32-v850.c: Likewise. * elf32-xtensa.c: Likewise. * elf64-alpha.c: Likewise. * elf64-hppa.c: Likewise. * elf64-mmix.c: Likewise. * elf64-ppc.c: Likewise. * elf64-sh64.c: Likewise. * elfxx-ia64.c: Likewise. * elfxx-mips.c: Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Use log_file_align. * elf64-alpha.c (alpha_elf_size_info): Adjust for log_file_align. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-mips.c (mips_elf64_size_info): Likewise. * elf64-s390.c (s390_elf64_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2003-05-09 04:27:11 +02:00
3, /* log_file_align */
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
ELFCLASS64,
EV_CURRENT,
bfd_elf64_write_out_phdrs,
bfd_elf64_write_shdrs_and_ehdr,
bfd_elf64_checksum_contents,
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
mips_elf64_write_relocs,
* elf-bfd.h (struct elf_size_info): Add swap_symbol_in field. (bfd_elf32_swap_symbol_in): Update prototype. (bfd_elf64_swap_symbol_in): Likewise. * elfcode.h (elf_swap_symbol_in): Change input args to const PTR *. (elf_slurp_symbol_table): Adjust call to elf_swap_symbol_in. * elflink.h (elf_link_is_defined_archive_symbol): Likewise. (elf_link_add_object_symbols): Likewise. (elf_link_record_local_dynamic_symbol): Likewise. (elf_link_input_bfd): Likewise. (elf_gc_mark): Likewise. (elf_reloc_symbol_deleted_p): Likewise. * elf-m10200.c (mn10200_elf_relax_section): Likewise. (mn10200_elf_relax_delete_bytes): Likewise. (mn10200_elf_symbol_address_p): Likewise. (mn10200_elf_get_relocated_section_contents): Likewise. * elf-m10300.c (mn10300_elf_relax_section): Likewise. (mn10300_elf_relax_section): Likewise. (mn10300_elf_relax_delete_bytes): Likewise. (mn10300_elf_symbol_address_p): Likewise. (mn10300_elf_get_relocated_section_contents): Likewise. * elf32-h8300.c (elf32_h8_relax_section): Likewise. (elf32_h8_relax_delete_bytes): Likewise. (elf32_h8_symbol_address_p): Likewise. (elf32_h8_get_relocated_section_contents): Likewise. * elf32-hppa.c (get_local_syms): Likewise. * elf32-m68k.c (bfd_m68k_elf32_create_embedded_relocs): Likewise. * elf32-mips.c (bfd_mips_elf32_create_embedded_relocs): Likewise. * elf32-sh.c (sh_elf_relax_section): Likewise. (sh_elf_relax_delete_bytes): Likewise. (sh_elf_get_relocated_section_contents): Likewise. * elf32-xstormy16.c (xstormy16_elf_relax_section): Likewise. * elf64-alpha.c (elf64_alpha_relax_section): Likewise. * elf64-hppa.c (elf64_hppa_check_relocs): Likewise. * elf64-mmix.c (mmix_elf_relax_section): Likewise. * elf64-ppc.c (get_local_syms): Likewise. * elf64-sh64.c (sh_elf64_get_relocated_section_contents): Likewise. * elfxx-ia64.c (elfNN_ia64_relax_section): Likewise. * elfcode.h (NAME(_bfd_elf,size_info)): Update initialiser. * elf64-alpha.c (alpha_elf_size_info): Likewise. * elf64-hppa.c (hppa64_elf_size_info): Likewise. * elf64-mips.c (mips_elf64_size_info): Likewise. * elf64-s390.c (s390_elf64_size_info): Likewise. * elf64-sparc.c (sparc64_elf_size_info): Likewise.
2002-06-05 15:32:02 +02:00
bfd_elf64_swap_symbol_in,
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
bfd_elf64_swap_symbol_out,
mips_elf64_slurp_reloc_table,
bfd_elf64_slurp_symbol_table,
bfd_elf64_swap_dyn_in,
bfd_elf64_swap_dyn_out,
mips_elf64_be_swap_reloc_in,
mips_elf64_be_swap_reloc_out,
mips_elf64_be_swap_reloca_in,
mips_elf64_be_swap_reloca_out
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
};
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
#define ELF_ARCH bfd_arch_mips
#define ELF_MACHINE_CODE EM_MIPS
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_collect TRUE
#define elf_backend_type_change_ok TRUE
#define elf_backend_can_gc_sections TRUE
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
#define elf_info_to_howto mips_elf64_info_to_howto_rela
#define elf_info_to_howto_rel mips_elf64_info_to_howto_rel
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
#define elf_backend_object_p mips_elf64_object_p
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
#define elf_backend_symbol_processing _bfd_mips_elf_symbol_processing
#define elf_backend_section_processing _bfd_mips_elf_section_processing
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_section_from_shdr _bfd_mips_elf_section_from_shdr
1999-05-03 09:29:11 +02:00
#define elf_backend_fake_sections _bfd_mips_elf_fake_sections
#define elf_backend_section_from_bfd_section \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_section_from_bfd_section
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_add_symbol_hook _bfd_mips_elf_add_symbol_hook
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
#define elf_backend_link_output_symbol_hook \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_link_output_symbol_hook
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_create_dynamic_sections \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_create_dynamic_sections
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
#define elf_backend_merge_symbol_attribute \
_bfd_mips_elf_merge_symbol_attribute
#define elf_backend_get_target_dtag _bfd_mips_elf_get_target_dtag
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_adjust_dynamic_symbol \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_adjust_dynamic_symbol
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_always_size_sections \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_always_size_sections
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_size_dynamic_sections \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_size_dynamic_sections
bfd/ * elf-bfd.h (struct elf_link_hash_table): Reorder. Add text_index_section and data_index_section. (struct elf_backend_data): Add elf_backend_init_index_section. (_bfd_elf_init_1_index_section): Declare. (_bfd_elf_init_2_index_sections): Declare. * elfxx-target.h (elf_backend_init_index_section): Define. (elfNN_bed): Init new field. * elflink.c (_bfd_elf_link_omit_section_dynsym): Keep first tls section and text_index_section plus data_index_section. (_bfd_elf_link_renumber_dynsyms): Clear dynindx on omitted sections. (_bfd_elf_init_1_index_section): New function. (_bfd_elf_init_2_index_sections): New function. (bfd_elf_size_dynsym_hash_dynstr): Call elf_backend_init_index_section. (elf_link_input_bfd): When emitting relocs, use text_index_section and data_index_section for removed sections. * elf-m10300.c (elf_backend_omit_section_dynsym): Define. * elf32-i386.c: Likewise. * elf32-m32r.c: Likewise. * elf32-sh.c: Likewise. * elf32-xstormy16.c: Likewise. * elf32-xtensa.c: Likewise. * elf64-alpha.c: Likewise. * elf64-hppa.c: Likewise. * elf64-mmix.c: Likewise. * elf64-sh64.c: Likewise. * elfxx-ia64.c: Likewise. * elf32-arm.c (elf32_arm_final_link_relocate): Use text_index_section and data_index_section sym for relocs against sections with no dynamic section sym. (elf_backend_init_index_section): Define. * elf32-cris.c: Similarly. * elf32-hppa.c: Similarly. * elf32-i370.c: Similarly. * elf32-m68k.c: Similarly. * elf32-mips.c: Similarly. * elf32-ppc.c: Similarly. * elf32-s390.c: Similarly. * elf32-sparc.c: Similarly. * elf32-vax.c: Similarly. * elf64-mips.c: Similarly. * elf64-ppc.c: Similarly. * elf64-s390.c: Similarly. * elf64-sparc.c: Similarly. * elf64-x86-64.c: Similarly. * elfn32-mips.c: Similarly. * elfxx-mips.c: Similarly. * elfxx-sparc.c: Similarly. * linker.c (fix_syms): Base symbols in removed sections on previous section in preference to using absolute section. ld/ * ldlang.c (strip_excluded_output_sections): Do strip sections that define syms, but don't ignore them. * ld.texinfo (Output Section Discarding): Revise. * emultempl/armcoff.em (gld${EMULATION_NAME}_finish): Always call finish_default. ld/testsuite/ Update for section sym changes.
2006-10-17 15:41:49 +02:00
#define elf_backend_init_index_section _bfd_elf_init_1_index_section
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
#define elf_backend_relocate_section _bfd_mips_elf_relocate_section
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_finish_dynamic_symbol \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_finish_dynamic_symbol
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_finish_dynamic_sections \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_finish_dynamic_sections
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
#define elf_backend_final_write_processing \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_final_write_processing
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
#define elf_backend_additional_program_headers \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_additional_program_headers
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
#define elf_backend_modify_segment_map _bfd_mips_elf_modify_segment_map
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
#define elf_backend_gc_mark_hook _bfd_mips_elf_gc_mark_hook
#define elf_backend_gc_sweep_hook _bfd_mips_elf_gc_sweep_hook
#define elf_backend_copy_indirect_symbol \
_bfd_mips_elf_copy_indirect_symbol
#define elf_backend_ignore_discarded_relocs \
_bfd_mips_elf_ignore_discarded_relocs
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
#define elf_backend_mips_irix_compat elf64_mips_irix_compat
#define elf_backend_mips_rtype_to_howto mips_elf64_rtype_to_howto
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
#define elf_backend_ecoff_debug_swap &mips_elf64_ecoff_debug_swap
#define elf_backend_size_info mips_elf64_size_info
#define elf_backend_grok_prstatus elf64_mips_grok_prstatus
#define elf_backend_grok_psinfo elf64_mips_grok_psinfo
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
#define elf_backend_got_header_size (4 * MIPS_RESERVED_GOTNO)
/* MIPS ELF64 can use a mixture of REL and RELA, but some Relocations
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
work better/work only in RELA, so we default to this. */
#define elf_backend_may_use_rel_p 1
#define elf_backend_may_use_rela_p 1
#define elf_backend_default_use_rela_p 1
2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> Maxim Kuvyrkov <maxim@codesourcery.com> * elf32-mips.c (mips_vxworks_copy_howto_rela): Replace with... (elf_mips_copy_howto): ...this howto. Clear the size fields. (mips_vxworks_jump_slot_howto_rela): Replace with... (elf_mips_jump_slot_howto): ...this howto. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_plt_readonly): Define. (elf_backend_plt_sym_val): Define for non-VxWorks targets. (mips_vxworks_bfd_reloc_type_lookup): Delete. (mips_vxworks_bfd_reloc_name_lookup): Likewise. (mips_vxworks_rtype_to_howto): Likewise. (elf_backend_want_dynbss): Don't define for VxWorks. (elf_backend_plt_readonly): Likewise. (bfd_elf32_bfd_reloc_type_lookup): Likewise. (bfd_elf32_bfd_reloc_name_lookup): Likewise. (elf_backend_mips_rtype_to_howto): Likewise. (elf_backend_adjust_dynamic_symbol): Likewise. (elf_backend_got_symbol_offset): Don't define. * elfn32-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf32_n32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elf64-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. (bfd_elf64_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY and BFD_RELOC_MIPS_JUMP_SLOT. (bfd_elf64_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and "R_MIPS_JUMP_SLOT". (mips_elf64_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) (elf_backend_plt_sym_val): Define. * elfxx-mips.h (_bfd_mips_vxworks_adjust_dynamic_symbol): Delete. (_bfd_mips_elf_use_plts_and_copy_relocs, _bfd_mips_elf_init_stubs) (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): Declare. * elfxx-mips.c (mips_elf_la25_stub): New structure. (LA25_LUI, LA25_J, LA25_ADDIU): New macros. (mips_elf_link_hash_entry): Add "la25_stubs", "has_static_relocs" and "has_nonpic_branches" fields. Remove "is_relocation_target" and "is_branch_target". (mips_elf_link_hash_table): Add blank lines. Add "use_plts_and_copy_relocs", "reserved_gotno", "strampoline", "la25_stubs" and "add_stub_section" fields. (mips_htab_traverse_info): New structure. (PIC_OBJECT_P, MIPS_ELF_LOAD_WORD): New macros. (MIPS_RESERVED_GOTNO): Delete. (mips_o32_exec_plt0_entry, mips_n32_exec_plt0_entry) (mips_n64_exec_plt0_entry, mips_exec_plt_entry): New tables. (mips_elf_link_hash_newfunc): Update after the changes to mips_elf_link_hash_entry. (mips_elf_check_mips16_stubs): Replace the DATA parameter with an INFO parameter. Don't look through warnings symbols here; do it in mips_elf_check_symbols instead. (mips_elf_create_stub_symbol): New function. (mips_elf_la25_stub_hash, mips_elf_la25_stub_eq): New functions. (_bfd_mips_elf_init_stubs, mips_elf_local_pic_function_p): Likewise. (mips_elf_add_la25_intro, mips_elf_add_la25_trampoline): Likewise. (mips_elf_add_la25_stub, mips_elf_check_symbols): New functions. (mips_elf_gotplt_index): Check for VxWorks. (mips_elf_output_dynamic_relocation): Take the relocation index as an extra parameter. Do not increment reloc_count here. (mips_elf_initialize_tls_slots): Update the calls to mips_elf_output_dynamic_relocation accordingly. (mips_elf_multi_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (mips_elf_create_got_section): Don't allocate reserved GOT entries here. Unconditionally create .got.plt, but don't set its alignment here. (mips_elf_relocation_needs_la25_stub): New function. (mips_elf_calculate_relocation): Redirect branches and jumps to a non-PIC stub if one exists. Check !h->has_static_relocs instead of !htab->is_vxworks when deciding whether to create dynamic relocations for R_MIPS_32, R_MIPS_REL32 and R_MIPS_64. (_bfd_mips_elf_create_dynamic_sections): Unconditionally call _bfd_elf_create_dynamic_sections. Unconditionally set up htab->splt and htab->sdynbss. Set htab->srelplt to ".rel.plt" if !htab->is_vxworks. Add non-VxWorks values of htab->plt_header_size and htab->plt_entry_size. (_bfd_mips_elf_check_relocs): Set pointer_equality_needed for non-branch static relocations. Set has_nonpic_branches when an la25 stub might be required. Set can_make_dynamic_p to TRUE if R_MIPS_32, R_MIPS_REL32 and R_MIPS_64 relocations can be made dynamic, rather than duplicating the condition. Do not make them dynamic for read-only sections in non-PIC executable objects. Do not protect this code with dynobj == NULL || htab->sgot == NULL; handle each group of cases separately. Add a default case that sets has_static_relocs for non-GOT relocations that cannot be made dynamic. Don't set is_relocation_target and is_branch_target. Reject non-PIC static relocations in shared objects. (_bfd_mips_vxworks_adjust_dynamic_symbol): Fold into... (_bfd_mips_elf_adjust_dynamic_symbol): ...here, using htab->use_plts_and_copy_relocs instead of htab->is_vxworks to select PLT and copy-reloc handling. Set the alignment of .plt and .got.plt when allocating the first entry. Generalize code to handle REL as well as RELA sections and 64-bit as well as 32-bit GOT entries. Complain if we find a static-only reloc against an externally-defined symbol and if we cannot create dynamic relocations for it. Allocate copy relocs using mips_elf_allocate_dynamic_relocations on non-VxWorks targets. Set possibly_dynamic_relocs to 0 when using PLTs or copy relocs. Skip reserved .got.plt entries. (_bfd_mips_elf_always_size_sections): Use mips_elf_check_symbols instead of mips_elf_check_mips16_stubs to process each symbol. Do the traversal for relocatable objects too. (mips_elf_lay_out_got): Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. (_bfd_mips_elf_size_dynamic_sections): Exclude sdynbss if it is empty. Extend the DT_PLTREL, DT_JMPREL and DT_PLTRELSZ handling to non-VxWorks targets. Only add DT_REL{,A}, DT_REL{,A}SZ and DT_REL{,A}ENT if .rel.dyn is nonempty. Create a symbol for the PLT. Allocate a nop at the end of the PLT. Allocate DT_MIPS_PLTGOT. (mips_elf_create_la25_stub_info): New function. (_bfd_mips_elf_finish_dynamic_symbol): Write out PLT entries and copy relocs where necessary. Check pointer_equality_needed. (mips_finish_exec_plt): New function. (_bfd_mips_elf_finish_dynamic_sections): Always set DT_PLTGOT to the beginning of htab->sgot. Use htab->reserved_gotno instead of MIPS_RESERVED_GOTNO. Assert htab->use_plts_and_copy_relocs instead of htab->is_vxworks for DT_PLTREL, DT_PLTRELSZ and DT_JMPREL. Set DT_PLTREL to DT_REL instead of DT_RELA on non-VxWorks targets. Use mips_finish_exec_plt to create non-VxWorks PLT headers. Set DT_MIPS_PLTGOT. (_bfd_mips_elf_copy_indirect_symbol): Copy has_static_relocs from the indirect symbol to the direct symbol. Also copy has_nonpic_branches for indirect symbols. (_bfd_mips_elf_get_target_dtag): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (_bfd_mips_elf_link_hash_table_create): Initialize the new mips_elf_link_hash_table fields. (_bfd_mips_vxworks_link_hash_table_create): Set use_plts_and_copy_relocs to TRUE. Use TRUE rather than 1 when setting is_vxworks. (_bfd_mips_elf_use_plts_and_copy_relocs): New function. (_bfd_mips_elf_final_link): Call mips_elf_create_la25_stub for each la25_stub. (_bfd_mips_elf_merge_private_bfd_data): Treat dynamic objects as PIC. Generalize message about linking PIC and non-PIC. (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): New functions. * reloc.c: Update comment near BFD_RELOC_MIPS_JUMP_SLOT. * bfd-in2.h: Regenerated. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * readelf.c (get_mips_symbol_other): Handle STO_MIPS_PLT and STO_MIPS_PIC. (slurp_rela_relocs, slurp_rel_relocs): Handle MIPS ELF64 here. (dump_relocations, debug_apply_relocations): Don't handle it here. (get_mips_dynamic_type): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. (print_mips_pltgot_entry): New function. (process_mips_specific): Dump the PLT GOT. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * config/tc-mips.c (OPTION_CALL_NONPIC): New macro. (OPTION_NON_SHARED, OPTION_XGOT, OPTION_MABI, OPTION_32) (OPTION_N32, OPTION_64, OPTION_MDEBUG, OPTION_NO_MDEBUG) (OPTION_PDR, OPTION_NO_PDR, OPTION_MVXWORKS_PIC): Bump by 1. (md_longopts): Add -call_nonpic. (md_parse_option): Handle OPTION_CALL_NONPIC. (md_show_usage): Add -call_nonpic. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> * gas/mips/call-nonpic-1.s, gas/mips/call-nonpic-1.d: New test. * gas/mips/mips.exp: Run it. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> Catherine Moore <clm@codesourcery.com> Mark Shinwell <shinwell@codesourcery.com> * mips.h (STO_MIPS_PLT, ELF_ST_IS_MIPS_PLT, ELF_ST_SET_MIPS_PLT) (STO_MIPS_PIC, DT_MIPS_PLTGOT, DT_MIPS_RWPLT): New macros. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * emulparams/elf32bmip.sh (GOT): Define, moving .got.plt to... (OTHER_RELRO_SECTIONS, OTHER_READWRITE_SECTIONS): ...one of these two variables. * emulparams/elf32bmipn32-defs.sh: Likewise. * emultempl/mipself.em: Include ldctor.h, elf/mips.h and elfxx-mips.h. (is_mips_elf): New macro. (stub_file, stub_bfd): New variables. (hook_stub_info): New structure. (hook_in_stub): New function. (mips_add_stub_section): Likewise. (mips_create_output_section_statements): Likewise. (mips_before_allocation): Likewise. (real_func): New variable. (mips_for_each_input_file_wrapper): New function. (mips_lang_for_each_input_file): Likewise. (lang_for_each_input_file): Define. (LDEMUL_BEFORE_ALLOCATION): Likewise. (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Likewise. 2008-08-08 Richard Sandiford <rdsandiford@googlemail.com> Daniel Jacobowitz <dan@codesourcery.com> * ld-mips-elf/mips16-pic-3a.s, ld-mips-elf/mips16-pic-3b.s, ld-mips-elf/mips16-pic-3.dd, ld-mips-elf/mips16-pic-3.gd, ld-mips-elf/mips16-pic-3.rd, ld-mips-elf/mips16-pic-3.inc, ld-mips-elf/pic-and-nonpic-1a.s, ld-mips-elf/pic-and-nonpic-1b.s, ld-mips-elf/pic-and-nonpic-1.ld, ld-mips-elf/pic-and-nonpic-1.dd, ld-mips-elf/pic-and-nonpic-1.nd, ld-mips-elf/pic-and-nonpic-1-rel.dd, ld-mips-elf/pic-and-nonpic-1-rel.nd, ld-mips-elf/pic-and-nonpic-2a.s, ld-mips-elf/pic-and-nonpic-2b.s, ld-mips-elf/pic-and-nonpic-2.d, ld-mips-elf/pic-and-nonpic-3a.s, ld-mips-elf/pic-and-nonpic-3a.ld, ld-mips-elf/pic-and-nonpic-3a.dd, ld-mips-elf/pic-and-nonpic-3a.gd, ld-mips-elf/pic-and-nonpic-3a.sd, ld-mips-elf/pic-and-nonpic-3b.s, ld-mips-elf/pic-and-nonpic-3b.ld, ld-mips-elf/pic-and-nonpic-3b.ad, ld-mips-elf/pic-and-nonpic-3b.dd, ld-mips-elf/pic-and-nonpic-3b.gd, ld-mips-elf/pic-and-nonpic-3b.nd, ld-mips-elf/pic-and-nonpic-3b.pd, ld-mips-elf/pic-and-nonpic-3b.rd, ld-mips-elf/pic-and-nonpic-3b.sd, ld-mips-elf/pic-and-nonpic-3-error.d, ld-mips-elf/pic-and-nonpic-4a.s, ld-mips-elf/pic-and-nonpic-4b.s, ld-mips-elf/pic-and-nonpic-4b.ld, ld-mips-elf/pic-and-nonpic-4b.ad, ld-mips-elf/pic-and-nonpic-4b.dd, ld-mips-elf/pic-and-nonpic-4b.gd, ld-mips-elf/pic-and-nonpic-4b.nd, ld-mips-elf/pic-and-nonpic-4b.rd, ld-mips-elf/pic-and-nonpic-4b.sd, ld-mips-elf/pic-and-nonpic-4-error.d, ld-mips-elf/pic-and-nonpic-5a.s, ld-mips-elf/pic-and-nonpic-5b.s, ld-mips-elf/pic-and-nonpic-5b.ld, ld-mips-elf/pic-and-nonpic-5b.ad, ld-mips-elf/pic-and-nonpic-5b.dd, ld-mips-elf/pic-and-nonpic-5b.gd, ld-mips-elf/pic-and-nonpic-5b.nd, ld-mips-elf/pic-and-nonpic-5b.rd, ld-mips-elf/pic-and-nonpic-5b.sd, ld-mips-elf/pic-and-nonpic-5b.pd, ld-mips-elf/pic-and-nonpic-6.ld, ld-mips-elf/pic-and-nonpic-6-o32a.s, ld-mips-elf/pic-and-nonpic-6-o32b.s, ld-mips-elf/pic-and-nonpic-6-o32c.s, ld-mips-elf/pic-and-nonpic-6-o32.ad, ld-mips-elf/pic-and-nonpic-6-o32.dd, ld-mips-elf/pic-and-nonpic-6-o32.gd, ld-mips-elf/pic-and-nonpic-6-o32.nd, ld-mips-elf/pic-and-nonpic-6-o32.pd, ld-mips-elf/pic-and-nonpic-6-o32.rd, ld-mips-elf/pic-and-nonpic-6-o32.sd, ld-mips-elf/pic-and-nonpic-6-n32a.s, ld-mips-elf/pic-and-nonpic-6-n32b.s, ld-mips-elf/pic-and-nonpic-6-n32c.s, ld-mips-elf/pic-and-nonpic-6-n32.ad, ld-mips-elf/pic-and-nonpic-6-n32.dd, ld-mips-elf/pic-and-nonpic-6-n32.gd, ld-mips-elf/pic-and-nonpic-6-n32.nd, ld-mips-elf/pic-and-nonpic-6-n32.pd, ld-mips-elf/pic-and-nonpic-6-n32.rd, ld-mips-elf/pic-and-nonpic-6-n32.sd, ld-mips-elf/pic-and-nonpic-6-n64a.s, ld-mips-elf/pic-and-nonpic-6-n64b.s, ld-mips-elf/pic-and-nonpic-6-n64c.s, ld-mips-elf/pic-and-nonpic-6-n64.ad, ld-mips-elf/pic-and-nonpic-6-n64.dd, ld-mips-elf/pic-and-nonpic-6-n64.gd, ld-mips-elf/pic-and-nonpic-6-n64.nd, ld-mips-elf/pic-and-nonpic-6-n64.pd, ld-mips-elf/pic-and-nonpic-6-n64.rd, ld-mips-elf/pic-and-nonpic-6-n64.sd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
2008-08-08 21:24:49 +02:00
#define elf_backend_rela_plts_and_copies_p 0
#define elf_backend_plt_readonly 1
#define elf_backend_plt_sym_val _bfd_mips_elf_plt_sym_val
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define elf_backend_sign_extend_vma TRUE
#define elf_backend_write_section _bfd_mips_elf_write_section
/* We don't set bfd_elf64_bfd_is_local_label_name because the 32-bit
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
MIPS-specific function only applies to IRIX5, which had no 64-bit
ABI. */
1999-05-03 09:29:11 +02:00
#define bfd_elf64_find_nearest_line _bfd_mips_elf_find_nearest_line
Approved by nickc@redhat.com 2005-05-23 Fred Fish <fnf@specifixinc.com> * dwarf2.c (struct dwarf2_debug): Add inliner_chain member. (struct funcinfo): Add caller_func, caller_file, caller_line. tag, and nesting_level members. (lookup_address_in_function_table): Change first passed parameter from "struct funcinfo *" to "struct comp_unit *". (lookup_address_in_function_table): Dereference unit to find function table. (lookup_address_in_function_table): Traverse the function list to create a chain of inlined functions back to the first non inlined function. (scan_unit_for_functions): Remember tag and nesting level. Handle DW_AT_call_file and DW_AT_call_line. (comp_unit_find_nearest_line): Adjust lookup_address_in_function_table call to pass unit pointer instead of function table pointer. For inlined functions, save pointer to the inliner chain. (_bfd_dwarf2_find_nearest_line): Initialize inliner_chain to NULL. (_bfd_dwarf2_find_inliner_info): New function that returns information from the inliner chain after a call to bfd_find_nearest_line. * bfd.c (bfd_find_inliner_info): Define using BFD_SEND. * targets.c (BFD_JUMP_TABLE_SYMBOLS): Add entry for NAME##_find_inliner_info. (bfd_target): Add _bfd_find_inliner_info. * bfd-in2.h: Regenerate. * libbfd-in.h (_bfd_nosymbols_find_inliner_info): Define as macro that always returns bfd_false. (_bfd_dwarf2_find_inliner_info): Declare. * libbfd.h: Regenerate. * elf32-arm.c (elf32_arm_find_inliner_info): New function that calls _bfd_dwarf2_find_inliner_info. (bfd_elf32_find_inliner_info): Define to elf32_arm_find_inliner_info. * elfxx-mips.c (_bfd_mips_elf_find_inliner_info): New function that calls _bfd_dwarf2_find_inliner_info. * elfxx-mips.h (_bfd_mips_elf_find_inliner_info): Declare. * elfn32-mips.c (bfd_elf32_find_inliner_info): Define to _bfd_mips_elf_find_inliner_info. * elf64-mips.c (bfd_elf64_find_inliner_info): Ditto. * elf32-mips.c (bfd_elf32_find_inliner_info): Ditto. * elf.c (_bfd_elf_find_inliner_info): New function that calls _bfd_dwarf2_find_inliner_info. * elf-bfd.h (_bfd_elf_find_inliner_info): Declare. * elfxx-target.h (bfd_elfNN_find_inliner_info): Define to _bfd_elf_find_inliner_info. * coffgen.c (coff_find_inliner_info): New function that calls _bfd_dwarf2_find_inliner_info. * libcoff-in.h (coff_find_inliner_info): Declare. * libcoff.h: Regenerate. * coff-rs6000.c (rs6000coff_vec): Add coff_find_inliner_info. (pmac_xcoff_vec) Ditto. * coff64-rs6000.c (rs6000coff64_vec): Ditto. (aix5coff64_vec): Ditto. * aout-target.h (MY_find_inliner_info): Define as _bfd_nosymbols_find_inliner_info. * aout-tic30.c (MY_find_inliner_info): Ditto. * binary.c (binary_find_inliner_info): Ditto. * i386msdos.c (msdos_find_inliner_info): Ditto. * ihex.c (ihex_find_inliner_info): Ditto. * libaout.h (aout_32_find_inliner_info): Ditto. * libecoff.h (_bfd_ecoff_find_inliner_info): Ditto. * mach-o.c (bfd_mach_o_find_inliner_info): Ditto. * mmo.c (mmo_find_inliner_info): Ditto. * nlm-target.h (nlm_find_inliner_info): Ditto. * pef.c (bfd_pef_find_inliner_info): Ditto. * ppcboot.c (ppcboot_find_inliner_info): Ditto. * srec.c (srec_find_inliner_info): Ditto. * tekhex.c (tekhex_find_inliner_info): Ditto. * versados.c (versados_find_inliner_info): Ditto. * xsym.c (bfd_sym_find_inliner_info): Ditto. * ieee.c (ieee_find_inliner_info): New function that always returns FALSE. * oasys.c (oasys_find_inliner_info): Ditto. * vms.c (vms_find_inliner_info): Ditto.
2005-05-23 19:44:55 +02:00
#define bfd_elf64_find_inliner_info _bfd_mips_elf_find_inliner_info
include/elf/ChangeLog * sh.h: Split out various bits to bfd/elf32-sh64.h. include/opcode/ChangeLog * m68hc11.h (cpu6812s): Define. bfd/ChangeLog * elf-bfd.h (struct bfd_elf_section_data): Remove tdata. Change dynindx to an int. Rearrange for better packing. * elf.c (_bfd_elf_new_section_hook): Don't alloc if already done. * elf32-mips.c (bfd_elf32_new_section_hook): Define. * elf32-sh64.h: New. Split out from include/elf/sh.h. (struct _sh64_elf_section_data): New struct. (sh64_elf_section_data): Don't dereference sh64_info (was tdata). * elf32-sh64-com.c: Include elf32-sh64.h. * elf32-sh64.c: Likewise. (sh64_elf_new_section_hook): New function. (bfd_elf32_new_section_hook): Define. (sh64_elf_fake_sections): Adjust for sh64_elf_section_data change. (sh64_bfd_elf_copy_private_section_data): Likewise. (sh64_elf_final_write_processing): Likewise. * elf32-sparc.c (struct elf32_sparc_section_data): New. (elf32_sparc_new_section_hook): New function. (SET_SEC_DO_RELAX, SEC_DO_RELAX): Delete. (sec_do_relax): Define. (elf32_sparc_relax_section): Adjust to use sec_do_relax. (elf32_sparc_relocate_section): Likewise. * elf64-mips.c (bfd_elf64_new_section_hook): Define. * elf64-mmix.c (struct _mmix_elf_section_data): New. (mmix_elf_section_data): Define. Use throughout file. (mmix_elf_new_section_hook): New function. (bfd_elf64_new_section_hook): Define. * elf64-ppc.c (struct _ppc64_elf_section_data): New. (ppc64_elf_section_data): Define. Use throughout. (ppc64_elf_new_section_hook): New function. (bfd_elf64_new_section_hook): Define. * elf64-sparc.c (struct sparc64_elf_section_data): New. (sparc64_elf_new_section_hook): New function. (SET_SEC_DO_RELAX, SEC_DO_RELAX): Delete. (sec_do_relax): Define. (sparc64_elf_relax_section): Adjust to use sec_do_relax. (sparc64_elf_relocate_section): Likewise. (bfd_elf64_new_section_hook): Define. * elfn32-mips.c (bfd_elf32_new_section_hook): Define. * elfxx-mips.c (struct _mips_elf_section_data): New. (mips_elf_section_data): Define. Use throughout. (_bfd_mips_elf_new_section_hook): New function. (mips_elf_create_got_section): Don't alloc used_by_bfd. * elfxx-mips.h (_bfd_mips_elf_new_section_hook): Declare. * elfxx-target.h (bfd_elfNN_new_section_hook): Add #ifndef. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. opcodes/ChangeLog * sh64-dis.c: Include elf32-sh64.h. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. gas/ChangeLog * config/tc-sh64.c (shmedia_frob_section_type): Adjust for changed sh64_elf_section_data. * config/tc-sh64.h: Include elf32-sh64.h. * config/tc-m68hc11.c: Don't include stdio.h. (md_show_usage): Fix missing continuation. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. ld/ChangeLog * emultempl/sh64elf.em: Include elf32-sh64.h. (sh64_elf_${EMULATION_NAME}_before_allocation): Adjust for changed sh64_elf_section_data. (sh64_elf_${EMULATION_NAME}_after_allocation): Likewise.
2003-01-23 12:51:35 +01:00
#define bfd_elf64_new_section_hook _bfd_mips_elf_new_section_hook
1999-05-03 09:29:11 +02:00
#define bfd_elf64_set_section_contents _bfd_mips_elf_set_section_contents
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
#define bfd_elf64_bfd_get_relocated_section_contents \
_bfd_elf_mips_get_relocated_section_contents
#define bfd_elf64_mkobject _bfd_mips_elf_mkobject
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define bfd_elf64_bfd_link_hash_table_create \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_link_hash_table_create
#define bfd_elf64_bfd_final_link _bfd_mips_elf_final_link
1999-05-03 09:29:11 +02:00
#define bfd_elf64_bfd_merge_private_bfd_data \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_merge_private_bfd_data
1999-05-03 09:29:11 +02:00
#define bfd_elf64_bfd_set_private_flags _bfd_mips_elf_set_private_flags
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define bfd_elf64_bfd_print_private_bfd_data \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_mips_elf_print_private_bfd_data
1999-05-03 09:29:11 +02:00
* elf-bfd.h (_bfd_mips_elf_section_from_shdr): Constify. (_bfd_mips_elf_create_dynamic_sections): New function. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. (_bfd_mips_elf_gc_mark_hook): Likewise. (_bfd_mips_elf_gc_sweep_hook): Likewise. (_bfd_mips_elf_always_size_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_elf_check_relocs): Likewise. (_bfd_mips_elf_link_hash_table_create): Likewise. (_bfd_mips_elf_print_private_data): Likewise. (_bfd_mips_elf_link_output_symbol_hook): Likewise. (_bfd_mips_elf_final_link): Likewise. (_bfd_mips_elf_additional_program_headers): Likewise. (_bfd_mips_elf_modify_segment_map): Likewise. (_bfd_mips_elf_relocate_section): Likewise. * elf32-mips.c (mips_elf32_object_p): Move contents into _bfd_mips_elf_object_p. (mips_elf_additional_program_headers): Rename to _bfd_mips_elf_additional_program_headers. (mips_elf_modify_segment_map): Rename to _bfd_mips_elf_modify_segment_map. (elf_mips_abi_name): Change prototype. (mips_elf32_section_from_shdr): Merge into _bfd_mips_elf_section_from_shdr. (mips_elf32_section_processing): Merge into _bfd_mips_elf_section_processing. (mips_elf_final_link): Rename to _bfd_mips_elf_final_link. Invoke the right back-end ELF linker. (mips_elf_relocate_section): Rename to _bfd_mips_elf_relocate_section. Clean up. Adjust for 64-bit code. (mips_elf_link_output_symbol_hook): Rename to _bfd_mips_elf_link_output_symbol_hook. (mips_elf_create_dynamic_section): Rename to _bfd_mips_elf_create_dynamic_section. (mips_elf_check_relocs): Rename to _bfd_mips_elf_check_relocs. Adjust for 64-bit code. Use mips_elf_got_section. (mips_elf_adjust_dynamic_symbol): Rename to _bfd_mips_elf_adjust_dynamic_symbol. Use mips_elf_allocate_dynamic_relocations. (mips_elf_finish_dynamic_symbol): Rename to _bfd_mips_elf_finish_dynamic_symbol. Use mips_elf_got_section. Adjust for 64-bit code. (mips_elf_finish_dynamic_sections): Rename to _bfd_mips_elf_finish_dynamic_sections. Adjust for 64-bit code. (mips_elf_always_size_sections): Rename to _bfd_mips_elf_always_size_sections. (mips_elf_add_symbol_hook): Rename to _bfd_mips_elf_add_symbol_hook. (mips_elf_next_lo16_addend): Constify. (mips_elf_calculate_relocation): Likewise. (mips_elf_obtain_contents): Likewise. (mips_elf_perform_relocation): Likewise. (mips_elf_create_dynamic_relocation): Likewise. (mips_elf_allocate_dynamic_relocations): New function. (MIPS_ELF_REL_DYN_SECTION_NAME): New macro. (MIPS_ELF_REL_SIZE): Likewise. (MIPS_ELF_DYN_SIZE): Likewise. (MIPS_ELF_GOT_SIZE): Likewise. (MIPS_ELF_SYM_SIZE): Likewise. (MIPS_ELF_LOG_FILE_ALIGN): Likewise. (MIPS_ELF_GET_WORD): Likewise. (MIPS_ELF_PUT_WORD): Likewise. (MIPS_ELF_ADD_DYNAMIC_ENTRY): Likewise. (STUB_LW): Conditionalize for 64-bit value. (elf_mips_howto_table): Add R_MIPS_HIGHER and R_MIPS_HIGHEST entries. (_bfd_mips_elf_merge_private_bfd_data): Merge e_ident[EI_CLASS]. Check it for inconsistency. (_bfd_mips_elf_print_private_bfd_data): Print ABI=64 for 64-bit ABI. (_bfd_mips_elf_fake_sections): Remove duplicate handling of .msym. (mips_elf_global_got_index): Use MIPS_ELF_GOT_SIZE. (mips_elf_got_offset_from_index): Use misp_elf_got_section. (mips_elf_create_local_got_entry): Use MIPS_ELF_GOT_SIZE. (mips_elf_local_got_index): Likewise. (mips_elf_got_page): Likewise. (mips_elf_got_info): Likewise. (mips_elf_create_dynamic_relocation): Handle 32-bit/64-bit split. (ELF_DYNAMIC_INTERPRETER): Handle 64-bit code. (mips_elf_create_dynamic_sections): Use MIPS_ELF_LOG_FILE_ALIGN, instead of constant `2'. (mips_elf_create_got_section): Tidy. Use MIPS_ELF_GOT_SIZE. (mips_elf_create_msym_section): Use MIPS_ELF_LOG_FILE_ALIGN. (mips_elf_size_dynamic_sections): Use MIPS_ELF_REL_DYN_SECTION_NAME, MIPS_ELF_GOT_SIZE, MIPS_ELF_ADD_DYNAMIC_ENTRY. Remove #if 0'd code. Adjust all releveant entries in elf backend table. * elf64-mips.c (mips_elf64_section_from_shdr): Remove. (mips_elf64_section_processing): Likewise. Adjust elf backend entries to use _bfd_mips_elf variants now publicly available.
1999-07-07 21:23:22 +02:00
#define bfd_elf64_get_reloc_upper_bound mips_elf64_get_reloc_upper_bound
#define bfd_elf64_canonicalize_reloc mips_elf64_canonicalize_reloc
#define bfd_elf64_get_dynamic_reloc_upper_bound mips_elf64_get_dynamic_reloc_upper_bound
#define bfd_elf64_canonicalize_dynamic_reloc mips_elf64_canonicalize_dynamic_reloc
#define bfd_elf64_bfd_relax_section _bfd_mips_relax_section
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
/* MIPS ELF64 archive functions. */
1999-05-03 09:29:11 +02:00
#define bfd_elf64_archive_functions
extern bfd_boolean bfd_elf64_archive_slurp_armap
(bfd *);
extern bfd_boolean bfd_elf64_archive_write_armap
(bfd *, unsigned int, struct orl *, unsigned int, int);
1999-05-03 09:29:11 +02:00
#define bfd_elf64_archive_slurp_extended_name_table \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_archive_coff_slurp_extended_name_table
1999-05-03 09:29:11 +02:00
#define bfd_elf64_archive_construct_extended_name_table \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_archive_coff_construct_extended_name_table
1999-05-03 09:29:11 +02:00
#define bfd_elf64_archive_truncate_arname \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_archive_coff_truncate_arname
1999-05-03 09:29:11 +02:00
#define bfd_elf64_archive_read_ar_hdr _bfd_archive_coff_read_ar_hdr
#define bfd_elf64_archive_openr_next_archived_file \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_archive_coff_openr_next_archived_file
1999-05-03 09:29:11 +02:00
#define bfd_elf64_archive_get_elt_at_index \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_archive_coff_get_elt_at_index
1999-05-03 09:29:11 +02:00
#define bfd_elf64_archive_generic_stat_arch_elt \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_archive_coff_generic_stat_arch_elt
1999-05-03 09:29:11 +02:00
#define bfd_elf64_archive_update_armap_timestamp \
* Makefile.am: Add elfxx-mips.c to the known backends. (elf32-mips.lo): remove dependency to coff/external.h. * Makefile.in: Regenerate. * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo Remove elf32-mips.lo from 64 bit vectors. Update dependencies accordingly. * configure: Regenerate. * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h. (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c. (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New MIPS specific backend functions. * elf32-mips.c: Moved most code to elfxx-mips.c. (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make static. (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc. (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc. (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc. (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed interface to allow selection of the right REL or RELA howto table. (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made static. Let it refuse n32 objects. (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus. (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo. (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info. (elf32_mips_ignore_discarded_relocs): Rename from _bfd_elf32_mips_ignore_discarded_relocs. (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section. (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT. (elf_mips_howto_table_rela): Remove. * elf64-mips.c: Moved most code to elfxx-mips.c. (bfd_elf64_bfd_reloc_type_lookup): Make static. (mips_elf64_rtype_to_howto): New function. (mips_elf64_object_p): Likewise. (elf64_mips_irix_compat): Likewise. * elfxx-mips.c: New file containing common code merged together from elf32-mips.c and elf64-mips.c. * elfxx-mips.h: New file containing MIPS specific prototypes from elf-bfd.h. * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and elf_backend_mips_rtype_to_howto.
2002-04-04 09:01:27 +02:00
_bfd_archive_coff_update_armap_timestamp
1999-05-03 09:29:11 +02:00
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* The SGI style (n)64 NewABI. */
#define TARGET_LITTLE_SYM bfd_elf64_littlemips_vec
#define TARGET_LITTLE_NAME "elf64-littlemips"
#define TARGET_BIG_SYM bfd_elf64_bigmips_vec
#define TARGET_BIG_NAME "elf64-bigmips"
#define ELF_MAXPAGESIZE 0x10000
#define ELF_COMMONPAGESIZE 0x1000
#include "elf64-target.h"
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* The SYSV-style 'traditional' (n)64 NewABI. */
#undef TARGET_LITTLE_SYM
#undef TARGET_LITTLE_NAME
#undef TARGET_BIG_SYM
#undef TARGET_BIG_NAME
#undef ELF_MAXPAGESIZE
#undef ELF_COMMONPAGESIZE
#define TARGET_LITTLE_SYM bfd_elf64_tradlittlemips_vec
#define TARGET_LITTLE_NAME "elf64-tradlittlemips"
#define TARGET_BIG_SYM bfd_elf64_tradbigmips_vec
#define TARGET_BIG_NAME "elf64-tradbigmips"
#define ELF_MAXPAGESIZE 0x10000
#define ELF_COMMONPAGESIZE 0x1000
#define elf64_bed elf64_tradbed
* elf64-mips.c (mips_elf64_link_hash_entry): New link hash. (mips_elf64_high): New Function. (mips_elf64_higher): Likewise. (mips_elf64_highest): Likewise. (mips_elf64_info_to_howto_rel): Likewise. (mips_elf64_info_to_howto_rela): Likewise. (mips_elf64_write_rel): Likewise. (mips_elf64_write_rela): Likewise. (mips_elf64_link_hash_newfunc): Likewise. (mips_elf64_hi16_reloc): Likewise. (mips_elf64_higher_reloc): Likewise. (mips_elf64_highest_reloc): Likewise. (mips_elf64_gprel16_reloc): Likewise. (mips_elf64_gprel16_reloca): Likewise. (mips_elf64_literal_reloc): Likewise. (mips_elf64_gprel32_reloc): Likewise. (mips_elf64_shift6_reloc): Likewise. (mips_elf64_got16_reloc): Likewise. (mips_elf64_assign_gp): Likewise. (mips_elf64_final_gp): Likewise. (gprel16_with_gp): Likewise. (mips_elf64_additional_program_headers): Likewise. (mips_elf64_link_hash_table_create): Likewise. (mips_elf64_got_offset_from_index): Likewise. (_mips_elf64_got_info): Likewise. (mips_elf64_sign_extend): Likewise. (mips_elf64_overflow_p): Likewise. (mips_elf64_global_got_index): Likewise. (mips_elf64_sort_hash_table_f): Likewise. (mips_elf64_sort_hash_table): Likewise. (mips_elf64_swap_msym_out): Likewise. (mips_elf64_create_local_got_entry): Likewise. (mips_elf64_local_got_index): Likewise. (mips_elf64_got_page): Likewise. (mips_elf64_got16_entry): Likewise. (mips_elf64_local_relocation_p): Likewise. (mips_elf64_next_relocation): Likewise. (mips_elf64_create_dynamic_relocation): Likewise. (mips_elf64_calculate_relocation): Likewise. (mips_elf64_obtain_contents): Likewise. (mips_elf64_perform_relocation): Likewise. (mips_elf64_relocate_section): Likewise. (mips_elf64_create_dynamic_sections): Likewise. (mips_elf64_adjust_dynamic_symbol): Likewise. (mips_elf64_always_size_sections): Likewise. (mips_elf64_size_dynamic_sections): Likewise. (mips_elf64_finish_dynamic_symbol): Likewise. (mips_elf64_finish_dynamic_sections): Likewise. (mips_elf64_gc_mark_hook): Likewise. (mips_elf64_gc_sweep_hook): Likewise. (mips_elf64_create_got_section): Likewise. (mips_elf64_record_global_got_symbol): Likewise. (mips_elf64_create_msym_section): Likewise. (mips_elf64_allocate_dynamic_relocations): Likewise. (mips_elf64_check_relocs): Likewise. (mips_elf64_output_extsym): Likewise. (mips_elf64_swap_gptab_in): Likewise. (mips_elf64_swap_gptab_out): Likewise. (gptab_compare): Likewise. (mips_elf64_final_link): Likewise. (prev_reloc_addend): Remenber addend of previous parts of a combined reloc. (ELF_MIPS_GP_OFFSET): New define. (STUB_LW,STUB_MOVE,STUB_JALR,STUB_LI16): Likewise. (MIPS_FUNCTION_STUB_SIZE): Likewise. (mips_elf64_howto_rel): Fix HOWTO defines. (mips_elf64_howto_rela): Likewise. (mips_elf64_swap_reloca_out): Fix signedness. (mips_elf64_be_swap_reloc_in): Use ELF64* instead of ELF32*. (mips_elf64_be_swap_reloca_in): Likewise. (mips_elf64_be_swap_reloc_out): Likewise. Preserve extended type info. (mips_elf64_be_swap_reloca_out): Likewise.
2001-12-15 10:56:19 +01:00
/* Include the target file again for this target. */
#include "elf64-target.h"