xref: /dflybsd-src/contrib/gdb-7/bfd/elfxx-target.h (revision cf7f2e2d389e8012d562650bd94d7e433f449d6e)
15796c8dcSSimon Schubert /* Target definitions for NN-bit ELF
25796c8dcSSimon Schubert    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
35796c8dcSSimon Schubert    2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
45796c8dcSSimon Schubert 
55796c8dcSSimon Schubert    This file is part of BFD, the Binary File Descriptor library.
65796c8dcSSimon Schubert 
75796c8dcSSimon Schubert    This program is free software; you can redistribute it and/or modify
85796c8dcSSimon Schubert    it under the terms of the GNU General Public License as published by
95796c8dcSSimon Schubert    the Free Software Foundation; either version 3 of the License, or
105796c8dcSSimon Schubert    (at your option) any later version.
115796c8dcSSimon Schubert 
125796c8dcSSimon Schubert    This program is distributed in the hope that it will be useful,
135796c8dcSSimon Schubert    but WITHOUT ANY WARRANTY; without even the implied warranty of
145796c8dcSSimon Schubert    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
155796c8dcSSimon Schubert    GNU General Public License for more details.
165796c8dcSSimon Schubert 
175796c8dcSSimon Schubert    You should have received a copy of the GNU General Public License
185796c8dcSSimon Schubert    along with this program; if not, write to the Free Software
195796c8dcSSimon Schubert    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
205796c8dcSSimon Schubert    MA 02110-1301, USA.  */
215796c8dcSSimon Schubert 
225796c8dcSSimon Schubert 
235796c8dcSSimon Schubert /* This structure contains everything that BFD knows about a target.
245796c8dcSSimon Schubert    It includes things like its byte order, name, what routines to call
255796c8dcSSimon Schubert    to do various operations, etc.  Every BFD points to a target structure
265796c8dcSSimon Schubert    with its "xvec" member.
275796c8dcSSimon Schubert 
285796c8dcSSimon Schubert    There are two such structures here:  one for big-endian machines and
295796c8dcSSimon Schubert    one for little-endian machines.   */
305796c8dcSSimon Schubert 
315796c8dcSSimon Schubert #ifndef bfd_elfNN_close_and_cleanup
325796c8dcSSimon Schubert #define	bfd_elfNN_close_and_cleanup _bfd_elf_close_and_cleanup
335796c8dcSSimon Schubert #endif
345796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_free_cached_info
355796c8dcSSimon Schubert #define bfd_elfNN_bfd_free_cached_info _bfd_free_cached_info
365796c8dcSSimon Schubert #endif
375796c8dcSSimon Schubert #ifndef bfd_elfNN_get_section_contents
385796c8dcSSimon Schubert #define bfd_elfNN_get_section_contents _bfd_generic_get_section_contents
395796c8dcSSimon Schubert #endif
405796c8dcSSimon Schubert 
415796c8dcSSimon Schubert #define bfd_elfNN_canonicalize_dynamic_symtab \
425796c8dcSSimon Schubert   _bfd_elf_canonicalize_dynamic_symtab
435796c8dcSSimon Schubert #ifndef bfd_elfNN_get_synthetic_symtab
445796c8dcSSimon Schubert #define bfd_elfNN_get_synthetic_symtab \
455796c8dcSSimon Schubert   _bfd_elf_get_synthetic_symtab
465796c8dcSSimon Schubert #endif
475796c8dcSSimon Schubert #ifndef bfd_elfNN_canonicalize_reloc
485796c8dcSSimon Schubert #define bfd_elfNN_canonicalize_reloc	_bfd_elf_canonicalize_reloc
495796c8dcSSimon Schubert #endif
505796c8dcSSimon Schubert #ifndef bfd_elfNN_find_nearest_line
515796c8dcSSimon Schubert #define bfd_elfNN_find_nearest_line	_bfd_elf_find_nearest_line
525796c8dcSSimon Schubert #endif
535796c8dcSSimon Schubert #ifndef bfd_elfNN_find_inliner_info
545796c8dcSSimon Schubert #define bfd_elfNN_find_inliner_info	_bfd_elf_find_inliner_info
555796c8dcSSimon Schubert #endif
565796c8dcSSimon Schubert #define bfd_elfNN_read_minisymbols	_bfd_elf_read_minisymbols
575796c8dcSSimon Schubert #define bfd_elfNN_minisymbol_to_symbol	_bfd_elf_minisymbol_to_symbol
585796c8dcSSimon Schubert #define bfd_elfNN_get_dynamic_symtab_upper_bound \
595796c8dcSSimon Schubert   _bfd_elf_get_dynamic_symtab_upper_bound
605796c8dcSSimon Schubert #define bfd_elfNN_get_lineno		_bfd_elf_get_lineno
615796c8dcSSimon Schubert #ifndef bfd_elfNN_get_reloc_upper_bound
625796c8dcSSimon Schubert #define bfd_elfNN_get_reloc_upper_bound _bfd_elf_get_reloc_upper_bound
635796c8dcSSimon Schubert #endif
645796c8dcSSimon Schubert #ifndef bfd_elfNN_get_symbol_info
655796c8dcSSimon Schubert #define bfd_elfNN_get_symbol_info	_bfd_elf_get_symbol_info
665796c8dcSSimon Schubert #endif
675796c8dcSSimon Schubert #define bfd_elfNN_canonicalize_symtab	_bfd_elf_canonicalize_symtab
685796c8dcSSimon Schubert #define bfd_elfNN_get_symtab_upper_bound _bfd_elf_get_symtab_upper_bound
695796c8dcSSimon Schubert #define bfd_elfNN_make_empty_symbol	_bfd_elf_make_empty_symbol
705796c8dcSSimon Schubert #ifndef bfd_elfNN_new_section_hook
715796c8dcSSimon Schubert #define bfd_elfNN_new_section_hook	_bfd_elf_new_section_hook
725796c8dcSSimon Schubert #endif
735796c8dcSSimon Schubert #define bfd_elfNN_set_arch_mach		_bfd_elf_set_arch_mach
745796c8dcSSimon Schubert #ifndef bfd_elfNN_set_section_contents
755796c8dcSSimon Schubert #define bfd_elfNN_set_section_contents	_bfd_elf_set_section_contents
765796c8dcSSimon Schubert #endif
775796c8dcSSimon Schubert #define bfd_elfNN_sizeof_headers	_bfd_elf_sizeof_headers
785796c8dcSSimon Schubert #define bfd_elfNN_write_object_contents _bfd_elf_write_object_contents
795796c8dcSSimon Schubert #define bfd_elfNN_write_corefile_contents _bfd_elf_write_corefile_contents
805796c8dcSSimon Schubert 
815796c8dcSSimon Schubert #define bfd_elfNN_get_section_contents_in_window \
825796c8dcSSimon Schubert   _bfd_generic_get_section_contents_in_window
835796c8dcSSimon Schubert 
845796c8dcSSimon Schubert #ifndef elf_backend_can_refcount
855796c8dcSSimon Schubert #define elf_backend_can_refcount 0
865796c8dcSSimon Schubert #endif
875796c8dcSSimon Schubert #ifndef elf_backend_want_got_plt
885796c8dcSSimon Schubert #define elf_backend_want_got_plt 0
895796c8dcSSimon Schubert #endif
905796c8dcSSimon Schubert #ifndef elf_backend_plt_readonly
915796c8dcSSimon Schubert #define elf_backend_plt_readonly 0
925796c8dcSSimon Schubert #endif
935796c8dcSSimon Schubert #ifndef elf_backend_want_plt_sym
945796c8dcSSimon Schubert #define elf_backend_want_plt_sym 0
955796c8dcSSimon Schubert #endif
965796c8dcSSimon Schubert #ifndef elf_backend_plt_not_loaded
975796c8dcSSimon Schubert #define elf_backend_plt_not_loaded 0
985796c8dcSSimon Schubert #endif
995796c8dcSSimon Schubert #ifndef elf_backend_plt_alignment
1005796c8dcSSimon Schubert #define elf_backend_plt_alignment 2
1015796c8dcSSimon Schubert #endif
1025796c8dcSSimon Schubert #ifndef elf_backend_want_dynbss
1035796c8dcSSimon Schubert #define elf_backend_want_dynbss 1
1045796c8dcSSimon Schubert #endif
1055796c8dcSSimon Schubert #ifndef elf_backend_want_p_paddr_set_to_zero
1065796c8dcSSimon Schubert #define elf_backend_want_p_paddr_set_to_zero 0
1075796c8dcSSimon Schubert #endif
1085796c8dcSSimon Schubert #ifndef elf_backend_default_execstack
1095796c8dcSSimon Schubert #define elf_backend_default_execstack 1
1105796c8dcSSimon Schubert #endif
1115796c8dcSSimon Schubert 
1125796c8dcSSimon Schubert #define bfd_elfNN_bfd_debug_info_start	bfd_void
1135796c8dcSSimon Schubert #define bfd_elfNN_bfd_debug_info_end	bfd_void
1145796c8dcSSimon Schubert #define bfd_elfNN_bfd_debug_info_accumulate \
1155796c8dcSSimon Schubert   ((void (*) (bfd*, struct bfd_section *)) bfd_void)
1165796c8dcSSimon Schubert 
1175796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_get_relocated_section_contents
1185796c8dcSSimon Schubert #define bfd_elfNN_bfd_get_relocated_section_contents \
1195796c8dcSSimon Schubert   bfd_generic_get_relocated_section_contents
1205796c8dcSSimon Schubert #endif
1215796c8dcSSimon Schubert 
1225796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_relax_section
1235796c8dcSSimon Schubert #define bfd_elfNN_bfd_relax_section bfd_generic_relax_section
1245796c8dcSSimon Schubert #endif
1255796c8dcSSimon Schubert 
1265796c8dcSSimon Schubert #ifndef elf_backend_can_gc_sections
1275796c8dcSSimon Schubert #define elf_backend_can_gc_sections 0
1285796c8dcSSimon Schubert #endif
1295796c8dcSSimon Schubert #ifndef elf_backend_can_refcount
1305796c8dcSSimon Schubert #define elf_backend_can_refcount 0
1315796c8dcSSimon Schubert #endif
1325796c8dcSSimon Schubert #ifndef elf_backend_want_got_sym
1335796c8dcSSimon Schubert #define elf_backend_want_got_sym 1
1345796c8dcSSimon Schubert #endif
1355796c8dcSSimon Schubert #ifndef elf_backend_gc_keep
1365796c8dcSSimon Schubert #define elf_backend_gc_keep		_bfd_elf_gc_keep
1375796c8dcSSimon Schubert #endif
1385796c8dcSSimon Schubert #ifndef elf_backend_gc_mark_dynamic_ref
1395796c8dcSSimon Schubert #define elf_backend_gc_mark_dynamic_ref	bfd_elf_gc_mark_dynamic_ref_symbol
1405796c8dcSSimon Schubert #endif
1415796c8dcSSimon Schubert #ifndef elf_backend_gc_mark_hook
1425796c8dcSSimon Schubert #define elf_backend_gc_mark_hook	_bfd_elf_gc_mark_hook
1435796c8dcSSimon Schubert #endif
1445796c8dcSSimon Schubert #ifndef elf_backend_gc_mark_extra_sections
1455796c8dcSSimon Schubert #define elf_backend_gc_mark_extra_sections	NULL
1465796c8dcSSimon Schubert #endif
1475796c8dcSSimon Schubert #ifndef elf_backend_gc_sweep_hook
1485796c8dcSSimon Schubert #define elf_backend_gc_sweep_hook	NULL
1495796c8dcSSimon Schubert #endif
1505796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_gc_sections
1515796c8dcSSimon Schubert #define bfd_elfNN_bfd_gc_sections bfd_elf_gc_sections
1525796c8dcSSimon Schubert #endif
1535796c8dcSSimon Schubert 
1545796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_merge_sections
1555796c8dcSSimon Schubert #define bfd_elfNN_bfd_merge_sections \
1565796c8dcSSimon Schubert   _bfd_elf_merge_sections
1575796c8dcSSimon Schubert #endif
1585796c8dcSSimon Schubert 
1595796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_is_group_section
1605796c8dcSSimon Schubert #define bfd_elfNN_bfd_is_group_section bfd_elf_is_group_section
1615796c8dcSSimon Schubert #endif
1625796c8dcSSimon Schubert 
1635796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_discard_group
1645796c8dcSSimon Schubert #define bfd_elfNN_bfd_discard_group bfd_generic_discard_group
1655796c8dcSSimon Schubert #endif
1665796c8dcSSimon Schubert 
1675796c8dcSSimon Schubert #ifndef bfd_elfNN_section_already_linked
1685796c8dcSSimon Schubert #define bfd_elfNN_section_already_linked \
1695796c8dcSSimon Schubert   _bfd_elf_section_already_linked
1705796c8dcSSimon Schubert #endif
1715796c8dcSSimon Schubert 
1725796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_define_common_symbol
1735796c8dcSSimon Schubert #define bfd_elfNN_bfd_define_common_symbol bfd_generic_define_common_symbol
1745796c8dcSSimon Schubert #endif
1755796c8dcSSimon Schubert 
1765796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_make_debug_symbol
1775796c8dcSSimon Schubert #define bfd_elfNN_bfd_make_debug_symbol \
1785796c8dcSSimon Schubert   ((asymbol * (*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
1795796c8dcSSimon Schubert #endif
1805796c8dcSSimon Schubert 
1815796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_copy_private_symbol_data
1825796c8dcSSimon Schubert #define bfd_elfNN_bfd_copy_private_symbol_data \
1835796c8dcSSimon Schubert   _bfd_elf_copy_private_symbol_data
1845796c8dcSSimon Schubert #endif
1855796c8dcSSimon Schubert 
1865796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_copy_private_section_data
1875796c8dcSSimon Schubert #define bfd_elfNN_bfd_copy_private_section_data \
1885796c8dcSSimon Schubert   _bfd_elf_copy_private_section_data
1895796c8dcSSimon Schubert #endif
1905796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_copy_private_header_data
1915796c8dcSSimon Schubert #define bfd_elfNN_bfd_copy_private_header_data \
1925796c8dcSSimon Schubert   _bfd_elf_copy_private_header_data
1935796c8dcSSimon Schubert #endif
1945796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_copy_private_bfd_data
1955796c8dcSSimon Schubert #define bfd_elfNN_bfd_copy_private_bfd_data \
1965796c8dcSSimon Schubert   _bfd_elf_copy_private_bfd_data
1975796c8dcSSimon Schubert #endif
1985796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_print_private_bfd_data
1995796c8dcSSimon Schubert #define bfd_elfNN_bfd_print_private_bfd_data \
2005796c8dcSSimon Schubert   _bfd_elf_print_private_bfd_data
2015796c8dcSSimon Schubert #endif
2025796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_merge_private_bfd_data
2035796c8dcSSimon Schubert #define bfd_elfNN_bfd_merge_private_bfd_data \
2045796c8dcSSimon Schubert   ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
2055796c8dcSSimon Schubert #endif
2065796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_set_private_flags
2075796c8dcSSimon Schubert #define bfd_elfNN_bfd_set_private_flags \
2085796c8dcSSimon Schubert   ((bfd_boolean (*) (bfd *, flagword)) bfd_true)
2095796c8dcSSimon Schubert #endif
2105796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_is_local_label_name
2115796c8dcSSimon Schubert #define bfd_elfNN_bfd_is_local_label_name _bfd_elf_is_local_label_name
2125796c8dcSSimon Schubert #endif
2135796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_is_target_special_symbol
2145796c8dcSSimon Schubert #define bfd_elfNN_bfd_is_target_special_symbol \
2155796c8dcSSimon Schubert   ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
2165796c8dcSSimon Schubert #endif
2175796c8dcSSimon Schubert 
2185796c8dcSSimon Schubert #ifndef bfd_elfNN_get_dynamic_reloc_upper_bound
2195796c8dcSSimon Schubert #define bfd_elfNN_get_dynamic_reloc_upper_bound \
2205796c8dcSSimon Schubert   _bfd_elf_get_dynamic_reloc_upper_bound
2215796c8dcSSimon Schubert #endif
2225796c8dcSSimon Schubert #ifndef bfd_elfNN_canonicalize_dynamic_reloc
2235796c8dcSSimon Schubert #define bfd_elfNN_canonicalize_dynamic_reloc \
2245796c8dcSSimon Schubert   _bfd_elf_canonicalize_dynamic_reloc
2255796c8dcSSimon Schubert #endif
2265796c8dcSSimon Schubert 
2275796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_link_hash_table_free
2285796c8dcSSimon Schubert #define bfd_elfNN_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
2295796c8dcSSimon Schubert #endif
2305796c8dcSSimon Schubert 
2315796c8dcSSimon Schubert #ifdef elf_backend_relocate_section
2325796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_link_hash_table_create
2335796c8dcSSimon Schubert #define bfd_elfNN_bfd_link_hash_table_create _bfd_elf_link_hash_table_create
2345796c8dcSSimon Schubert #endif
2355796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_link_add_symbols
2365796c8dcSSimon Schubert #define bfd_elfNN_bfd_link_add_symbols	bfd_elf_link_add_symbols
2375796c8dcSSimon Schubert #endif
2385796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_final_link
2395796c8dcSSimon Schubert #define bfd_elfNN_bfd_final_link	bfd_elf_final_link
2405796c8dcSSimon Schubert #endif
2415796c8dcSSimon Schubert #else /* ! defined (elf_backend_relocate_section) */
2425796c8dcSSimon Schubert /* If no backend relocate_section routine, use the generic linker.
2435796c8dcSSimon Schubert    Note - this will prevent the port from being able to use some of
2445796c8dcSSimon Schubert    the other features of the ELF linker, because the generic hash structure
2455796c8dcSSimon Schubert    does not have the fields needed by the ELF linker.  In particular it
2465796c8dcSSimon Schubert    means that linking directly to S-records will not work.  */
2475796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_link_hash_table_create
2485796c8dcSSimon Schubert #define bfd_elfNN_bfd_link_hash_table_create \
2495796c8dcSSimon Schubert   _bfd_generic_link_hash_table_create
2505796c8dcSSimon Schubert #endif
2515796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_link_add_symbols
2525796c8dcSSimon Schubert #define bfd_elfNN_bfd_link_add_symbols	_bfd_generic_link_add_symbols
2535796c8dcSSimon Schubert #endif
2545796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_final_link
2555796c8dcSSimon Schubert #define bfd_elfNN_bfd_final_link	_bfd_generic_final_link
2565796c8dcSSimon Schubert #endif
2575796c8dcSSimon Schubert #endif /* ! defined (elf_backend_relocate_section) */
2585796c8dcSSimon Schubert 
2595796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_link_just_syms
2605796c8dcSSimon Schubert #define bfd_elfNN_bfd_link_just_syms	_bfd_elf_link_just_syms
2615796c8dcSSimon Schubert #endif
2625796c8dcSSimon Schubert 
263*cf7f2e2dSJohn Marino #ifndef bfd_elfNN_bfd_copy_link_hash_symbol_type
264*cf7f2e2dSJohn Marino #define bfd_elfNN_bfd_copy_link_hash_symbol_type \
265*cf7f2e2dSJohn Marino   _bfd_elf_copy_link_hash_symbol_type
266*cf7f2e2dSJohn Marino #endif
267*cf7f2e2dSJohn Marino 
2685796c8dcSSimon Schubert #ifndef bfd_elfNN_bfd_link_split_section
2695796c8dcSSimon Schubert #define bfd_elfNN_bfd_link_split_section _bfd_generic_link_split_section
2705796c8dcSSimon Schubert #endif
2715796c8dcSSimon Schubert 
2725796c8dcSSimon Schubert #ifndef bfd_elfNN_archive_p
2735796c8dcSSimon Schubert #define bfd_elfNN_archive_p bfd_generic_archive_p
2745796c8dcSSimon Schubert #endif
2755796c8dcSSimon Schubert 
2765796c8dcSSimon Schubert #ifndef bfd_elfNN_write_archive_contents
2775796c8dcSSimon Schubert #define bfd_elfNN_write_archive_contents _bfd_write_archive_contents
2785796c8dcSSimon Schubert #endif
2795796c8dcSSimon Schubert 
2805796c8dcSSimon Schubert #ifndef bfd_elfNN_mkobject
2815796c8dcSSimon Schubert #define bfd_elfNN_mkobject bfd_elf_make_generic_object
2825796c8dcSSimon Schubert #endif
2835796c8dcSSimon Schubert 
2845796c8dcSSimon Schubert #ifndef bfd_elfNN_mkcorefile
2855796c8dcSSimon Schubert #define bfd_elfNN_mkcorefile bfd_elf_mkcorefile
2865796c8dcSSimon Schubert #endif
2875796c8dcSSimon Schubert 
2885796c8dcSSimon Schubert #ifndef bfd_elfNN_mkarchive
2895796c8dcSSimon Schubert #define bfd_elfNN_mkarchive _bfd_generic_mkarchive
2905796c8dcSSimon Schubert #endif
2915796c8dcSSimon Schubert 
2925796c8dcSSimon Schubert #ifndef bfd_elfNN_print_symbol
2935796c8dcSSimon Schubert #define bfd_elfNN_print_symbol bfd_elf_print_symbol
2945796c8dcSSimon Schubert #endif
2955796c8dcSSimon Schubert 
2965796c8dcSSimon Schubert #ifndef elf_symbol_leading_char
2975796c8dcSSimon Schubert #define elf_symbol_leading_char 0
2985796c8dcSSimon Schubert #endif
2995796c8dcSSimon Schubert 
3005796c8dcSSimon Schubert #ifndef elf_info_to_howto
3015796c8dcSSimon Schubert #define elf_info_to_howto 0
3025796c8dcSSimon Schubert #endif
3035796c8dcSSimon Schubert 
3045796c8dcSSimon Schubert #ifndef elf_info_to_howto_rel
3055796c8dcSSimon Schubert #define elf_info_to_howto_rel 0
3065796c8dcSSimon Schubert #endif
3075796c8dcSSimon Schubert 
3085796c8dcSSimon Schubert #ifndef ELF_OSABI
3095796c8dcSSimon Schubert #define ELF_OSABI ELFOSABI_NONE
3105796c8dcSSimon Schubert #endif
3115796c8dcSSimon Schubert 
3125796c8dcSSimon Schubert #ifndef ELF_MAXPAGESIZE
3135796c8dcSSimon Schubert # error ELF_MAXPAGESIZE is not defined
3145796c8dcSSimon Schubert #define ELF_MAXPAGESIZE 1
3155796c8dcSSimon Schubert #endif
3165796c8dcSSimon Schubert 
3175796c8dcSSimon Schubert #ifndef ELF_COMMONPAGESIZE
3185796c8dcSSimon Schubert #define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE
3195796c8dcSSimon Schubert #endif
3205796c8dcSSimon Schubert 
3215796c8dcSSimon Schubert #ifndef ELF_MINPAGESIZE
3225796c8dcSSimon Schubert #define ELF_MINPAGESIZE ELF_COMMONPAGESIZE
3235796c8dcSSimon Schubert #endif
3245796c8dcSSimon Schubert 
3255796c8dcSSimon Schubert #if ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
3265796c8dcSSimon Schubert # error ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
3275796c8dcSSimon Schubert #endif
3285796c8dcSSimon Schubert #if ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
3295796c8dcSSimon Schubert # error ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
3305796c8dcSSimon Schubert #endif
3315796c8dcSSimon Schubert 
3325796c8dcSSimon Schubert #ifndef ELF_DYNAMIC_SEC_FLAGS
3335796c8dcSSimon Schubert /* Note that we set the SEC_IN_MEMORY flag for these sections.  */
3345796c8dcSSimon Schubert #define ELF_DYNAMIC_SEC_FLAGS			\
3355796c8dcSSimon Schubert   (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS	\
3365796c8dcSSimon Schubert    | SEC_IN_MEMORY | SEC_LINKER_CREATED)
3375796c8dcSSimon Schubert #endif
3385796c8dcSSimon Schubert 
3395796c8dcSSimon Schubert #ifndef elf_backend_collect
3405796c8dcSSimon Schubert #define elf_backend_collect FALSE
3415796c8dcSSimon Schubert #endif
3425796c8dcSSimon Schubert #ifndef elf_backend_type_change_ok
3435796c8dcSSimon Schubert #define elf_backend_type_change_ok FALSE
3445796c8dcSSimon Schubert #endif
3455796c8dcSSimon Schubert 
3465796c8dcSSimon Schubert #ifndef elf_backend_sym_is_global
3475796c8dcSSimon Schubert #define elf_backend_sym_is_global	0
3485796c8dcSSimon Schubert #endif
3495796c8dcSSimon Schubert #ifndef elf_backend_object_p
3505796c8dcSSimon Schubert #define elf_backend_object_p		0
3515796c8dcSSimon Schubert #endif
3525796c8dcSSimon Schubert #ifndef elf_backend_symbol_processing
3535796c8dcSSimon Schubert #define elf_backend_symbol_processing	0
3545796c8dcSSimon Schubert #endif
3555796c8dcSSimon Schubert #ifndef elf_backend_symbol_table_processing
3565796c8dcSSimon Schubert #define elf_backend_symbol_table_processing	0
3575796c8dcSSimon Schubert #endif
3585796c8dcSSimon Schubert #ifndef elf_backend_get_symbol_type
3595796c8dcSSimon Schubert #define elf_backend_get_symbol_type 0
3605796c8dcSSimon Schubert #endif
3615796c8dcSSimon Schubert #ifndef elf_backend_archive_symbol_lookup
3625796c8dcSSimon Schubert #define elf_backend_archive_symbol_lookup _bfd_elf_archive_symbol_lookup
3635796c8dcSSimon Schubert #endif
3645796c8dcSSimon Schubert #ifndef elf_backend_name_local_section_symbols
3655796c8dcSSimon Schubert #define elf_backend_name_local_section_symbols	0
3665796c8dcSSimon Schubert #endif
3675796c8dcSSimon Schubert #ifndef elf_backend_section_processing
3685796c8dcSSimon Schubert #define elf_backend_section_processing	0
3695796c8dcSSimon Schubert #endif
3705796c8dcSSimon Schubert #ifndef elf_backend_section_from_shdr
3715796c8dcSSimon Schubert #define elf_backend_section_from_shdr	_bfd_elf_make_section_from_shdr
3725796c8dcSSimon Schubert #endif
3735796c8dcSSimon Schubert #ifndef elf_backend_section_flags
3745796c8dcSSimon Schubert #define elf_backend_section_flags	0
3755796c8dcSSimon Schubert #endif
3765796c8dcSSimon Schubert #ifndef elf_backend_get_sec_type_attr
3775796c8dcSSimon Schubert #define elf_backend_get_sec_type_attr	_bfd_elf_get_sec_type_attr
3785796c8dcSSimon Schubert #endif
3795796c8dcSSimon Schubert #ifndef elf_backend_section_from_phdr
3805796c8dcSSimon Schubert #define elf_backend_section_from_phdr	_bfd_elf_make_section_from_phdr
3815796c8dcSSimon Schubert #endif
3825796c8dcSSimon Schubert #ifndef elf_backend_fake_sections
3835796c8dcSSimon Schubert #define elf_backend_fake_sections	0
3845796c8dcSSimon Schubert #endif
3855796c8dcSSimon Schubert #ifndef elf_backend_section_from_bfd_section
3865796c8dcSSimon Schubert #define elf_backend_section_from_bfd_section	0
3875796c8dcSSimon Schubert #endif
3885796c8dcSSimon Schubert #ifndef elf_backend_add_symbol_hook
3895796c8dcSSimon Schubert #define elf_backend_add_symbol_hook	0
3905796c8dcSSimon Schubert #endif
3915796c8dcSSimon Schubert #ifndef elf_backend_link_output_symbol_hook
3925796c8dcSSimon Schubert #define elf_backend_link_output_symbol_hook 0
3935796c8dcSSimon Schubert #endif
3945796c8dcSSimon Schubert #ifndef elf_backend_create_dynamic_sections
3955796c8dcSSimon Schubert #define elf_backend_create_dynamic_sections 0
3965796c8dcSSimon Schubert #endif
3975796c8dcSSimon Schubert #ifndef elf_backend_omit_section_dynsym
3985796c8dcSSimon Schubert #define elf_backend_omit_section_dynsym _bfd_elf_link_omit_section_dynsym
3995796c8dcSSimon Schubert #endif
4005796c8dcSSimon Schubert #ifndef elf_backend_relocs_compatible
4015796c8dcSSimon Schubert #define elf_backend_relocs_compatible _bfd_elf_default_relocs_compatible
4025796c8dcSSimon Schubert #endif
4035796c8dcSSimon Schubert #ifndef elf_backend_check_relocs
4045796c8dcSSimon Schubert #define elf_backend_check_relocs	0
4055796c8dcSSimon Schubert #endif
4065796c8dcSSimon Schubert #ifndef elf_backend_check_directives
4075796c8dcSSimon Schubert #define elf_backend_check_directives	0
4085796c8dcSSimon Schubert #endif
4095796c8dcSSimon Schubert #ifndef elf_backend_as_needed_cleanup
4105796c8dcSSimon Schubert #define elf_backend_as_needed_cleanup	0
4115796c8dcSSimon Schubert #endif
4125796c8dcSSimon Schubert #ifndef elf_backend_adjust_dynamic_symbol
4135796c8dcSSimon Schubert #define elf_backend_adjust_dynamic_symbol 0
4145796c8dcSSimon Schubert #endif
4155796c8dcSSimon Schubert #ifndef elf_backend_always_size_sections
4165796c8dcSSimon Schubert #define elf_backend_always_size_sections 0
4175796c8dcSSimon Schubert #endif
4185796c8dcSSimon Schubert #ifndef elf_backend_size_dynamic_sections
4195796c8dcSSimon Schubert #define elf_backend_size_dynamic_sections 0
4205796c8dcSSimon Schubert #endif
4215796c8dcSSimon Schubert #ifndef elf_backend_init_index_section
4225796c8dcSSimon Schubert #define elf_backend_init_index_section \
4235796c8dcSSimon Schubert  ((void (*) (bfd *, struct bfd_link_info *)) bfd_void)
4245796c8dcSSimon Schubert #endif
4255796c8dcSSimon Schubert #ifndef elf_backend_relocate_section
4265796c8dcSSimon Schubert #define elf_backend_relocate_section	0
4275796c8dcSSimon Schubert #endif
4285796c8dcSSimon Schubert #ifndef elf_backend_finish_dynamic_symbol
4295796c8dcSSimon Schubert #define elf_backend_finish_dynamic_symbol	0
4305796c8dcSSimon Schubert #endif
4315796c8dcSSimon Schubert #ifndef elf_backend_finish_dynamic_sections
4325796c8dcSSimon Schubert #define elf_backend_finish_dynamic_sections	0
4335796c8dcSSimon Schubert #endif
4345796c8dcSSimon Schubert #ifndef elf_backend_begin_write_processing
4355796c8dcSSimon Schubert #define elf_backend_begin_write_processing	0
4365796c8dcSSimon Schubert #endif
4375796c8dcSSimon Schubert #ifndef elf_backend_final_write_processing
4385796c8dcSSimon Schubert #define elf_backend_final_write_processing	0
4395796c8dcSSimon Schubert #endif
4405796c8dcSSimon Schubert #ifndef elf_backend_additional_program_headers
4415796c8dcSSimon Schubert #define elf_backend_additional_program_headers	0
4425796c8dcSSimon Schubert #endif
4435796c8dcSSimon Schubert #ifndef elf_backend_modify_segment_map
4445796c8dcSSimon Schubert #define elf_backend_modify_segment_map	0
4455796c8dcSSimon Schubert #endif
4465796c8dcSSimon Schubert #ifndef elf_backend_modify_program_headers
4475796c8dcSSimon Schubert #define elf_backend_modify_program_headers	0
4485796c8dcSSimon Schubert #endif
4495796c8dcSSimon Schubert #ifndef elf_backend_ecoff_debug_swap
4505796c8dcSSimon Schubert #define elf_backend_ecoff_debug_swap	0
4515796c8dcSSimon Schubert #endif
4525796c8dcSSimon Schubert #ifndef elf_backend_bfd_from_remote_memory
4535796c8dcSSimon Schubert #define elf_backend_bfd_from_remote_memory _bfd_elfNN_bfd_from_remote_memory
4545796c8dcSSimon Schubert #endif
4555796c8dcSSimon Schubert #ifndef elf_backend_got_header_size
4565796c8dcSSimon Schubert #define elf_backend_got_header_size	0
4575796c8dcSSimon Schubert #endif
4585796c8dcSSimon Schubert #ifndef elf_backend_got_elt_size
4595796c8dcSSimon Schubert #define elf_backend_got_elt_size _bfd_elf_default_got_elt_size
4605796c8dcSSimon Schubert #endif
4615796c8dcSSimon Schubert #ifndef elf_backend_obj_attrs_vendor
4625796c8dcSSimon Schubert #define elf_backend_obj_attrs_vendor		NULL
4635796c8dcSSimon Schubert #endif
4645796c8dcSSimon Schubert #ifndef elf_backend_obj_attrs_section
4655796c8dcSSimon Schubert #define elf_backend_obj_attrs_section		NULL
4665796c8dcSSimon Schubert #endif
4675796c8dcSSimon Schubert #ifndef elf_backend_obj_attrs_arg_type
4685796c8dcSSimon Schubert #define elf_backend_obj_attrs_arg_type		NULL
4695796c8dcSSimon Schubert #endif
4705796c8dcSSimon Schubert #ifndef elf_backend_obj_attrs_section_type
4715796c8dcSSimon Schubert #define elf_backend_obj_attrs_section_type		SHT_GNU_ATTRIBUTES
4725796c8dcSSimon Schubert #endif
4735796c8dcSSimon Schubert #ifndef elf_backend_obj_attrs_order
4745796c8dcSSimon Schubert #define elf_backend_obj_attrs_order		NULL
4755796c8dcSSimon Schubert #endif
4765796c8dcSSimon Schubert #ifndef elf_backend_post_process_headers
4775796c8dcSSimon Schubert #define elf_backend_post_process_headers	NULL
4785796c8dcSSimon Schubert #endif
4795796c8dcSSimon Schubert #ifndef elf_backend_print_symbol_all
4805796c8dcSSimon Schubert #define elf_backend_print_symbol_all		NULL
4815796c8dcSSimon Schubert #endif
4825796c8dcSSimon Schubert #ifndef elf_backend_output_arch_local_syms
4835796c8dcSSimon Schubert #define elf_backend_output_arch_local_syms	NULL
4845796c8dcSSimon Schubert #endif
4855796c8dcSSimon Schubert #ifndef elf_backend_output_arch_syms
4865796c8dcSSimon Schubert #define elf_backend_output_arch_syms		NULL
4875796c8dcSSimon Schubert #endif
4885796c8dcSSimon Schubert #ifndef elf_backend_copy_indirect_symbol
4895796c8dcSSimon Schubert #define elf_backend_copy_indirect_symbol  _bfd_elf_link_hash_copy_indirect
4905796c8dcSSimon Schubert #endif
4915796c8dcSSimon Schubert #ifndef elf_backend_hide_symbol
4925796c8dcSSimon Schubert #define elf_backend_hide_symbol		_bfd_elf_link_hash_hide_symbol
4935796c8dcSSimon Schubert #endif
4945796c8dcSSimon Schubert #ifndef elf_backend_fixup_symbol
4955796c8dcSSimon Schubert #define elf_backend_fixup_symbol		NULL
4965796c8dcSSimon Schubert #endif
4975796c8dcSSimon Schubert #ifndef elf_backend_merge_symbol_attribute
4985796c8dcSSimon Schubert #define elf_backend_merge_symbol_attribute	NULL
4995796c8dcSSimon Schubert #endif
5005796c8dcSSimon Schubert #ifndef elf_backend_get_target_dtag
5015796c8dcSSimon Schubert #define elf_backend_get_target_dtag		NULL
5025796c8dcSSimon Schubert #endif
5035796c8dcSSimon Schubert #ifndef elf_backend_ignore_undef_symbol
5045796c8dcSSimon Schubert #define elf_backend_ignore_undef_symbol		NULL
5055796c8dcSSimon Schubert #endif
5065796c8dcSSimon Schubert #ifndef elf_backend_emit_relocs
5075796c8dcSSimon Schubert #define elf_backend_emit_relocs			_bfd_elf_link_output_relocs
5085796c8dcSSimon Schubert #endif
5095796c8dcSSimon Schubert #ifndef elf_backend_count_relocs
5105796c8dcSSimon Schubert #define elf_backend_count_relocs		NULL
5115796c8dcSSimon Schubert #endif
5125796c8dcSSimon Schubert #ifndef elf_backend_grok_prstatus
5135796c8dcSSimon Schubert #define elf_backend_grok_prstatus		NULL
5145796c8dcSSimon Schubert #endif
5155796c8dcSSimon Schubert #ifndef elf_backend_grok_psinfo
5165796c8dcSSimon Schubert #define elf_backend_grok_psinfo			NULL
5175796c8dcSSimon Schubert #endif
5185796c8dcSSimon Schubert #ifndef elf_backend_write_core_note
5195796c8dcSSimon Schubert #define elf_backend_write_core_note		NULL
5205796c8dcSSimon Schubert #endif
5215796c8dcSSimon Schubert #ifndef elf_backend_reloc_type_class
5225796c8dcSSimon Schubert #define elf_backend_reloc_type_class		_bfd_elf_reloc_type_class
5235796c8dcSSimon Schubert #endif
5245796c8dcSSimon Schubert #ifndef elf_backend_discard_info
5255796c8dcSSimon Schubert #define elf_backend_discard_info		NULL
5265796c8dcSSimon Schubert #endif
5275796c8dcSSimon Schubert #ifndef elf_backend_ignore_discarded_relocs
5285796c8dcSSimon Schubert #define elf_backend_ignore_discarded_relocs	NULL
5295796c8dcSSimon Schubert #endif
5305796c8dcSSimon Schubert #ifndef elf_backend_action_discarded
5315796c8dcSSimon Schubert #define elf_backend_action_discarded _bfd_elf_default_action_discarded
5325796c8dcSSimon Schubert #endif
5335796c8dcSSimon Schubert #ifndef elf_backend_eh_frame_address_size
5345796c8dcSSimon Schubert #define elf_backend_eh_frame_address_size _bfd_elf_eh_frame_address_size
5355796c8dcSSimon Schubert #endif
5365796c8dcSSimon Schubert #ifndef elf_backend_can_make_relative_eh_frame
5375796c8dcSSimon Schubert #define elf_backend_can_make_relative_eh_frame	_bfd_elf_can_make_relative
5385796c8dcSSimon Schubert #endif
5395796c8dcSSimon Schubert #ifndef elf_backend_can_make_lsda_relative_eh_frame
5405796c8dcSSimon Schubert #define elf_backend_can_make_lsda_relative_eh_frame	_bfd_elf_can_make_relative
5415796c8dcSSimon Schubert #endif
5425796c8dcSSimon Schubert #ifndef elf_backend_encode_eh_address
5435796c8dcSSimon Schubert #define elf_backend_encode_eh_address		_bfd_elf_encode_eh_address
5445796c8dcSSimon Schubert #endif
5455796c8dcSSimon Schubert #ifndef elf_backend_write_section
5465796c8dcSSimon Schubert #define elf_backend_write_section		NULL
5475796c8dcSSimon Schubert #endif
5485796c8dcSSimon Schubert #ifndef elf_backend_mips_irix_compat
5495796c8dcSSimon Schubert #define elf_backend_mips_irix_compat		NULL
5505796c8dcSSimon Schubert #endif
5515796c8dcSSimon Schubert #ifndef elf_backend_mips_rtype_to_howto
5525796c8dcSSimon Schubert #define elf_backend_mips_rtype_to_howto		NULL
5535796c8dcSSimon Schubert #endif
5545796c8dcSSimon Schubert 
5555796c8dcSSimon Schubert /* Previously, backends could only use SHT_REL or SHT_RELA relocation
5565796c8dcSSimon Schubert    sections, but not both.  They defined USE_REL to indicate SHT_REL
5575796c8dcSSimon Schubert    sections, and left it undefined to indicated SHT_RELA sections.
5585796c8dcSSimon Schubert    For backwards compatibility, we still support this usage.  */
5595796c8dcSSimon Schubert #ifndef USE_REL
5605796c8dcSSimon Schubert #define USE_REL 0
5615796c8dcSSimon Schubert #endif
5625796c8dcSSimon Schubert 
5635796c8dcSSimon Schubert /* Use these in new code.  */
5645796c8dcSSimon Schubert #ifndef elf_backend_may_use_rel_p
5655796c8dcSSimon Schubert #define elf_backend_may_use_rel_p USE_REL
5665796c8dcSSimon Schubert #endif
5675796c8dcSSimon Schubert #ifndef elf_backend_may_use_rela_p
5685796c8dcSSimon Schubert #define elf_backend_may_use_rela_p !USE_REL
5695796c8dcSSimon Schubert #endif
5705796c8dcSSimon Schubert #ifndef elf_backend_default_use_rela_p
5715796c8dcSSimon Schubert #define elf_backend_default_use_rela_p !USE_REL
5725796c8dcSSimon Schubert #endif
5735796c8dcSSimon Schubert #ifndef elf_backend_rela_plts_and_copies_p
5745796c8dcSSimon Schubert #define elf_backend_rela_plts_and_copies_p elf_backend_default_use_rela_p
5755796c8dcSSimon Schubert #endif
5765796c8dcSSimon Schubert 
5775796c8dcSSimon Schubert #ifndef elf_backend_rela_normal
5785796c8dcSSimon Schubert #define elf_backend_rela_normal 0
5795796c8dcSSimon Schubert #endif
5805796c8dcSSimon Schubert 
5815796c8dcSSimon Schubert #ifndef elf_backend_plt_sym_val
5825796c8dcSSimon Schubert #define elf_backend_plt_sym_val NULL
5835796c8dcSSimon Schubert #endif
5845796c8dcSSimon Schubert #ifndef elf_backend_relplt_name
5855796c8dcSSimon Schubert #define elf_backend_relplt_name NULL
5865796c8dcSSimon Schubert #endif
5875796c8dcSSimon Schubert 
5885796c8dcSSimon Schubert #ifndef ELF_MACHINE_ALT1
5895796c8dcSSimon Schubert #define ELF_MACHINE_ALT1 0
5905796c8dcSSimon Schubert #endif
5915796c8dcSSimon Schubert 
5925796c8dcSSimon Schubert #ifndef ELF_MACHINE_ALT2
5935796c8dcSSimon Schubert #define ELF_MACHINE_ALT2 0
5945796c8dcSSimon Schubert #endif
5955796c8dcSSimon Schubert 
5965796c8dcSSimon Schubert #ifndef elf_backend_size_info
5975796c8dcSSimon Schubert #define elf_backend_size_info _bfd_elfNN_size_info
5985796c8dcSSimon Schubert #endif
5995796c8dcSSimon Schubert 
6005796c8dcSSimon Schubert #ifndef elf_backend_special_sections
6015796c8dcSSimon Schubert #define elf_backend_special_sections NULL
6025796c8dcSSimon Schubert #endif
6035796c8dcSSimon Schubert 
6045796c8dcSSimon Schubert #ifndef elf_backend_sign_extend_vma
6055796c8dcSSimon Schubert #define elf_backend_sign_extend_vma 0
6065796c8dcSSimon Schubert #endif
6075796c8dcSSimon Schubert 
6085796c8dcSSimon Schubert #ifndef elf_backend_link_order_error_handler
6095796c8dcSSimon Schubert #define elf_backend_link_order_error_handler _bfd_default_error_handler
6105796c8dcSSimon Schubert #endif
6115796c8dcSSimon Schubert 
6125796c8dcSSimon Schubert #ifndef elf_backend_common_definition
6135796c8dcSSimon Schubert #define elf_backend_common_definition _bfd_elf_common_definition
6145796c8dcSSimon Schubert #endif
6155796c8dcSSimon Schubert 
6165796c8dcSSimon Schubert #ifndef elf_backend_common_section_index
6175796c8dcSSimon Schubert #define elf_backend_common_section_index _bfd_elf_common_section_index
6185796c8dcSSimon Schubert #endif
6195796c8dcSSimon Schubert 
6205796c8dcSSimon Schubert #ifndef elf_backend_common_section
6215796c8dcSSimon Schubert #define elf_backend_common_section _bfd_elf_common_section
6225796c8dcSSimon Schubert #endif
6235796c8dcSSimon Schubert 
6245796c8dcSSimon Schubert #ifndef elf_backend_merge_symbol
6255796c8dcSSimon Schubert #define elf_backend_merge_symbol NULL
6265796c8dcSSimon Schubert #endif
6275796c8dcSSimon Schubert 
6285796c8dcSSimon Schubert #ifndef elf_backend_hash_symbol
6295796c8dcSSimon Schubert #define elf_backend_hash_symbol _bfd_elf_hash_symbol
6305796c8dcSSimon Schubert #endif
6315796c8dcSSimon Schubert 
6325796c8dcSSimon Schubert #ifndef elf_backend_is_function_type
6335796c8dcSSimon Schubert #define elf_backend_is_function_type _bfd_elf_is_function_type
6345796c8dcSSimon Schubert #endif
6355796c8dcSSimon Schubert 
6365796c8dcSSimon Schubert extern const struct elf_size_info _bfd_elfNN_size_info;
6375796c8dcSSimon Schubert 
6385796c8dcSSimon Schubert static struct elf_backend_data elfNN_bed =
6395796c8dcSSimon Schubert {
6405796c8dcSSimon Schubert   ELF_ARCH,			/* arch */
6415796c8dcSSimon Schubert   ELF_MACHINE_CODE,		/* elf_machine_code */
6425796c8dcSSimon Schubert   ELF_OSABI,			/* elf_osabi  */
6435796c8dcSSimon Schubert   ELF_MAXPAGESIZE,		/* maxpagesize */
6445796c8dcSSimon Schubert   ELF_MINPAGESIZE,		/* minpagesize */
6455796c8dcSSimon Schubert   ELF_COMMONPAGESIZE,		/* commonpagesize */
6465796c8dcSSimon Schubert   ELF_DYNAMIC_SEC_FLAGS,	/* dynamic_sec_flags */
6475796c8dcSSimon Schubert   elf_info_to_howto,
6485796c8dcSSimon Schubert   elf_info_to_howto_rel,
6495796c8dcSSimon Schubert   elf_backend_sym_is_global,
6505796c8dcSSimon Schubert   elf_backend_object_p,
6515796c8dcSSimon Schubert   elf_backend_symbol_processing,
6525796c8dcSSimon Schubert   elf_backend_symbol_table_processing,
6535796c8dcSSimon Schubert   elf_backend_get_symbol_type,
6545796c8dcSSimon Schubert   elf_backend_archive_symbol_lookup,
6555796c8dcSSimon Schubert   elf_backend_name_local_section_symbols,
6565796c8dcSSimon Schubert   elf_backend_section_processing,
6575796c8dcSSimon Schubert   elf_backend_section_from_shdr,
6585796c8dcSSimon Schubert   elf_backend_section_flags,
6595796c8dcSSimon Schubert   elf_backend_get_sec_type_attr,
6605796c8dcSSimon Schubert   elf_backend_section_from_phdr,
6615796c8dcSSimon Schubert   elf_backend_fake_sections,
6625796c8dcSSimon Schubert   elf_backend_section_from_bfd_section,
6635796c8dcSSimon Schubert   elf_backend_add_symbol_hook,
6645796c8dcSSimon Schubert   elf_backend_link_output_symbol_hook,
6655796c8dcSSimon Schubert   elf_backend_create_dynamic_sections,
6665796c8dcSSimon Schubert   elf_backend_omit_section_dynsym,
6675796c8dcSSimon Schubert   elf_backend_relocs_compatible,
6685796c8dcSSimon Schubert   elf_backend_check_relocs,
6695796c8dcSSimon Schubert   elf_backend_check_directives,
6705796c8dcSSimon Schubert   elf_backend_as_needed_cleanup,
6715796c8dcSSimon Schubert   elf_backend_adjust_dynamic_symbol,
6725796c8dcSSimon Schubert   elf_backend_always_size_sections,
6735796c8dcSSimon Schubert   elf_backend_size_dynamic_sections,
6745796c8dcSSimon Schubert   elf_backend_init_index_section,
6755796c8dcSSimon Schubert   elf_backend_relocate_section,
6765796c8dcSSimon Schubert   elf_backend_finish_dynamic_symbol,
6775796c8dcSSimon Schubert   elf_backend_finish_dynamic_sections,
6785796c8dcSSimon Schubert   elf_backend_begin_write_processing,
6795796c8dcSSimon Schubert   elf_backend_final_write_processing,
6805796c8dcSSimon Schubert   elf_backend_additional_program_headers,
6815796c8dcSSimon Schubert   elf_backend_modify_segment_map,
6825796c8dcSSimon Schubert   elf_backend_modify_program_headers,
6835796c8dcSSimon Schubert   elf_backend_gc_keep,
6845796c8dcSSimon Schubert   elf_backend_gc_mark_dynamic_ref,
6855796c8dcSSimon Schubert   elf_backend_gc_mark_hook,
6865796c8dcSSimon Schubert   elf_backend_gc_mark_extra_sections,
6875796c8dcSSimon Schubert   elf_backend_gc_sweep_hook,
6885796c8dcSSimon Schubert   elf_backend_post_process_headers,
6895796c8dcSSimon Schubert   elf_backend_print_symbol_all,
6905796c8dcSSimon Schubert   elf_backend_output_arch_local_syms,
6915796c8dcSSimon Schubert   elf_backend_output_arch_syms,
6925796c8dcSSimon Schubert   elf_backend_copy_indirect_symbol,
6935796c8dcSSimon Schubert   elf_backend_hide_symbol,
6945796c8dcSSimon Schubert   elf_backend_fixup_symbol,
6955796c8dcSSimon Schubert   elf_backend_merge_symbol_attribute,
6965796c8dcSSimon Schubert   elf_backend_get_target_dtag,
6975796c8dcSSimon Schubert   elf_backend_ignore_undef_symbol,
6985796c8dcSSimon Schubert   elf_backend_emit_relocs,
6995796c8dcSSimon Schubert   elf_backend_count_relocs,
7005796c8dcSSimon Schubert   elf_backend_grok_prstatus,
7015796c8dcSSimon Schubert   elf_backend_grok_psinfo,
7025796c8dcSSimon Schubert   elf_backend_write_core_note,
7035796c8dcSSimon Schubert   elf_backend_reloc_type_class,
7045796c8dcSSimon Schubert   elf_backend_discard_info,
7055796c8dcSSimon Schubert   elf_backend_ignore_discarded_relocs,
7065796c8dcSSimon Schubert   elf_backend_action_discarded,
7075796c8dcSSimon Schubert   elf_backend_eh_frame_address_size,
7085796c8dcSSimon Schubert   elf_backend_can_make_relative_eh_frame,
7095796c8dcSSimon Schubert   elf_backend_can_make_lsda_relative_eh_frame,
7105796c8dcSSimon Schubert   elf_backend_encode_eh_address,
7115796c8dcSSimon Schubert   elf_backend_write_section,
7125796c8dcSSimon Schubert   elf_backend_mips_irix_compat,
7135796c8dcSSimon Schubert   elf_backend_mips_rtype_to_howto,
7145796c8dcSSimon Schubert   elf_backend_ecoff_debug_swap,
7155796c8dcSSimon Schubert   elf_backend_bfd_from_remote_memory,
7165796c8dcSSimon Schubert   elf_backend_plt_sym_val,
7175796c8dcSSimon Schubert   elf_backend_common_definition,
7185796c8dcSSimon Schubert   elf_backend_common_section_index,
7195796c8dcSSimon Schubert   elf_backend_common_section,
7205796c8dcSSimon Schubert   elf_backend_merge_symbol,
7215796c8dcSSimon Schubert   elf_backend_hash_symbol,
7225796c8dcSSimon Schubert   elf_backend_is_function_type,
7235796c8dcSSimon Schubert   elf_backend_link_order_error_handler,
7245796c8dcSSimon Schubert   elf_backend_relplt_name,
7255796c8dcSSimon Schubert   ELF_MACHINE_ALT1,
7265796c8dcSSimon Schubert   ELF_MACHINE_ALT2,
7275796c8dcSSimon Schubert   &elf_backend_size_info,
7285796c8dcSSimon Schubert   elf_backend_special_sections,
7295796c8dcSSimon Schubert   elf_backend_got_header_size,
7305796c8dcSSimon Schubert   elf_backend_got_elt_size,
7315796c8dcSSimon Schubert   elf_backend_obj_attrs_vendor,
7325796c8dcSSimon Schubert   elf_backend_obj_attrs_section,
7335796c8dcSSimon Schubert   elf_backend_obj_attrs_arg_type,
7345796c8dcSSimon Schubert   elf_backend_obj_attrs_section_type,
7355796c8dcSSimon Schubert   elf_backend_obj_attrs_order,
7365796c8dcSSimon Schubert   elf_backend_collect,
7375796c8dcSSimon Schubert   elf_backend_type_change_ok,
7385796c8dcSSimon Schubert   elf_backend_may_use_rel_p,
7395796c8dcSSimon Schubert   elf_backend_may_use_rela_p,
7405796c8dcSSimon Schubert   elf_backend_default_use_rela_p,
7415796c8dcSSimon Schubert   elf_backend_rela_plts_and_copies_p,
7425796c8dcSSimon Schubert   elf_backend_rela_normal,
7435796c8dcSSimon Schubert   elf_backend_sign_extend_vma,
7445796c8dcSSimon Schubert   elf_backend_want_got_plt,
7455796c8dcSSimon Schubert   elf_backend_plt_readonly,
7465796c8dcSSimon Schubert   elf_backend_want_plt_sym,
7475796c8dcSSimon Schubert   elf_backend_plt_not_loaded,
7485796c8dcSSimon Schubert   elf_backend_plt_alignment,
7495796c8dcSSimon Schubert   elf_backend_can_gc_sections,
7505796c8dcSSimon Schubert   elf_backend_can_refcount,
7515796c8dcSSimon Schubert   elf_backend_want_got_sym,
7525796c8dcSSimon Schubert   elf_backend_want_dynbss,
7535796c8dcSSimon Schubert   elf_backend_want_p_paddr_set_to_zero,
7545796c8dcSSimon Schubert   elf_backend_default_execstack
7555796c8dcSSimon Schubert };
7565796c8dcSSimon Schubert 
7575796c8dcSSimon Schubert /* Forward declaration for use when initialising alternative_target field.  */
7585796c8dcSSimon Schubert #ifdef TARGET_LITTLE_SYM
7595796c8dcSSimon Schubert extern const bfd_target TARGET_LITTLE_SYM;
7605796c8dcSSimon Schubert #endif
7615796c8dcSSimon Schubert 
7625796c8dcSSimon Schubert #ifdef TARGET_BIG_SYM
7635796c8dcSSimon Schubert const bfd_target TARGET_BIG_SYM =
7645796c8dcSSimon Schubert {
7655796c8dcSSimon Schubert   /* name: identify kind of target */
7665796c8dcSSimon Schubert   TARGET_BIG_NAME,
7675796c8dcSSimon Schubert 
7685796c8dcSSimon Schubert   /* flavour: general indication about file */
7695796c8dcSSimon Schubert   bfd_target_elf_flavour,
7705796c8dcSSimon Schubert 
7715796c8dcSSimon Schubert   /* byteorder: data is big endian */
7725796c8dcSSimon Schubert   BFD_ENDIAN_BIG,
7735796c8dcSSimon Schubert 
7745796c8dcSSimon Schubert   /* header_byteorder: header is also big endian */
7755796c8dcSSimon Schubert   BFD_ENDIAN_BIG,
7765796c8dcSSimon Schubert 
7775796c8dcSSimon Schubert   /* object_flags: mask of all file flags */
7785796c8dcSSimon Schubert   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
7795796c8dcSSimon Schubert    | DYNAMIC | WP_TEXT | D_PAGED),
7805796c8dcSSimon Schubert 
7815796c8dcSSimon Schubert   /* section_flags: mask of all section flags */
7825796c8dcSSimon Schubert   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
7835796c8dcSSimon Schubert    | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES
7845796c8dcSSimon Schubert    | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP),
7855796c8dcSSimon Schubert 
7865796c8dcSSimon Schubert    /* leading_symbol_char: is the first char of a user symbol
7875796c8dcSSimon Schubert       predictable, and if so what is it */
7885796c8dcSSimon Schubert   elf_symbol_leading_char,
7895796c8dcSSimon Schubert 
7905796c8dcSSimon Schubert   /* ar_pad_char: pad character for filenames within an archive header
7915796c8dcSSimon Schubert      FIXME:  this really has nothing to do with ELF, this is a characteristic
7925796c8dcSSimon Schubert      of the archiver and/or os and should be independently tunable */
7935796c8dcSSimon Schubert   '/',
7945796c8dcSSimon Schubert 
7955796c8dcSSimon Schubert   /* ar_max_namelen: maximum number of characters in an archive header
7965796c8dcSSimon Schubert      FIXME:  this really has nothing to do with ELF, this is a characteristic
7975796c8dcSSimon Schubert      of the archiver and should be independently tunable.  The System V ABI,
7985796c8dcSSimon Schubert      Chapter 7 (Formats & Protocols), Archive section sets this as 15.  */
7995796c8dcSSimon Schubert   15,
8005796c8dcSSimon Schubert 
8015796c8dcSSimon Schubert   /* Routines to byte-swap various sized integers from the data sections */
8025796c8dcSSimon Schubert   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
8035796c8dcSSimon Schubert     bfd_getb32, bfd_getb_signed_32, bfd_putb32,
8045796c8dcSSimon Schubert     bfd_getb16, bfd_getb_signed_16, bfd_putb16,
8055796c8dcSSimon Schubert 
8065796c8dcSSimon Schubert   /* Routines to byte-swap various sized integers from the file headers */
8075796c8dcSSimon Schubert   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
8085796c8dcSSimon Schubert     bfd_getb32, bfd_getb_signed_32, bfd_putb32,
8095796c8dcSSimon Schubert     bfd_getb16, bfd_getb_signed_16, bfd_putb16,
8105796c8dcSSimon Schubert 
8115796c8dcSSimon Schubert   /* bfd_check_format: check the format of a file being read */
8125796c8dcSSimon Schubert   { _bfd_dummy_target,		/* unknown format */
8135796c8dcSSimon Schubert     bfd_elfNN_object_p,		/* assembler/linker output (object file) */
8145796c8dcSSimon Schubert     bfd_elfNN_archive_p,	/* an archive */
8155796c8dcSSimon Schubert     bfd_elfNN_core_file_p	/* a core file */
8165796c8dcSSimon Schubert   },
8175796c8dcSSimon Schubert 
8185796c8dcSSimon Schubert   /* bfd_set_format: set the format of a file being written */
8195796c8dcSSimon Schubert   { bfd_false,
8205796c8dcSSimon Schubert     bfd_elfNN_mkobject,
8215796c8dcSSimon Schubert     bfd_elfNN_mkarchive,
8225796c8dcSSimon Schubert     bfd_elfNN_mkcorefile
8235796c8dcSSimon Schubert   },
8245796c8dcSSimon Schubert 
8255796c8dcSSimon Schubert   /* bfd_write_contents: write cached information into a file being written */
8265796c8dcSSimon Schubert   { bfd_false,
8275796c8dcSSimon Schubert     bfd_elfNN_write_object_contents,
8285796c8dcSSimon Schubert     bfd_elfNN_write_archive_contents,
8295796c8dcSSimon Schubert     bfd_elfNN_write_corefile_contents,
8305796c8dcSSimon Schubert   },
8315796c8dcSSimon Schubert 
8325796c8dcSSimon Schubert   BFD_JUMP_TABLE_GENERIC (bfd_elfNN),
8335796c8dcSSimon Schubert   BFD_JUMP_TABLE_COPY (bfd_elfNN),
8345796c8dcSSimon Schubert   BFD_JUMP_TABLE_CORE (bfd_elfNN),
8355796c8dcSSimon Schubert #ifdef bfd_elfNN_archive_functions
8365796c8dcSSimon Schubert   BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive),
8375796c8dcSSimon Schubert #else
8385796c8dcSSimon Schubert   BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
8395796c8dcSSimon Schubert #endif
8405796c8dcSSimon Schubert   BFD_JUMP_TABLE_SYMBOLS (bfd_elfNN),
8415796c8dcSSimon Schubert   BFD_JUMP_TABLE_RELOCS (bfd_elfNN),
8425796c8dcSSimon Schubert   BFD_JUMP_TABLE_WRITE (bfd_elfNN),
8435796c8dcSSimon Schubert   BFD_JUMP_TABLE_LINK (bfd_elfNN),
8445796c8dcSSimon Schubert   BFD_JUMP_TABLE_DYNAMIC (bfd_elfNN),
8455796c8dcSSimon Schubert 
8465796c8dcSSimon Schubert   /* Alternative endian target.  */
8475796c8dcSSimon Schubert #ifdef TARGET_LITTLE_SYM
8485796c8dcSSimon Schubert   & TARGET_LITTLE_SYM,
8495796c8dcSSimon Schubert #else
8505796c8dcSSimon Schubert   NULL,
8515796c8dcSSimon Schubert #endif
8525796c8dcSSimon Schubert 
8535796c8dcSSimon Schubert   /* backend_data: */
8545796c8dcSSimon Schubert   &elfNN_bed
8555796c8dcSSimon Schubert };
8565796c8dcSSimon Schubert #endif
8575796c8dcSSimon Schubert 
8585796c8dcSSimon Schubert #ifdef TARGET_LITTLE_SYM
8595796c8dcSSimon Schubert const bfd_target TARGET_LITTLE_SYM =
8605796c8dcSSimon Schubert {
8615796c8dcSSimon Schubert   /* name: identify kind of target */
8625796c8dcSSimon Schubert   TARGET_LITTLE_NAME,
8635796c8dcSSimon Schubert 
8645796c8dcSSimon Schubert   /* flavour: general indication about file */
8655796c8dcSSimon Schubert   bfd_target_elf_flavour,
8665796c8dcSSimon Schubert 
8675796c8dcSSimon Schubert   /* byteorder: data is little endian */
8685796c8dcSSimon Schubert   BFD_ENDIAN_LITTLE,
8695796c8dcSSimon Schubert 
8705796c8dcSSimon Schubert   /* header_byteorder: header is also little endian */
8715796c8dcSSimon Schubert   BFD_ENDIAN_LITTLE,
8725796c8dcSSimon Schubert 
8735796c8dcSSimon Schubert   /* object_flags: mask of all file flags */
8745796c8dcSSimon Schubert   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
8755796c8dcSSimon Schubert    | DYNAMIC | WP_TEXT | D_PAGED),
8765796c8dcSSimon Schubert 
8775796c8dcSSimon Schubert   /* section_flags: mask of all section flags */
8785796c8dcSSimon Schubert   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
8795796c8dcSSimon Schubert    | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES
8805796c8dcSSimon Schubert    | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP),
8815796c8dcSSimon Schubert 
8825796c8dcSSimon Schubert    /* leading_symbol_char: is the first char of a user symbol
8835796c8dcSSimon Schubert       predictable, and if so what is it */
8845796c8dcSSimon Schubert   elf_symbol_leading_char,
8855796c8dcSSimon Schubert 
8865796c8dcSSimon Schubert   /* ar_pad_char: pad character for filenames within an archive header
8875796c8dcSSimon Schubert      FIXME:  this really has nothing to do with ELF, this is a characteristic
8885796c8dcSSimon Schubert      of the archiver and/or os and should be independently tunable */
8895796c8dcSSimon Schubert   '/',
8905796c8dcSSimon Schubert 
8915796c8dcSSimon Schubert   /* ar_max_namelen: maximum number of characters in an archive header
8925796c8dcSSimon Schubert      FIXME:  this really has nothing to do with ELF, this is a characteristic
8935796c8dcSSimon Schubert      of the archiver and should be independently tunable.  The System V ABI,
8945796c8dcSSimon Schubert      Chapter 7 (Formats & Protocols), Archive section sets this as 15.  */
8955796c8dcSSimon Schubert   15,
8965796c8dcSSimon Schubert 
8975796c8dcSSimon Schubert   /* Routines to byte-swap various sized integers from the data sections */
8985796c8dcSSimon Schubert   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
8995796c8dcSSimon Schubert     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
9005796c8dcSSimon Schubert     bfd_getl16, bfd_getl_signed_16, bfd_putl16,
9015796c8dcSSimon Schubert 
9025796c8dcSSimon Schubert   /* Routines to byte-swap various sized integers from the file headers */
9035796c8dcSSimon Schubert   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
9045796c8dcSSimon Schubert     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
9055796c8dcSSimon Schubert     bfd_getl16, bfd_getl_signed_16, bfd_putl16,
9065796c8dcSSimon Schubert 
9075796c8dcSSimon Schubert   /* bfd_check_format: check the format of a file being read */
9085796c8dcSSimon Schubert   { _bfd_dummy_target,		/* unknown format */
9095796c8dcSSimon Schubert     bfd_elfNN_object_p,		/* assembler/linker output (object file) */
9105796c8dcSSimon Schubert     bfd_elfNN_archive_p,	/* an archive */
9115796c8dcSSimon Schubert     bfd_elfNN_core_file_p	/* a core file */
9125796c8dcSSimon Schubert   },
9135796c8dcSSimon Schubert 
9145796c8dcSSimon Schubert   /* bfd_set_format: set the format of a file being written */
9155796c8dcSSimon Schubert   { bfd_false,
9165796c8dcSSimon Schubert     bfd_elfNN_mkobject,
9175796c8dcSSimon Schubert     bfd_elfNN_mkarchive,
9185796c8dcSSimon Schubert     bfd_elfNN_mkcorefile
9195796c8dcSSimon Schubert   },
9205796c8dcSSimon Schubert 
9215796c8dcSSimon Schubert   /* bfd_write_contents: write cached information into a file being written */
9225796c8dcSSimon Schubert   { bfd_false,
9235796c8dcSSimon Schubert     bfd_elfNN_write_object_contents,
9245796c8dcSSimon Schubert     bfd_elfNN_write_archive_contents,
9255796c8dcSSimon Schubert     bfd_elfNN_write_corefile_contents,
9265796c8dcSSimon Schubert   },
9275796c8dcSSimon Schubert 
9285796c8dcSSimon Schubert   BFD_JUMP_TABLE_GENERIC (bfd_elfNN),
9295796c8dcSSimon Schubert   BFD_JUMP_TABLE_COPY (bfd_elfNN),
9305796c8dcSSimon Schubert   BFD_JUMP_TABLE_CORE (bfd_elfNN),
9315796c8dcSSimon Schubert #ifdef bfd_elfNN_archive_functions
9325796c8dcSSimon Schubert   BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive),
9335796c8dcSSimon Schubert #else
9345796c8dcSSimon Schubert   BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
9355796c8dcSSimon Schubert #endif
9365796c8dcSSimon Schubert   BFD_JUMP_TABLE_SYMBOLS (bfd_elfNN),
9375796c8dcSSimon Schubert   BFD_JUMP_TABLE_RELOCS (bfd_elfNN),
9385796c8dcSSimon Schubert   BFD_JUMP_TABLE_WRITE (bfd_elfNN),
9395796c8dcSSimon Schubert   BFD_JUMP_TABLE_LINK (bfd_elfNN),
9405796c8dcSSimon Schubert   BFD_JUMP_TABLE_DYNAMIC (bfd_elfNN),
9415796c8dcSSimon Schubert 
9425796c8dcSSimon Schubert   /* Alternative endian target.  */
9435796c8dcSSimon Schubert #ifdef TARGET_BIG_SYM
9445796c8dcSSimon Schubert   & TARGET_BIG_SYM,
9455796c8dcSSimon Schubert #else
9465796c8dcSSimon Schubert   NULL,
9475796c8dcSSimon Schubert #endif
9485796c8dcSSimon Schubert 
9495796c8dcSSimon Schubert   /* backend_data: */
9505796c8dcSSimon Schubert   &elfNN_bed
9515796c8dcSSimon Schubert };
9525796c8dcSSimon Schubert #endif
953