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