targets.texi revision 1.8
1@section Targets 2 3 4@strong{Description}@* 5Each port of BFD to a different machine requires the creation 6of a target back end. All the back end provides to the root 7part of BFD is a structure containing pointers to functions 8which perform certain low level operations on files. BFD 9translates the applications's requests through a pointer into 10calls to the back end routines. 11 12When a file is opened with @code{bfd_openr}, its format and 13target are unknown. BFD uses various mechanisms to determine 14how to interpret the file. The operations performed are: 15 16@itemize @bullet 17 18@item 19Create a BFD by calling the internal routine 20@code{_bfd_new_bfd}, then call @code{bfd_find_target} with the 21target string supplied to @code{bfd_openr} and the new BFD pointer. 22 23@item 24If a null target string was provided to @code{bfd_find_target}, 25look up the environment variable @code{GNUTARGET} and use 26that as the target string. 27 28@item 29If the target string is still @code{NULL}, or the target string is 30@code{default}, then use the first item in the target vector 31as the target type, and set @code{target_defaulted} in the BFD to 32cause @code{bfd_check_format} to loop through all the targets. 33@xref{bfd_target}. @xref{Formats}. 34 35@item 36Otherwise, inspect the elements in the target vector 37one by one, until a match on target name is found. When found, 38use it. 39 40@item 41Otherwise return the error @code{bfd_error_invalid_target} to 42@code{bfd_openr}. 43 44@item 45@code{bfd_openr} attempts to open the file using 46@code{bfd_open_file}, and returns the BFD. 47@end itemize 48Once the BFD has been opened and the target selected, the file 49format may be determined. This is done by calling 50@code{bfd_check_format} on the BFD with a suggested format. 51If @code{target_defaulted} has been set, each possible target 52type is tried to see if it recognizes the specified format. 53@code{bfd_check_format} returns @code{TRUE} when the caller guesses right. 54@menu 55* bfd_target:: 56@end menu 57 58@node bfd_target, , Targets, Targets 59 60@subsection bfd_target 61 62 63@strong{Description}@* 64This structure contains everything that BFD knows about a 65target. It includes things like its byte order, name, and which 66routines to call to do various operations. 67 68Every BFD points to a target structure with its @code{xvec} 69member. 70 71The macros below are used to dispatch to functions through the 72@code{bfd_target} vector. They are used in a number of macros further 73down in @file{bfd.h}, and are also used when calling various 74routines by hand inside the BFD implementation. The @var{arglist} 75argument must be parenthesized; it contains all the arguments 76to the called function. 77 78They make the documentation (more) unpleasant to read, so if 79someone wants to fix this and not break the above, please do. 80@example 81#define BFD_SEND(bfd, message, arglist) \ 82 ((*((bfd)->xvec->message)) arglist) 83 84#ifdef DEBUG_BFD_SEND 85#undef BFD_SEND 86#define BFD_SEND(bfd, message, arglist) \ 87 (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ 88 ((*((bfd)->xvec->message)) arglist) : \ 89 (bfd_assert (__FILE__,__LINE__), NULL)) 90#endif 91@end example 92For operations which index on the BFD format: 93@example 94#define BFD_SEND_FMT(bfd, message, arglist) \ 95 (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) 96 97#ifdef DEBUG_BFD_SEND 98#undef BFD_SEND_FMT 99#define BFD_SEND_FMT(bfd, message, arglist) \ 100 (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ 101 (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \ 102 (bfd_assert (__FILE__,__LINE__), NULL)) 103#endif 104 105/* Defined to TRUE if unused section symbol should be kept. */ 106#ifndef TARGET_KEEP_UNUSED_SECTION_SYMBOLS 107#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true 108#endif 109 110@end example 111This is the structure which defines the type of BFD this is. The 112@code{xvec} member of the struct @code{bfd} itself points here. Each 113module that implements access to a different target under BFD, 114defines one of these. 115 116FIXME, these names should be rationalised with the names of 117the entry points which call them. Too bad we can't have one 118macro to define them both! 119@example 120enum bfd_flavour 121@{ 122 /* N.B. Update bfd_flavour_name if you change this. */ 123 bfd_target_unknown_flavour, 124 bfd_target_aout_flavour, 125 bfd_target_coff_flavour, 126 bfd_target_ecoff_flavour, 127 bfd_target_xcoff_flavour, 128 bfd_target_elf_flavour, 129 bfd_target_tekhex_flavour, 130 bfd_target_srec_flavour, 131 bfd_target_verilog_flavour, 132 bfd_target_ihex_flavour, 133 bfd_target_som_flavour, 134 bfd_target_os9k_flavour, 135 bfd_target_versados_flavour, 136 bfd_target_msdos_flavour, 137 bfd_target_ovax_flavour, 138 bfd_target_evax_flavour, 139 bfd_target_mmo_flavour, 140 bfd_target_mach_o_flavour, 141 bfd_target_pef_flavour, 142 bfd_target_pef_xlib_flavour, 143 bfd_target_sym_flavour 144@}; 145 146enum bfd_endian @{ BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN @}; 147 148/* Forward declaration. */ 149typedef struct bfd_link_info _bfd_link_info; 150 151/* Forward declaration. */ 152typedef struct flag_info flag_info; 153 154typedef void (*bfd_cleanup) (bfd *); 155 156typedef struct bfd_target 157@{ 158 /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */ 159 const char *name; 160 161 /* The "flavour" of a back end is a general indication about 162 the contents of a file. */ 163 enum bfd_flavour flavour; 164 165 /* The order of bytes within the data area of a file. */ 166 enum bfd_endian byteorder; 167 168 /* The order of bytes within the header parts of a file. */ 169 enum bfd_endian header_byteorder; 170 171 /* A mask of all the flags which an executable may have set - 172 from the set @code{BFD_NO_FLAGS}, @code{HAS_RELOC}, ...@code{D_PAGED}. */ 173 flagword object_flags; 174 175 /* A mask of all the flags which a section may have set - from 176 the set @code{SEC_NO_FLAGS}, @code{SEC_ALLOC}, ...@code{SET_NEVER_LOAD}. */ 177 flagword section_flags; 178 179 /* The character normally found at the front of a symbol. 180 (if any), perhaps `_'. */ 181 char symbol_leading_char; 182 183 /* The pad character for file names within an archive header. */ 184 char ar_pad_char; 185 186 /* The maximum number of characters in an archive header. */ 187 unsigned char ar_max_namelen; 188 189 /* How well this target matches, used to select between various 190 possible targets when more than one target matches. */ 191 unsigned char match_priority; 192 193 /* TRUE if unused section symbols should be kept. */ 194 bool keep_unused_section_symbols; 195 196 /* Entries for byte swapping for data. These are different from the 197 other entry points, since they don't take a BFD as the first argument. 198 Certain other handlers could do the same. */ 199 uint64_t (*bfd_getx64) (const void *); 200 int64_t (*bfd_getx_signed_64) (const void *); 201 void (*bfd_putx64) (uint64_t, void *); 202 bfd_vma (*bfd_getx32) (const void *); 203 bfd_signed_vma (*bfd_getx_signed_32) (const void *); 204 void (*bfd_putx32) (bfd_vma, void *); 205 bfd_vma (*bfd_getx16) (const void *); 206 bfd_signed_vma (*bfd_getx_signed_16) (const void *); 207 void (*bfd_putx16) (bfd_vma, void *); 208 209 /* Byte swapping for the headers. */ 210 uint64_t (*bfd_h_getx64) (const void *); 211 int64_t (*bfd_h_getx_signed_64) (const void *); 212 void (*bfd_h_putx64) (uint64_t, void *); 213 bfd_vma (*bfd_h_getx32) (const void *); 214 bfd_signed_vma (*bfd_h_getx_signed_32) (const void *); 215 void (*bfd_h_putx32) (bfd_vma, void *); 216 bfd_vma (*bfd_h_getx16) (const void *); 217 bfd_signed_vma (*bfd_h_getx_signed_16) (const void *); 218 void (*bfd_h_putx16) (bfd_vma, void *); 219 220 /* Format dependent routines: these are vectors of entry points 221 within the target vector structure, one for each format to check. */ 222 223 /* Check the format of a file being read. Return a @code{bfd_cleanup} on 224 success or zero on failure. */ 225 bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *); 226 227 /* Set the format of a file being written. */ 228 bool (*_bfd_set_format[bfd_type_end]) (bfd *); 229 230 /* Write cached information into a file being written, at @code{bfd_close}. */ 231 bool (*_bfd_write_contents[bfd_type_end]) (bfd *); 232 233@end example 234The general target vector. These vectors are initialized using the 235BFD_JUMP_TABLE macros. 236@example 237 238 /* Generic entry points. */ 239#define BFD_JUMP_TABLE_GENERIC(NAME) \ 240 NAME##_close_and_cleanup, \ 241 NAME##_bfd_free_cached_info, \ 242 NAME##_new_section_hook, \ 243 NAME##_get_section_contents, \ 244 NAME##_get_section_contents_in_window 245 246 /* Called when the BFD is being closed to do any necessary cleanup. */ 247 bool (*_close_and_cleanup) (bfd *); 248 /* Ask the BFD to free all cached information. */ 249 bool (*_bfd_free_cached_info) (bfd *); 250 /* Called when a new section is created. */ 251 bool (*_new_section_hook) (bfd *, sec_ptr); 252 /* Read the contents of a section. */ 253 bool (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr, 254 bfd_size_type); 255 bool (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr, bfd_window *, 256 file_ptr, bfd_size_type); 257 258 /* Entry points to copy private data. */ 259#define BFD_JUMP_TABLE_COPY(NAME) \ 260 NAME##_bfd_copy_private_bfd_data, \ 261 NAME##_bfd_merge_private_bfd_data, \ 262 _bfd_generic_init_private_section_data, \ 263 NAME##_bfd_copy_private_section_data, \ 264 NAME##_bfd_copy_private_symbol_data, \ 265 NAME##_bfd_copy_private_header_data, \ 266 NAME##_bfd_set_private_flags, \ 267 NAME##_bfd_print_private_bfd_data 268 269 /* Called to copy BFD general private data from one object file 270 to another. */ 271 bool (*_bfd_copy_private_bfd_data) (bfd *, bfd *); 272 /* Called to merge BFD general private data from one object file 273 to a common output file when linking. */ 274 bool (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *); 275 /* Called to initialize BFD private section data from one object file 276 to another. */ 277#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \ 278 BFD_SEND (obfd, _bfd_init_private_section_data, \ 279 (ibfd, isec, obfd, osec, link_info)) 280 bool (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr, 281 struct bfd_link_info *); 282 /* Called to copy BFD private section data from one object file 283 to another. */ 284 bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr); 285 /* Called to copy BFD private symbol data from one symbol 286 to another. */ 287 bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *, 288 bfd *, asymbol *); 289 /* Called to copy BFD private header data from one object file 290 to another. */ 291 bool (*_bfd_copy_private_header_data) (bfd *, bfd *); 292 /* Called to set private backend flags. */ 293 bool (*_bfd_set_private_flags) (bfd *, flagword); 294 295 /* Called to print private BFD data. */ 296 bool (*_bfd_print_private_bfd_data) (bfd *, void *); 297 298 /* Core file entry points. */ 299#define BFD_JUMP_TABLE_CORE(NAME) \ 300 NAME##_core_file_failing_command, \ 301 NAME##_core_file_failing_signal, \ 302 NAME##_core_file_matches_executable_p, \ 303 NAME##_core_file_pid 304 305 char *(*_core_file_failing_command) (bfd *); 306 int (*_core_file_failing_signal) (bfd *); 307 bool (*_core_file_matches_executable_p) (bfd *, bfd *); 308 int (*_core_file_pid) (bfd *); 309 310 /* Archive entry points. */ 311#define BFD_JUMP_TABLE_ARCHIVE(NAME) \ 312 NAME##_slurp_armap, \ 313 NAME##_slurp_extended_name_table, \ 314 NAME##_construct_extended_name_table, \ 315 NAME##_truncate_arname, \ 316 NAME##_write_armap, \ 317 NAME##_read_ar_hdr, \ 318 NAME##_write_ar_hdr, \ 319 NAME##_openr_next_archived_file, \ 320 NAME##_get_elt_at_index, \ 321 NAME##_generic_stat_arch_elt, \ 322 NAME##_update_armap_timestamp 323 324 bool (*_bfd_slurp_armap) (bfd *); 325 bool (*_bfd_slurp_extended_name_table) (bfd *); 326 bool (*_bfd_construct_extended_name_table) (bfd *, char **, 327 bfd_size_type *, 328 const char **); 329 void (*_bfd_truncate_arname) (bfd *, const char *, char *); 330 bool (*write_armap) (bfd *, unsigned, struct orl *, unsigned, int); 331 void *(*_bfd_read_ar_hdr_fn) (bfd *); 332 bool (*_bfd_write_ar_hdr_fn) (bfd *, bfd *); 333 bfd *(*openr_next_archived_file) (bfd *, bfd *); 334#define bfd_get_elt_at_index(b,i) \ 335 BFD_SEND (b, _bfd_get_elt_at_index, (b,i)) 336 bfd *(*_bfd_get_elt_at_index) (bfd *, symindex); 337 int (*_bfd_stat_arch_elt) (bfd *, struct stat *); 338 bool (*_bfd_update_armap_timestamp) (bfd *); 339 340 /* Entry points used for symbols. */ 341#define BFD_JUMP_TABLE_SYMBOLS(NAME) \ 342 NAME##_get_symtab_upper_bound, \ 343 NAME##_canonicalize_symtab, \ 344 NAME##_make_empty_symbol, \ 345 NAME##_print_symbol, \ 346 NAME##_get_symbol_info, \ 347 NAME##_get_symbol_version_string, \ 348 NAME##_bfd_is_local_label_name, \ 349 NAME##_bfd_is_target_special_symbol, \ 350 NAME##_get_lineno, \ 351 NAME##_find_nearest_line, \ 352 NAME##_find_line, \ 353 NAME##_find_inliner_info, \ 354 NAME##_bfd_make_debug_symbol, \ 355 NAME##_read_minisymbols, \ 356 NAME##_minisymbol_to_symbol 357 358 long (*_bfd_get_symtab_upper_bound) (bfd *); 359 long (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **); 360 struct bfd_symbol * 361 (*_bfd_make_empty_symbol) (bfd *); 362 void (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *, 363 bfd_print_symbol_type); 364#define bfd_print_symbol(b,p,s,e) \ 365 BFD_SEND (b, _bfd_print_symbol, (b,p,s,e)) 366 void (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *, symbol_info *); 367#define bfd_get_symbol_info(b,p,e) \ 368 BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) 369 const char * 370 (*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *, 371 bool, bool *); 372#define bfd_get_symbol_version_string(b,s,p,h) \ 373 BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h)) 374 bool (*_bfd_is_local_label_name) (bfd *, const char *); 375 bool (*_bfd_is_target_special_symbol) (bfd *, asymbol *); 376 alent * 377 (*_get_lineno) (bfd *, struct bfd_symbol *); 378 bool (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **, 379 struct bfd_section *, bfd_vma, 380 const char **, const char **, 381 unsigned int *, unsigned int *); 382 bool (*_bfd_find_line) (bfd *, struct bfd_symbol **, 383 struct bfd_symbol *, const char **, 384 unsigned int *); 385 bool (*_bfd_find_inliner_info) 386 (bfd *, const char **, const char **, unsigned int *); 387 /* Back-door to allow format-aware applications to create debug symbols 388 while using BFD for everything else. Currently used by the assembler 389 when creating COFF files. */ 390 asymbol * 391 (*_bfd_make_debug_symbol) (bfd *, void *, unsigned long size); 392#define bfd_read_minisymbols(b, d, m, s) \ 393 BFD_SEND (b, _read_minisymbols, (b, d, m, s)) 394 long (*_read_minisymbols) (bfd *, bool, void **, unsigned int *); 395#define bfd_minisymbol_to_symbol(b, d, m, f) \ 396 BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) 397 asymbol * 398 (*_minisymbol_to_symbol) (bfd *, bool, const void *, asymbol *); 399 400 /* Routines for relocs. */ 401#define BFD_JUMP_TABLE_RELOCS(NAME) \ 402 NAME##_get_reloc_upper_bound, \ 403 NAME##_canonicalize_reloc, \ 404 NAME##_set_reloc, \ 405 NAME##_bfd_reloc_type_lookup, \ 406 NAME##_bfd_reloc_name_lookup 407 408 long (*_get_reloc_upper_bound) (bfd *, sec_ptr); 409 long (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **, 410 struct bfd_symbol **); 411 void (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int); 412 /* See documentation on reloc types. */ 413 reloc_howto_type * 414 (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type); 415 reloc_howto_type * 416 (*reloc_name_lookup) (bfd *, const char *); 417 418 /* Routines used when writing an object file. */ 419#define BFD_JUMP_TABLE_WRITE(NAME) \ 420 NAME##_set_arch_mach, \ 421 NAME##_set_section_contents 422 423 bool (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture, 424 unsigned long); 425 bool (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *, 426 file_ptr, bfd_size_type); 427 428 /* Routines used by the linker. */ 429#define BFD_JUMP_TABLE_LINK(NAME) \ 430 NAME##_sizeof_headers, \ 431 NAME##_bfd_get_relocated_section_contents, \ 432 NAME##_bfd_relax_section, \ 433 NAME##_bfd_link_hash_table_create, \ 434 NAME##_bfd_link_add_symbols, \ 435 NAME##_bfd_link_just_syms, \ 436 NAME##_bfd_copy_link_hash_symbol_type, \ 437 NAME##_bfd_final_link, \ 438 NAME##_bfd_link_split_section, \ 439 NAME##_bfd_link_check_relocs, \ 440 NAME##_bfd_gc_sections, \ 441 NAME##_bfd_lookup_section_flags, \ 442 NAME##_bfd_merge_sections, \ 443 NAME##_bfd_is_group_section, \ 444 NAME##_bfd_group_name, \ 445 NAME##_bfd_discard_group, \ 446 NAME##_section_already_linked, \ 447 NAME##_bfd_define_common_symbol, \ 448 NAME##_bfd_link_hide_symbol, \ 449 NAME##_bfd_define_start_stop 450 451 int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); 452 bfd_byte * 453 (*_bfd_get_relocated_section_contents) (bfd *, 454 struct bfd_link_info *, 455 struct bfd_link_order *, 456 bfd_byte *, bool, 457 struct bfd_symbol **); 458 459 bool (*_bfd_relax_section) (bfd *, struct bfd_section *, 460 struct bfd_link_info *, bool *); 461 462 /* Create a hash table for the linker. Different backends store 463 different information in this table. */ 464 struct bfd_link_hash_table * 465 (*_bfd_link_hash_table_create) (bfd *); 466 467 /* Add symbols from this object file into the hash table. */ 468 bool (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *); 469 470 /* Indicate that we are only retrieving symbol values from this section. */ 471 void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *); 472 473 /* Copy the symbol type and other attributes for a linker script 474 assignment of one symbol to another. */ 475#define bfd_copy_link_hash_symbol_type(b, t, f) \ 476 BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f)) 477 void (*_bfd_copy_link_hash_symbol_type) (bfd *, 478 struct bfd_link_hash_entry *, 479 struct bfd_link_hash_entry *); 480 481 /* Do a link based on the link_order structures attached to each 482 section of the BFD. */ 483 bool (*_bfd_final_link) (bfd *, struct bfd_link_info *); 484 485 /* Should this section be split up into smaller pieces during linking. */ 486 bool (*_bfd_link_split_section) (bfd *, struct bfd_section *); 487 488 /* Check the relocations in the bfd for validity. */ 489 bool (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *); 490 491 /* Remove sections that are not referenced from the output. */ 492 bool (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); 493 494 /* Sets the bitmask of allowed and disallowed section flags. */ 495 bool (*_bfd_lookup_section_flags) (struct bfd_link_info *, 496 struct flag_info *, asection *); 497 498 /* Attempt to merge SEC_MERGE sections. */ 499 bool (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); 500 501 /* Is this section a member of a group? */ 502 bool (*_bfd_is_group_section) (bfd *, const struct bfd_section *); 503 504 /* The group name, if section is a member of a group. */ 505 const char *(*_bfd_group_name) (bfd *, const struct bfd_section *); 506 507 /* Discard members of a group. */ 508 bool (*_bfd_discard_group) (bfd *, struct bfd_section *); 509 510 /* Check if SEC has been already linked during a reloceatable or 511 final link. */ 512 bool (*_section_already_linked) (bfd *, asection *, 513 struct bfd_link_info *); 514 515 /* Define a common symbol. */ 516 bool (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *, 517 struct bfd_link_hash_entry *); 518 519 /* Hide a symbol. */ 520 void (*_bfd_link_hide_symbol) (bfd *, struct bfd_link_info *, 521 struct bfd_link_hash_entry *); 522 523 /* Define a __start, __stop, .startof. or .sizeof. symbol. */ 524 struct bfd_link_hash_entry * 525 (*_bfd_define_start_stop) (struct bfd_link_info *, const char *, 526 asection *); 527 528 /* Routines to handle dynamic symbols and relocs. */ 529#define BFD_JUMP_TABLE_DYNAMIC(NAME) \ 530 NAME##_get_dynamic_symtab_upper_bound, \ 531 NAME##_canonicalize_dynamic_symtab, \ 532 NAME##_get_synthetic_symtab, \ 533 NAME##_get_dynamic_reloc_upper_bound, \ 534 NAME##_canonicalize_dynamic_reloc 535 536 /* Get the amount of memory required to hold the dynamic symbols. */ 537 long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *); 538 /* Read in the dynamic symbols. */ 539 long (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **); 540 /* Create synthetized symbols. */ 541 long (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **, 542 long, struct bfd_symbol **, 543 struct bfd_symbol **); 544 /* Get the amount of memory required to hold the dynamic relocs. */ 545 long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *); 546 /* Read in the dynamic relocs. */ 547 long (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **, 548 struct bfd_symbol **); 549 550@end example 551A pointer to an alternative bfd_target in case the current one is not 552satisfactory. This can happen when the target cpu supports both big 553and little endian code, and target chosen by the linker has the wrong 554endianness. The function open_output() in ld/ldlang.c uses this field 555to find an alternative output format that is suitable. 556@example 557 /* Opposite endian version of this target. */ 558 const struct bfd_target *alternative_target; 559 560 /* Data for use by back-end routines, which isn't 561 generic enough to belong in this structure. */ 562 const void *backend_data; 563 564@} bfd_target; 565 566static inline const char * 567bfd_get_target (const bfd *abfd) 568@{ 569 return abfd->xvec->name; 570@} 571 572static inline enum bfd_flavour 573bfd_get_flavour (const bfd *abfd) 574@{ 575 return abfd->xvec->flavour; 576@} 577 578static inline flagword 579bfd_applicable_file_flags (const bfd *abfd) 580@{ 581 return abfd->xvec->object_flags; 582@} 583 584static inline bool 585bfd_family_coff (const bfd *abfd) 586@{ 587 return (bfd_get_flavour (abfd) == bfd_target_coff_flavour 588 || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour); 589@} 590 591static inline bool 592bfd_big_endian (const bfd *abfd) 593@{ 594 return abfd->xvec->byteorder == BFD_ENDIAN_BIG; 595@} 596static inline bool 597bfd_little_endian (const bfd *abfd) 598@{ 599 return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE; 600@} 601 602static inline bool 603bfd_header_big_endian (const bfd *abfd) 604@{ 605 return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG; 606@} 607 608static inline bool 609bfd_header_little_endian (const bfd *abfd) 610@{ 611 return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE; 612@} 613 614static inline flagword 615bfd_applicable_section_flags (const bfd *abfd) 616@{ 617 return abfd->xvec->section_flags; 618@} 619 620static inline char 621bfd_get_symbol_leading_char (const bfd *abfd) 622@{ 623 return abfd->xvec->symbol_leading_char; 624@} 625 626static inline enum bfd_flavour 627bfd_asymbol_flavour (const asymbol *sy) 628@{ 629 if ((sy->flags & BSF_SYNTHETIC) != 0) 630 return bfd_target_unknown_flavour; 631 return sy->the_bfd->xvec->flavour; 632@} 633 634static inline bool 635bfd_keep_unused_section_symbols (const bfd *abfd) 636@{ 637 return abfd->xvec->keep_unused_section_symbols; 638@} 639 640@end example 641 642@findex bfd_set_default_target 643@subsubsection @code{bfd_set_default_target} 644@strong{Synopsis} 645@example 646bool bfd_set_default_target (const char *name); 647@end example 648@strong{Description}@* 649Set the default target vector to use when recognizing a BFD. 650This takes the name of the target, which may be a BFD target 651name or a configuration triplet. 652 653@findex bfd_find_target 654@subsubsection @code{bfd_find_target} 655@strong{Synopsis} 656@example 657const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); 658@end example 659@strong{Description}@* 660Return a pointer to the transfer vector for the object target 661named @var{target_name}. If @var{target_name} is @code{NULL}, 662choose the one in the environment variable @code{GNUTARGET}; if 663that is null or not defined, then choose the first entry in the 664target list. Passing in the string "default" or setting the 665environment variable to "default" will cause the first entry in 666the target list to be returned, and "target_defaulted" will be 667set in the BFD if @var{abfd} isn't @code{NULL}. This causes 668@code{bfd_check_format} to loop over all the targets to find the 669one that matches the file being read. 670 671@findex bfd_get_target_info 672@subsubsection @code{bfd_get_target_info} 673@strong{Synopsis} 674@example 675const bfd_target *bfd_get_target_info (const char *target_name, 676 bfd *abfd, 677 bool *is_bigendian, 678 int *underscoring, 679 const char **def_target_arch); 680@end example 681@strong{Description}@* 682Return a pointer to the transfer vector for the object target 683named @var{target_name}. If @var{target_name} is @code{NULL}, 684choose the one in the environment variable @code{GNUTARGET}; if 685that is null or not defined, then choose the first entry in the 686target list. Passing in the string "default" or setting the 687environment variable to "default" will cause the first entry in 688the target list to be returned, and "target_defaulted" will be 689set in the BFD if @var{abfd} isn't @code{NULL}. This causes 690@code{bfd_check_format} to loop over all the targets to find the 691one that matches the file being read. 692If @var{is_bigendian} is not @code{NULL}, then set this value to target's 693endian mode. True for big-endian, FALSE for little-endian or for 694invalid target. 695If @var{underscoring} is not @code{NULL}, then set this value to target's 696underscoring mode. Zero for none-underscoring, -1 for invalid target, 697else the value of target vector's symbol underscoring. 698If @var{def_target_arch} is not @code{NULL}, then set it to the architecture 699string specified by the target_name. 700 701@findex bfd_target_list 702@subsubsection @code{bfd_target_list} 703@strong{Synopsis} 704@example 705const char ** bfd_target_list (void); 706@end example 707@strong{Description}@* 708Return a freshly malloced NULL-terminated 709vector of the names of all the valid BFD targets. Do not 710modify the names. 711 712@findex bfd_iterate_over_targets 713@subsubsection @code{bfd_iterate_over_targets} 714@strong{Synopsis} 715@example 716const bfd_target *bfd_iterate_over_targets 717 (int (*func) (const bfd_target *, void *), 718 void *data); 719@end example 720@strong{Description}@* 721Call @var{func} for each target in the list of BFD target 722vectors, passing @var{data} to @var{func}. Stop iterating if 723@var{func} returns a non-zero result, and return that target 724vector. Return NULL if @var{func} always returns zero. 725 726@findex bfd_flavour_name 727@subsubsection @code{bfd_flavour_name} 728@strong{Synopsis} 729@example 730const char *bfd_flavour_name (enum bfd_flavour flavour); 731@end example 732@strong{Description}@* 733Return the string form of @var{flavour}. 734 735