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