Annotation of src/external/gpl3/binutils.old/dist/bfd/elfxx-mips.h, Revision 1.1
1.1 ! christos 1: /* MIPS ELF specific backend routines.
! 2: Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
! 3: Free Software Foundation, Inc.
! 4:
! 5: This file is part of BFD, the Binary File Descriptor library.
! 6:
! 7: This program is free software; you can redistribute it and/or modify
! 8: it under the terms of the GNU General Public License as published by
! 9: the Free Software Foundation; either version 3 of the License, or
! 10: (at your option) any later version.
! 11:
! 12: This program is distributed in the hope that it will be useful,
! 13: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 15: GNU General Public License for more details.
! 16:
! 17: You should have received a copy of the GNU General Public License
! 18: along with this program; if not, write to the Free Software
! 19: Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
! 20: MA 02110-1301, USA. */
! 21:
! 22: #include "elf/common.h"
! 23: #include "elf/internal.h"
! 24: #include "elf/mips.h"
! 25:
! 26: extern bfd_boolean _bfd_mips_elf_new_section_hook
! 27: (bfd *, asection *);
! 28: extern void _bfd_mips_elf_symbol_processing
! 29: (bfd *, asymbol *);
! 30: extern unsigned int _bfd_mips_elf_eh_frame_address_size
! 31: (bfd *, asection *);
! 32: extern bfd_boolean _bfd_mips_elf_name_local_section_symbols
! 33: (bfd *);
! 34: extern bfd_boolean _bfd_mips_elf_section_processing
! 35: (bfd *, Elf_Internal_Shdr *);
! 36: extern bfd_boolean _bfd_mips_elf_section_from_shdr
! 37: (bfd *, Elf_Internal_Shdr *, const char *, int);
! 38: extern bfd_boolean _bfd_mips_elf_fake_sections
! 39: (bfd *, Elf_Internal_Shdr *, asection *);
! 40: extern bfd_boolean _bfd_mips_elf_section_from_bfd_section
! 41: (bfd *, asection *, int *);
! 42: extern bfd_boolean _bfd_mips_elf_add_symbol_hook
! 43: (bfd *, struct bfd_link_info *, Elf_Internal_Sym *,
! 44: const char **, flagword *, asection **, bfd_vma *);
! 45: extern int _bfd_mips_elf_link_output_symbol_hook
! 46: (struct bfd_link_info *, const char *, Elf_Internal_Sym *,
! 47: asection *, struct elf_link_hash_entry *);
! 48: extern bfd_boolean _bfd_mips_elf_create_dynamic_sections
! 49: (bfd *, struct bfd_link_info *);
! 50: extern bfd_boolean _bfd_mips_elf_check_relocs
! 51: (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
! 52: extern bfd_boolean _bfd_mips_elf_adjust_dynamic_symbol
! 53: (struct bfd_link_info *, struct elf_link_hash_entry *);
! 54: extern bfd_boolean _bfd_mips_elf_always_size_sections
! 55: (bfd *, struct bfd_link_info *);
! 56: extern bfd_boolean _bfd_mips_elf_size_dynamic_sections
! 57: (bfd *, struct bfd_link_info *);
! 58: extern bfd_boolean _bfd_mips_elf_relocate_section
! 59: (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
! 60: Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
! 61: extern bfd_boolean _bfd_mips_elf_finish_dynamic_symbol
! 62: (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
! 63: Elf_Internal_Sym *);
! 64: extern bfd_boolean _bfd_mips_vxworks_finish_dynamic_symbol
! 65: (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
! 66: Elf_Internal_Sym *);
! 67: extern bfd_boolean _bfd_mips_elf_finish_dynamic_sections
! 68: (bfd *, struct bfd_link_info *);
! 69: extern void _bfd_mips_elf_final_write_processing
! 70: (bfd *, bfd_boolean);
! 71: extern int _bfd_mips_elf_additional_program_headers
! 72: (bfd *, struct bfd_link_info *);
! 73: extern bfd_boolean _bfd_mips_elf_modify_segment_map
! 74: (bfd *, struct bfd_link_info *);
! 75: extern asection * _bfd_mips_elf_gc_mark_hook
! 76: (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
! 77: struct elf_link_hash_entry *, Elf_Internal_Sym *);
! 78: extern bfd_boolean _bfd_mips_elf_gc_sweep_hook
! 79: (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
! 80: extern void _bfd_mips_elf_copy_indirect_symbol
! 81: (struct bfd_link_info *, struct elf_link_hash_entry *,
! 82: struct elf_link_hash_entry *);
! 83: extern bfd_boolean _bfd_mips_elf_ignore_discarded_relocs
! 84: (asection *);
! 85: extern bfd_boolean _bfd_mips_elf_is_target_special_symbol
! 86: (bfd *abfd, asymbol *sym);
! 87: extern bfd_boolean _bfd_mips_elf_find_nearest_line
! 88: (bfd *, asection *, asymbol **, bfd_vma, const char **,
! 89: const char **, unsigned int *);
! 90: extern bfd_boolean _bfd_mips_elf_find_inliner_info
! 91: (bfd *, const char **, const char **, unsigned int *);
! 92: extern bfd_boolean _bfd_mips_elf_set_section_contents
! 93: (bfd *, asection *, const void *, file_ptr, bfd_size_type);
! 94: extern bfd_byte *_bfd_elf_mips_get_relocated_section_contents
! 95: (bfd *, struct bfd_link_info *, struct bfd_link_order *,
! 96: bfd_byte *, bfd_boolean, asymbol **);
! 97: extern bfd_boolean _bfd_mips_elf_relax_section
! 98: (bfd *abfd, asection *sec, struct bfd_link_info *link_info,
! 99: bfd_boolean *again);
! 100: extern struct bfd_link_hash_table *_bfd_mips_elf_link_hash_table_create
! 101: (bfd *);
! 102: extern struct bfd_link_hash_table *_bfd_mips_vxworks_link_hash_table_create
! 103: (bfd *);
! 104: extern bfd_boolean _bfd_mips_elf_final_link
! 105: (bfd *, struct bfd_link_info *);
! 106: extern bfd_boolean _bfd_mips_elf_merge_private_bfd_data
! 107: (bfd *, bfd *);
! 108: extern bfd_boolean _bfd_mips_elf_set_private_flags
! 109: (bfd *, flagword);
! 110: extern bfd_boolean _bfd_mips_elf_print_private_bfd_data
! 111: (bfd *, void *);
! 112: extern bfd_boolean _bfd_mips_elf_discard_info
! 113: (bfd *, struct elf_reloc_cookie *, struct bfd_link_info *);
! 114: extern bfd_boolean _bfd_mips_elf_write_section
! 115: (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
! 116:
! 117: extern bfd_boolean _bfd_mips_elf_read_ecoff_info
! 118: (bfd *, asection *, struct ecoff_debug_info *);
! 119: extern void _bfd_mips_elf_reloc_unshuffle
! 120: (bfd *, int, bfd_boolean, bfd_byte *);
! 121: extern void _bfd_mips_elf_reloc_shuffle
! 122: (bfd *, int, bfd_boolean, bfd_byte *);
! 123: extern bfd_reloc_status_type _bfd_mips_elf_gprel16_with_gp
! 124: (bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma);
! 125: extern bfd_reloc_status_type _bfd_mips_elf32_gprel16_reloc
! 126: (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
! 127: extern bfd_reloc_status_type _bfd_mips_elf_hi16_reloc
! 128: (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
! 129: extern bfd_reloc_status_type _bfd_mips_elf_got16_reloc
! 130: (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
! 131: extern bfd_reloc_status_type _bfd_mips_elf_lo16_reloc
! 132: (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
! 133: extern bfd_reloc_status_type _bfd_mips_elf_generic_reloc
! 134: (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
! 135: extern unsigned long _bfd_elf_mips_mach
! 136: (flagword);
! 137: extern bfd_boolean _bfd_mips_relax_section
! 138: (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
! 139: extern bfd_vma _bfd_mips_elf_sign_extend
! 140: (bfd_vma, int);
! 141: extern void _bfd_mips_elf_merge_symbol_attribute
! 142: (struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean, bfd_boolean);
! 143: extern char *_bfd_mips_elf_get_target_dtag (bfd_vma);
! 144: extern bfd_boolean _bfd_mips_elf_ignore_undef_symbol
! 145: (struct elf_link_hash_entry *);
! 146: extern void _bfd_mips_elf_use_plts_and_copy_relocs
! 147: (struct bfd_link_info *);
! 148: extern bfd_boolean _bfd_mips_elf_init_stubs
! 149: (struct bfd_link_info *,
! 150: asection *(*) (const char *, asection *, asection *));
! 151: extern bfd_vma _bfd_mips_elf_plt_sym_val
! 152: (bfd_vma, const asection *, const arelent *rel);
! 153: extern void _bfd_mips_post_process_headers
! 154: (bfd *abfd, struct bfd_link_info *link_info);
! 155:
! 156: extern const struct bfd_elf_special_section _bfd_mips_elf_special_sections [];
! 157:
! 158: extern bfd_boolean _bfd_mips_elf_common_definition (Elf_Internal_Sym *);
! 159:
! 160: static inline bfd_boolean
! 161: gprel16_reloc_p (unsigned int r_type)
! 162: {
! 163: return (r_type == R_MIPS_GPREL16
! 164: || r_type == R_MIPS16_GPREL
! 165: || r_type == R_MICROMIPS_GPREL16
! 166: || r_type == R_MICROMIPS_GPREL7_S2);
! 167: }
! 168:
! 169: static inline bfd_boolean
! 170: literal_reloc_p (int r_type)
! 171: {
! 172: return r_type == R_MIPS_LITERAL || r_type == R_MICROMIPS_LITERAL;
! 173: }
! 174:
! 175: #define elf_backend_common_definition _bfd_mips_elf_common_definition
! 176: #define elf_backend_name_local_section_symbols \
! 177: _bfd_mips_elf_name_local_section_symbols
! 178: #define elf_backend_special_sections _bfd_mips_elf_special_sections
! 179: #define elf_backend_eh_frame_address_size _bfd_mips_elf_eh_frame_address_size
! 180: #define elf_backend_merge_symbol_attribute _bfd_mips_elf_merge_symbol_attribute
! 181: #define elf_backend_ignore_undef_symbol _bfd_mips_elf_ignore_undef_symbol
! 182: #define elf_backend_post_process_headers _bfd_mips_post_process_headers
CVSweb <webmaster@jp.NetBSD.org>