elfxx-target.h revision 104834
1118611Snjl/* Target definitions for NN-bit ELF 2118611Snjl Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 3118611Snjl Free Software Foundation, Inc. 4118611Snjl 5118611SnjlThis file is part of BFD, the Binary File Descriptor library. 6118611Snjl 7118611SnjlThis program is free software; you can redistribute it and/or modify 8118611Snjlit under the terms of the GNU General Public License as published by 9118611Snjlthe Free Software Foundation; either version 2 of the License, or 10118611Snjl(at your option) any later version. 11193529Sjkim 12118611SnjlThis program is distributed in the hope that it will be useful, 13118611Snjlbut WITHOUT ANY WARRANTY; without even the implied warranty of 14118611SnjlMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15118611SnjlGNU General Public License for more details. 16118611Snjl 17118611SnjlYou should have received a copy of the GNU General Public License 18118611Snjlalong with this program; if not, write to the Free Software 19118611SnjlFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 20118611Snjl 21118611Snjl/* This structure contains everything that BFD knows about a target. 22118611Snjl It includes things like its byte order, name, what routines to call 23118611Snjl to do various operations, etc. Every BFD points to a target structure 24118611Snjl with its "xvec" member. 25118611Snjl 26118611Snjl There are two such structures here: one for big-endian machines and 27118611Snjl one for little-endian machines. */ 28118611Snjl 29118611Snjl#define bfd_elfNN_close_and_cleanup _bfd_elf_close_and_cleanup 30118611Snjl#define bfd_elfNN_bfd_free_cached_info _bfd_generic_bfd_free_cached_info 31118611Snjl#ifndef bfd_elfNN_get_section_contents 32118611Snjl#define bfd_elfNN_get_section_contents _bfd_generic_get_section_contents 33118611Snjl#endif 34118611Snjl 35118611Snjl#define bfd_elfNN_canonicalize_dynamic_symtab _bfd_elf_canonicalize_dynamic_symtab 36118611Snjl#define bfd_elfNN_canonicalize_reloc _bfd_elf_canonicalize_reloc 37118611Snjl#ifndef bfd_elfNN_find_nearest_line 38118611Snjl#define bfd_elfNN_find_nearest_line _bfd_elf_find_nearest_line 39118611Snjl#endif 40118611Snjl#define bfd_elfNN_read_minisymbols _bfd_elf_read_minisymbols 41118611Snjl#define bfd_elfNN_minisymbol_to_symbol _bfd_elf_minisymbol_to_symbol 42118611Snjl#define bfd_elfNN_get_dynamic_symtab_upper_bound _bfd_elf_get_dynamic_symtab_upper_bound 43118611Snjl#define bfd_elfNN_get_lineno _bfd_elf_get_lineno 44118611Snjl#ifndef bfd_elfNN_get_reloc_upper_bound 45118611Snjl#define bfd_elfNN_get_reloc_upper_bound _bfd_elf_get_reloc_upper_bound 46118611Snjl#endif 47118611Snjl#ifndef bfd_elfNN_get_symbol_info 48118611Snjl#define bfd_elfNN_get_symbol_info _bfd_elf_get_symbol_info 49118611Snjl#endif 50118611Snjl#define bfd_elfNN_get_symtab _bfd_elf_get_symtab 51118611Snjl#define bfd_elfNN_get_symtab_upper_bound _bfd_elf_get_symtab_upper_bound 52118611Snjl#if 0 /* done in elf-bfd.h */ 53118611Snjl#define bfd_elfNN_link_record_dynamic_symbol _bfd_elf_link_record_dynamic_symbol 54118611Snjl#endif 55118611Snjl#define bfd_elfNN_make_empty_symbol _bfd_elf_make_empty_symbol 56118611Snjl#define bfd_elfNN_new_section_hook _bfd_elf_new_section_hook 57118611Snjl#define bfd_elfNN_set_arch_mach _bfd_elf_set_arch_mach 58118611Snjl#ifndef bfd_elfNN_set_section_contents 59118611Snjl#define bfd_elfNN_set_section_contents _bfd_elf_set_section_contents 60118611Snjl#endif 61118611Snjl#define bfd_elfNN_sizeof_headers _bfd_elf_sizeof_headers 62118611Snjl#define bfd_elfNN_write_object_contents _bfd_elf_write_object_contents 63118611Snjl#define bfd_elfNN_write_corefile_contents _bfd_elf_write_corefile_contents 64118611Snjl 65118611Snjl#define bfd_elfNN_get_section_contents_in_window \ 66118611Snjl _bfd_generic_get_section_contents_in_window 67118611Snjl 68118611Snjl#ifndef elf_backend_got_symbol_offset 69118611Snjl#define elf_backend_got_symbol_offset (bfd_vma) 0 70118611Snjl#endif 71118611Snjl#ifndef elf_backend_can_refcount 72118611Snjl#define elf_backend_can_refcount 0 73118611Snjl#endif 74118611Snjl#ifndef elf_backend_want_got_plt 75118611Snjl#define elf_backend_want_got_plt 0 76118611Snjl#endif 77118611Snjl#ifndef elf_backend_plt_readonly 78118611Snjl#define elf_backend_plt_readonly 0 79118611Snjl#endif 80118611Snjl#ifndef elf_backend_want_plt_sym 81118611Snjl#define elf_backend_want_plt_sym 0 82118611Snjl#endif 83118611Snjl#ifndef elf_backend_plt_not_loaded 84118611Snjl#define elf_backend_plt_not_loaded 0 85118611Snjl#endif 86118611Snjl#ifndef elf_backend_plt_alignment 87118611Snjl#define elf_backend_plt_alignment 2 88118611Snjl#endif 89118611Snjl#ifndef elf_backend_want_dynbss 90118611Snjl#define elf_backend_want_dynbss 1 91118611Snjl#endif 92118611Snjl#ifndef elf_backend_want_p_paddr_set_to_zero 93118611Snjl#define elf_backend_want_p_paddr_set_to_zero 0 94118611Snjl#endif 95118611Snjl 96118611Snjl#define bfd_elfNN_bfd_debug_info_start bfd_void 97118611Snjl#define bfd_elfNN_bfd_debug_info_end bfd_void 98118611Snjl#define bfd_elfNN_bfd_debug_info_accumulate \ 99118611Snjl (void (*) PARAMS ((bfd*, struct sec *))) bfd_void 100118611Snjl 101118611Snjl#ifndef bfd_elfNN_bfd_get_relocated_section_contents 102118611Snjl#define bfd_elfNN_bfd_get_relocated_section_contents \ 103118611Snjl bfd_generic_get_relocated_section_contents 104118611Snjl#endif 105118611Snjl 106118611Snjl#ifndef bfd_elfNN_bfd_relax_section 107118611Snjl#define bfd_elfNN_bfd_relax_section bfd_generic_relax_section 108118611Snjl#endif 109118611Snjl 110118611Snjl#ifndef elf_backend_can_gc_sections 111118611Snjl#define elf_backend_can_gc_sections 0 112118611Snjl#endif 113118611Snjl#ifndef elf_backend_can_refcount 114118611Snjl#define elf_backend_can_refcount 0 115118611Snjl#endif 116118611Snjl#ifndef elf_backend_want_got_sym 117118611Snjl#define elf_backend_want_got_sym 1 118151937Sjkim#endif 119193529Sjkim#ifndef elf_backend_gc_mark_hook 120193529Sjkim#define elf_backend_gc_mark_hook NULL 121193529Sjkim#endif 122118611Snjl#ifndef elf_backend_gc_sweep_hook 123118611Snjl#define elf_backend_gc_sweep_hook NULL 124118611Snjl#endif 125118611Snjl#ifndef bfd_elfNN_bfd_gc_sections 126118611Snjl#define bfd_elfNN_bfd_gc_sections _bfd_elfNN_gc_sections 127118611Snjl#endif 128151937Sjkim 129118611Snjl#ifndef bfd_elfNN_bfd_merge_sections 130151937Sjkim#define bfd_elfNN_bfd_merge_sections \ 131151937Sjkim _bfd_elf_merge_sections 132151937Sjkim#endif 133151937Sjkim 134151937Sjkim#ifndef bfd_elfNN_bfd_discard_group 135151937Sjkim#define bfd_elfNN_bfd_discard_group bfd_elf_discard_group 136151937Sjkim#endif 137151937Sjkim 138151937Sjkim#ifndef bfd_elfNN_bfd_make_debug_symbol 139151937Sjkim#define bfd_elfNN_bfd_make_debug_symbol \ 140151937Sjkim ((asymbol *(*) PARAMS ((bfd *, void *, unsigned long))) bfd_nullvoidptr) 141151937Sjkim#endif 142151937Sjkim 143151937Sjkim#ifndef bfd_elfNN_bfd_copy_private_symbol_data 144151937Sjkim#define bfd_elfNN_bfd_copy_private_symbol_data \ 145151937Sjkim _bfd_elf_copy_private_symbol_data 146151937Sjkim#endif 147193529Sjkim 148151937Sjkim#ifndef bfd_elfNN_bfd_copy_private_section_data 149151937Sjkim#define bfd_elfNN_bfd_copy_private_section_data \ 150151937Sjkim _bfd_elf_copy_private_section_data 151151937Sjkim#endif 152193529Sjkim#ifndef bfd_elfNN_bfd_copy_private_bfd_data 153193529Sjkim#define bfd_elfNN_bfd_copy_private_bfd_data \ 154193529Sjkim _bfd_elf_copy_private_bfd_data 155193529Sjkim#endif 156193529Sjkim#ifndef bfd_elfNN_bfd_print_private_bfd_data 157151937Sjkim#define bfd_elfNN_bfd_print_private_bfd_data \ 158193529Sjkim _bfd_elf_print_private_bfd_data 159118611Snjl#endif 160118611Snjl#ifndef bfd_elfNN_bfd_merge_private_bfd_data 161118611Snjl#define bfd_elfNN_bfd_merge_private_bfd_data \ 162118611Snjl ((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true) 163151937Sjkim#endif 164118611Snjl#ifndef bfd_elfNN_bfd_set_private_flags 165118611Snjl#define bfd_elfNN_bfd_set_private_flags \ 166118611Snjl ((boolean (*) PARAMS ((bfd *, flagword))) bfd_true) 167118611Snjl#endif 168193529Sjkim#ifndef bfd_elfNN_bfd_is_local_label_name 169118611Snjl#define bfd_elfNN_bfd_is_local_label_name _bfd_elf_is_local_label_name 170118611Snjl#endif 171118611Snjl 172118611Snjl#ifndef bfd_elfNN_get_dynamic_reloc_upper_bound 173118611Snjl#define bfd_elfNN_get_dynamic_reloc_upper_bound \ 174118611Snjl _bfd_elf_get_dynamic_reloc_upper_bound 175118611Snjl#endif 176118611Snjl#ifndef bfd_elfNN_canonicalize_dynamic_reloc 177118611Snjl#define bfd_elfNN_canonicalize_dynamic_reloc \ 178118611Snjl _bfd_elf_canonicalize_dynamic_reloc 179118611Snjl#endif 180118611Snjl 181118611Snjl#ifndef bfd_elfNN_bfd_link_hash_table_free 182118611Snjl#define bfd_elfNN_bfd_link_hash_table_free _bfd_generic_link_hash_table_free 183118611Snjl#endif 184118611Snjl 185118611Snjl#ifdef elf_backend_relocate_section 186118611Snjl#ifndef bfd_elfNN_bfd_link_hash_table_create 187118611Snjl#define bfd_elfNN_bfd_link_hash_table_create _bfd_elf_link_hash_table_create 188118611Snjl#endif 189118611Snjl#else /* ! defined (elf_backend_relocate_section) */ 190118611Snjl/* If no backend relocate_section routine, use the generic linker. 191193529Sjkim Note - this will prevent the port from being able to use some of 192118611Snjl the other features of the ELF linker, because the generic hash structure 193118611Snjl does not have the fields needed by the ELF linker. In particular it 194193529Sjkim means that linking directly to S-records will not work. */ 195118611Snjl#ifndef bfd_elfNN_bfd_link_hash_table_create 196193529Sjkim#define bfd_elfNN_bfd_link_hash_table_create \ 197193529Sjkim _bfd_generic_link_hash_table_create 198193529Sjkim#endif 199193529Sjkim#ifndef bfd_elfNN_bfd_link_add_symbols 200193529Sjkim#define bfd_elfNN_bfd_link_add_symbols _bfd_generic_link_add_symbols 201118611Snjl#endif 202118611Snjl#ifndef bfd_elfNN_bfd_final_link 203118611Snjl#define bfd_elfNN_bfd_final_link _bfd_generic_final_link 204118611Snjl#endif 205118611Snjl#endif /* ! defined (elf_backend_relocate_section) */ 206118611Snjl 207118611Snjl#ifndef bfd_elfNN_bfd_link_just_syms 208118611Snjl#define bfd_elfNN_bfd_link_just_syms _bfd_elf_link_just_syms 209118611Snjl#endif 210118611Snjl 211118611Snjl#ifndef bfd_elfNN_bfd_link_split_section 212151937Sjkim#define bfd_elfNN_bfd_link_split_section _bfd_generic_link_split_section 213118611Snjl#endif 214118611Snjl 215118611Snjl#ifndef bfd_elfNN_archive_p 216118611Snjl#define bfd_elfNN_archive_p bfd_generic_archive_p 217118611Snjl#endif 218118611Snjl 219118611Snjl#ifndef bfd_elfNN_write_archive_contents 220118611Snjl#define bfd_elfNN_write_archive_contents _bfd_write_archive_contents 221118611Snjl#endif 222151937Sjkim 223118611Snjl#ifndef bfd_elfNN_mkobject 224118611Snjl#define bfd_elfNN_mkobject bfd_elf_mkobject 225118611Snjl#endif 226118611Snjl 227118611Snjl#ifndef bfd_elfNN_mkcorefile 228118611Snjl#define bfd_elfNN_mkcorefile bfd_elf_mkcorefile 229118611Snjl#endif 230118611Snjl 231118611Snjl#ifndef bfd_elfNN_mkarchive 232118611Snjl#define bfd_elfNN_mkarchive _bfd_generic_mkarchive 233118611Snjl#endif 234118611Snjl 235118611Snjl#ifndef elf_symbol_leading_char 236118611Snjl#define elf_symbol_leading_char 0 237118611Snjl#endif 238118611Snjl 239118611Snjl#ifndef elf_info_to_howto 240118611Snjl#define elf_info_to_howto 0 241118611Snjl#endif 242118611Snjl 243118611Snjl#ifndef elf_info_to_howto_rel 244118611Snjl#define elf_info_to_howto_rel 0 245118611Snjl#endif 246118611Snjl 247118611Snjl#ifndef ELF_MAXPAGESIZE 248118611Snjl #error ELF_MAXPAGESIZE is not defined 249118611Snjl#define ELF_MAXPAGESIZE 1 250118611Snjl#endif 251118611Snjl 252118611Snjl#ifndef elf_backend_collect 253118611Snjl#define elf_backend_collect false 254118611Snjl#endif 255118611Snjl#ifndef elf_backend_type_change_ok 256118611Snjl#define elf_backend_type_change_ok false 257118611Snjl#endif 258118611Snjl 259118611Snjl#ifndef elf_backend_sym_is_global 260118611Snjl#define elf_backend_sym_is_global 0 261118611Snjl#endif 262118611Snjl#ifndef elf_backend_object_p 263118611Snjl#define elf_backend_object_p 0 264118611Snjl#endif 265118611Snjl#ifndef elf_backend_symbol_processing 266118611Snjl#define elf_backend_symbol_processing 0 267118611Snjl#endif 268118611Snjl#ifndef elf_backend_symbol_table_processing 269151937Sjkim#define elf_backend_symbol_table_processing 0 270151937Sjkim#endif 271151937Sjkim#ifndef elf_backend_get_symbol_type 272151937Sjkim#define elf_backend_get_symbol_type 0 273151937Sjkim#endif 274151937Sjkim#ifndef elf_backend_section_processing 275151937Sjkim#define elf_backend_section_processing 0 276118611Snjl#endif 277118611Snjl#ifndef elf_backend_section_from_shdr 278118611Snjl#define elf_backend_section_from_shdr 0 279118611Snjl#endif 280151937Sjkim#ifndef elf_backend_section_flags 281151937Sjkim#define elf_backend_section_flags 0 282151937Sjkim#endif 283118611Snjl#ifndef elf_backend_section_from_phdr 284118611Snjl#define elf_backend_section_from_phdr 0 285118611Snjl#endif 286118611Snjl#ifndef elf_backend_fake_sections 287118611Snjl#define elf_backend_fake_sections 0 288118611Snjl#endif 289151937Sjkim#ifndef elf_backend_section_from_bfd_section 290151937Sjkim#define elf_backend_section_from_bfd_section 0 291118611Snjl#endif 292118611Snjl#ifndef elf_backend_add_symbol_hook 293118611Snjl#define elf_backend_add_symbol_hook 0 294118611Snjl#endif 295151937Sjkim#ifndef elf_backend_link_output_symbol_hook 296118611Snjl#define elf_backend_link_output_symbol_hook 0 297118611Snjl#endif 298118611Snjl#ifndef elf_backend_create_dynamic_sections 299118611Snjl#define elf_backend_create_dynamic_sections 0 300118611Snjl#endif 301118611Snjl#ifndef elf_backend_check_relocs 302118611Snjl#define elf_backend_check_relocs 0 303118611Snjl#endif 304118611Snjl#ifndef elf_backend_adjust_dynamic_symbol 305118611Snjl#define elf_backend_adjust_dynamic_symbol 0 306118611Snjl#endif 307118611Snjl#ifndef elf_backend_always_size_sections 308118611Snjl#define elf_backend_always_size_sections 0 309151937Sjkim#endif 310118611Snjl#ifndef elf_backend_size_dynamic_sections 311118611Snjl#define elf_backend_size_dynamic_sections 0 312118611Snjl#endif 313118611Snjl#ifndef elf_backend_relocate_section 314118611Snjl#define elf_backend_relocate_section 0 315118611Snjl#endif 316118611Snjl#ifndef elf_backend_finish_dynamic_symbol 317193529Sjkim#define elf_backend_finish_dynamic_symbol 0 318118611Snjl#endif 319118611Snjl#ifndef elf_backend_finish_dynamic_sections 320118611Snjl#define elf_backend_finish_dynamic_sections 0 321118611Snjl#endif 322118611Snjl#ifndef elf_backend_begin_write_processing 323151937Sjkim#define elf_backend_begin_write_processing 0 324118611Snjl#endif 325118611Snjl#ifndef elf_backend_final_write_processing 326118611Snjl#define elf_backend_final_write_processing 0 327118611Snjl#endif 328118611Snjl#ifndef elf_backend_additional_program_headers 329118611Snjl#define elf_backend_additional_program_headers 0 330118611Snjl#endif 331118611Snjl#ifndef elf_backend_modify_segment_map 332118611Snjl#define elf_backend_modify_segment_map 0 333118611Snjl#endif 334151937Sjkim#ifndef elf_backend_ecoff_debug_swap 335151937Sjkim#define elf_backend_ecoff_debug_swap 0 336118611Snjl#endif 337118611Snjl#ifndef elf_backend_got_header_size 338151937Sjkim#define elf_backend_got_header_size 0 339151937Sjkim#endif 340151937Sjkim#ifndef elf_backend_plt_header_size 341118611Snjl#define elf_backend_plt_header_size 0 342118611Snjl#endif 343151937Sjkim#ifndef elf_backend_post_process_headers 344151937Sjkim#define elf_backend_post_process_headers NULL 345151937Sjkim#endif 346151937Sjkim#ifndef elf_backend_print_symbol_all 347151937Sjkim#define elf_backend_print_symbol_all NULL 348151937Sjkim#endif 349151937Sjkim#ifndef elf_backend_output_arch_syms 350151937Sjkim#define elf_backend_output_arch_syms NULL 351118611Snjl#endif 352118611Snjl#ifndef elf_backend_copy_indirect_symbol 353118611Snjl#define elf_backend_copy_indirect_symbol _bfd_elf_link_hash_copy_indirect 354167802Sjkim#endif 355167802Sjkim#ifndef elf_backend_hide_symbol 356167802Sjkim#define elf_backend_hide_symbol _bfd_elf_link_hash_hide_symbol 357118611Snjl#endif 358118611Snjl#ifndef elf_backend_emit_relocs 359118611Snjl#define elf_backend_emit_relocs NULL 360118611Snjl#endif 361118611Snjl#ifndef elf_backend_count_relocs 362118611Snjl#define elf_backend_count_relocs NULL 363118611Snjl#endif 364118611Snjl#ifndef elf_backend_grok_prstatus 365118611Snjl#define elf_backend_grok_prstatus NULL 366118611Snjl#endif 367118611Snjl#ifndef elf_backend_grok_psinfo 368151937Sjkim#define elf_backend_grok_psinfo NULL 369151937Sjkim#endif 370151937Sjkim#ifndef elf_backend_sprintf_vma 371151937Sjkim#define elf_backend_sprintf_vma _bfd_elf_sprintf_vma 372151937Sjkim#endif 373118611Snjl#ifndef elf_backend_fprintf_vma 374118611Snjl#define elf_backend_fprintf_vma _bfd_elf_fprintf_vma 375118611Snjl#endif 376118611Snjl#ifndef elf_backend_reloc_type_class 377118611Snjl#define elf_backend_reloc_type_class _bfd_elf_reloc_type_class 378118611Snjl#endif 379118611Snjl#ifndef elf_backend_discard_info 380118611Snjl#define elf_backend_discard_info NULL 381118611Snjl#endif 382151937Sjkim#ifndef elf_backend_ignore_discarded_relocs 383118611Snjl#define elf_backend_ignore_discarded_relocs NULL 384151937Sjkim#endif 385118611Snjl#ifndef elf_backend_write_section 386118611Snjl#define elf_backend_write_section NULL 387118611Snjl#endif 388118611Snjl#ifndef elf_backend_set_nonloadable_filepos 389118611Snjl#define elf_backend_set_nonloadable_filepos NULL 390118611Snjl#endif 391118611Snjl#ifndef elf_backend_is_contained_by_filepos 392118611Snjl#define elf_backend_is_contained_by_filepos NULL 393118611Snjl#endif 394118611Snjl#ifndef elf_backend_copy_private_bfd_data_p 395118611Snjl#define elf_backend_copy_private_bfd_data_p NULL 396118611Snjl#endif 397118611Snjl#ifndef elf_backend_mips_irix_compat 398118611Snjl#define elf_backend_mips_irix_compat NULL 399118611Snjl#endif 400118611Snjl#ifndef elf_backend_mips_rtype_to_howto 401118611Snjl#define elf_backend_mips_rtype_to_howto NULL 402118611Snjl#endif 403118611Snjl 404118611Snjl/* Previously, backends could only use SHT_REL or SHT_RELA relocation 405118611Snjl sections, but not both. They defined USE_REL to indicate SHT_REL 406118611Snjl sections, and left it undefined to indicated SHT_RELA sections. 407118611Snjl For backwards compatibility, we still support this usage. */ 408193529Sjkim#ifndef USE_REL 409118611Snjl#define USE_REL 0 410118611Snjl#else 411118611Snjl#undef USE_REL 412118611Snjl#define USE_REL 1 413151937Sjkim#endif 414118611Snjl 415118611Snjl/* Use these in new code. */ 416118611Snjl#ifndef elf_backend_may_use_rel_p 417118611Snjl#define elf_backend_may_use_rel_p USE_REL 418118611Snjl#endif 419118611Snjl#ifndef elf_backend_may_use_rela_p 420118611Snjl#define elf_backend_may_use_rela_p !USE_REL 421118611Snjl#endif 422118611Snjl#ifndef elf_backend_default_use_rela_p 423118611Snjl#define elf_backend_default_use_rela_p !USE_REL 424118611Snjl#endif 425118611Snjl 426118611Snjl#ifndef elf_backend_rela_normal 427118611Snjl#define elf_backend_rela_normal 0 428167802Sjkim#endif 429118611Snjl 430118611Snjl#ifndef ELF_MACHINE_ALT1 431167802Sjkim#define ELF_MACHINE_ALT1 0 432118611Snjl#endif 433118611Snjl 434118611Snjl#ifndef ELF_MACHINE_ALT2 435118611Snjl#define ELF_MACHINE_ALT2 0 436118611Snjl#endif 437118611Snjl 438118611Snjl#ifndef elf_backend_size_info 439118611Snjl#define elf_backend_size_info _bfd_elfNN_size_info 440118611Snjl#endif 441118611Snjl 442118611Snjl#ifndef elf_backend_sign_extend_vma 443118611Snjl#define elf_backend_sign_extend_vma 0 444118611Snjl#endif 445118611Snjl 446118611Snjlextern const struct elf_size_info _bfd_elfNN_size_info; 447118611Snjl 448118611Snjl#ifndef INCLUDED_TARGET_FILE 449118611Snjlstatic const struct elf_backend_data elfNN_bed = 450118611Snjl{ 451118611Snjl ELF_ARCH, /* arch */ 452118611Snjl ELF_MACHINE_CODE, /* elf_machine_code */ 453118611Snjl ELF_MAXPAGESIZE, /* maxpagesize */ 454118611Snjl elf_info_to_howto, 455118611Snjl elf_info_to_howto_rel, 456118611Snjl elf_backend_sym_is_global, 457118611Snjl elf_backend_object_p, 458118611Snjl elf_backend_symbol_processing, 459118611Snjl elf_backend_symbol_table_processing, 460118611Snjl elf_backend_get_symbol_type, 461118611Snjl elf_backend_section_processing, 462118611Snjl elf_backend_section_from_shdr, 463118611Snjl elf_backend_section_flags, 464118611Snjl elf_backend_section_from_phdr, 465118611Snjl elf_backend_fake_sections, 466118611Snjl elf_backend_section_from_bfd_section, 467118611Snjl elf_backend_add_symbol_hook, 468118611Snjl elf_backend_link_output_symbol_hook, 469118611Snjl elf_backend_create_dynamic_sections, 470118611Snjl elf_backend_check_relocs, 471118611Snjl elf_backend_adjust_dynamic_symbol, 472118611Snjl elf_backend_always_size_sections, 473118611Snjl elf_backend_size_dynamic_sections, 474151937Sjkim elf_backend_relocate_section, 475151937Sjkim elf_backend_finish_dynamic_symbol, 476118611Snjl elf_backend_finish_dynamic_sections, 477167802Sjkim elf_backend_begin_write_processing, 478167802Sjkim elf_backend_final_write_processing, 479167802Sjkim elf_backend_additional_program_headers, 480167802Sjkim elf_backend_modify_segment_map, 481167802Sjkim elf_backend_gc_mark_hook, 482167802Sjkim elf_backend_gc_sweep_hook, 483167802Sjkim elf_backend_post_process_headers, 484167802Sjkim elf_backend_print_symbol_all, 485167802Sjkim elf_backend_output_arch_syms, 486167802Sjkim elf_backend_copy_indirect_symbol, 487118611Snjl elf_backend_hide_symbol, 488118611Snjl elf_backend_emit_relocs, 489118611Snjl elf_backend_count_relocs, 490118611Snjl elf_backend_grok_prstatus, 491118611Snjl elf_backend_grok_psinfo, 492118611Snjl elf_backend_sprintf_vma, 493118611Snjl elf_backend_fprintf_vma, 494118611Snjl elf_backend_reloc_type_class, 495118611Snjl elf_backend_discard_info, 496118611Snjl elf_backend_ignore_discarded_relocs, 497118611Snjl elf_backend_write_section, 498118611Snjl elf_backend_set_nonloadable_filepos, 499118611Snjl elf_backend_is_contained_by_filepos, 500118611Snjl elf_backend_copy_private_bfd_data_p, 501118611Snjl elf_backend_mips_irix_compat, 502118611Snjl elf_backend_mips_rtype_to_howto, 503118611Snjl elf_backend_ecoff_debug_swap, 504118611Snjl ELF_MACHINE_ALT1, 505118611Snjl ELF_MACHINE_ALT2, 506118611Snjl &elf_backend_size_info, 507118611Snjl elf_backend_got_symbol_offset, 508118611Snjl elf_backend_got_header_size, 509118611Snjl elf_backend_plt_header_size, 510167802Sjkim elf_backend_collect, 511167802Sjkim elf_backend_type_change_ok, 512167802Sjkim elf_backend_may_use_rel_p, 513167802Sjkim elf_backend_may_use_rela_p, 514167802Sjkim elf_backend_default_use_rela_p, 515167802Sjkim elf_backend_rela_normal, 516167802Sjkim elf_backend_sign_extend_vma, 517167802Sjkim elf_backend_want_got_plt, 518167802Sjkim elf_backend_plt_readonly, 519167802Sjkim elf_backend_want_plt_sym, 520167802Sjkim elf_backend_plt_not_loaded, 521167802Sjkim elf_backend_plt_alignment, 522167802Sjkim elf_backend_can_gc_sections, 523167802Sjkim elf_backend_can_refcount, 524167802Sjkim elf_backend_want_got_sym, 525167802Sjkim elf_backend_want_dynbss, 526167802Sjkim elf_backend_want_p_paddr_set_to_zero 527167802Sjkim}; 528167802Sjkim#endif 529118611Snjl 530118611Snjl/* Forward declaration for use when initialising alternative_target field. */ 531118611Snjl#ifdef TARGET_LITTLE_SYM 532118611Snjlextern const bfd_target TARGET_LITTLE_SYM; 533167802Sjkim#endif 534118611Snjl 535118611Snjl#ifdef TARGET_BIG_SYM 536118611Snjlconst bfd_target TARGET_BIG_SYM = 537118611Snjl{ 538118611Snjl /* name: identify kind of target */ 539118611Snjl TARGET_BIG_NAME, 540118611Snjl 541118611Snjl /* flavour: general indication about file */ 542118611Snjl bfd_target_elf_flavour, 543118611Snjl 544118611Snjl /* byteorder: data is big endian */ 545118611Snjl BFD_ENDIAN_BIG, 546118611Snjl 547118611Snjl /* header_byteorder: header is also big endian */ 548118611Snjl BFD_ENDIAN_BIG, 549193529Sjkim 550118611Snjl /* object_flags: mask of all file flags */ 551118611Snjl (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS 552151937Sjkim | DYNAMIC | WP_TEXT | D_PAGED), 553151937Sjkim 554118611Snjl /* section_flags: mask of all section flags */ 555118611Snjl (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY 556118611Snjl | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES 557118611Snjl | SEC_ARCH_BIT_0 | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP), 558118611Snjl 559118611Snjl /* leading_symbol_char: is the first char of a user symbol 560151937Sjkim predictable, and if so what is it */ 561151937Sjkim elf_symbol_leading_char, 562151937Sjkim 563151937Sjkim /* ar_pad_char: pad character for filenames within an archive header 564118611Snjl FIXME: this really has nothing to do with ELF, this is a characteristic 565118611Snjl of the archiver and/or os and should be independently tunable */ 566118611Snjl '/', 567118611Snjl 568118611Snjl /* ar_max_namelen: maximum number of characters in an archive header 569118611Snjl FIXME: this really has nothing to do with ELF, this is a characteristic 570151937Sjkim of the archiver and should be independently tunable. The System V ABI, 571151937Sjkim Chapter 7 (Formats & Protocols), Archive section sets this as 15. */ 572151937Sjkim 15, 573151937Sjkim 574118611Snjl /* Routines to byte-swap various sized integers from the data sections */ 575118611Snjl bfd_getb64, bfd_getb_signed_64, bfd_putb64, 576118611Snjl bfd_getb32, bfd_getb_signed_32, bfd_putb32, 577118611Snjl bfd_getb16, bfd_getb_signed_16, bfd_putb16, 578118611Snjl 579118611Snjl /* Routines to byte-swap various sized integers from the file headers */ 580118611Snjl bfd_getb64, bfd_getb_signed_64, bfd_putb64, 581118611Snjl bfd_getb32, bfd_getb_signed_32, bfd_putb32, 582118611Snjl bfd_getb16, bfd_getb_signed_16, bfd_putb16, 583118611Snjl 584118611Snjl /* bfd_check_format: check the format of a file being read */ 585118611Snjl { _bfd_dummy_target, /* unknown format */ 586118611Snjl bfd_elfNN_object_p, /* assembler/linker output (object file) */ 587118611Snjl bfd_elfNN_archive_p, /* an archive */ 588118611Snjl bfd_elfNN_core_file_p /* a core file */ 589118611Snjl }, 590118611Snjl 591118611Snjl /* bfd_set_format: set the format of a file being written */ 592118611Snjl { bfd_false, 593118611Snjl bfd_elfNN_mkobject, 594118611Snjl bfd_elfNN_mkarchive, 595118611Snjl bfd_elfNN_mkcorefile 596118611Snjl }, 597118611Snjl 598118611Snjl /* bfd_write_contents: write cached information into a file being written */ 599151937Sjkim { bfd_false, 600151937Sjkim bfd_elfNN_write_object_contents, 601118611Snjl bfd_elfNN_write_archive_contents, 602118611Snjl bfd_elfNN_write_corefile_contents, 603118611Snjl }, 604118611Snjl 605118611Snjl BFD_JUMP_TABLE_GENERIC (bfd_elfNN), 606118611Snjl BFD_JUMP_TABLE_COPY (bfd_elfNN), 607118611Snjl BFD_JUMP_TABLE_CORE (bfd_elfNN), 608128212Snjl#ifdef bfd_elfNN_archive_functions 609118611Snjl BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive), 610118611Snjl#else 611118611Snjl BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), 612151937Sjkim#endif 613151937Sjkim BFD_JUMP_TABLE_SYMBOLS (bfd_elfNN), 614128212Snjl BFD_JUMP_TABLE_RELOCS (bfd_elfNN), 615151937Sjkim BFD_JUMP_TABLE_WRITE (bfd_elfNN), 616151937Sjkim BFD_JUMP_TABLE_LINK (bfd_elfNN), 617128212Snjl BFD_JUMP_TABLE_DYNAMIC (bfd_elfNN), 618128212Snjl 619128212Snjl /* Alternative endian target. */ 620128212Snjl#ifdef TARGET_LITTLE_SYM 621118611Snjl & TARGET_LITTLE_SYM, 622118611Snjl#else 623118611Snjl NULL, 624118611Snjl#endif 625151937Sjkim 626151937Sjkim /* backend_data: */ 627151937Sjkim (PTR) &elfNN_bed 628151937Sjkim}; 629118611Snjl#endif 630118611Snjl 631118611Snjl#ifdef TARGET_LITTLE_SYM 632118611Snjlconst bfd_target TARGET_LITTLE_SYM = 633118611Snjl{ 634193529Sjkim /* name: identify kind of target */ 635118611Snjl TARGET_LITTLE_NAME, 636128212Snjl 637151937Sjkim /* flavour: general indication about file */ 638151937Sjkim bfd_target_elf_flavour, 639128212Snjl 640128212Snjl /* byteorder: data is little endian */ 641128212Snjl BFD_ENDIAN_LITTLE, 642128212Snjl 643118611Snjl /* header_byteorder: header is also little endian */ 644118611Snjl BFD_ENDIAN_LITTLE, 645118611Snjl 646118611Snjl /* object_flags: mask of all file flags */ 647118611Snjl (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS 648118611Snjl | DYNAMIC | WP_TEXT | D_PAGED), 649118611Snjl 650118611Snjl /* section_flags: mask of all section flags */ 651118611Snjl (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY 652118611Snjl | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES 653118611Snjl | SEC_ARCH_BIT_0 | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP), 654118611Snjl 655118611Snjl /* leading_symbol_char: is the first char of a user symbol 656118611Snjl predictable, and if so what is it */ 657118611Snjl elf_symbol_leading_char, 658118611Snjl 659118611Snjl /* ar_pad_char: pad character for filenames within an archive header 660118611Snjl FIXME: this really has nothing to do with ELF, this is a characteristic 661118611Snjl of the archiver and/or os and should be independently tunable */ 662118611Snjl '/', 663118611Snjl 664118611Snjl /* ar_max_namelen: maximum number of characters in an archive header 665193529Sjkim FIXME: this really has nothing to do with ELF, this is a characteristic 666193529Sjkim of the archiver and should be independently tunable. The System V ABI, 667151937Sjkim Chapter 7 (Formats & Protocols), Archive section sets this as 15. */ 668151937Sjkim 15, 669118611Snjl 670118611Snjl /* Routines to byte-swap various sized integers from the data sections */ 671167802Sjkim bfd_getl64, bfd_getl_signed_64, bfd_putl64, 672118611Snjl bfd_getl32, bfd_getl_signed_32, bfd_putl32, 673118611Snjl bfd_getl16, bfd_getl_signed_16, bfd_putl16, 674118611Snjl 675118611Snjl /* Routines to byte-swap various sized integers from the file headers */ 676118611Snjl bfd_getl64, bfd_getl_signed_64, bfd_putl64, 677118611Snjl bfd_getl32, bfd_getl_signed_32, bfd_putl32, 678118611Snjl bfd_getl16, bfd_getl_signed_16, bfd_putl16, 679118611Snjl 680167802Sjkim /* bfd_check_format: check the format of a file being read */ 681167802Sjkim { _bfd_dummy_target, /* unknown format */ 682118611Snjl bfd_elfNN_object_p, /* assembler/linker output (object file) */ 683118611Snjl bfd_elfNN_archive_p, /* an archive */ 684118611Snjl bfd_elfNN_core_file_p /* a core file */ 685193529Sjkim }, 686193529Sjkim 687167802Sjkim /* bfd_set_format: set the format of a file being written */ 688167802Sjkim { bfd_false, 689167802Sjkim bfd_elfNN_mkobject, 690167802Sjkim bfd_elfNN_mkarchive, 691167802Sjkim bfd_elfNN_mkcorefile 692167802Sjkim }, 693167802Sjkim 694167802Sjkim /* bfd_write_contents: write cached information into a file being written */ 695167802Sjkim { bfd_false, 696167802Sjkim bfd_elfNN_write_object_contents, 697167802Sjkim bfd_elfNN_write_archive_contents, 698167802Sjkim bfd_elfNN_write_corefile_contents, 699167802Sjkim }, 700167802Sjkim 701167802Sjkim BFD_JUMP_TABLE_GENERIC (bfd_elfNN), 702167802Sjkim BFD_JUMP_TABLE_COPY (bfd_elfNN), 703167802Sjkim BFD_JUMP_TABLE_CORE (bfd_elfNN), 704167802Sjkim#ifdef bfd_elfNN_archive_functions 705167802Sjkim BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive), 706167802Sjkim#else 707118611Snjl BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), 708118611Snjl#endif 709167802Sjkim BFD_JUMP_TABLE_SYMBOLS (bfd_elfNN), 710167802Sjkim BFD_JUMP_TABLE_RELOCS (bfd_elfNN), 711151937Sjkim BFD_JUMP_TABLE_WRITE (bfd_elfNN), 712151937Sjkim BFD_JUMP_TABLE_LINK (bfd_elfNN), 713118611Snjl BFD_JUMP_TABLE_DYNAMIC (bfd_elfNN), 714118611Snjl 715118611Snjl /* Alternative endian target. */ 716118611Snjl#ifdef TARGET_BIG_SYM 717118611Snjl & TARGET_BIG_SYM, 718118611Snjl#else 719151937Sjkim NULL, 720151937Sjkim#endif 721118611Snjl 722118611Snjl /* backend_data: */ 723118611Snjl (PTR) &elfNN_bed 724118611Snjl}; 725167802Sjkim#endif 726167802Sjkim