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