1d2201f2fSdrahn /* MIPS ELF specific backend routines. 2*cf2f2c56Smiod Copyright 2002, 2003, 2004 Free Software Foundation, Inc. 3d2201f2fSdrahn 4d2201f2fSdrahn This file is part of BFD, the Binary File Descriptor library. 5d2201f2fSdrahn 6d2201f2fSdrahn This program is free software; you can redistribute it and/or modify 7d2201f2fSdrahn it under the terms of the GNU General Public License as published by 8d2201f2fSdrahn the Free Software Foundation; either version 2 of the License, or 9d2201f2fSdrahn (at your option) any later version. 10d2201f2fSdrahn 11d2201f2fSdrahn This program is distributed in the hope that it will be useful, 12d2201f2fSdrahn but WITHOUT ANY WARRANTY; without even the implied warranty of 13d2201f2fSdrahn MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14d2201f2fSdrahn GNU General Public License for more details. 15d2201f2fSdrahn 16d2201f2fSdrahn You should have received a copy of the GNU General Public License 17d2201f2fSdrahn along with this program; if not, write to the Free Software 18d2201f2fSdrahn Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 19d2201f2fSdrahn 20d2201f2fSdrahn #include "elf/common.h" 21d2201f2fSdrahn #include "elf/internal.h" 22d2201f2fSdrahn 23d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_new_section_hook 24*cf2f2c56Smiod (bfd *, asection *); 25d2201f2fSdrahn extern void _bfd_mips_elf_symbol_processing 26*cf2f2c56Smiod (bfd *, asymbol *); 27*cf2f2c56Smiod extern bfd_boolean _bfd_mips_elf_name_local_section_symbols 28*cf2f2c56Smiod (bfd *); 29d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_section_processing 30*cf2f2c56Smiod (bfd *, Elf_Internal_Shdr *); 31d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_section_from_shdr 32*cf2f2c56Smiod (bfd *, Elf_Internal_Shdr *, const char *); 33d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_fake_sections 34*cf2f2c56Smiod (bfd *, Elf_Internal_Shdr *, asection *); 35d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_section_from_bfd_section 36*cf2f2c56Smiod (bfd *, asection *, int *); 37d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_add_symbol_hook 38*cf2f2c56Smiod (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, 39*cf2f2c56Smiod const char **, flagword *, asection **, bfd_vma *); 40d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_link_output_symbol_hook 41*cf2f2c56Smiod (struct bfd_link_info *, const char *, Elf_Internal_Sym *, 42*cf2f2c56Smiod asection *, struct elf_link_hash_entry *); 43d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_create_dynamic_sections 44*cf2f2c56Smiod (bfd *, struct bfd_link_info *); 45d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_check_relocs 46*cf2f2c56Smiod (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *); 47d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_adjust_dynamic_symbol 48*cf2f2c56Smiod (struct bfd_link_info *, struct elf_link_hash_entry *); 49d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_always_size_sections 50*cf2f2c56Smiod (bfd *, struct bfd_link_info *); 51d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_size_dynamic_sections 52*cf2f2c56Smiod (bfd *, struct bfd_link_info *); 53d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_relocate_section 54*cf2f2c56Smiod (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, 55*cf2f2c56Smiod Elf_Internal_Rela *, Elf_Internal_Sym *, asection **); 56d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_finish_dynamic_symbol 57*cf2f2c56Smiod (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, 58*cf2f2c56Smiod Elf_Internal_Sym *); 59d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_finish_dynamic_sections 60*cf2f2c56Smiod (bfd *, struct bfd_link_info *); 61d2201f2fSdrahn extern void _bfd_mips_elf_final_write_processing 62*cf2f2c56Smiod (bfd *, bfd_boolean); 63d2201f2fSdrahn extern int _bfd_mips_elf_additional_program_headers 64*cf2f2c56Smiod (bfd *); 65d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_modify_segment_map 66*cf2f2c56Smiod (bfd *, struct bfd_link_info *); 67d2201f2fSdrahn extern asection * _bfd_mips_elf_gc_mark_hook 68*cf2f2c56Smiod (asection *, struct bfd_link_info *, Elf_Internal_Rela *, 69*cf2f2c56Smiod struct elf_link_hash_entry *, Elf_Internal_Sym *); 70d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_gc_sweep_hook 71*cf2f2c56Smiod (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *); 72d2201f2fSdrahn extern void _bfd_mips_elf_copy_indirect_symbol 73*cf2f2c56Smiod (const struct elf_backend_data *, struct elf_link_hash_entry *, 74*cf2f2c56Smiod struct elf_link_hash_entry *); 75d2201f2fSdrahn extern void _bfd_mips_elf_hide_symbol 76*cf2f2c56Smiod (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean); 77d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_ignore_discarded_relocs 78*cf2f2c56Smiod (asection *); 79d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_find_nearest_line 80*cf2f2c56Smiod (bfd *, asection *, asymbol **, bfd_vma, const char **, 81*cf2f2c56Smiod const char **, unsigned int *); 82d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_set_section_contents 83*cf2f2c56Smiod (bfd *, asection *, const void *, file_ptr, bfd_size_type); 84d2201f2fSdrahn extern bfd_byte *_bfd_elf_mips_get_relocated_section_contents 85*cf2f2c56Smiod (bfd *, struct bfd_link_info *, struct bfd_link_order *, 86*cf2f2c56Smiod bfd_byte *, bfd_boolean, asymbol **); 87d2201f2fSdrahn extern struct bfd_link_hash_table *_bfd_mips_elf_link_hash_table_create 88*cf2f2c56Smiod (bfd *); 89d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_final_link 90*cf2f2c56Smiod (bfd *, struct bfd_link_info *); 91d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_merge_private_bfd_data 92*cf2f2c56Smiod (bfd *, bfd *); 93d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_set_private_flags 94*cf2f2c56Smiod (bfd *, flagword); 95d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_print_private_bfd_data 96*cf2f2c56Smiod (bfd *, void *); 97d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_discard_info 98*cf2f2c56Smiod (bfd *, struct elf_reloc_cookie *, struct bfd_link_info *); 99d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_write_section 100*cf2f2c56Smiod (bfd *, asection *, bfd_byte *); 101d2201f2fSdrahn 102d2201f2fSdrahn extern bfd_boolean _bfd_mips_elf_read_ecoff_info 103*cf2f2c56Smiod (bfd *, asection *, struct ecoff_debug_info *); 104d2201f2fSdrahn extern bfd_reloc_status_type _bfd_mips_elf_gprel16_with_gp 105*cf2f2c56Smiod (bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma); 106d2201f2fSdrahn extern bfd_reloc_status_type _bfd_mips_elf32_gprel16_reloc 107*cf2f2c56Smiod (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); 108*cf2f2c56Smiod extern bfd_reloc_status_type _bfd_mips_elf_hi16_reloc 109*cf2f2c56Smiod (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); 110*cf2f2c56Smiod extern bfd_reloc_status_type _bfd_mips_elf_got16_reloc 111*cf2f2c56Smiod (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); 112*cf2f2c56Smiod extern bfd_reloc_status_type _bfd_mips_elf_lo16_reloc 113*cf2f2c56Smiod (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); 114*cf2f2c56Smiod extern bfd_reloc_status_type _bfd_mips_elf_generic_reloc 115*cf2f2c56Smiod (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); 116d2201f2fSdrahn extern unsigned long _bfd_elf_mips_mach 117*cf2f2c56Smiod (flagword); 118*cf2f2c56Smiod extern bfd_boolean _bfd_mips_relax_section 119*cf2f2c56Smiod (bfd *, asection *, struct bfd_link_info *, bfd_boolean *); 120*cf2f2c56Smiod extern bfd_vma _bfd_mips_elf_sign_extend 121*cf2f2c56Smiod (bfd_vma, int); 122*cf2f2c56Smiod 123*cf2f2c56Smiod extern struct bfd_elf_special_section const _bfd_mips_elf_special_sections[]; 124*cf2f2c56Smiod #define elf_backend_name_local_section_symbols \ 125*cf2f2c56Smiod _bfd_mips_elf_name_local_section_symbols 126*cf2f2c56Smiod #define elf_backend_special_sections _bfd_mips_elf_special_sections 127