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