Home | History | Annotate | Download | only in bfd
      1 /* Target definitions for NN-bit ELF
      2    Copyright (C) 1993-2014 Free Software Foundation, Inc.
      3 
      4    This file is part of BFD, the Binary File Descriptor library.
      5 
      6    This program is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3 of the License, or
      9    (at your option) any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program; if not, write to the Free Software
     18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19    MA 02110-1301, USA.  */
     20 
     21 
     22 /* This structure contains everything that BFD knows about a target.
     23    It includes things like its byte order, name, what routines to call
     24    to do various operations, etc.  Every BFD points to a target structure
     25    with its "xvec" member.
     26 
     27    There are two such structures here:  one for big-endian machines and
     28    one for little-endian machines.   */
     29 
     30 #ifndef bfd_elfNN_close_and_cleanup
     31 #define	bfd_elfNN_close_and_cleanup _bfd_elf_close_and_cleanup
     32 #endif
     33 #ifndef bfd_elfNN_bfd_free_cached_info
     34 #define bfd_elfNN_bfd_free_cached_info _bfd_free_cached_info
     35 #endif
     36 #ifndef bfd_elfNN_get_section_contents
     37 #define bfd_elfNN_get_section_contents _bfd_generic_get_section_contents
     38 #endif
     39 
     40 #define bfd_elfNN_canonicalize_dynamic_symtab \
     41   _bfd_elf_canonicalize_dynamic_symtab
     42 #ifndef bfd_elfNN_get_synthetic_symtab
     43 #define bfd_elfNN_get_synthetic_symtab \
     44   _bfd_elf_get_synthetic_symtab
     45 #endif
     46 #ifndef bfd_elfNN_canonicalize_reloc
     47 #define bfd_elfNN_canonicalize_reloc	_bfd_elf_canonicalize_reloc
     48 #endif
     49 #ifndef bfd_elfNN_find_nearest_line
     50 #define bfd_elfNN_find_nearest_line	_bfd_elf_find_nearest_line
     51 #endif
     52 #ifndef bfd_elfNN_find_line
     53 #define bfd_elfNN_find_line		_bfd_elf_find_line
     54 #endif
     55 #ifndef bfd_elfNN_find_inliner_info
     56 #define bfd_elfNN_find_inliner_info	_bfd_elf_find_inliner_info
     57 #endif
     58 #define bfd_elfNN_read_minisymbols	_bfd_elf_read_minisymbols
     59 #define bfd_elfNN_minisymbol_to_symbol	_bfd_elf_minisymbol_to_symbol
     60 #define bfd_elfNN_get_dynamic_symtab_upper_bound \
     61   _bfd_elf_get_dynamic_symtab_upper_bound
     62 #define bfd_elfNN_get_lineno		_bfd_elf_get_lineno
     63 #ifndef bfd_elfNN_get_reloc_upper_bound
     64 #define bfd_elfNN_get_reloc_upper_bound _bfd_elf_get_reloc_upper_bound
     65 #endif
     66 #ifndef bfd_elfNN_get_symbol_info
     67 #define bfd_elfNN_get_symbol_info	_bfd_elf_get_symbol_info
     68 #endif
     69 #define bfd_elfNN_canonicalize_symtab	_bfd_elf_canonicalize_symtab
     70 #define bfd_elfNN_get_symtab_upper_bound _bfd_elf_get_symtab_upper_bound
     71 #define bfd_elfNN_make_empty_symbol	_bfd_elf_make_empty_symbol
     72 #ifndef bfd_elfNN_new_section_hook
     73 #define bfd_elfNN_new_section_hook	_bfd_elf_new_section_hook
     74 #endif
     75 #define bfd_elfNN_set_arch_mach		_bfd_elf_set_arch_mach
     76 #ifndef bfd_elfNN_set_section_contents
     77 #define bfd_elfNN_set_section_contents	_bfd_elf_set_section_contents
     78 #endif
     79 #define bfd_elfNN_sizeof_headers	_bfd_elf_sizeof_headers
     80 #define bfd_elfNN_write_object_contents _bfd_elf_write_object_contents
     81 #define bfd_elfNN_write_corefile_contents _bfd_elf_write_corefile_contents
     82 
     83 #define bfd_elfNN_get_section_contents_in_window \
     84   _bfd_generic_get_section_contents_in_window
     85 
     86 #ifndef elf_backend_can_refcount
     87 #define elf_backend_can_refcount 0
     88 #endif
     89 #ifndef elf_backend_want_got_plt
     90 #define elf_backend_want_got_plt 0
     91 #endif
     92 #ifndef elf_backend_plt_readonly
     93 #define elf_backend_plt_readonly 0
     94 #endif
     95 #ifndef elf_backend_want_plt_sym
     96 #define elf_backend_want_plt_sym 0
     97 #endif
     98 #ifndef elf_backend_plt_not_loaded
     99 #define elf_backend_plt_not_loaded 0
    100 #endif
    101 #ifndef elf_backend_plt_alignment
    102 #define elf_backend_plt_alignment 2
    103 #endif
    104 #ifndef elf_backend_want_dynbss
    105 #define elf_backend_want_dynbss 1
    106 #endif
    107 #ifndef elf_backend_want_p_paddr_set_to_zero
    108 #define elf_backend_want_p_paddr_set_to_zero 0
    109 #endif
    110 #ifndef elf_backend_default_execstack
    111 #define elf_backend_default_execstack 1
    112 #endif
    113 #ifndef elf_backend_caches_rawsize
    114 #define elf_backend_caches_rawsize 0
    115 #endif
    116 #ifndef elf_backend_stack_align
    117 #define elf_backend_stack_align 16
    118 #endif
    119 
    120 #define bfd_elfNN_bfd_debug_info_start	bfd_void
    121 #define bfd_elfNN_bfd_debug_info_end	bfd_void
    122 #define bfd_elfNN_bfd_debug_info_accumulate \
    123   ((void (*) (bfd*, struct bfd_section *)) bfd_void)
    124 
    125 #ifndef bfd_elfNN_bfd_get_relocated_section_contents
    126 #define bfd_elfNN_bfd_get_relocated_section_contents \
    127   bfd_generic_get_relocated_section_contents
    128 #endif
    129 
    130 #ifndef bfd_elfNN_bfd_relax_section
    131 #define bfd_elfNN_bfd_relax_section bfd_generic_relax_section
    132 #endif
    133 
    134 #ifndef elf_backend_can_gc_sections
    135 #define elf_backend_can_gc_sections 0
    136 #endif
    137 #ifndef elf_backend_can_refcount
    138 #define elf_backend_can_refcount 0
    139 #endif
    140 #ifndef elf_backend_want_got_sym
    141 #define elf_backend_want_got_sym 1
    142 #endif
    143 #ifndef elf_backend_gc_keep
    144 #define elf_backend_gc_keep		_bfd_elf_gc_keep
    145 #endif
    146 #ifndef elf_backend_gc_mark_dynamic_ref
    147 #define elf_backend_gc_mark_dynamic_ref	bfd_elf_gc_mark_dynamic_ref_symbol
    148 #endif
    149 #ifndef elf_backend_gc_mark_hook
    150 #define elf_backend_gc_mark_hook	_bfd_elf_gc_mark_hook
    151 #endif
    152 #ifndef elf_backend_gc_mark_extra_sections
    153 #define elf_backend_gc_mark_extra_sections _bfd_elf_gc_mark_extra_sections
    154 #endif
    155 #ifndef elf_backend_gc_sweep_hook
    156 #define elf_backend_gc_sweep_hook	NULL
    157 #endif
    158 #ifndef bfd_elfNN_bfd_gc_sections
    159 #define bfd_elfNN_bfd_gc_sections bfd_elf_gc_sections
    160 #endif
    161 
    162 #ifndef bfd_elfNN_bfd_merge_sections
    163 #define bfd_elfNN_bfd_merge_sections \
    164   _bfd_elf_merge_sections
    165 #endif
    166 
    167 #ifndef bfd_elfNN_bfd_is_group_section
    168 #define bfd_elfNN_bfd_is_group_section bfd_elf_is_group_section
    169 #endif
    170 
    171 #ifndef bfd_elfNN_bfd_discard_group
    172 #define bfd_elfNN_bfd_discard_group bfd_generic_discard_group
    173 #endif
    174 
    175 #ifndef bfd_elfNN_section_already_linked
    176 #define bfd_elfNN_section_already_linked \
    177   _bfd_elf_section_already_linked
    178 #endif
    179 
    180 #ifndef bfd_elfNN_bfd_define_common_symbol
    181 #define bfd_elfNN_bfd_define_common_symbol bfd_generic_define_common_symbol
    182 #endif
    183 
    184 #ifndef bfd_elfNN_bfd_lookup_section_flags
    185 #define bfd_elfNN_bfd_lookup_section_flags bfd_elf_lookup_section_flags
    186 #endif
    187 
    188 #ifndef bfd_elfNN_bfd_make_debug_symbol
    189 #define bfd_elfNN_bfd_make_debug_symbol \
    190   ((asymbol * (*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
    191 #endif
    192 
    193 #ifndef bfd_elfNN_bfd_copy_private_symbol_data
    194 #define bfd_elfNN_bfd_copy_private_symbol_data \
    195   _bfd_elf_copy_private_symbol_data
    196 #endif
    197 
    198 #ifndef bfd_elfNN_bfd_copy_private_section_data
    199 #define bfd_elfNN_bfd_copy_private_section_data \
    200   _bfd_elf_copy_private_section_data
    201 #endif
    202 #ifndef bfd_elfNN_bfd_copy_private_header_data
    203 #define bfd_elfNN_bfd_copy_private_header_data \
    204   _bfd_elf_copy_private_header_data
    205 #endif
    206 #ifndef bfd_elfNN_bfd_copy_private_bfd_data
    207 #define bfd_elfNN_bfd_copy_private_bfd_data \
    208   _bfd_elf_copy_private_bfd_data
    209 #endif
    210 #ifndef bfd_elfNN_bfd_print_private_bfd_data
    211 #define bfd_elfNN_bfd_print_private_bfd_data \
    212   _bfd_elf_print_private_bfd_data
    213 #endif
    214 #ifndef bfd_elfNN_bfd_merge_private_bfd_data
    215 #define bfd_elfNN_bfd_merge_private_bfd_data \
    216   ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
    217 #endif
    218 #ifndef bfd_elfNN_bfd_set_private_flags
    219 #define bfd_elfNN_bfd_set_private_flags \
    220   ((bfd_boolean (*) (bfd *, flagword)) bfd_true)
    221 #endif
    222 #ifndef bfd_elfNN_bfd_is_local_label_name
    223 #define bfd_elfNN_bfd_is_local_label_name _bfd_elf_is_local_label_name
    224 #endif
    225 #ifndef bfd_elfNN_bfd_is_target_special_symbol
    226 #define bfd_elfNN_bfd_is_target_special_symbol \
    227   ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
    228 #endif
    229 
    230 #ifndef bfd_elfNN_get_dynamic_reloc_upper_bound
    231 #define bfd_elfNN_get_dynamic_reloc_upper_bound \
    232   _bfd_elf_get_dynamic_reloc_upper_bound
    233 #endif
    234 #ifndef bfd_elfNN_canonicalize_dynamic_reloc
    235 #define bfd_elfNN_canonicalize_dynamic_reloc \
    236   _bfd_elf_canonicalize_dynamic_reloc
    237 #endif
    238 
    239 #ifdef elf_backend_relocate_section
    240 #ifndef bfd_elfNN_bfd_link_hash_table_create
    241 #define bfd_elfNN_bfd_link_hash_table_create _bfd_elf_link_hash_table_create
    242 #endif
    243 #ifndef bfd_elfNN_bfd_link_add_symbols
    244 #define bfd_elfNN_bfd_link_add_symbols	bfd_elf_link_add_symbols
    245 #endif
    246 #ifndef bfd_elfNN_bfd_final_link
    247 #define bfd_elfNN_bfd_final_link	bfd_elf_final_link
    248 #endif
    249 #else /* ! defined (elf_backend_relocate_section) */
    250 /* If no backend relocate_section routine, use the generic linker.
    251    Note - this will prevent the port from being able to use some of
    252    the other features of the ELF linker, because the generic hash structure
    253    does not have the fields needed by the ELF linker.  In particular it
    254    means that linking directly to S-records will not work.  */
    255 #ifndef bfd_elfNN_bfd_link_hash_table_create
    256 #define bfd_elfNN_bfd_link_hash_table_create \
    257   _bfd_generic_link_hash_table_create
    258 #endif
    259 #ifndef bfd_elfNN_bfd_link_add_symbols
    260 #define bfd_elfNN_bfd_link_add_symbols	_bfd_generic_link_add_symbols
    261 #endif
    262 #ifndef bfd_elfNN_bfd_final_link
    263 #define bfd_elfNN_bfd_final_link	_bfd_generic_final_link
    264 #endif
    265 #endif /* ! defined (elf_backend_relocate_section) */
    266 
    267 #ifndef bfd_elfNN_bfd_link_just_syms
    268 #define bfd_elfNN_bfd_link_just_syms	_bfd_elf_link_just_syms
    269 #endif
    270 
    271 #ifndef bfd_elfNN_bfd_copy_link_hash_symbol_type
    272 #define bfd_elfNN_bfd_copy_link_hash_symbol_type \
    273   _bfd_elf_copy_link_hash_symbol_type
    274 #endif
    275 
    276 #ifndef bfd_elfNN_bfd_link_split_section
    277 #define bfd_elfNN_bfd_link_split_section _bfd_generic_link_split_section
    278 #endif
    279 
    280 #ifndef bfd_elfNN_archive_p
    281 #define bfd_elfNN_archive_p bfd_generic_archive_p
    282 #endif
    283 
    284 #ifndef bfd_elfNN_write_archive_contents
    285 #define bfd_elfNN_write_archive_contents _bfd_write_archive_contents
    286 #endif
    287 
    288 #ifndef bfd_elfNN_mkobject
    289 #define bfd_elfNN_mkobject bfd_elf_make_object
    290 #endif
    291 
    292 #ifndef bfd_elfNN_mkcorefile
    293 #define bfd_elfNN_mkcorefile bfd_elf_mkcorefile
    294 #endif
    295 
    296 #ifndef bfd_elfNN_mkarchive
    297 #define bfd_elfNN_mkarchive _bfd_generic_mkarchive
    298 #endif
    299 
    300 #ifndef bfd_elfNN_print_symbol
    301 #define bfd_elfNN_print_symbol bfd_elf_print_symbol
    302 #endif
    303 
    304 #ifndef elf_symbol_leading_char
    305 #define elf_symbol_leading_char 0
    306 #endif
    307 
    308 #ifndef elf_info_to_howto
    309 #define elf_info_to_howto 0
    310 #endif
    311 
    312 #ifndef elf_info_to_howto_rel
    313 #define elf_info_to_howto_rel 0
    314 #endif
    315 
    316 #ifndef elf_backend_arch_data
    317 #define elf_backend_arch_data NULL
    318 #endif
    319 
    320 #ifndef ELF_TARGET_ID
    321 #define ELF_TARGET_ID	GENERIC_ELF_DATA
    322 #endif
    323 
    324 #ifndef ELF_OSABI
    325 #define ELF_OSABI ELFOSABI_NONE
    326 #endif
    327 
    328 #ifndef ELF_MAXPAGESIZE
    329 # error ELF_MAXPAGESIZE is not defined
    330 #define ELF_MAXPAGESIZE 1
    331 #endif
    332 
    333 #ifndef ELF_COMMONPAGESIZE
    334 #define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE
    335 #endif
    336 
    337 #ifndef ELF_MINPAGESIZE
    338 #define ELF_MINPAGESIZE ELF_COMMONPAGESIZE
    339 #endif
    340 
    341 #if ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
    342 # error ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
    343 #endif
    344 #if ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
    345 # error ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
    346 #endif
    347 
    348 #ifndef ELF_DYNAMIC_SEC_FLAGS
    349 /* Note that we set the SEC_IN_MEMORY flag for these sections.  */
    350 #define ELF_DYNAMIC_SEC_FLAGS			\
    351   (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS	\
    352    | SEC_IN_MEMORY | SEC_LINKER_CREATED)
    353 #endif
    354 
    355 #ifndef elf_backend_collect
    356 #define elf_backend_collect FALSE
    357 #endif
    358 #ifndef elf_backend_type_change_ok
    359 #define elf_backend_type_change_ok FALSE
    360 #endif
    361 
    362 #ifndef elf_backend_sym_is_global
    363 #define elf_backend_sym_is_global	0
    364 #endif
    365 #ifndef elf_backend_object_p
    366 #define elf_backend_object_p		0
    367 #endif
    368 #ifndef elf_backend_symbol_processing
    369 #define elf_backend_symbol_processing	0
    370 #endif
    371 #ifndef elf_backend_symbol_table_processing
    372 #define elf_backend_symbol_table_processing	0
    373 #endif
    374 #ifndef elf_backend_get_symbol_type
    375 #define elf_backend_get_symbol_type 0
    376 #endif
    377 #ifndef elf_backend_archive_symbol_lookup
    378 #define elf_backend_archive_symbol_lookup _bfd_elf_archive_symbol_lookup
    379 #endif
    380 #ifndef elf_backend_name_local_section_symbols
    381 #define elf_backend_name_local_section_symbols	0
    382 #endif
    383 #ifndef elf_backend_section_processing
    384 #define elf_backend_section_processing	0
    385 #endif
    386 #ifndef elf_backend_section_from_shdr
    387 #define elf_backend_section_from_shdr	_bfd_elf_make_section_from_shdr
    388 #endif
    389 #ifndef elf_backend_section_flags
    390 #define elf_backend_section_flags	0
    391 #endif
    392 #ifndef elf_backend_get_sec_type_attr
    393 #define elf_backend_get_sec_type_attr	_bfd_elf_get_sec_type_attr
    394 #endif
    395 #ifndef elf_backend_section_from_phdr
    396 #define elf_backend_section_from_phdr	_bfd_elf_make_section_from_phdr
    397 #endif
    398 #ifndef elf_backend_fake_sections
    399 #define elf_backend_fake_sections	0
    400 #endif
    401 #ifndef elf_backend_section_from_bfd_section
    402 #define elf_backend_section_from_bfd_section	0
    403 #endif
    404 #ifndef elf_backend_add_symbol_hook
    405 #define elf_backend_add_symbol_hook	0
    406 #endif
    407 #ifndef elf_backend_link_output_symbol_hook
    408 #define elf_backend_link_output_symbol_hook 0
    409 #endif
    410 #ifndef elf_backend_create_dynamic_sections
    411 #define elf_backend_create_dynamic_sections 0
    412 #endif
    413 #ifndef elf_backend_omit_section_dynsym
    414 #define elf_backend_omit_section_dynsym _bfd_elf_link_omit_section_dynsym
    415 #endif
    416 #ifndef elf_backend_relocs_compatible
    417 #define elf_backend_relocs_compatible _bfd_elf_default_relocs_compatible
    418 #endif
    419 #ifndef elf_backend_check_relocs
    420 #define elf_backend_check_relocs	0
    421 #endif
    422 #ifndef elf_backend_check_directives
    423 #define elf_backend_check_directives	0
    424 #endif
    425 #ifndef elf_backend_notice_as_needed
    426 #define elf_backend_notice_as_needed	_bfd_elf_notice_as_needed
    427 #endif
    428 #ifndef elf_backend_adjust_dynamic_symbol
    429 #define elf_backend_adjust_dynamic_symbol 0
    430 #endif
    431 #ifndef elf_backend_always_size_sections
    432 #define elf_backend_always_size_sections 0
    433 #endif
    434 #ifndef elf_backend_size_dynamic_sections
    435 #define elf_backend_size_dynamic_sections 0
    436 #endif
    437 #ifndef elf_backend_init_index_section
    438 #define elf_backend_init_index_section \
    439  ((void (*) (bfd *, struct bfd_link_info *)) bfd_void)
    440 #endif
    441 #ifndef elf_backend_relocate_section
    442 #define elf_backend_relocate_section	0
    443 #endif
    444 #ifndef elf_backend_finish_dynamic_symbol
    445 #define elf_backend_finish_dynamic_symbol	0
    446 #endif
    447 #ifndef elf_backend_finish_dynamic_sections
    448 #define elf_backend_finish_dynamic_sections	0
    449 #endif
    450 #ifndef elf_backend_begin_write_processing
    451 #define elf_backend_begin_write_processing	0
    452 #endif
    453 #ifndef elf_backend_final_write_processing
    454 #define elf_backend_final_write_processing	0
    455 #endif
    456 #ifndef elf_backend_additional_program_headers
    457 #define elf_backend_additional_program_headers	0
    458 #endif
    459 #ifndef elf_backend_modify_segment_map
    460 #define elf_backend_modify_segment_map	0
    461 #endif
    462 #ifndef elf_backend_modify_program_headers
    463 #define elf_backend_modify_program_headers	0
    464 #endif
    465 #ifndef elf_backend_ecoff_debug_swap
    466 #define elf_backend_ecoff_debug_swap	0
    467 #endif
    468 #ifndef elf_backend_bfd_from_remote_memory
    469 #define elf_backend_bfd_from_remote_memory _bfd_elfNN_bfd_from_remote_memory
    470 #endif
    471 #ifndef elf_backend_got_header_size
    472 #define elf_backend_got_header_size	0
    473 #endif
    474 #ifndef elf_backend_got_elt_size
    475 #define elf_backend_got_elt_size _bfd_elf_default_got_elt_size
    476 #endif
    477 #ifndef elf_backend_obj_attrs_vendor
    478 #define elf_backend_obj_attrs_vendor		NULL
    479 #endif
    480 #ifndef elf_backend_obj_attrs_section
    481 #define elf_backend_obj_attrs_section		NULL
    482 #endif
    483 #ifndef elf_backend_obj_attrs_arg_type
    484 #define elf_backend_obj_attrs_arg_type		NULL
    485 #endif
    486 #ifndef elf_backend_obj_attrs_section_type
    487 #define elf_backend_obj_attrs_section_type		SHT_GNU_ATTRIBUTES
    488 #endif
    489 #ifndef elf_backend_obj_attrs_order
    490 #define elf_backend_obj_attrs_order		NULL
    491 #endif
    492 #ifndef elf_backend_obj_attrs_handle_unknown
    493 #define elf_backend_obj_attrs_handle_unknown	NULL
    494 #endif
    495 #ifndef elf_backend_static_tls_alignment
    496 #define elf_backend_static_tls_alignment	1
    497 #endif
    498 #ifndef elf_backend_post_process_headers
    499 #define elf_backend_post_process_headers	_bfd_elf_post_process_headers
    500 #endif
    501 #ifndef elf_backend_print_symbol_all
    502 #define elf_backend_print_symbol_all		NULL
    503 #endif
    504 #ifndef elf_backend_output_arch_local_syms
    505 #define elf_backend_output_arch_local_syms	NULL
    506 #endif
    507 #ifndef elf_backend_output_arch_syms
    508 #define elf_backend_output_arch_syms		NULL
    509 #endif
    510 #ifndef elf_backend_copy_indirect_symbol
    511 #define elf_backend_copy_indirect_symbol  _bfd_elf_link_hash_copy_indirect
    512 #endif
    513 #ifndef elf_backend_hide_symbol
    514 #define elf_backend_hide_symbol		_bfd_elf_link_hash_hide_symbol
    515 #endif
    516 #ifndef elf_backend_fixup_symbol
    517 #define elf_backend_fixup_symbol		NULL
    518 #endif
    519 #ifndef elf_backend_merge_symbol_attribute
    520 #define elf_backend_merge_symbol_attribute	NULL
    521 #endif
    522 #ifndef elf_backend_get_target_dtag
    523 #define elf_backend_get_target_dtag		NULL
    524 #endif
    525 #ifndef elf_backend_ignore_undef_symbol
    526 #define elf_backend_ignore_undef_symbol		NULL
    527 #endif
    528 #ifndef elf_backend_emit_relocs
    529 #define elf_backend_emit_relocs			_bfd_elf_link_output_relocs
    530 #endif
    531 #ifndef elf_backend_count_relocs
    532 #define elf_backend_count_relocs		NULL
    533 #endif
    534 #ifndef elf_backend_grok_prstatus
    535 #define elf_backend_grok_prstatus		NULL
    536 #endif
    537 #ifndef elf_backend_grok_psinfo
    538 #define elf_backend_grok_psinfo			NULL
    539 #endif
    540 #ifndef elf_backend_write_core_note
    541 #define elf_backend_write_core_note		NULL
    542 #endif
    543 #ifndef elf_backend_lookup_section_flags_hook
    544 #define elf_backend_lookup_section_flags_hook	NULL
    545 #endif
    546 #ifndef elf_backend_reloc_type_class
    547 #define elf_backend_reloc_type_class		_bfd_elf_reloc_type_class
    548 #endif
    549 #ifndef elf_backend_discard_info
    550 #define elf_backend_discard_info		NULL
    551 #endif
    552 #ifndef elf_backend_ignore_discarded_relocs
    553 #define elf_backend_ignore_discarded_relocs	NULL
    554 #endif
    555 #ifndef elf_backend_action_discarded
    556 #define elf_backend_action_discarded _bfd_elf_default_action_discarded
    557 #endif
    558 #ifndef elf_backend_eh_frame_address_size
    559 #define elf_backend_eh_frame_address_size _bfd_elf_eh_frame_address_size
    560 #endif
    561 #ifndef elf_backend_can_make_relative_eh_frame
    562 #define elf_backend_can_make_relative_eh_frame	_bfd_elf_can_make_relative
    563 #endif
    564 #ifndef elf_backend_can_make_lsda_relative_eh_frame
    565 #define elf_backend_can_make_lsda_relative_eh_frame	_bfd_elf_can_make_relative
    566 #endif
    567 #ifndef elf_backend_encode_eh_address
    568 #define elf_backend_encode_eh_address		_bfd_elf_encode_eh_address
    569 #endif
    570 #ifndef elf_backend_write_section
    571 #define elf_backend_write_section		NULL
    572 #endif
    573 #ifndef elf_backend_mips_irix_compat
    574 #define elf_backend_mips_irix_compat		NULL
    575 #endif
    576 #ifndef elf_backend_mips_rtype_to_howto
    577 #define elf_backend_mips_rtype_to_howto		NULL
    578 #endif
    579 
    580 /* Previously, backends could only use SHT_REL or SHT_RELA relocation
    581    sections, but not both.  They defined USE_REL to indicate SHT_REL
    582    sections, and left it undefined to indicated SHT_RELA sections.
    583    For backwards compatibility, we still support this usage.  */
    584 #ifndef USE_REL
    585 #define USE_REL 0
    586 #endif
    587 
    588 /* Use these in new code.  */
    589 #ifndef elf_backend_may_use_rel_p
    590 #define elf_backend_may_use_rel_p USE_REL
    591 #endif
    592 #ifndef elf_backend_may_use_rela_p
    593 #define elf_backend_may_use_rela_p !USE_REL
    594 #endif
    595 #ifndef elf_backend_default_use_rela_p
    596 #define elf_backend_default_use_rela_p !USE_REL
    597 #endif
    598 #ifndef elf_backend_rela_plts_and_copies_p
    599 #define elf_backend_rela_plts_and_copies_p elf_backend_default_use_rela_p
    600 #endif
    601 
    602 #ifndef elf_backend_rela_normal
    603 #define elf_backend_rela_normal 0
    604 #endif
    605 
    606 #ifndef elf_backend_plt_sym_val
    607 #define elf_backend_plt_sym_val NULL
    608 #endif
    609 #ifndef elf_backend_relplt_name
    610 #define elf_backend_relplt_name NULL
    611 #endif
    612 
    613 #ifndef ELF_MACHINE_ALT1
    614 #define ELF_MACHINE_ALT1 0
    615 #endif
    616 
    617 #ifndef ELF_MACHINE_ALT2
    618 #define ELF_MACHINE_ALT2 0
    619 #endif
    620 
    621 #ifndef elf_backend_size_info
    622 #define elf_backend_size_info _bfd_elfNN_size_info
    623 #endif
    624 
    625 #ifndef elf_backend_special_sections
    626 #define elf_backend_special_sections NULL
    627 #endif
    628 
    629 #ifndef elf_backend_sign_extend_vma
    630 #define elf_backend_sign_extend_vma 0
    631 #endif
    632 
    633 #ifndef elf_backend_link_order_error_handler
    634 #define elf_backend_link_order_error_handler _bfd_default_error_handler
    635 #endif
    636 
    637 #ifndef elf_backend_common_definition
    638 #define elf_backend_common_definition _bfd_elf_common_definition
    639 #endif
    640 
    641 #ifndef elf_backend_common_section_index
    642 #define elf_backend_common_section_index _bfd_elf_common_section_index
    643 #endif
    644 
    645 #ifndef elf_backend_common_section
    646 #define elf_backend_common_section _bfd_elf_common_section
    647 #endif
    648 
    649 #ifndef elf_backend_merge_symbol
    650 #define elf_backend_merge_symbol NULL
    651 #endif
    652 
    653 #ifndef elf_backend_hash_symbol
    654 #define elf_backend_hash_symbol _bfd_elf_hash_symbol
    655 #endif
    656 
    657 #ifndef elf_backend_is_function_type
    658 #define elf_backend_is_function_type _bfd_elf_is_function_type
    659 #endif
    660 
    661 #ifndef elf_backend_maybe_function_sym
    662 #define elf_backend_maybe_function_sym _bfd_elf_maybe_function_sym
    663 #endif
    664 
    665 #ifndef elf_match_priority
    666 #define elf_match_priority \
    667   (ELF_ARCH == bfd_arch_unknown ? 2 : ELF_OSABI == ELFOSABI_NONE ? 1 : 0)
    668 #endif
    669 
    670 extern const struct elf_size_info _bfd_elfNN_size_info;
    671 
    672 static struct elf_backend_data elfNN_bed =
    673 {
    674   ELF_ARCH,			/* arch */
    675   ELF_TARGET_ID,		/* target_id */
    676   ELF_MACHINE_CODE,		/* elf_machine_code */
    677   ELF_OSABI,			/* elf_osabi  */
    678   ELF_MAXPAGESIZE,		/* maxpagesize */
    679   ELF_MINPAGESIZE,		/* minpagesize */
    680   ELF_COMMONPAGESIZE,		/* commonpagesize */
    681   ELF_DYNAMIC_SEC_FLAGS,	/* dynamic_sec_flags */
    682   elf_backend_arch_data,
    683   elf_info_to_howto,
    684   elf_info_to_howto_rel,
    685   elf_backend_sym_is_global,
    686   elf_backend_object_p,
    687   elf_backend_symbol_processing,
    688   elf_backend_symbol_table_processing,
    689   elf_backend_get_symbol_type,
    690   elf_backend_archive_symbol_lookup,
    691   elf_backend_name_local_section_symbols,
    692   elf_backend_section_processing,
    693   elf_backend_section_from_shdr,
    694   elf_backend_section_flags,
    695   elf_backend_get_sec_type_attr,
    696   elf_backend_section_from_phdr,
    697   elf_backend_fake_sections,
    698   elf_backend_section_from_bfd_section,
    699   elf_backend_add_symbol_hook,
    700   elf_backend_link_output_symbol_hook,
    701   elf_backend_create_dynamic_sections,
    702   elf_backend_omit_section_dynsym,
    703   elf_backend_relocs_compatible,
    704   elf_backend_check_relocs,
    705   elf_backend_check_directives,
    706   elf_backend_notice_as_needed,
    707   elf_backend_adjust_dynamic_symbol,
    708   elf_backend_always_size_sections,
    709   elf_backend_size_dynamic_sections,
    710   elf_backend_init_index_section,
    711   elf_backend_relocate_section,
    712   elf_backend_finish_dynamic_symbol,
    713   elf_backend_finish_dynamic_sections,
    714   elf_backend_begin_write_processing,
    715   elf_backend_final_write_processing,
    716   elf_backend_additional_program_headers,
    717   elf_backend_modify_segment_map,
    718   elf_backend_modify_program_headers,
    719   elf_backend_gc_keep,
    720   elf_backend_gc_mark_dynamic_ref,
    721   elf_backend_gc_mark_hook,
    722   elf_backend_gc_mark_extra_sections,
    723   elf_backend_gc_sweep_hook,
    724   elf_backend_post_process_headers,
    725   elf_backend_print_symbol_all,
    726   elf_backend_output_arch_local_syms,
    727   elf_backend_output_arch_syms,
    728   elf_backend_copy_indirect_symbol,
    729   elf_backend_hide_symbol,
    730   elf_backend_fixup_symbol,
    731   elf_backend_merge_symbol_attribute,
    732   elf_backend_get_target_dtag,
    733   elf_backend_ignore_undef_symbol,
    734   elf_backend_emit_relocs,
    735   elf_backend_count_relocs,
    736   elf_backend_grok_prstatus,
    737   elf_backend_grok_psinfo,
    738   elf_backend_write_core_note,
    739   elf_backend_lookup_section_flags_hook,
    740   elf_backend_reloc_type_class,
    741   elf_backend_discard_info,
    742   elf_backend_ignore_discarded_relocs,
    743   elf_backend_action_discarded,
    744   elf_backend_eh_frame_address_size,
    745   elf_backend_can_make_relative_eh_frame,
    746   elf_backend_can_make_lsda_relative_eh_frame,
    747   elf_backend_encode_eh_address,
    748   elf_backend_write_section,
    749   elf_backend_mips_irix_compat,
    750   elf_backend_mips_rtype_to_howto,
    751   elf_backend_ecoff_debug_swap,
    752   elf_backend_bfd_from_remote_memory,
    753   elf_backend_plt_sym_val,
    754   elf_backend_common_definition,
    755   elf_backend_common_section_index,
    756   elf_backend_common_section,
    757   elf_backend_merge_symbol,
    758   elf_backend_hash_symbol,
    759   elf_backend_is_function_type,
    760   elf_backend_maybe_function_sym,
    761   elf_backend_link_order_error_handler,
    762   elf_backend_relplt_name,
    763   ELF_MACHINE_ALT1,
    764   ELF_MACHINE_ALT2,
    765   &elf_backend_size_info,
    766   elf_backend_special_sections,
    767   elf_backend_got_header_size,
    768   elf_backend_got_elt_size,
    769   elf_backend_obj_attrs_vendor,
    770   elf_backend_obj_attrs_section,
    771   elf_backend_obj_attrs_arg_type,
    772   elf_backend_obj_attrs_section_type,
    773   elf_backend_obj_attrs_order,
    774   elf_backend_obj_attrs_handle_unknown,
    775   elf_backend_static_tls_alignment,
    776   elf_backend_stack_align,
    777   elf_backend_collect,
    778   elf_backend_type_change_ok,
    779   elf_backend_may_use_rel_p,
    780   elf_backend_may_use_rela_p,
    781   elf_backend_default_use_rela_p,
    782   elf_backend_rela_plts_and_copies_p,
    783   elf_backend_rela_normal,
    784   elf_backend_sign_extend_vma,
    785   elf_backend_want_got_plt,
    786   elf_backend_plt_readonly,
    787   elf_backend_want_plt_sym,
    788   elf_backend_plt_not_loaded,
    789   elf_backend_plt_alignment,
    790   elf_backend_can_gc_sections,
    791   elf_backend_can_refcount,
    792   elf_backend_want_got_sym,
    793   elf_backend_want_dynbss,
    794   elf_backend_want_p_paddr_set_to_zero,
    795   elf_backend_default_execstack,
    796   elf_backend_caches_rawsize
    797 };
    798 
    799 /* Forward declaration for use when initialising alternative_target field.  */
    800 #ifdef TARGET_LITTLE_SYM
    801 extern const bfd_target TARGET_LITTLE_SYM;
    802 #endif
    803 
    804 #ifdef TARGET_BIG_SYM
    805 const bfd_target TARGET_BIG_SYM =
    806 {
    807   /* name: identify kind of target */
    808   TARGET_BIG_NAME,
    809 
    810   /* flavour: general indication about file */
    811   bfd_target_elf_flavour,
    812 
    813   /* byteorder: data is big endian */
    814   BFD_ENDIAN_BIG,
    815 
    816   /* header_byteorder: header is also big endian */
    817   BFD_ENDIAN_BIG,
    818 
    819   /* object_flags: mask of all file flags */
    820   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
    821    | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
    822 
    823   /* section_flags: mask of all section flags */
    824   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
    825    | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES
    826    | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP),
    827 
    828    /* leading_symbol_char: is the first char of a user symbol
    829       predictable, and if so what is it */
    830   elf_symbol_leading_char,
    831 
    832   /* ar_pad_char: pad character for filenames within an archive header
    833      FIXME:  this really has nothing to do with ELF, this is a characteristic
    834      of the archiver and/or os and should be independently tunable */
    835   '/',
    836 
    837   /* ar_max_namelen: maximum number of characters in an archive header
    838      FIXME:  this really has nothing to do with ELF, this is a characteristic
    839      of the archiver and should be independently tunable.  The System V ABI,
    840      Chapter 7 (Formats & Protocols), Archive section sets this as 15.  */
    841   15,
    842 
    843   elf_match_priority,
    844 
    845   /* Routines to byte-swap various sized integers from the data sections */
    846   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
    847     bfd_getb32, bfd_getb_signed_32, bfd_putb32,
    848     bfd_getb16, bfd_getb_signed_16, bfd_putb16,
    849 
    850   /* Routines to byte-swap various sized integers from the file headers */
    851   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
    852     bfd_getb32, bfd_getb_signed_32, bfd_putb32,
    853     bfd_getb16, bfd_getb_signed_16, bfd_putb16,
    854 
    855   /* bfd_check_format: check the format of a file being read */
    856   { _bfd_dummy_target,		/* unknown format */
    857     bfd_elfNN_object_p,		/* assembler/linker output (object file) */
    858     bfd_elfNN_archive_p,	/* an archive */
    859     bfd_elfNN_core_file_p	/* a core file */
    860   },
    861 
    862   /* bfd_set_format: set the format of a file being written */
    863   { bfd_false,
    864     bfd_elfNN_mkobject,
    865     bfd_elfNN_mkarchive,
    866     bfd_elfNN_mkcorefile
    867   },
    868 
    869   /* bfd_write_contents: write cached information into a file being written */
    870   { bfd_false,
    871     bfd_elfNN_write_object_contents,
    872     bfd_elfNN_write_archive_contents,
    873     bfd_elfNN_write_corefile_contents,
    874   },
    875 
    876   BFD_JUMP_TABLE_GENERIC (bfd_elfNN),
    877   BFD_JUMP_TABLE_COPY (bfd_elfNN),
    878   BFD_JUMP_TABLE_CORE (bfd_elfNN),
    879 #ifdef bfd_elfNN_archive_functions
    880   BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive),
    881 #else
    882   BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
    883 #endif
    884   BFD_JUMP_TABLE_SYMBOLS (bfd_elfNN),
    885   BFD_JUMP_TABLE_RELOCS (bfd_elfNN),
    886   BFD_JUMP_TABLE_WRITE (bfd_elfNN),
    887   BFD_JUMP_TABLE_LINK (bfd_elfNN),
    888   BFD_JUMP_TABLE_DYNAMIC (bfd_elfNN),
    889 
    890   /* Alternative endian target.  */
    891 #ifdef TARGET_LITTLE_SYM
    892   & TARGET_LITTLE_SYM,
    893 #else
    894   NULL,
    895 #endif
    896 
    897   /* backend_data: */
    898   &elfNN_bed
    899 };
    900 #endif
    901 
    902 #ifdef TARGET_LITTLE_SYM
    903 const bfd_target TARGET_LITTLE_SYM =
    904 {
    905   /* name: identify kind of target */
    906   TARGET_LITTLE_NAME,
    907 
    908   /* flavour: general indication about file */
    909   bfd_target_elf_flavour,
    910 
    911   /* byteorder: data is little endian */
    912   BFD_ENDIAN_LITTLE,
    913 
    914   /* header_byteorder: header is also little endian */
    915   BFD_ENDIAN_LITTLE,
    916 
    917   /* object_flags: mask of all file flags */
    918   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
    919    | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
    920 
    921   /* section_flags: mask of all section flags */
    922   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
    923    | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES
    924    | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP),
    925 
    926    /* leading_symbol_char: is the first char of a user symbol
    927       predictable, and if so what is it */
    928   elf_symbol_leading_char,
    929 
    930   /* ar_pad_char: pad character for filenames within an archive header
    931      FIXME:  this really has nothing to do with ELF, this is a characteristic
    932      of the archiver and/or os and should be independently tunable */
    933   '/',
    934 
    935   /* ar_max_namelen: maximum number of characters in an archive header
    936      FIXME:  this really has nothing to do with ELF, this is a characteristic
    937      of the archiver and should be independently tunable.  The System V ABI,
    938      Chapter 7 (Formats & Protocols), Archive section sets this as 15.  */
    939   15,
    940 
    941   elf_match_priority,
    942 
    943   /* Routines to byte-swap various sized integers from the data sections */
    944   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
    945     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
    946     bfd_getl16, bfd_getl_signed_16, bfd_putl16,
    947 
    948   /* Routines to byte-swap various sized integers from the file headers */
    949   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
    950     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
    951     bfd_getl16, bfd_getl_signed_16, bfd_putl16,
    952 
    953   /* bfd_check_format: check the format of a file being read */
    954   { _bfd_dummy_target,		/* unknown format */
    955     bfd_elfNN_object_p,		/* assembler/linker output (object file) */
    956     bfd_elfNN_archive_p,	/* an archive */
    957     bfd_elfNN_core_file_p	/* a core file */
    958   },
    959 
    960   /* bfd_set_format: set the format of a file being written */
    961   { bfd_false,
    962     bfd_elfNN_mkobject,
    963     bfd_elfNN_mkarchive,
    964     bfd_elfNN_mkcorefile
    965   },
    966 
    967   /* bfd_write_contents: write cached information into a file being written */
    968   { bfd_false,
    969     bfd_elfNN_write_object_contents,
    970     bfd_elfNN_write_archive_contents,
    971     bfd_elfNN_write_corefile_contents,
    972   },
    973 
    974   BFD_JUMP_TABLE_GENERIC (bfd_elfNN),
    975   BFD_JUMP_TABLE_COPY (bfd_elfNN),
    976   BFD_JUMP_TABLE_CORE (bfd_elfNN),
    977 #ifdef bfd_elfNN_archive_functions
    978   BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive),
    979 #else
    980   BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
    981 #endif
    982   BFD_JUMP_TABLE_SYMBOLS (bfd_elfNN),
    983   BFD_JUMP_TABLE_RELOCS (bfd_elfNN),
    984   BFD_JUMP_TABLE_WRITE (bfd_elfNN),
    985   BFD_JUMP_TABLE_LINK (bfd_elfNN),
    986   BFD_JUMP_TABLE_DYNAMIC (bfd_elfNN),
    987 
    988   /* Alternative endian target.  */
    989 #ifdef TARGET_BIG_SYM
    990   & TARGET_BIG_SYM,
    991 #else
    992   NULL,
    993 #endif
    994 
    995   /* backend_data: */
    996   &elfNN_bed
    997 };
    998 #endif
    999