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