1 1.1 skrll /* Generic target-file-type support for the BFD library. 2 1.16 christos Copyright (C) 1990-2026 Free Software Foundation, Inc. 3 1.1 skrll Written by Cygnus Support. 4 1.1 skrll 5 1.1 skrll This file is part of BFD, the Binary File Descriptor library. 6 1.1 skrll 7 1.1 skrll This program is free software; you can redistribute it and/or modify 8 1.1 skrll it under the terms of the GNU General Public License as published by 9 1.1 skrll the Free Software Foundation; either version 3 of the License, or 10 1.1 skrll (at your option) any later version. 11 1.1 skrll 12 1.1 skrll This program is distributed in the hope that it will be useful, 13 1.1 skrll but WITHOUT ANY WARRANTY; without even the implied warranty of 14 1.1 skrll MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 1.1 skrll GNU General Public License for more details. 16 1.1 skrll 17 1.1 skrll You should have received a copy of the GNU General Public License 18 1.1 skrll along with this program; if not, write to the Free Software 19 1.1 skrll Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 20 1.1 skrll MA 02110-1301, USA. */ 21 1.1 skrll 22 1.1 skrll #include "sysdep.h" 23 1.14 christos #include "libiberty.h" 24 1.1 skrll #include "bfd.h" 25 1.1 skrll #include "libbfd.h" 26 1.1 skrll #include "fnmatch.h" 27 1.1 skrll 28 1.1 skrll /* 29 1.1 skrll It's okay to see some: 30 1.1 skrll #if 0 31 1.1 skrll directives in this source file, as targets.c uses them to exclude 32 1.1 skrll certain BFD vectors. This comment is specially formatted to catch 33 1.1 skrll users who grep for ^#if 0, so please keep it this way! 34 1.1 skrll */ 35 1.1 skrll 36 1.1 skrll /* 37 1.1 skrll SECTION 38 1.1 skrll Targets 39 1.1 skrll 40 1.1 skrll DESCRIPTION 41 1.1 skrll Each port of BFD to a different machine requires the creation 42 1.1 skrll of a target back end. All the back end provides to the root 43 1.1 skrll part of BFD is a structure containing pointers to functions 44 1.1 skrll which perform certain low level operations on files. BFD 45 1.1 skrll translates the applications's requests through a pointer into 46 1.1 skrll calls to the back end routines. 47 1.1 skrll 48 1.1 skrll When a file is opened with <<bfd_openr>>, its format and 49 1.1 skrll target are unknown. BFD uses various mechanisms to determine 50 1.1 skrll how to interpret the file. The operations performed are: 51 1.1 skrll 52 1.1 skrll o Create a BFD by calling the internal routine 53 1.1 skrll <<_bfd_new_bfd>>, then call <<bfd_find_target>> with the 54 1.1 skrll target string supplied to <<bfd_openr>> and the new BFD pointer. 55 1.1 skrll 56 1.1 skrll o If a null target string was provided to <<bfd_find_target>>, 57 1.1 skrll look up the environment variable <<GNUTARGET>> and use 58 1.1 skrll that as the target string. 59 1.1 skrll 60 1.1 skrll o If the target string is still <<NULL>>, or the target string is 61 1.1 skrll <<default>>, then use the first item in the target vector 62 1.1 skrll as the target type, and set <<target_defaulted>> in the BFD to 63 1.1 skrll cause <<bfd_check_format>> to loop through all the targets. 64 1.1 skrll @xref{bfd_target}. @xref{Formats}. 65 1.1 skrll 66 1.1 skrll o Otherwise, inspect the elements in the target vector 67 1.1 skrll one by one, until a match on target name is found. When found, 68 1.1 skrll use it. 69 1.1 skrll 70 1.1 skrll o Otherwise return the error <<bfd_error_invalid_target>> to 71 1.1 skrll <<bfd_openr>>. 72 1.1 skrll 73 1.1 skrll o <<bfd_openr>> attempts to open the file using 74 1.1 skrll <<bfd_open_file>>, and returns the BFD. 75 1.1 skrll 76 1.1 skrll Once the BFD has been opened and the target selected, the file 77 1.1 skrll format may be determined. This is done by calling 78 1.1 skrll <<bfd_check_format>> on the BFD with a suggested format. 79 1.1 skrll If <<target_defaulted>> has been set, each possible target 80 1.1 skrll type is tried to see if it recognizes the specified format. 81 1.1 skrll <<bfd_check_format>> returns <<TRUE>> when the caller guesses right. 82 1.1 skrll @menu 83 1.1 skrll @* bfd_target:: 84 1.1 skrll @end menu 85 1.1 skrll */ 86 1.1 skrll 87 1.1 skrll /* 88 1.1 skrll 89 1.1 skrll INODE 90 1.1 skrll bfd_target, , Targets, Targets 91 1.1 skrll DOCDD 92 1.1 skrll SUBSECTION 93 1.1 skrll bfd_target 94 1.1 skrll 95 1.1 skrll DESCRIPTION 96 1.1 skrll This structure contains everything that BFD knows about a 97 1.1 skrll target. It includes things like its byte order, name, and which 98 1.1 skrll routines to call to do various operations. 99 1.1 skrll 100 1.1 skrll Every BFD points to a target structure with its <<xvec>> 101 1.1 skrll member. 102 1.1 skrll 103 1.1 skrll The macros below are used to dispatch to functions through the 104 1.1 skrll <<bfd_target>> vector. They are used in a number of macros further 105 1.1 skrll down in @file{bfd.h}, and are also used when calling various 106 1.1 skrll routines by hand inside the BFD implementation. The @var{arglist} 107 1.1 skrll argument must be parenthesized; it contains all the arguments 108 1.1 skrll to the called function. 109 1.1 skrll 110 1.1 skrll They make the documentation (more) unpleasant to read, so if 111 1.1 skrll someone wants to fix this and not break the above, please do. 112 1.1 skrll 113 1.1 skrll .#define BFD_SEND(bfd, message, arglist) \ 114 1.1 skrll . ((*((bfd)->xvec->message)) arglist) 115 1.1 skrll . 116 1.1 skrll .#ifdef DEBUG_BFD_SEND 117 1.1 skrll .#undef BFD_SEND 118 1.1 skrll .#define BFD_SEND(bfd, message, arglist) \ 119 1.1 skrll . (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ 120 1.1 skrll . ((*((bfd)->xvec->message)) arglist) : \ 121 1.1 skrll . (bfd_assert (__FILE__,__LINE__), NULL)) 122 1.1 skrll .#endif 123 1.1 skrll 124 1.1 skrll For operations which index on the BFD format: 125 1.1 skrll 126 1.1 skrll .#define BFD_SEND_FMT(bfd, message, arglist) \ 127 1.1 skrll . (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) 128 1.1 skrll . 129 1.1 skrll .#ifdef DEBUG_BFD_SEND 130 1.1 skrll .#undef BFD_SEND_FMT 131 1.1 skrll .#define BFD_SEND_FMT(bfd, message, arglist) \ 132 1.1 skrll . (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ 133 1.1 skrll . (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \ 134 1.1 skrll . (bfd_assert (__FILE__,__LINE__), NULL)) 135 1.1 skrll .#endif 136 1.1 skrll . 137 1.13 christos .{* Defined to TRUE if unused section symbol should be kept. *} 138 1.13 christos .#ifndef TARGET_KEEP_UNUSED_SECTION_SYMBOLS 139 1.13 christos .#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true 140 1.13 christos .#endif 141 1.13 christos . 142 1.16 christos .{* Define to TRUE if section merging is supported by the backend. *} 143 1.16 christos .#ifndef TARGET_MERGE_SECTIONS 144 1.16 christos .#define TARGET_MERGE_SECTIONS false 145 1.16 christos .#endif 146 1.16 christos . 147 1.1 skrll This is the structure which defines the type of BFD this is. The 148 1.1 skrll <<xvec>> member of the struct <<bfd>> itself points here. Each 149 1.1 skrll module that implements access to a different target under BFD, 150 1.1 skrll defines one of these. 151 1.1 skrll 152 1.1 skrll FIXME, these names should be rationalised with the names of 153 1.1 skrll the entry points which call them. Too bad we can't have one 154 1.1 skrll macro to define them both! 155 1.1 skrll 156 1.14 christos EXTERNAL 157 1.1 skrll .enum bfd_flavour 158 1.1 skrll .{ 159 1.5 christos . {* N.B. Update bfd_flavour_name if you change this. *} 160 1.1 skrll . bfd_target_unknown_flavour, 161 1.1 skrll . bfd_target_aout_flavour, 162 1.1 skrll . bfd_target_coff_flavour, 163 1.1 skrll . bfd_target_ecoff_flavour, 164 1.1 skrll . bfd_target_xcoff_flavour, 165 1.1 skrll . bfd_target_elf_flavour, 166 1.1 skrll . bfd_target_tekhex_flavour, 167 1.1 skrll . bfd_target_srec_flavour, 168 1.2 matt . bfd_target_verilog_flavour, 169 1.1 skrll . bfd_target_ihex_flavour, 170 1.1 skrll . bfd_target_som_flavour, 171 1.1 skrll . bfd_target_msdos_flavour, 172 1.1 skrll . bfd_target_evax_flavour, 173 1.1 skrll . bfd_target_mmo_flavour, 174 1.1 skrll . bfd_target_mach_o_flavour, 175 1.1 skrll . bfd_target_pef_flavour, 176 1.1 skrll . bfd_target_pef_xlib_flavour, 177 1.1 skrll . bfd_target_sym_flavour 178 1.1 skrll .}; 179 1.1 skrll . 180 1.1 skrll .enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; 181 1.1 skrll . 182 1.14 christos .{* Forward declarations. *} 183 1.14 christos .struct flag_info; 184 1.13 christos .typedef void (*bfd_cleanup) (bfd *); 185 1.13 christos . 186 1.14 christos 187 1.14 christos CODE_FRAGMENT 188 1.1 skrll .typedef struct bfd_target 189 1.1 skrll .{ 190 1.1 skrll . {* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. *} 191 1.11 christos . const char *name; 192 1.1 skrll . 193 1.1 skrll . {* The "flavour" of a back end is a general indication about 194 1.1 skrll . the contents of a file. *} 195 1.1 skrll . enum bfd_flavour flavour; 196 1.1 skrll . 197 1.1 skrll . {* The order of bytes within the data area of a file. *} 198 1.1 skrll . enum bfd_endian byteorder; 199 1.1 skrll . 200 1.1 skrll . {* The order of bytes within the header parts of a file. *} 201 1.1 skrll . enum bfd_endian header_byteorder; 202 1.1 skrll . 203 1.1 skrll . {* A mask of all the flags which an executable may have set - 204 1.1 skrll . from the set <<BFD_NO_FLAGS>>, <<HAS_RELOC>>, ...<<D_PAGED>>. *} 205 1.1 skrll . flagword object_flags; 206 1.1 skrll . 207 1.1 skrll . {* A mask of all the flags which a section may have set - from 208 1.1 skrll . the set <<SEC_NO_FLAGS>>, <<SEC_ALLOC>>, ...<<SET_NEVER_LOAD>>. *} 209 1.1 skrll . flagword section_flags; 210 1.1 skrll . 211 1.1 skrll . {* The character normally found at the front of a symbol. 212 1.1 skrll . (if any), perhaps `_'. *} 213 1.1 skrll . char symbol_leading_char; 214 1.1 skrll . 215 1.1 skrll . {* The pad character for file names within an archive header. *} 216 1.1 skrll . char ar_pad_char; 217 1.1 skrll . 218 1.1 skrll . {* The maximum number of characters in an archive header. *} 219 1.2 matt . unsigned char ar_max_namelen; 220 1.2 matt . 221 1.2 matt . {* How well this target matches, used to select between various 222 1.2 matt . possible targets when more than one target matches. *} 223 1.2 matt . unsigned char match_priority; 224 1.1 skrll . 225 1.13 christos . {* TRUE if unused section symbols should be kept. *} 226 1.13 christos . bool keep_unused_section_symbols; 227 1.13 christos . 228 1.16 christos . {* TRUE if section merging is supported by the backend. *} 229 1.16 christos . bool merge_sections; 230 1.16 christos . 231 1.1 skrll . {* Entries for byte swapping for data. These are different from the 232 1.1 skrll . other entry points, since they don't take a BFD as the first argument. 233 1.1 skrll . Certain other handlers could do the same. *} 234 1.13 christos . uint64_t (*bfd_getx64) (const void *); 235 1.13 christos . int64_t (*bfd_getx_signed_64) (const void *); 236 1.13 christos . void (*bfd_putx64) (uint64_t, void *); 237 1.8 christos . bfd_vma (*bfd_getx32) (const void *); 238 1.1 skrll . bfd_signed_vma (*bfd_getx_signed_32) (const void *); 239 1.8 christos . void (*bfd_putx32) (bfd_vma, void *); 240 1.8 christos . bfd_vma (*bfd_getx16) (const void *); 241 1.1 skrll . bfd_signed_vma (*bfd_getx_signed_16) (const void *); 242 1.8 christos . void (*bfd_putx16) (bfd_vma, void *); 243 1.1 skrll . 244 1.1 skrll . {* Byte swapping for the headers. *} 245 1.13 christos . uint64_t (*bfd_h_getx64) (const void *); 246 1.13 christos . int64_t (*bfd_h_getx_signed_64) (const void *); 247 1.13 christos . void (*bfd_h_putx64) (uint64_t, void *); 248 1.8 christos . bfd_vma (*bfd_h_getx32) (const void *); 249 1.1 skrll . bfd_signed_vma (*bfd_h_getx_signed_32) (const void *); 250 1.8 christos . void (*bfd_h_putx32) (bfd_vma, void *); 251 1.8 christos . bfd_vma (*bfd_h_getx16) (const void *); 252 1.1 skrll . bfd_signed_vma (*bfd_h_getx_signed_16) (const void *); 253 1.8 christos . void (*bfd_h_putx16) (bfd_vma, void *); 254 1.1 skrll . 255 1.1 skrll . {* Format dependent routines: these are vectors of entry points 256 1.1 skrll . within the target vector structure, one for each format to check. *} 257 1.1 skrll . 258 1.13 christos . {* Check the format of a file being read. Return a <<bfd_cleanup>> on 259 1.13 christos . success or zero on failure. *} 260 1.13 christos . bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *); 261 1.1 skrll . 262 1.1 skrll . {* Set the format of a file being written. *} 263 1.13 christos . bool (*_bfd_set_format[bfd_type_end]) (bfd *); 264 1.1 skrll . 265 1.1 skrll . {* Write cached information into a file being written, at <<bfd_close>>. *} 266 1.13 christos . bool (*_bfd_write_contents[bfd_type_end]) (bfd *); 267 1.1 skrll . 268 1.14 christos 269 1.1 skrll The general target vector. These vectors are initialized using the 270 1.1 skrll BFD_JUMP_TABLE macros. 271 1.14 christos 272 1.1 skrll . {* Generic entry points. *} 273 1.1 skrll .#define BFD_JUMP_TABLE_GENERIC(NAME) \ 274 1.1 skrll . NAME##_close_and_cleanup, \ 275 1.1 skrll . NAME##_bfd_free_cached_info, \ 276 1.1 skrll . NAME##_new_section_hook, \ 277 1.15 christos . NAME##_get_section_contents 278 1.1 skrll . 279 1.1 skrll . {* Called when the BFD is being closed to do any necessary cleanup. *} 280 1.13 christos . bool (*_close_and_cleanup) (bfd *); 281 1.1 skrll . {* Ask the BFD to free all cached information. *} 282 1.13 christos . bool (*_bfd_free_cached_info) (bfd *); 283 1.1 skrll . {* Called when a new section is created. *} 284 1.13 christos . bool (*_new_section_hook) (bfd *, sec_ptr); 285 1.1 skrll . {* Read the contents of a section. *} 286 1.13 christos . bool (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr, 287 1.13 christos . bfd_size_type); 288 1.1 skrll . 289 1.1 skrll . {* Entry points to copy private data. *} 290 1.1 skrll .#define BFD_JUMP_TABLE_COPY(NAME) \ 291 1.1 skrll . NAME##_bfd_copy_private_bfd_data, \ 292 1.1 skrll . NAME##_bfd_merge_private_bfd_data, \ 293 1.1 skrll . NAME##_bfd_copy_private_section_data, \ 294 1.1 skrll . NAME##_bfd_copy_private_symbol_data, \ 295 1.1 skrll . NAME##_bfd_copy_private_header_data, \ 296 1.1 skrll . NAME##_bfd_set_private_flags, \ 297 1.1 skrll . NAME##_bfd_print_private_bfd_data 298 1.1 skrll . 299 1.1 skrll . {* Called to copy BFD general private data from one object file 300 1.1 skrll . to another. *} 301 1.13 christos . bool (*_bfd_copy_private_bfd_data) (bfd *, bfd *); 302 1.1 skrll . {* Called to merge BFD general private data from one object file 303 1.1 skrll . to a common output file when linking. *} 304 1.13 christos . bool (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *); 305 1.15 christos . {* Called to copy BFD private section data from one object file 306 1.1 skrll . to another. *} 307 1.15 christos . bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr, 308 1.13 christos . struct bfd_link_info *); 309 1.1 skrll . {* Called to copy BFD private symbol data from one symbol 310 1.1 skrll . to another. *} 311 1.16 christos . bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol **, 312 1.16 christos . bfd *, asymbol **); 313 1.1 skrll . {* Called to copy BFD private header data from one object file 314 1.1 skrll . to another. *} 315 1.13 christos . bool (*_bfd_copy_private_header_data) (bfd *, bfd *); 316 1.1 skrll . {* Called to set private backend flags. *} 317 1.13 christos . bool (*_bfd_set_private_flags) (bfd *, flagword); 318 1.1 skrll . 319 1.1 skrll . {* Called to print private BFD data. *} 320 1.13 christos . bool (*_bfd_print_private_bfd_data) (bfd *, void *); 321 1.1 skrll . 322 1.1 skrll . {* Core file entry points. *} 323 1.1 skrll .#define BFD_JUMP_TABLE_CORE(NAME) \ 324 1.1 skrll . NAME##_core_file_failing_command, \ 325 1.1 skrll . NAME##_core_file_failing_signal, \ 326 1.2 matt . NAME##_core_file_matches_executable_p, \ 327 1.2 matt . NAME##_core_file_pid 328 1.1 skrll . 329 1.13 christos . char *(*_core_file_failing_command) (bfd *); 330 1.13 christos . int (*_core_file_failing_signal) (bfd *); 331 1.13 christos . bool (*_core_file_matches_executable_p) (bfd *, bfd *); 332 1.13 christos . int (*_core_file_pid) (bfd *); 333 1.1 skrll . 334 1.1 skrll . {* Archive entry points. *} 335 1.1 skrll .#define BFD_JUMP_TABLE_ARCHIVE(NAME) \ 336 1.1 skrll . NAME##_slurp_armap, \ 337 1.1 skrll . NAME##_slurp_extended_name_table, \ 338 1.1 skrll . NAME##_construct_extended_name_table, \ 339 1.1 skrll . NAME##_truncate_arname, \ 340 1.1 skrll . NAME##_write_armap, \ 341 1.1 skrll . NAME##_read_ar_hdr, \ 342 1.2 matt . NAME##_write_ar_hdr, \ 343 1.1 skrll . NAME##_openr_next_archived_file, \ 344 1.1 skrll . NAME##_get_elt_at_index, \ 345 1.1 skrll . NAME##_generic_stat_arch_elt, \ 346 1.1 skrll . NAME##_update_armap_timestamp 347 1.1 skrll . 348 1.13 christos . bool (*_bfd_slurp_armap) (bfd *); 349 1.13 christos . bool (*_bfd_slurp_extended_name_table) (bfd *); 350 1.13 christos . bool (*_bfd_construct_extended_name_table) (bfd *, char **, 351 1.13 christos . bfd_size_type *, 352 1.13 christos . const char **); 353 1.13 christos . void (*_bfd_truncate_arname) (bfd *, const char *, char *); 354 1.13 christos . bool (*write_armap) (bfd *, unsigned, struct orl *, unsigned, int); 355 1.13 christos . void *(*_bfd_read_ar_hdr_fn) (bfd *); 356 1.13 christos . bool (*_bfd_write_ar_hdr_fn) (bfd *, bfd *); 357 1.13 christos . bfd *(*openr_next_archived_file) (bfd *, bfd *); 358 1.8 christos .#define bfd_get_elt_at_index(b,i) \ 359 1.8 christos . BFD_SEND (b, _bfd_get_elt_at_index, (b,i)) 360 1.13 christos . bfd *(*_bfd_get_elt_at_index) (bfd *, symindex); 361 1.13 christos . int (*_bfd_stat_arch_elt) (bfd *, struct stat *); 362 1.13 christos . bool (*_bfd_update_armap_timestamp) (bfd *); 363 1.1 skrll . 364 1.1 skrll . {* Entry points used for symbols. *} 365 1.1 skrll .#define BFD_JUMP_TABLE_SYMBOLS(NAME) \ 366 1.1 skrll . NAME##_get_symtab_upper_bound, \ 367 1.1 skrll . NAME##_canonicalize_symtab, \ 368 1.1 skrll . NAME##_make_empty_symbol, \ 369 1.1 skrll . NAME##_print_symbol, \ 370 1.1 skrll . NAME##_get_symbol_info, \ 371 1.5 christos . NAME##_get_symbol_version_string, \ 372 1.1 skrll . NAME##_bfd_is_local_label_name, \ 373 1.1 skrll . NAME##_bfd_is_target_special_symbol, \ 374 1.1 skrll . NAME##_get_lineno, \ 375 1.1 skrll . NAME##_find_nearest_line, \ 376 1.14 christos . NAME##_find_nearest_line_with_alt, \ 377 1.5 christos . NAME##_find_line, \ 378 1.1 skrll . NAME##_find_inliner_info, \ 379 1.1 skrll . NAME##_bfd_make_debug_symbol, \ 380 1.1 skrll . NAME##_read_minisymbols, \ 381 1.1 skrll . NAME##_minisymbol_to_symbol 382 1.1 skrll . 383 1.13 christos . long (*_bfd_get_symtab_upper_bound) (bfd *); 384 1.13 christos . long (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **); 385 1.1 skrll . struct bfd_symbol * 386 1.13 christos . (*_bfd_make_empty_symbol) (bfd *); 387 1.13 christos . void (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *, 388 1.13 christos . bfd_print_symbol_type); 389 1.8 christos .#define bfd_print_symbol(b,p,s,e) \ 390 1.8 christos . BFD_SEND (b, _bfd_print_symbol, (b,p,s,e)) 391 1.13 christos . void (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *, symbol_info *); 392 1.8 christos .#define bfd_get_symbol_info(b,p,e) \ 393 1.8 christos . BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) 394 1.13 christos . const char * 395 1.13 christos . (*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *, 396 1.13 christos . bool, bool *); 397 1.13 christos .#define bfd_get_symbol_version_string(b,s,p,h) \ 398 1.13 christos . BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h)) 399 1.13 christos . bool (*_bfd_is_local_label_name) (bfd *, const char *); 400 1.13 christos . bool (*_bfd_is_target_special_symbol) (bfd *, asymbol *); 401 1.13 christos . alent * 402 1.13 christos . (*_get_lineno) (bfd *, struct bfd_symbol *); 403 1.13 christos . bool (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **, 404 1.13 christos . struct bfd_section *, bfd_vma, 405 1.13 christos . const char **, const char **, 406 1.13 christos . unsigned int *, unsigned int *); 407 1.14 christos . bool (*_bfd_find_nearest_line_with_alt) (bfd *, const char *, 408 1.14 christos . struct bfd_symbol **, 409 1.14 christos . struct bfd_section *, bfd_vma, 410 1.14 christos . const char **, const char **, 411 1.14 christos . unsigned int *, unsigned int *); 412 1.13 christos . bool (*_bfd_find_line) (bfd *, struct bfd_symbol **, 413 1.13 christos . struct bfd_symbol *, const char **, 414 1.13 christos . unsigned int *); 415 1.13 christos . bool (*_bfd_find_inliner_info) 416 1.1 skrll . (bfd *, const char **, const char **, unsigned int *); 417 1.1 skrll . {* Back-door to allow format-aware applications to create debug symbols 418 1.1 skrll . while using BFD for everything else. Currently used by the assembler 419 1.1 skrll . when creating COFF files. *} 420 1.13 christos . asymbol * 421 1.14 christos . (*_bfd_make_debug_symbol) (bfd *); 422 1.1 skrll .#define bfd_read_minisymbols(b, d, m, s) \ 423 1.8 christos . BFD_SEND (b, _read_minisymbols, (b, d, m, s)) 424 1.13 christos . long (*_read_minisymbols) (bfd *, bool, void **, unsigned int *); 425 1.1 skrll .#define bfd_minisymbol_to_symbol(b, d, m, f) \ 426 1.8 christos . BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) 427 1.13 christos . asymbol * 428 1.13 christos . (*_minisymbol_to_symbol) (bfd *, bool, const void *, asymbol *); 429 1.1 skrll . 430 1.1 skrll . {* Routines for relocs. *} 431 1.1 skrll .#define BFD_JUMP_TABLE_RELOCS(NAME) \ 432 1.1 skrll . NAME##_get_reloc_upper_bound, \ 433 1.1 skrll . NAME##_canonicalize_reloc, \ 434 1.16 christos . NAME##_finalize_section_relocs, \ 435 1.1 skrll . NAME##_bfd_reloc_type_lookup, \ 436 1.1 skrll . NAME##_bfd_reloc_name_lookup 437 1.1 skrll . 438 1.13 christos . long (*_get_reloc_upper_bound) (bfd *, sec_ptr); 439 1.13 christos . long (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **, 440 1.13 christos . struct bfd_symbol **); 441 1.16 christos . bool (*_bfd_finalize_section_relocs) (bfd *, sec_ptr, arelent **, 442 1.16 christos . unsigned int); 443 1.1 skrll . {* See documentation on reloc types. *} 444 1.1 skrll . reloc_howto_type * 445 1.13 christos . (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type); 446 1.1 skrll . reloc_howto_type * 447 1.13 christos . (*reloc_name_lookup) (bfd *, const char *); 448 1.1 skrll . 449 1.1 skrll . {* Routines used when writing an object file. *} 450 1.1 skrll .#define BFD_JUMP_TABLE_WRITE(NAME) \ 451 1.1 skrll . NAME##_set_arch_mach, \ 452 1.1 skrll . NAME##_set_section_contents 453 1.1 skrll . 454 1.13 christos . bool (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture, 455 1.8 christos . unsigned long); 456 1.13 christos . bool (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *, 457 1.13 christos . file_ptr, bfd_size_type); 458 1.1 skrll . 459 1.1 skrll . {* Routines used by the linker. *} 460 1.1 skrll .#define BFD_JUMP_TABLE_LINK(NAME) \ 461 1.1 skrll . NAME##_sizeof_headers, \ 462 1.1 skrll . NAME##_bfd_get_relocated_section_contents, \ 463 1.1 skrll . NAME##_bfd_relax_section, \ 464 1.1 skrll . NAME##_bfd_link_hash_table_create, \ 465 1.1 skrll . NAME##_bfd_link_add_symbols, \ 466 1.1 skrll . NAME##_bfd_link_just_syms, \ 467 1.2 matt . NAME##_bfd_copy_link_hash_symbol_type, \ 468 1.1 skrll . NAME##_bfd_final_link, \ 469 1.1 skrll . NAME##_bfd_link_split_section, \ 470 1.7 christos . NAME##_bfd_link_check_relocs, \ 471 1.1 skrll . NAME##_bfd_gc_sections, \ 472 1.2 matt . NAME##_bfd_lookup_section_flags, \ 473 1.1 skrll . NAME##_bfd_is_group_section, \ 474 1.11 christos . NAME##_bfd_group_name, \ 475 1.1 skrll . NAME##_bfd_discard_group, \ 476 1.2 matt . NAME##_section_already_linked, \ 477 1.8 christos . NAME##_bfd_define_common_symbol, \ 478 1.9 christos . NAME##_bfd_link_hide_symbol, \ 479 1.8 christos . NAME##_bfd_define_start_stop 480 1.1 skrll . 481 1.13 christos . int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); 482 1.13 christos . bfd_byte * 483 1.13 christos . (*_bfd_get_relocated_section_contents) (bfd *, 484 1.13 christos . struct bfd_link_info *, 485 1.13 christos . struct bfd_link_order *, 486 1.13 christos . bfd_byte *, bool, 487 1.13 christos . struct bfd_symbol **); 488 1.1 skrll . 489 1.13 christos . bool (*_bfd_relax_section) (bfd *, struct bfd_section *, 490 1.13 christos . struct bfd_link_info *, bool *); 491 1.1 skrll . 492 1.1 skrll . {* Create a hash table for the linker. Different backends store 493 1.1 skrll . different information in this table. *} 494 1.1 skrll . struct bfd_link_hash_table * 495 1.13 christos . (*_bfd_link_hash_table_create) (bfd *); 496 1.1 skrll . 497 1.1 skrll . {* Add symbols from this object file into the hash table. *} 498 1.13 christos . bool (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *); 499 1.1 skrll . 500 1.1 skrll . {* Indicate that we are only retrieving symbol values from this section. *} 501 1.13 christos . void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *); 502 1.1 skrll . 503 1.5 christos . {* Copy the symbol type and other attributes for a linker script 504 1.5 christos . assignment of one symbol to another. *} 505 1.2 matt .#define bfd_copy_link_hash_symbol_type(b, t, f) \ 506 1.8 christos . BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f)) 507 1.13 christos . void (*_bfd_copy_link_hash_symbol_type) (bfd *, 508 1.13 christos . struct bfd_link_hash_entry *, 509 1.13 christos . struct bfd_link_hash_entry *); 510 1.2 matt . 511 1.1 skrll . {* Do a link based on the link_order structures attached to each 512 1.1 skrll . section of the BFD. *} 513 1.13 christos . bool (*_bfd_final_link) (bfd *, struct bfd_link_info *); 514 1.1 skrll . 515 1.1 skrll . {* Should this section be split up into smaller pieces during linking. *} 516 1.13 christos . bool (*_bfd_link_split_section) (bfd *, struct bfd_section *); 517 1.1 skrll . 518 1.7 christos . {* Check the relocations in the bfd for validity. *} 519 1.13 christos . bool (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *); 520 1.7 christos . 521 1.1 skrll . {* Remove sections that are not referenced from the output. *} 522 1.13 christos . bool (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); 523 1.1 skrll . 524 1.2 matt . {* Sets the bitmask of allowed and disallowed section flags. *} 525 1.13 christos . bool (*_bfd_lookup_section_flags) (struct bfd_link_info *, 526 1.13 christos . struct flag_info *, asection *); 527 1.2 matt . 528 1.1 skrll . {* Is this section a member of a group? *} 529 1.13 christos . bool (*_bfd_is_group_section) (bfd *, const struct bfd_section *); 530 1.1 skrll . 531 1.11 christos . {* The group name, if section is a member of a group. *} 532 1.11 christos . const char *(*_bfd_group_name) (bfd *, const struct bfd_section *); 533 1.11 christos . 534 1.1 skrll . {* Discard members of a group. *} 535 1.13 christos . bool (*_bfd_discard_group) (bfd *, struct bfd_section *); 536 1.1 skrll . 537 1.1 skrll . {* Check if SEC has been already linked during a reloceatable or 538 1.1 skrll . final link. *} 539 1.13 christos . bool (*_section_already_linked) (bfd *, asection *, 540 1.13 christos . struct bfd_link_info *); 541 1.2 matt . 542 1.2 matt . {* Define a common symbol. *} 543 1.13 christos . bool (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *, 544 1.13 christos . struct bfd_link_hash_entry *); 545 1.1 skrll . 546 1.9 christos . {* Hide a symbol. *} 547 1.9 christos . void (*_bfd_link_hide_symbol) (bfd *, struct bfd_link_info *, 548 1.9 christos . struct bfd_link_hash_entry *); 549 1.9 christos . 550 1.8 christos . {* Define a __start, __stop, .startof. or .sizeof. symbol. *} 551 1.8 christos . struct bfd_link_hash_entry * 552 1.13 christos . (*_bfd_define_start_stop) (struct bfd_link_info *, const char *, 553 1.13 christos . asection *); 554 1.8 christos . 555 1.1 skrll . {* Routines to handle dynamic symbols and relocs. *} 556 1.1 skrll .#define BFD_JUMP_TABLE_DYNAMIC(NAME) \ 557 1.1 skrll . NAME##_get_dynamic_symtab_upper_bound, \ 558 1.1 skrll . NAME##_canonicalize_dynamic_symtab, \ 559 1.1 skrll . NAME##_get_synthetic_symtab, \ 560 1.1 skrll . NAME##_get_dynamic_reloc_upper_bound, \ 561 1.1 skrll . NAME##_canonicalize_dynamic_reloc 562 1.1 skrll . 563 1.1 skrll . {* Get the amount of memory required to hold the dynamic symbols. *} 564 1.13 christos . long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *); 565 1.1 skrll . {* Read in the dynamic symbols. *} 566 1.13 christos . long (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **); 567 1.1 skrll . {* Create synthetized symbols. *} 568 1.13 christos . long (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **, 569 1.13 christos . long, struct bfd_symbol **, 570 1.13 christos . struct bfd_symbol **); 571 1.1 skrll . {* Get the amount of memory required to hold the dynamic relocs. *} 572 1.13 christos . long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *); 573 1.1 skrll . {* Read in the dynamic relocs. *} 574 1.13 christos . long (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **, 575 1.13 christos . struct bfd_symbol **); 576 1.1 skrll . 577 1.1 skrll 578 1.1 skrll A pointer to an alternative bfd_target in case the current one is not 579 1.1 skrll satisfactory. This can happen when the target cpu supports both big 580 1.1 skrll and little endian code, and target chosen by the linker has the wrong 581 1.1 skrll endianness. The function open_output() in ld/ldlang.c uses this field 582 1.1 skrll to find an alternative output format that is suitable. 583 1.1 skrll 584 1.1 skrll . {* Opposite endian version of this target. *} 585 1.8 christos . const struct bfd_target *alternative_target; 586 1.1 skrll . 587 1.1 skrll 588 1.1 skrll . {* Data for use by back-end routines, which isn't 589 1.1 skrll . generic enough to belong in this structure. *} 590 1.1 skrll . const void *backend_data; 591 1.1 skrll . 592 1.1 skrll .} bfd_target; 593 1.1 skrll . 594 1.11 christos .static inline const char * 595 1.11 christos .bfd_get_target (const bfd *abfd) 596 1.11 christos .{ 597 1.11 christos . return abfd->xvec->name; 598 1.11 christos .} 599 1.11 christos . 600 1.11 christos .static inline enum bfd_flavour 601 1.11 christos .bfd_get_flavour (const bfd *abfd) 602 1.11 christos .{ 603 1.11 christos . return abfd->xvec->flavour; 604 1.11 christos .} 605 1.11 christos . 606 1.11 christos .static inline flagword 607 1.11 christos .bfd_applicable_file_flags (const bfd *abfd) 608 1.11 christos .{ 609 1.11 christos . return abfd->xvec->object_flags; 610 1.11 christos .} 611 1.11 christos . 612 1.13 christos .static inline bool 613 1.11 christos .bfd_family_coff (const bfd *abfd) 614 1.11 christos .{ 615 1.11 christos . return (bfd_get_flavour (abfd) == bfd_target_coff_flavour 616 1.11 christos . || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour); 617 1.11 christos .} 618 1.11 christos . 619 1.13 christos .static inline bool 620 1.11 christos .bfd_big_endian (const bfd *abfd) 621 1.11 christos .{ 622 1.11 christos . return abfd->xvec->byteorder == BFD_ENDIAN_BIG; 623 1.11 christos .} 624 1.13 christos .static inline bool 625 1.11 christos .bfd_little_endian (const bfd *abfd) 626 1.11 christos .{ 627 1.11 christos . return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE; 628 1.11 christos .} 629 1.11 christos . 630 1.13 christos .static inline bool 631 1.11 christos .bfd_header_big_endian (const bfd *abfd) 632 1.11 christos .{ 633 1.11 christos . return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG; 634 1.11 christos .} 635 1.11 christos . 636 1.13 christos .static inline bool 637 1.11 christos .bfd_header_little_endian (const bfd *abfd) 638 1.11 christos .{ 639 1.11 christos . return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE; 640 1.11 christos .} 641 1.11 christos . 642 1.11 christos .static inline flagword 643 1.11 christos .bfd_applicable_section_flags (const bfd *abfd) 644 1.11 christos .{ 645 1.11 christos . return abfd->xvec->section_flags; 646 1.11 christos .} 647 1.11 christos . 648 1.11 christos .static inline char 649 1.11 christos .bfd_get_symbol_leading_char (const bfd *abfd) 650 1.11 christos .{ 651 1.11 christos . return abfd->xvec->symbol_leading_char; 652 1.11 christos .} 653 1.11 christos . 654 1.11 christos .static inline enum bfd_flavour 655 1.11 christos .bfd_asymbol_flavour (const asymbol *sy) 656 1.11 christos .{ 657 1.11 christos . if ((sy->flags & BSF_SYNTHETIC) != 0) 658 1.11 christos . return bfd_target_unknown_flavour; 659 1.11 christos . return sy->the_bfd->xvec->flavour; 660 1.11 christos .} 661 1.11 christos . 662 1.13 christos .static inline bool 663 1.13 christos .bfd_keep_unused_section_symbols (const bfd *abfd) 664 1.13 christos .{ 665 1.13 christos . return abfd->xvec->keep_unused_section_symbols; 666 1.13 christos .} 667 1.13 christos . 668 1.15 christos .static inline bool 669 1.15 christos .bfd_target_supports_archives (const bfd *abfd) 670 1.15 christos .{ 671 1.15 christos . return (abfd->xvec->_bfd_check_format[bfd_archive] 672 1.15 christos . != abfd->xvec->_bfd_check_format[bfd_unknown]); 673 1.15 christos .} 674 1.15 christos . 675 1.1 skrll */ 676 1.1 skrll 677 1.1 skrll /* All known xvecs (even those that don't compile on all systems). 678 1.1 skrll Alphabetized for easy reference. 679 1.1 skrll They are listed a second time below, since 680 1.1 skrll we can't intermix extern's and initializers. */ 681 1.5 christos extern const bfd_target aarch64_elf32_be_vec; 682 1.5 christos extern const bfd_target aarch64_elf32_le_vec; 683 1.5 christos extern const bfd_target aarch64_elf64_be_vec; 684 1.5 christos extern const bfd_target aarch64_elf64_le_vec; 685 1.7 christos extern const bfd_target aarch64_mach_o_vec; 686 1.14 christos extern const bfd_target aarch64_pei_le_vec; 687 1.14 christos extern const bfd_target aarch64_pe_le_vec; 688 1.16 christos extern const bfd_target aarch64_pe_bigobj_le_vec; 689 1.5 christos extern const bfd_target alpha_ecoff_le_vec; 690 1.5 christos extern const bfd_target alpha_elf64_vec; 691 1.5 christos extern const bfd_target alpha_elf64_fbsd_vec; 692 1.5 christos extern const bfd_target alpha_vms_vec; 693 1.5 christos extern const bfd_target alpha_vms_lib_txt_vec; 694 1.5 christos extern const bfd_target am33_elf32_linux_vec; 695 1.13 christos extern const bfd_target amdgcn_elf64_le_vec; 696 1.5 christos extern const bfd_target aout_vec; 697 1.5 christos extern const bfd_target arc_elf32_be_vec; 698 1.5 christos extern const bfd_target arc_elf32_le_vec; 699 1.5 christos extern const bfd_target arm_elf32_be_vec; 700 1.5 christos extern const bfd_target arm_elf32_le_vec; 701 1.9 christos extern const bfd_target arm_elf32_fdpic_be_vec; 702 1.9 christos extern const bfd_target arm_elf32_fdpic_le_vec; 703 1.5 christos extern const bfd_target arm_elf32_vxworks_be_vec; 704 1.5 christos extern const bfd_target arm_elf32_vxworks_le_vec; 705 1.7 christos extern const bfd_target arm_mach_o_vec; 706 1.5 christos extern const bfd_target arm_pe_be_vec; 707 1.5 christos extern const bfd_target arm_pe_le_vec; 708 1.5 christos extern const bfd_target arm_pe_wince_be_vec; 709 1.5 christos extern const bfd_target arm_pe_wince_le_vec; 710 1.5 christos extern const bfd_target arm_pei_be_vec; 711 1.5 christos extern const bfd_target arm_pei_le_vec; 712 1.5 christos extern const bfd_target arm_pei_wince_be_vec; 713 1.5 christos extern const bfd_target arm_pei_wince_le_vec; 714 1.5 christos extern const bfd_target avr_elf32_vec; 715 1.5 christos extern const bfd_target bfin_elf32_vec; 716 1.5 christos extern const bfd_target bfin_elf32_fdpic_vec; 717 1.5 christos extern const bfd_target cr16_elf32_vec; 718 1.1 skrll extern const bfd_target cris_aout_vec; 719 1.5 christos extern const bfd_target cris_elf32_vec; 720 1.5 christos extern const bfd_target cris_elf32_us_vec; 721 1.5 christos extern const bfd_target crx_elf32_vec; 722 1.11 christos extern const bfd_target csky_elf32_be_vec; 723 1.11 christos extern const bfd_target csky_elf32_le_vec; 724 1.5 christos extern const bfd_target d10v_elf32_vec; 725 1.5 christos extern const bfd_target d30v_elf32_vec; 726 1.5 christos extern const bfd_target dlx_elf32_be_vec; 727 1.5 christos extern const bfd_target elf32_be_vec; 728 1.5 christos extern const bfd_target elf32_le_vec; 729 1.5 christos extern const bfd_target elf64_be_vec; 730 1.5 christos extern const bfd_target elf64_le_vec; 731 1.11 christos extern const bfd_target bpf_elf64_le_vec; 732 1.11 christos extern const bfd_target bpf_elf64_be_vec; 733 1.5 christos extern const bfd_target epiphany_elf32_vec; 734 1.5 christos extern const bfd_target fr30_elf32_vec; 735 1.5 christos extern const bfd_target frv_elf32_vec; 736 1.5 christos extern const bfd_target frv_elf32_fdpic_vec; 737 1.5 christos extern const bfd_target h8300_elf32_vec; 738 1.5 christos extern const bfd_target h8300_elf32_linux_vec; 739 1.5 christos extern const bfd_target hppa_elf32_vec; 740 1.5 christos extern const bfd_target hppa_elf32_linux_vec; 741 1.5 christos extern const bfd_target hppa_elf32_nbsd_vec; 742 1.5 christos extern const bfd_target hppa_elf64_vec; 743 1.5 christos extern const bfd_target hppa_elf64_linux_vec; 744 1.5 christos extern const bfd_target hppa_som_vec; 745 1.5 christos extern const bfd_target i386_aout_vec; 746 1.5 christos extern const bfd_target i386_aout_bsd_vec; 747 1.5 christos extern const bfd_target i386_aout_lynx_vec; 748 1.12 christos extern const bfd_target i386_aout_nbsd_vec; 749 1.5 christos extern const bfd_target i386_coff_vec; 750 1.5 christos extern const bfd_target i386_coff_go32_vec; 751 1.5 christos extern const bfd_target i386_coff_go32stubbed_vec; 752 1.5 christos extern const bfd_target i386_coff_lynx_vec; 753 1.5 christos extern const bfd_target i386_elf32_vec; 754 1.5 christos extern const bfd_target i386_elf32_fbsd_vec; 755 1.5 christos extern const bfd_target i386_elf32_sol2_vec; 756 1.5 christos extern const bfd_target i386_elf32_vxworks_vec; 757 1.5 christos extern const bfd_target i386_mach_o_vec; 758 1.5 christos extern const bfd_target i386_msdos_vec; 759 1.5 christos extern const bfd_target i386_pe_vec; 760 1.13 christos extern const bfd_target i386_pe_big_vec; 761 1.5 christos extern const bfd_target i386_pei_vec; 762 1.5 christos extern const bfd_target iamcu_elf32_vec; 763 1.5 christos extern const bfd_target ia64_elf32_be_vec; 764 1.5 christos extern const bfd_target ia64_elf32_hpux_be_vec; 765 1.5 christos extern const bfd_target ia64_elf64_be_vec; 766 1.5 christos extern const bfd_target ia64_elf64_le_vec; 767 1.5 christos extern const bfd_target ia64_elf64_hpux_be_vec; 768 1.5 christos extern const bfd_target ia64_elf64_vms_vec; 769 1.5 christos extern const bfd_target ia64_pei_vec; 770 1.5 christos extern const bfd_target ip2k_elf32_vec; 771 1.5 christos extern const bfd_target iq2000_elf32_vec; 772 1.14 christos extern const bfd_target kvx_elf32_vec; 773 1.14 christos extern const bfd_target kvx_elf64_vec; 774 1.5 christos extern const bfd_target lm32_elf32_vec; 775 1.5 christos extern const bfd_target lm32_elf32_fdpic_vec; 776 1.13 christos extern const bfd_target loongarch_elf64_vec; 777 1.13 christos extern const bfd_target loongarch_elf32_vec; 778 1.14 christos extern const bfd_target loongarch64_pei_vec; 779 1.5 christos extern const bfd_target m32c_elf32_vec; 780 1.5 christos extern const bfd_target m32r_elf32_vec; 781 1.5 christos extern const bfd_target m32r_elf32_le_vec; 782 1.5 christos extern const bfd_target m32r_elf32_linux_vec; 783 1.5 christos extern const bfd_target m32r_elf32_linux_le_vec; 784 1.5 christos extern const bfd_target m68hc11_elf32_vec; 785 1.5 christos extern const bfd_target m68hc12_elf32_vec; 786 1.5 christos extern const bfd_target m68k_elf32_vec; 787 1.9 christos extern const bfd_target s12z_elf32_vec; 788 1.1 skrll extern const bfd_target mach_o_be_vec; 789 1.1 skrll extern const bfd_target mach_o_le_vec; 790 1.1 skrll extern const bfd_target mach_o_fat_vec; 791 1.5 christos extern const bfd_target mcore_elf32_be_vec; 792 1.5 christos extern const bfd_target mcore_elf32_le_vec; 793 1.5 christos extern const bfd_target mcore_pe_be_vec; 794 1.5 christos extern const bfd_target mcore_pe_le_vec; 795 1.5 christos extern const bfd_target mcore_pei_be_vec; 796 1.5 christos extern const bfd_target mcore_pei_le_vec; 797 1.5 christos extern const bfd_target mep_elf32_vec; 798 1.5 christos extern const bfd_target mep_elf32_le_vec; 799 1.5 christos extern const bfd_target metag_elf32_vec; 800 1.5 christos extern const bfd_target microblaze_elf32_vec; 801 1.5 christos extern const bfd_target microblaze_elf32_le_vec; 802 1.5 christos extern const bfd_target mips_ecoff_be_vec; 803 1.5 christos extern const bfd_target mips_ecoff_le_vec; 804 1.5 christos extern const bfd_target mips_ecoff_bele_vec; 805 1.5 christos extern const bfd_target mips_elf32_be_vec; 806 1.5 christos extern const bfd_target mips_elf32_le_vec; 807 1.5 christos extern const bfd_target mips_elf32_n_be_vec; 808 1.5 christos extern const bfd_target mips_elf32_n_le_vec; 809 1.5 christos extern const bfd_target mips_elf32_ntrad_be_vec; 810 1.5 christos extern const bfd_target mips_elf32_ntrad_le_vec; 811 1.5 christos extern const bfd_target mips_elf32_ntradfbsd_be_vec; 812 1.5 christos extern const bfd_target mips_elf32_ntradfbsd_le_vec; 813 1.5 christos extern const bfd_target mips_elf32_trad_be_vec; 814 1.5 christos extern const bfd_target mips_elf32_trad_le_vec; 815 1.5 christos extern const bfd_target mips_elf32_tradfbsd_be_vec; 816 1.5 christos extern const bfd_target mips_elf32_tradfbsd_le_vec; 817 1.5 christos extern const bfd_target mips_elf32_vxworks_be_vec; 818 1.5 christos extern const bfd_target mips_elf32_vxworks_le_vec; 819 1.5 christos extern const bfd_target mips_elf64_be_vec; 820 1.5 christos extern const bfd_target mips_elf64_le_vec; 821 1.5 christos extern const bfd_target mips_elf64_trad_be_vec; 822 1.5 christos extern const bfd_target mips_elf64_trad_le_vec; 823 1.5 christos extern const bfd_target mips_elf64_tradfbsd_be_vec; 824 1.5 christos extern const bfd_target mips_elf64_tradfbsd_le_vec; 825 1.5 christos extern const bfd_target mmix_elf64_vec; 826 1.5 christos extern const bfd_target mmix_mmo_vec; 827 1.5 christos extern const bfd_target mn10200_elf32_vec; 828 1.5 christos extern const bfd_target mn10300_elf32_vec; 829 1.5 christos extern const bfd_target moxie_elf32_be_vec; 830 1.5 christos extern const bfd_target moxie_elf32_le_vec; 831 1.5 christos extern const bfd_target msp430_elf32_vec; 832 1.5 christos extern const bfd_target msp430_elf32_ti_vec; 833 1.5 christos extern const bfd_target mt_elf32_vec; 834 1.5 christos extern const bfd_target nds32_elf32_be_vec; 835 1.5 christos extern const bfd_target nds32_elf32_le_vec; 836 1.5 christos extern const bfd_target nds32_elf32_linux_be_vec; 837 1.5 christos extern const bfd_target nds32_elf32_linux_le_vec; 838 1.9 christos extern const bfd_target nfp_elf64_vec; 839 1.5 christos extern const bfd_target ns32k_aout_pc532mach_vec; 840 1.5 christos extern const bfd_target ns32k_aout_pc532nbsd_vec; 841 1.5 christos extern const bfd_target or1k_elf32_vec; 842 1.14 christos extern const bfd_target pdb_vec; 843 1.1 skrll extern const bfd_target pdp11_aout_vec; 844 1.1 skrll extern const bfd_target pef_vec; 845 1.1 skrll extern const bfd_target pef_xlib_vec; 846 1.5 christos extern const bfd_target pj_elf32_vec; 847 1.5 christos extern const bfd_target pj_elf32_le_vec; 848 1.2 matt extern const bfd_target plugin_vec; 849 1.5 christos extern const bfd_target powerpc_boot_vec; 850 1.5 christos extern const bfd_target powerpc_elf32_vec; 851 1.5 christos extern const bfd_target powerpc_elf32_le_vec; 852 1.5 christos extern const bfd_target powerpc_elf32_fbsd_vec; 853 1.5 christos extern const bfd_target powerpc_elf32_vxworks_vec; 854 1.5 christos extern const bfd_target powerpc_elf64_vec; 855 1.5 christos extern const bfd_target powerpc_elf64_le_vec; 856 1.5 christos extern const bfd_target powerpc_elf64_fbsd_vec; 857 1.13 christos extern const bfd_target powerpc_elf64_fbsd_le_vec; 858 1.5 christos extern const bfd_target powerpc_xcoff_vec; 859 1.8 christos extern const bfd_target pru_elf32_vec; 860 1.6 christos extern const bfd_target riscv_elf32_vec; 861 1.6 christos extern const bfd_target riscv_elf64_vec; 862 1.13 christos extern const bfd_target riscv_elf32_be_vec; 863 1.13 christos extern const bfd_target riscv_elf64_be_vec; 864 1.14 christos extern const bfd_target riscv64_pei_vec; 865 1.5 christos extern const bfd_target rl78_elf32_vec; 866 1.5 christos extern const bfd_target rs6000_xcoff64_vec; 867 1.5 christos extern const bfd_target rs6000_xcoff64_aix_vec; 868 1.5 christos extern const bfd_target rs6000_xcoff_vec; 869 1.5 christos extern const bfd_target rx_elf32_be_vec; 870 1.5 christos extern const bfd_target rx_elf32_be_ns_vec; 871 1.5 christos extern const bfd_target rx_elf32_le_vec; 872 1.11 christos extern const bfd_target rx_elf32_linux_le_vec; 873 1.5 christos extern const bfd_target s390_elf32_vec; 874 1.5 christos extern const bfd_target s390_elf64_vec; 875 1.5 christos extern const bfd_target score_elf32_be_vec; 876 1.5 christos extern const bfd_target score_elf32_le_vec; 877 1.5 christos extern const bfd_target sh_coff_vec; 878 1.5 christos extern const bfd_target sh_coff_le_vec; 879 1.5 christos extern const bfd_target sh_coff_small_vec; 880 1.5 christos extern const bfd_target sh_coff_small_le_vec; 881 1.5 christos extern const bfd_target sh_elf32_vec; 882 1.5 christos extern const bfd_target sh_elf32_le_vec; 883 1.5 christos extern const bfd_target sh_elf32_fdpic_be_vec; 884 1.5 christos extern const bfd_target sh_elf32_fdpic_le_vec; 885 1.5 christos extern const bfd_target sh_elf32_linux_vec; 886 1.5 christos extern const bfd_target sh_elf32_linux_be_vec; 887 1.5 christos extern const bfd_target sh_elf32_nbsd_vec; 888 1.5 christos extern const bfd_target sh_elf32_nbsd_le_vec; 889 1.5 christos extern const bfd_target sh_elf32_vxworks_vec; 890 1.5 christos extern const bfd_target sh_elf32_vxworks_le_vec; 891 1.5 christos extern const bfd_target sh_pe_le_vec; 892 1.5 christos extern const bfd_target sh_pei_le_vec; 893 1.5 christos extern const bfd_target sparc_elf32_vec; 894 1.5 christos extern const bfd_target sparc_elf32_sol2_vec; 895 1.5 christos extern const bfd_target sparc_elf32_vxworks_vec; 896 1.5 christos extern const bfd_target sparc_elf64_vec; 897 1.5 christos extern const bfd_target sparc_elf64_fbsd_vec; 898 1.5 christos extern const bfd_target sparc_elf64_sol2_vec; 899 1.5 christos extern const bfd_target spu_elf32_vec; 900 1.1 skrll extern const bfd_target sym_vec; 901 1.1 skrll extern const bfd_target tic30_coff_vec; 902 1.5 christos extern const bfd_target tic4x_coff0_vec; 903 1.1 skrll extern const bfd_target tic4x_coff0_beh_vec; 904 1.5 christos extern const bfd_target tic4x_coff1_vec; 905 1.1 skrll extern const bfd_target tic4x_coff1_beh_vec; 906 1.5 christos extern const bfd_target tic4x_coff2_vec; 907 1.1 skrll extern const bfd_target tic4x_coff2_beh_vec; 908 1.5 christos extern const bfd_target tic54x_coff0_vec; 909 1.1 skrll extern const bfd_target tic54x_coff0_beh_vec; 910 1.5 christos extern const bfd_target tic54x_coff1_vec; 911 1.1 skrll extern const bfd_target tic54x_coff1_beh_vec; 912 1.5 christos extern const bfd_target tic54x_coff2_vec; 913 1.1 skrll extern const bfd_target tic54x_coff2_beh_vec; 914 1.5 christos extern const bfd_target tic6x_elf32_be_vec; 915 1.5 christos extern const bfd_target tic6x_elf32_le_vec; 916 1.5 christos extern const bfd_target tic6x_elf32_c6000_be_vec; 917 1.5 christos extern const bfd_target tic6x_elf32_c6000_le_vec; 918 1.5 christos extern const bfd_target tic6x_elf32_linux_be_vec; 919 1.5 christos extern const bfd_target tic6x_elf32_linux_le_vec; 920 1.5 christos extern const bfd_target tilegx_elf32_be_vec; 921 1.5 christos extern const bfd_target tilegx_elf32_le_vec; 922 1.5 christos extern const bfd_target tilegx_elf64_be_vec; 923 1.5 christos extern const bfd_target tilegx_elf64_le_vec; 924 1.5 christos extern const bfd_target tilepro_elf32_vec; 925 1.5 christos extern const bfd_target v800_elf32_vec; 926 1.5 christos extern const bfd_target v850_elf32_vec; 927 1.5 christos extern const bfd_target ft32_elf32_vec; 928 1.5 christos extern const bfd_target vax_aout_1knbsd_vec; 929 1.5 christos extern const bfd_target vax_aout_nbsd_vec; 930 1.5 christos extern const bfd_target vax_elf32_vec; 931 1.5 christos extern const bfd_target visium_elf32_vec; 932 1.8 christos extern const bfd_target wasm_vec; 933 1.8 christos extern const bfd_target wasm32_elf32_vec; 934 1.5 christos extern const bfd_target x86_64_coff_vec; 935 1.5 christos extern const bfd_target x86_64_elf32_vec; 936 1.5 christos extern const bfd_target x86_64_elf64_vec; 937 1.5 christos extern const bfd_target x86_64_elf64_fbsd_vec; 938 1.5 christos extern const bfd_target x86_64_elf64_sol2_vec; 939 1.5 christos extern const bfd_target x86_64_mach_o_vec; 940 1.5 christos extern const bfd_target x86_64_pe_vec; 941 1.13 christos extern const bfd_target x86_64_pe_big_vec; 942 1.5 christos extern const bfd_target x86_64_pei_vec; 943 1.5 christos extern const bfd_target xgate_elf32_vec; 944 1.5 christos extern const bfd_target xstormy16_elf32_vec; 945 1.5 christos extern const bfd_target xtensa_elf32_be_vec; 946 1.5 christos extern const bfd_target xtensa_elf32_le_vec; 947 1.5 christos extern const bfd_target z80_coff_vec; 948 1.11 christos extern const bfd_target z80_elf32_vec; 949 1.5 christos extern const bfd_target z8k_coff_vec; 950 1.1 skrll 951 1.1 skrll /* These are always included. */ 952 1.1 skrll extern const bfd_target srec_vec; 953 1.5 christos extern const bfd_target symbolsrec_vec; 954 1.2 matt extern const bfd_target verilog_vec; 955 1.1 skrll extern const bfd_target tekhex_vec; 956 1.1 skrll extern const bfd_target binary_vec; 957 1.1 skrll extern const bfd_target ihex_vec; 958 1.1 skrll 959 1.1 skrll /* All of the xvecs for core files. */ 960 1.5 christos extern const bfd_target core_cisco_be_vec; 961 1.5 christos extern const bfd_target core_cisco_le_vec; 962 1.5 christos extern const bfd_target core_hppabsd_vec; 963 1.5 christos extern const bfd_target core_hpux_vec; 964 1.5 christos extern const bfd_target core_irix_vec; 965 1.5 christos extern const bfd_target core_netbsd_vec; 966 1.5 christos extern const bfd_target core_osf_vec; 967 1.5 christos extern const bfd_target core_ptrace_vec; 968 1.5 christos extern const bfd_target core_trad_vec; 969 1.1 skrll 970 1.1 skrll static const bfd_target * const _bfd_target_vector[] = 971 1.1 skrll { 972 1.1 skrll #ifdef SELECT_VECS 973 1.1 skrll 974 1.1 skrll SELECT_VECS, 975 1.1 skrll 976 1.1 skrll #else /* not SELECT_VECS */ 977 1.1 skrll 978 1.1 skrll #ifdef DEFAULT_VECTOR 979 1.1 skrll &DEFAULT_VECTOR, 980 1.1 skrll #endif 981 1.1 skrll /* This list is alphabetized to make it easy to compare 982 1.1 skrll with other vector lists -- the decls above and 983 1.5 christos the case statement in configure.ac. 984 1.5 christos Try to keep it in order when adding new targets, and 985 1.5 christos use a name of the form <cpu>_<format>_<other>_<endian>_vec. 986 1.5 christos Note that sorting is done as if _<endian>_vec wasn't present. 987 1.1 skrll Vectors that don't compile on all systems, or aren't finished, 988 1.1 skrll should have an entry here with #if 0 around it, to show that 989 1.1 skrll it wasn't omitted by mistake. */ 990 1.1 skrll #ifdef BFD64 991 1.5 christos &aarch64_elf32_be_vec, 992 1.5 christos &aarch64_elf32_le_vec, 993 1.5 christos &aarch64_elf64_be_vec, 994 1.5 christos &aarch64_elf64_le_vec, 995 1.7 christos &aarch64_mach_o_vec, 996 1.14 christos &aarch64_pe_le_vec, 997 1.16 christos &aarch64_pe_bigobj_le_vec, 998 1.14 christos &aarch64_pei_le_vec, 999 1.13 christos #endif 1000 1.13 christos 1001 1.13 christos #ifdef BFD64 1002 1.13 christos &amdgcn_elf64_le_vec, 1003 1.5 christos #endif 1004 1.5 christos 1005 1.5 christos #ifdef BFD64 1006 1.5 christos &alpha_ecoff_le_vec, 1007 1.5 christos &alpha_elf64_vec, 1008 1.5 christos &alpha_elf64_fbsd_vec, 1009 1.5 christos &alpha_vms_vec, 1010 1.5 christos #endif 1011 1.5 christos &alpha_vms_lib_txt_vec, 1012 1.5 christos 1013 1.5 christos &am33_elf32_linux_vec, 1014 1.5 christos 1015 1.5 christos #if 0 1016 1.5 christos /* Since a.out files lack decent magic numbers, no way to recognize 1017 1.5 christos which kind of a.out file it is. */ 1018 1.5 christos &aout_vec, 1019 1.1 skrll #endif 1020 1.5 christos 1021 1.5 christos &arc_elf32_be_vec, 1022 1.5 christos &arc_elf32_le_vec, 1023 1.5 christos 1024 1.5 christos &arm_elf32_be_vec, 1025 1.5 christos &arm_elf32_le_vec, 1026 1.9 christos &arm_elf32_fdpic_be_vec, 1027 1.9 christos &arm_elf32_fdpic_le_vec, 1028 1.5 christos &arm_elf32_vxworks_be_vec, 1029 1.5 christos &arm_elf32_vxworks_le_vec, 1030 1.7 christos &arm_mach_o_vec, 1031 1.5 christos &arm_pe_be_vec, 1032 1.5 christos &arm_pe_le_vec, 1033 1.5 christos &arm_pe_wince_be_vec, 1034 1.5 christos &arm_pe_wince_le_vec, 1035 1.5 christos &arm_pei_be_vec, 1036 1.5 christos &arm_pei_le_vec, 1037 1.5 christos &arm_pei_wince_be_vec, 1038 1.5 christos &arm_pei_wince_le_vec, 1039 1.5 christos 1040 1.5 christos &avr_elf32_vec, 1041 1.5 christos 1042 1.5 christos &bfin_elf32_vec, 1043 1.5 christos &bfin_elf32_fdpic_vec, 1044 1.5 christos 1045 1.5 christos &cr16_elf32_vec, 1046 1.5 christos 1047 1.5 christos &cris_aout_vec, 1048 1.5 christos &cris_elf32_vec, 1049 1.5 christos &cris_elf32_us_vec, 1050 1.5 christos 1051 1.5 christos &crx_elf32_vec, 1052 1.5 christos 1053 1.11 christos &csky_elf32_be_vec, 1054 1.11 christos &csky_elf32_le_vec, 1055 1.11 christos 1056 1.5 christos &d10v_elf32_vec, 1057 1.5 christos &d30v_elf32_vec, 1058 1.5 christos 1059 1.5 christos &dlx_elf32_be_vec, 1060 1.1 skrll 1061 1.1 skrll /* This, and other vectors, may not be used in any *.mt configuration. 1062 1.1 skrll But that does not mean they are unnecessary. If configured with 1063 1.1 skrll --enable-targets=all, objdump or gdb should be able to examine 1064 1.1 skrll the file even if we don't recognize the machine type. */ 1065 1.5 christos &elf32_be_vec, 1066 1.5 christos &elf32_le_vec, 1067 1.1 skrll #ifdef BFD64 1068 1.5 christos &elf64_be_vec, 1069 1.5 christos &elf64_le_vec, 1070 1.1 skrll #endif 1071 1.5 christos 1072 1.5 christos &epiphany_elf32_vec, 1073 1.5 christos 1074 1.5 christos &fr30_elf32_vec, 1075 1.5 christos 1076 1.5 christos &frv_elf32_vec, 1077 1.5 christos &frv_elf32_fdpic_vec, 1078 1.5 christos 1079 1.5 christos &h8300_elf32_vec, 1080 1.5 christos &h8300_elf32_linux_vec, 1081 1.5 christos 1082 1.5 christos &hppa_elf32_vec, 1083 1.5 christos &hppa_elf32_linux_vec, 1084 1.5 christos &hppa_elf32_nbsd_vec, 1085 1.2 matt #ifdef BFD64 1086 1.5 christos &hppa_elf64_vec, 1087 1.5 christos &hppa_elf64_linux_vec, 1088 1.2 matt #endif 1089 1.5 christos &hppa_som_vec, 1090 1.5 christos 1091 1.5 christos &i386_aout_vec, 1092 1.5 christos &i386_aout_bsd_vec, 1093 1.5 christos &i386_aout_lynx_vec, 1094 1.5 christos &i386_coff_vec, 1095 1.5 christos &i386_coff_go32_vec, 1096 1.5 christos &i386_coff_go32stubbed_vec, 1097 1.5 christos &i386_coff_lynx_vec, 1098 1.5 christos &i386_elf32_vec, 1099 1.5 christos &i386_elf32_fbsd_vec, 1100 1.5 christos &i386_elf32_sol2_vec, 1101 1.5 christos &i386_elf32_vxworks_vec, 1102 1.5 christos &i386_mach_o_vec, 1103 1.5 christos &i386_msdos_vec, 1104 1.5 christos &i386_pe_vec, 1105 1.13 christos &i386_pe_big_vec, 1106 1.5 christos &i386_pei_vec, 1107 1.5 christos 1108 1.5 christos &iamcu_elf32_vec, 1109 1.5 christos 1110 1.1 skrll #ifdef BFD64 1111 1.11 christos &bpf_elf64_be_vec, 1112 1.11 christos &bpf_elf64_le_vec, 1113 1.11 christos #endif 1114 1.11 christos 1115 1.11 christos #ifdef BFD64 1116 1.5 christos #if 0 1117 1.5 christos &ia64_elf32_be_vec, 1118 1.5 christos #endif 1119 1.5 christos &ia64_elf32_hpux_be_vec, 1120 1.5 christos &ia64_elf64_be_vec, 1121 1.5 christos &ia64_elf64_le_vec, 1122 1.5 christos &ia64_elf64_hpux_be_vec, 1123 1.5 christos &ia64_elf64_vms_vec, 1124 1.5 christos &ia64_pei_vec, 1125 1.5 christos #endif 1126 1.5 christos 1127 1.5 christos &ip2k_elf32_vec, 1128 1.5 christos &iq2000_elf32_vec, 1129 1.5 christos 1130 1.14 christos #ifdef BFD64 1131 1.14 christos &kvx_elf32_vec, 1132 1.14 christos &kvx_elf64_vec, 1133 1.14 christos #endif 1134 1.14 christos 1135 1.5 christos &lm32_elf32_vec, 1136 1.5 christos 1137 1.5 christos &m32c_elf32_vec, 1138 1.5 christos 1139 1.5 christos &m32r_elf32_vec, 1140 1.5 christos &m32r_elf32_le_vec, 1141 1.5 christos &m32r_elf32_linux_vec, 1142 1.5 christos &m32r_elf32_linux_le_vec, 1143 1.5 christos 1144 1.5 christos &m68hc11_elf32_vec, 1145 1.5 christos &m68hc12_elf32_vec, 1146 1.5 christos 1147 1.5 christos &m68k_elf32_vec, 1148 1.5 christos 1149 1.9 christos &s12z_elf32_vec, 1150 1.5 christos 1151 1.1 skrll &mach_o_be_vec, 1152 1.1 skrll &mach_o_le_vec, 1153 1.1 skrll &mach_o_fat_vec, 1154 1.5 christos 1155 1.5 christos &mcore_elf32_be_vec, 1156 1.5 christos &mcore_elf32_le_vec, 1157 1.5 christos &mcore_pe_be_vec, 1158 1.5 christos &mcore_pe_le_vec, 1159 1.5 christos &mcore_pei_be_vec, 1160 1.5 christos &mcore_pei_le_vec, 1161 1.5 christos 1162 1.5 christos &mep_elf32_vec, 1163 1.5 christos 1164 1.5 christos &metag_elf32_vec, 1165 1.5 christos 1166 1.5 christos µblaze_elf32_vec, 1167 1.5 christos 1168 1.5 christos &mips_ecoff_be_vec, 1169 1.5 christos &mips_ecoff_le_vec, 1170 1.5 christos &mips_ecoff_bele_vec, 1171 1.2 matt #ifdef BFD64 1172 1.5 christos &mips_elf32_be_vec, 1173 1.5 christos &mips_elf32_le_vec, 1174 1.5 christos &mips_elf32_n_be_vec, 1175 1.5 christos &mips_elf32_n_le_vec, 1176 1.5 christos &mips_elf32_ntrad_be_vec, 1177 1.5 christos &mips_elf32_ntrad_le_vec, 1178 1.5 christos &mips_elf32_ntradfbsd_be_vec, 1179 1.5 christos &mips_elf32_ntradfbsd_le_vec, 1180 1.5 christos &mips_elf32_trad_be_vec, 1181 1.5 christos &mips_elf32_trad_le_vec, 1182 1.5 christos &mips_elf32_tradfbsd_be_vec, 1183 1.5 christos &mips_elf32_tradfbsd_le_vec, 1184 1.5 christos &mips_elf32_vxworks_be_vec, 1185 1.5 christos &mips_elf32_vxworks_le_vec, 1186 1.5 christos &mips_elf64_be_vec, 1187 1.5 christos &mips_elf64_le_vec, 1188 1.5 christos &mips_elf64_trad_be_vec, 1189 1.5 christos &mips_elf64_trad_le_vec, 1190 1.5 christos &mips_elf64_tradfbsd_be_vec, 1191 1.5 christos &mips_elf64_tradfbsd_le_vec, 1192 1.2 matt #endif 1193 1.5 christos 1194 1.1 skrll #ifdef BFD64 1195 1.5 christos &mmix_elf64_vec, 1196 1.5 christos &mmix_mmo_vec, 1197 1.1 skrll #endif 1198 1.5 christos 1199 1.5 christos &mn10200_elf32_vec, 1200 1.5 christos &mn10300_elf32_vec, 1201 1.5 christos 1202 1.5 christos &moxie_elf32_be_vec, 1203 1.5 christos &moxie_elf32_le_vec, 1204 1.5 christos 1205 1.5 christos &msp430_elf32_vec, 1206 1.5 christos &msp430_elf32_ti_vec, 1207 1.5 christos 1208 1.5 christos &mt_elf32_vec, 1209 1.5 christos 1210 1.5 christos &nds32_elf32_be_vec, 1211 1.5 christos &nds32_elf32_le_vec, 1212 1.5 christos &nds32_elf32_linux_be_vec, 1213 1.5 christos &nds32_elf32_linux_le_vec, 1214 1.5 christos 1215 1.9 christos #ifdef BFD64 1216 1.9 christos &nfp_elf64_vec, 1217 1.9 christos #endif 1218 1.9 christos 1219 1.5 christos &ns32k_aout_pc532mach_vec, 1220 1.5 christos &ns32k_aout_pc532nbsd_vec, 1221 1.5 christos 1222 1.5 christos &or1k_elf32_vec, 1223 1.5 christos 1224 1.14 christos &pdb_vec, 1225 1.14 christos 1226 1.1 skrll &pdp11_aout_vec, 1227 1.5 christos 1228 1.1 skrll &pef_vec, 1229 1.1 skrll &pef_xlib_vec, 1230 1.5 christos 1231 1.5 christos &pj_elf32_vec, 1232 1.5 christos &pj_elf32_le_vec, 1233 1.5 christos 1234 1.5 christos &powerpc_boot_vec, 1235 1.5 christos &powerpc_elf32_vec, 1236 1.5 christos &powerpc_elf32_le_vec, 1237 1.5 christos &powerpc_elf32_fbsd_vec, 1238 1.5 christos &powerpc_elf32_vxworks_vec, 1239 1.5 christos #ifdef BFD64 1240 1.5 christos &powerpc_elf64_vec, 1241 1.5 christos &powerpc_elf64_le_vec, 1242 1.5 christos &powerpc_elf64_fbsd_vec, 1243 1.13 christos &powerpc_elf64_fbsd_le_vec, 1244 1.5 christos #endif 1245 1.1 skrll #if 0 1246 1.1 skrll /* This has the same magic number as RS/6000. */ 1247 1.5 christos &powerpc_xcoff_vec, 1248 1.5 christos #endif 1249 1.5 christos 1250 1.8 christos &pru_elf32_vec, 1251 1.8 christos 1252 1.8 christos #ifdef BFD64 1253 1.6 christos &riscv_elf32_vec, 1254 1.8 christos &riscv_elf64_vec, 1255 1.13 christos &riscv_elf32_be_vec, 1256 1.13 christos &riscv_elf64_be_vec, 1257 1.14 christos &riscv64_pei_vec, 1258 1.8 christos #endif 1259 1.5 christos &rl78_elf32_vec, 1260 1.5 christos 1261 1.5 christos #ifdef BFD64 1262 1.5 christos &rs6000_xcoff64_vec, 1263 1.5 christos &rs6000_xcoff64_aix_vec, 1264 1.1 skrll #endif 1265 1.5 christos &rs6000_xcoff_vec, 1266 1.5 christos 1267 1.5 christos &rx_elf32_be_vec, 1268 1.5 christos &rx_elf32_be_ns_vec, 1269 1.5 christos &rx_elf32_le_vec, 1270 1.5 christos 1271 1.5 christos &s390_elf32_vec, 1272 1.5 christos #ifdef BFD64 1273 1.5 christos &s390_elf64_vec, 1274 1.5 christos #endif 1275 1.5 christos 1276 1.5 christos #ifdef BFD64 1277 1.5 christos &score_elf32_be_vec, 1278 1.5 christos &score_elf32_le_vec, 1279 1.1 skrll #endif 1280 1.5 christos 1281 1.5 christos &sh_coff_vec, 1282 1.5 christos &sh_coff_le_vec, 1283 1.5 christos &sh_coff_small_vec, 1284 1.5 christos &sh_coff_small_le_vec, 1285 1.5 christos &sh_elf32_vec, 1286 1.5 christos &sh_elf32_le_vec, 1287 1.5 christos &sh_elf32_fdpic_be_vec, 1288 1.5 christos &sh_elf32_fdpic_le_vec, 1289 1.5 christos &sh_elf32_linux_vec, 1290 1.5 christos &sh_elf32_linux_be_vec, 1291 1.5 christos &sh_elf32_nbsd_vec, 1292 1.5 christos &sh_elf32_nbsd_le_vec, 1293 1.5 christos &sh_elf32_vxworks_vec, 1294 1.5 christos &sh_elf32_vxworks_le_vec, 1295 1.5 christos &sh_pe_le_vec, 1296 1.5 christos &sh_pei_le_vec, 1297 1.5 christos 1298 1.5 christos &sparc_elf32_vec, 1299 1.5 christos &sparc_elf32_sol2_vec, 1300 1.5 christos &sparc_elf32_vxworks_vec, 1301 1.5 christos #ifdef BFD64 1302 1.5 christos &sparc_elf64_vec, 1303 1.5 christos &sparc_elf64_fbsd_vec, 1304 1.5 christos &sparc_elf64_sol2_vec, 1305 1.1 skrll #endif 1306 1.5 christos 1307 1.5 christos &spu_elf32_vec, 1308 1.5 christos 1309 1.1 skrll &sym_vec, 1310 1.5 christos 1311 1.1 skrll &tic30_coff_vec, 1312 1.1 skrll &tic54x_coff0_beh_vec, 1313 1.1 skrll &tic54x_coff0_vec, 1314 1.1 skrll &tic54x_coff1_beh_vec, 1315 1.1 skrll &tic54x_coff1_vec, 1316 1.1 skrll &tic54x_coff2_beh_vec, 1317 1.1 skrll &tic54x_coff2_vec, 1318 1.5 christos &tic6x_elf32_be_vec, 1319 1.5 christos &tic6x_elf32_le_vec, 1320 1.5 christos 1321 1.5 christos &tilegx_elf32_be_vec, 1322 1.5 christos &tilegx_elf32_le_vec, 1323 1.1 skrll #ifdef BFD64 1324 1.5 christos &tilegx_elf64_be_vec, 1325 1.5 christos &tilegx_elf64_le_vec, 1326 1.1 skrll #endif 1327 1.5 christos &tilepro_elf32_vec, 1328 1.5 christos 1329 1.5 christos &ft32_elf32_vec, 1330 1.5 christos 1331 1.5 christos &v800_elf32_vec, 1332 1.5 christos &v850_elf32_vec, 1333 1.5 christos 1334 1.5 christos &vax_aout_1knbsd_vec, 1335 1.5 christos &vax_aout_nbsd_vec, 1336 1.5 christos &vax_elf32_vec, 1337 1.5 christos 1338 1.5 christos &visium_elf32_vec, 1339 1.5 christos 1340 1.8 christos &wasm_vec, 1341 1.8 christos &wasm32_elf32_vec, 1342 1.8 christos 1343 1.5 christos #ifdef BFD64 1344 1.5 christos &x86_64_coff_vec, 1345 1.5 christos &x86_64_elf32_vec, 1346 1.5 christos &x86_64_elf64_vec, 1347 1.5 christos &x86_64_elf64_fbsd_vec, 1348 1.5 christos &x86_64_elf64_sol2_vec, 1349 1.5 christos &x86_64_mach_o_vec, 1350 1.5 christos &x86_64_pe_vec, 1351 1.13 christos &x86_64_pe_big_vec, 1352 1.5 christos &x86_64_pei_vec, 1353 1.5 christos #endif 1354 1.5 christos 1355 1.5 christos &xgate_elf32_vec, 1356 1.5 christos 1357 1.5 christos &xstormy16_elf32_vec, 1358 1.5 christos 1359 1.5 christos &xtensa_elf32_be_vec, 1360 1.5 christos &xtensa_elf32_le_vec, 1361 1.5 christos 1362 1.5 christos &z80_coff_vec, 1363 1.11 christos &z80_elf32_vec, 1364 1.5 christos 1365 1.5 christos &z8k_coff_vec, 1366 1.13 christos 1367 1.13 christos #ifdef BFD64 1368 1.13 christos &loongarch_elf32_vec, 1369 1.13 christos &loongarch_elf64_vec, 1370 1.14 christos &loongarch64_pei_vec, 1371 1.13 christos #endif 1372 1.13 christos 1373 1.1 skrll #endif /* not SELECT_VECS */ 1374 1.1 skrll 1375 1.1 skrll /* Always support S-records, for convenience. */ 1376 1.1 skrll &srec_vec, 1377 1.1 skrll &symbolsrec_vec, 1378 1.2 matt /* And verilog. */ 1379 1.2 matt &verilog_vec, 1380 1.1 skrll /* And tekhex */ 1381 1.1 skrll &tekhex_vec, 1382 1.1 skrll /* Likewise for binary output. */ 1383 1.1 skrll &binary_vec, 1384 1.1 skrll /* Likewise for ihex. */ 1385 1.1 skrll &ihex_vec, 1386 1.1 skrll 1387 1.11 christos #if BFD_SUPPORTS_PLUGINS 1388 1.11 christos &plugin_vec, 1389 1.11 christos #endif 1390 1.11 christos 1391 1.1 skrll /* Add any required traditional-core-file-handler. */ 1392 1.1 skrll 1393 1.1 skrll #if 0 1394 1.1 skrll /* We don't include cisco_core_*_vec. Although it has a magic number, 1395 1.1 skrll the magic number isn't at the beginning of the file, and thus 1396 1.1 skrll might spuriously match other kinds of files. */ 1397 1.5 christos &core_cisco_be_vec, 1398 1.5 christos &core_cisco_le_vec, 1399 1.1 skrll #endif 1400 1.1 skrll #ifdef HPPABSD_CORE 1401 1.5 christos &core_hppabsd_vec, 1402 1.1 skrll #endif 1403 1.1 skrll #ifdef HPUX_CORE 1404 1.5 christos &core_hpux_vec, 1405 1.1 skrll #endif 1406 1.1 skrll #ifdef IRIX_CORE 1407 1.5 christos &core_irix_vec, 1408 1.1 skrll #endif 1409 1.1 skrll #ifdef NETBSD_CORE 1410 1.5 christos &core_netbsd_vec, 1411 1.1 skrll #endif 1412 1.1 skrll #ifdef OSF_CORE 1413 1.5 christos &core_osf_vec, 1414 1.1 skrll #endif 1415 1.1 skrll #ifdef PTRACE_CORE 1416 1.5 christos &core_ptrace_vec, 1417 1.1 skrll #endif 1418 1.1 skrll #ifdef TRAD_CORE 1419 1.5 christos &core_trad_vec, 1420 1.1 skrll #endif 1421 1.1 skrll 1422 1.1 skrll NULL /* end of list marker */ 1423 1.1 skrll }; 1424 1.13 christos const bfd_target *const *const bfd_target_vector = _bfd_target_vector; 1425 1.1 skrll 1426 1.1 skrll /* bfd_default_vector[0] contains either the address of the default vector, 1427 1.1 skrll if there is one, or zero if there isn't. */ 1428 1.1 skrll 1429 1.1 skrll const bfd_target *bfd_default_vector[] = { 1430 1.1 skrll #ifdef DEFAULT_VECTOR 1431 1.1 skrll &DEFAULT_VECTOR, 1432 1.1 skrll #endif 1433 1.1 skrll NULL 1434 1.1 skrll }; 1435 1.1 skrll 1436 1.16 christos /* bfd_associated_vector[] contains the main target vectors when 1437 1.16 christos configuring with --enable-targets=all, to match those 1438 1.16 christos preferentially over others that might match. */ 1439 1.1 skrll 1440 1.13 christos static const bfd_target *const _bfd_associated_vector[] = { 1441 1.1 skrll #ifdef ASSOCIATED_VECS 1442 1.16 christos ASSOCIATED_VECS 1443 1.1 skrll #endif 1444 1.1 skrll NULL 1445 1.1 skrll }; 1446 1.13 christos const bfd_target *const *const bfd_associated_vector = _bfd_associated_vector; 1447 1.1 skrll 1448 1.1 skrll /* When there is an ambiguous match, bfd_check_format_matches puts the 1449 1.1 skrll names of the matching targets in an array. This variable is the maximum 1450 1.1 skrll number of entries that the array could possibly need. */ 1451 1.14 christos const size_t _bfd_target_vector_entries = ARRAY_SIZE (_bfd_target_vector); 1452 1.14 christos 1453 1.1 skrll 1454 1.1 skrll /* This array maps configuration triplets onto BFD vectors. */ 1456 1.1 skrll 1457 1.1 skrll struct targmatch 1458 1.1 skrll { 1459 1.1 skrll /* The configuration triplet. */ 1460 1.1 skrll const char *triplet; 1461 1.1 skrll /* The BFD vector. If this is NULL, then the vector is found by 1462 1.1 skrll searching forward for the next structure with a non NULL vector 1463 1.1 skrll field. */ 1464 1.1 skrll const bfd_target *vector; 1465 1.1 skrll }; 1466 1.1 skrll 1467 1.1 skrll /* targmatch.h is built by Makefile out of config.bfd. */ 1468 1.1 skrll static const struct targmatch bfd_target_match[] = { 1469 1.1 skrll #include "targmatch.h" 1470 1.1 skrll { NULL, NULL } 1471 1.1 skrll }; 1472 1.1 skrll 1473 1.1 skrll /* Find a target vector, given a name or configuration triplet. */ 1474 1.1 skrll 1475 1.1 skrll static const bfd_target * 1476 1.1 skrll find_target (const char *name) 1477 1.1 skrll { 1478 1.1 skrll const bfd_target * const *target; 1479 1.1 skrll const struct targmatch *match; 1480 1.1 skrll 1481 1.1 skrll for (target = &bfd_target_vector[0]; *target != NULL; target++) 1482 1.1 skrll if (strcmp (name, (*target)->name) == 0) 1483 1.1 skrll return *target; 1484 1.1 skrll 1485 1.1 skrll /* If we couldn't match on the exact name, try matching on the 1486 1.1 skrll configuration triplet. FIXME: We should run the triplet through 1487 1.1 skrll config.sub first, but that is hard. */ 1488 1.1 skrll for (match = &bfd_target_match[0]; match->triplet != NULL; match++) 1489 1.1 skrll { 1490 1.1 skrll if (fnmatch (match->triplet, name, 0) == 0) 1491 1.1 skrll { 1492 1.1 skrll while (match->vector == NULL) 1493 1.1 skrll ++match; 1494 1.1 skrll return match->vector; 1495 1.1 skrll } 1496 1.1 skrll } 1497 1.1 skrll 1498 1.1 skrll bfd_set_error (bfd_error_invalid_target); 1499 1.1 skrll return NULL; 1500 1.1 skrll } 1501 1.1 skrll 1502 1.1 skrll /* 1503 1.1 skrll FUNCTION 1504 1.1 skrll bfd_set_default_target 1505 1.1 skrll 1506 1.13 christos SYNOPSIS 1507 1.1 skrll bool bfd_set_default_target (const char *name); 1508 1.1 skrll 1509 1.1 skrll DESCRIPTION 1510 1.1 skrll Set the default target vector to use when recognizing a BFD. 1511 1.1 skrll This takes the name of the target, which may be a BFD target 1512 1.1 skrll name or a configuration triplet. 1513 1.1 skrll */ 1514 1.13 christos 1515 1.1 skrll bool 1516 1.1 skrll bfd_set_default_target (const char *name) 1517 1.1 skrll { 1518 1.1 skrll const bfd_target *target; 1519 1.1 skrll 1520 1.1 skrll if (bfd_default_vector[0] != NULL 1521 1.13 christos && strcmp (name, bfd_default_vector[0]->name) == 0) 1522 1.1 skrll return true; 1523 1.1 skrll 1524 1.1 skrll target = find_target (name); 1525 1.13 christos if (target == NULL) 1526 1.1 skrll return false; 1527 1.1 skrll 1528 1.13 christos bfd_default_vector[0] = target; 1529 1.1 skrll return true; 1530 1.1 skrll } 1531 1.1 skrll 1532 1.1 skrll /* 1533 1.1 skrll FUNCTION 1534 1.1 skrll bfd_find_target 1535 1.1 skrll 1536 1.1 skrll SYNOPSIS 1537 1.1 skrll const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); 1538 1.1 skrll 1539 1.1 skrll DESCRIPTION 1540 1.1 skrll Return a pointer to the transfer vector for the object target 1541 1.1 skrll named @var{target_name}. If @var{target_name} is <<NULL>>, 1542 1.1 skrll choose the one in the environment variable <<GNUTARGET>>; if 1543 1.1 skrll that is null or not defined, then choose the first entry in the 1544 1.1 skrll target list. Passing in the string "default" or setting the 1545 1.1 skrll environment variable to "default" will cause the first entry in 1546 1.1 skrll the target list to be returned, and "target_defaulted" will be 1547 1.1 skrll set in the BFD if @var{abfd} isn't <<NULL>>. This causes 1548 1.1 skrll <<bfd_check_format>> to loop over all the targets to find the 1549 1.1 skrll one that matches the file being read. 1550 1.1 skrll */ 1551 1.1 skrll 1552 1.1 skrll const bfd_target * 1553 1.1 skrll bfd_find_target (const char *target_name, bfd *abfd) 1554 1.1 skrll { 1555 1.1 skrll const char *targname; 1556 1.1 skrll const bfd_target *target; 1557 1.1 skrll 1558 1.1 skrll if (target_name != NULL) 1559 1.1 skrll targname = target_name; 1560 1.1 skrll else 1561 1.1 skrll targname = getenv ("GNUTARGET"); 1562 1.1 skrll 1563 1.1 skrll /* This is safe; the vector cannot be null. */ 1564 1.1 skrll if (targname == NULL || strcmp (targname, "default") == 0) 1565 1.1 skrll { 1566 1.1 skrll if (bfd_default_vector[0] != NULL) 1567 1.1 skrll target = bfd_default_vector[0]; 1568 1.1 skrll else 1569 1.1 skrll target = bfd_target_vector[0]; 1570 1.1 skrll if (abfd) 1571 1.1 skrll { 1572 1.13 christos abfd->xvec = target; 1573 1.1 skrll abfd->target_defaulted = true; 1574 1.1 skrll } 1575 1.1 skrll return target; 1576 1.1 skrll } 1577 1.1 skrll 1578 1.13 christos if (abfd) 1579 1.1 skrll abfd->target_defaulted = false; 1580 1.1 skrll 1581 1.1 skrll target = find_target (targname); 1582 1.1 skrll if (target == NULL) 1583 1.1 skrll return NULL; 1584 1.1 skrll 1585 1.1 skrll if (abfd) 1586 1.1 skrll abfd->xvec = target; 1587 1.1 skrll return target; 1588 1.1 skrll } 1589 1.2 matt 1590 1.2 matt /* Helper function for bfd_get_target_info to determine the target's 1591 1.2 matt architecture. This method handles bfd internal target names as 1592 1.13 christos tuples and triplets. */ 1593 1.2 matt static bool 1594 1.2 matt _bfd_find_arch_match (const char *tname, const char **arch, 1595 1.2 matt const char **def_target_arch) 1596 1.2 matt { 1597 1.13 christos if (!arch) 1598 1.2 matt return false; 1599 1.2 matt 1600 1.2 matt while (*arch != NULL) 1601 1.2 matt { 1602 1.2 matt const char *in_a = strstr (*arch, tname); 1603 1.2 matt char end_ch = (in_a ? in_a[strlen (tname)] : 0); 1604 1.2 matt 1605 1.8 christos if (in_a && (in_a == *arch || in_a[-1] == ':') 1606 1.8 christos && end_ch == 0) 1607 1.8 christos { 1608 1.13 christos *def_target_arch = *arch; 1609 1.8 christos return true; 1610 1.2 matt } 1611 1.2 matt arch++; 1612 1.13 christos } 1613 1.2 matt return false; 1614 1.2 matt } 1615 1.2 matt 1616 1.2 matt /* 1617 1.2 matt FUNCTION 1618 1.2 matt bfd_get_target_info 1619 1.2 matt SYNOPSIS 1620 1.2 matt const bfd_target *bfd_get_target_info (const char *target_name, 1621 1.13 christos bfd *abfd, 1622 1.2 matt bool *is_bigendian, 1623 1.2 matt int *underscoring, 1624 1.2 matt const char **def_target_arch); 1625 1.8 christos DESCRIPTION 1626 1.8 christos Return a pointer to the transfer vector for the object target 1627 1.8 christos named @var{target_name}. If @var{target_name} is <<NULL>>, 1628 1.8 christos choose the one in the environment variable <<GNUTARGET>>; if 1629 1.8 christos that is null or not defined, then choose the first entry in the 1630 1.8 christos target list. Passing in the string "default" or setting the 1631 1.8 christos environment variable to "default" will cause the first entry in 1632 1.8 christos the target list to be returned, and "target_defaulted" will be 1633 1.8 christos set in the BFD if @var{abfd} isn't <<NULL>>. This causes 1634 1.8 christos <<bfd_check_format>> to loop over all the targets to find the 1635 1.2 matt one that matches the file being read. 1636 1.2 matt If @var{is_bigendian} is not <<NULL>>, then set this value to target's 1637 1.2 matt endian mode. True for big-endian, FALSE for little-endian or for 1638 1.2 matt invalid target. 1639 1.2 matt If @var{underscoring} is not <<NULL>>, then set this value to target's 1640 1.2 matt underscoring mode. Zero for none-underscoring, -1 for invalid target, 1641 1.2 matt else the value of target vector's symbol underscoring. 1642 1.2 matt If @var{def_target_arch} is not <<NULL>>, then set it to the architecture 1643 1.2 matt string specified by the target_name. 1644 1.2 matt */ 1645 1.2 matt const bfd_target * 1646 1.13 christos bfd_get_target_info (const char *target_name, bfd *abfd, 1647 1.2 matt bool *is_bigendian, 1648 1.2 matt int *underscoring, const char **def_target_arch) 1649 1.2 matt { 1650 1.2 matt const bfd_target *target_vec; 1651 1.2 matt 1652 1.13 christos if (is_bigendian) 1653 1.2 matt *is_bigendian = false; 1654 1.2 matt if (underscoring) 1655 1.2 matt *underscoring = -1; 1656 1.2 matt if (def_target_arch) 1657 1.2 matt *def_target_arch = NULL; 1658 1.2 matt target_vec = bfd_find_target (target_name, abfd); 1659 1.2 matt if (! target_vec) 1660 1.2 matt return NULL; 1661 1.13 christos if (is_bigendian) 1662 1.2 matt *is_bigendian = target_vec->byteorder == BFD_ENDIAN_BIG; 1663 1.2 matt if (underscoring) 1664 1.2 matt *underscoring = ((int) target_vec->symbol_leading_char) & 0xff; 1665 1.2 matt 1666 1.2 matt if (def_target_arch) 1667 1.2 matt { 1668 1.2 matt const char *tname = target_vec->name; 1669 1.2 matt const char **arches = bfd_arch_list (); 1670 1.2 matt 1671 1.8 christos if (arches && tname) 1672 1.16 christos { 1673 1.2 matt const char *hyp = strchr (tname, '-'); 1674 1.8 christos 1675 1.8 christos if (hyp != NULL) 1676 1.8 christos { 1677 1.2 matt tname = ++hyp; 1678 1.2 matt 1679 1.2 matt /* Make sure we detect architecture names 1680 1.2 matt for triplets like "pe-arm-wince-little". */ 1681 1.2 matt if (!_bfd_find_arch_match (tname, arches, def_target_arch)) 1682 1.2 matt { 1683 1.2 matt char new_tname[50]; 1684 1.2 matt 1685 1.16 christos strcpy (new_tname, hyp); 1686 1.16 christos char *new_hyp; 1687 1.2 matt while ((new_hyp = strrchr (new_tname, '-')) != NULL) 1688 1.16 christos { 1689 1.2 matt *new_hyp = 0; 1690 1.5 christos if (_bfd_find_arch_match (new_tname, arches, 1691 1.2 matt def_target_arch)) 1692 1.2 matt break; 1693 1.2 matt } 1694 1.2 matt } 1695 1.2 matt } 1696 1.2 matt else 1697 1.2 matt _bfd_find_arch_match (tname, arches, def_target_arch); 1698 1.2 matt } 1699 1.13 christos 1700 1.2 matt free (arches); 1701 1.2 matt } 1702 1.2 matt return target_vec; 1703 1.2 matt } 1704 1.1 skrll 1705 1.1 skrll /* 1706 1.1 skrll FUNCTION 1707 1.1 skrll bfd_target_list 1708 1.1 skrll 1709 1.1 skrll SYNOPSIS 1710 1.1 skrll const char ** bfd_target_list (void); 1711 1.1 skrll 1712 1.1 skrll DESCRIPTION 1713 1.1 skrll Return a freshly malloced NULL-terminated 1714 1.1 skrll vector of the names of all the valid BFD targets. Do not 1715 1.1 skrll modify the names. 1716 1.1 skrll 1717 1.1 skrll */ 1718 1.1 skrll 1719 1.1 skrll const char ** 1720 1.1 skrll bfd_target_list (void) 1721 1.1 skrll { 1722 1.13 christos int vec_length = 0; 1723 1.1 skrll size_t amt; 1724 1.1 skrll const bfd_target * const *target; 1725 1.1 skrll const char **name_list, **name_ptr; 1726 1.1 skrll 1727 1.1 skrll for (target = &bfd_target_vector[0]; *target != NULL; target++) 1728 1.1 skrll vec_length++; 1729 1.1 skrll 1730 1.2 matt amt = (vec_length + 1) * sizeof (char **); 1731 1.1 skrll name_ptr = name_list = (const char **) bfd_malloc (amt); 1732 1.1 skrll 1733 1.1 skrll if (name_list == NULL) 1734 1.1 skrll return NULL; 1735 1.1 skrll 1736 1.1 skrll for (target = &bfd_target_vector[0]; *target != NULL; target++) 1737 1.1 skrll if (target == &bfd_target_vector[0] 1738 1.1 skrll || *target != bfd_target_vector[0]) 1739 1.1 skrll *name_ptr++ = (*target)->name; 1740 1.1 skrll 1741 1.1 skrll *name_ptr = NULL; 1742 1.1 skrll return name_list; 1743 1.1 skrll } 1744 1.1 skrll 1745 1.1 skrll /* 1746 1.8 christos FUNCTION 1747 1.1 skrll bfd_iterate_over_targets 1748 1.1 skrll 1749 1.8 christos SYNOPSIS 1750 1.8 christos const bfd_target *bfd_iterate_over_targets 1751 1.8 christos (int (*func) (const bfd_target *, void *), 1752 1.1 skrll void *data); 1753 1.1 skrll 1754 1.8 christos DESCRIPTION 1755 1.8 christos Call @var{func} for each target in the list of BFD target 1756 1.8 christos vectors, passing @var{data} to @var{func}. Stop iterating if 1757 1.8 christos @var{func} returns a non-zero result, and return that target 1758 1.1 skrll vector. Return NULL if @var{func} always returns zero. 1759 1.1 skrll */ 1760 1.1 skrll 1761 1.8 christos const bfd_target * 1762 1.8 christos bfd_iterate_over_targets (int (*func) (const bfd_target *, void *), 1763 1.1 skrll void *data) 1764 1.8 christos { 1765 1.1 skrll const bfd_target *const *target; 1766 1.8 christos 1767 1.8 christos for (target = bfd_target_vector; *target != NULL; ++target) 1768 1.1 skrll if (func (*target, data)) 1769 1.1 skrll return *target; 1770 1.1 skrll 1771 1.1 skrll return NULL; 1772 1.5 christos } 1773 1.5 christos 1774 1.5 christos /* 1775 1.5 christos FUNCTION 1776 1.5 christos bfd_flavour_name 1777 1.5 christos 1778 1.5 christos SYNOPSIS 1779 1.5 christos const char *bfd_flavour_name (enum bfd_flavour flavour); 1780 1.5 christos 1781 1.5 christos DESCRIPTION 1782 1.5 christos Return the string form of @var{flavour}. 1783 1.5 christos */ 1784 1.5 christos 1785 1.5 christos const char * 1786 1.5 christos bfd_flavour_name (enum bfd_flavour flavour) 1787 1.5 christos { 1788 1.5 christos switch (flavour) 1789 1.5 christos { 1790 1.5 christos case bfd_target_unknown_flavour: return "unknown file format"; 1791 1.5 christos case bfd_target_aout_flavour: return "a.out"; 1792 1.5 christos case bfd_target_coff_flavour: return "COFF"; 1793 1.5 christos case bfd_target_ecoff_flavour: return "ECOFF"; 1794 1.5 christos case bfd_target_xcoff_flavour: return "XCOFF"; 1795 1.5 christos case bfd_target_elf_flavour: return "ELF"; 1796 1.5 christos case bfd_target_tekhex_flavour: return "Tekhex"; 1797 1.5 christos case bfd_target_srec_flavour: return "Srec"; 1798 1.5 christos case bfd_target_verilog_flavour: return "Verilog"; 1799 1.5 christos case bfd_target_ihex_flavour: return "Ihex"; 1800 1.5 christos case bfd_target_som_flavour: return "SOM"; 1801 1.5 christos case bfd_target_msdos_flavour: return "MSDOS"; 1802 1.5 christos case bfd_target_evax_flavour: return "Evax"; 1803 1.5 christos case bfd_target_mmo_flavour: return "mmo"; 1804 1.5 christos case bfd_target_mach_o_flavour: return "MACH_O"; 1805 1.5 christos case bfd_target_pef_flavour: return "PEF"; 1806 1.5 christos case bfd_target_pef_xlib_flavour: return "PEF_XLIB"; 1807 1.5 christos case bfd_target_sym_flavour: return "SYM"; 1808 1.5 christos /* There is no "default" case here so that -Wswitch (part of -Wall) 1809 1.5 christos catches missing entries. */ 1810 1.5 christos } 1811 1.5 christos 1812 1.5 christos abort (); 1813 } 1814