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