1 |
/* Generic target-file-type support for the BFD library. |
/* Generic target-file-type support for the BFD library. |
2 |
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
3 |
2000, 2001, 2002 |
2000, 2001, 2002, 2003, 2004, 2005 |
4 |
Free Software Foundation, Inc. |
Free Software Foundation, Inc. |
5 |
Written by Cygnus Support. |
Written by Cygnus Support. |
6 |
|
|
7 |
This file is part of BFD, the Binary File Descriptor library. |
This file is part of BFD, the Binary File Descriptor library. |
8 |
|
|
9 |
This program is free software; you can redistribute it and/or modify |
This program is free software; you can redistribute it and/or modify |
10 |
it under the terms of the GNU General Public License as published by |
it under the terms of the GNU General Public License as published by |
11 |
the Free Software Foundation; either version 2 of the License, or |
the Free Software Foundation; either version 2 of the License, or |
12 |
(at your option) any later version. |
(at your option) any later version. |
13 |
|
|
14 |
This program is distributed in the hope that it will be useful, |
This program is distributed in the hope that it will be useful, |
15 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
17 |
GNU General Public License for more details. |
GNU General Public License for more details. |
18 |
|
|
19 |
You should have received a copy of the GNU General Public License |
You should have received a copy of the GNU General Public License |
20 |
along with this program; if not, write to the Free Software |
along with this program; if not, write to the Free Software |
21 |
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
22 |
|
|
23 |
#include "bfd.h" |
#include "bfd.h" |
24 |
#include "sysdep.h" |
#include "sysdep.h" |
26 |
#include "fnmatch.h" |
#include "fnmatch.h" |
27 |
|
|
28 |
/* |
/* |
29 |
|
It's okay to see some: |
30 |
|
#if 0 |
31 |
|
directives in this source file, as targets.c uses them to exclude |
32 |
|
certain BFD vectors. This comment is specially formatted to catch |
33 |
|
users who grep for ^#if 0, so please keep it this way! |
34 |
|
*/ |
35 |
|
|
36 |
|
/* |
37 |
SECTION |
SECTION |
38 |
Targets |
Targets |
39 |
|
|
40 |
DESCRIPTION |
DESCRIPTION |
41 |
Each port of BFD to a different machine requries the creation |
Each port of BFD to a different machine requires the creation |
42 |
of a target back end. All the back end provides to the root |
of a target back end. All the back end provides to the root |
43 |
part of BFD is a structure containing pointers to functions |
part of BFD is a structure containing pointers to functions |
44 |
which perform certain low level operations on files. BFD |
which perform certain low level operations on files. BFD |
78 |
<<bfd_check_format>> on the BFD with a suggested format. |
<<bfd_check_format>> on the BFD with a suggested format. |
79 |
If <<target_defaulted>> has been set, each possible target |
If <<target_defaulted>> has been set, each possible target |
80 |
type is tried to see if it recognizes the specified format. |
type is tried to see if it recognizes the specified format. |
81 |
<<bfd_check_format>> returns <<true>> when the caller guesses right. |
<<bfd_check_format>> returns <<TRUE>> when the caller guesses right. |
82 |
@menu |
@menu |
83 |
@* bfd_target:: |
@* bfd_target:: |
84 |
@end menu |
@end menu |
111 |
someone wants to fix this and not break the above, please do. |
someone wants to fix this and not break the above, please do. |
112 |
|
|
113 |
.#define BFD_SEND(bfd, message, arglist) \ |
.#define BFD_SEND(bfd, message, arglist) \ |
114 |
. ((*((bfd)->xvec->message)) arglist) |
. ((*((bfd)->xvec->message)) arglist) |
115 |
. |
. |
116 |
.#ifdef DEBUG_BFD_SEND |
.#ifdef DEBUG_BFD_SEND |
117 |
.#undef BFD_SEND |
.#undef BFD_SEND |
124 |
For operations which index on the BFD format: |
For operations which index on the BFD format: |
125 |
|
|
126 |
.#define BFD_SEND_FMT(bfd, message, arglist) \ |
.#define BFD_SEND_FMT(bfd, message, arglist) \ |
127 |
. (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) |
. (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) |
128 |
. |
. |
129 |
.#ifdef DEBUG_BFD_SEND |
.#ifdef DEBUG_BFD_SEND |
130 |
.#undef BFD_SEND_FMT |
.#undef BFD_SEND_FMT |
164 |
. bfd_target_ovax_flavour, |
. bfd_target_ovax_flavour, |
165 |
. bfd_target_evax_flavour, |
. bfd_target_evax_flavour, |
166 |
. bfd_target_mmo_flavour, |
. bfd_target_mmo_flavour, |
167 |
. bfd_target_mach_o_flavour |
. bfd_target_mach_o_flavour, |
168 |
|
. bfd_target_pef_flavour, |
169 |
|
. bfd_target_pef_xlib_flavour, |
170 |
|
. bfd_target_sym_flavour |
171 |
.}; |
.}; |
172 |
. |
. |
173 |
.enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; |
.enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; |
209 |
. unsigned short ar_max_namelen; |
. unsigned short ar_max_namelen; |
210 |
. |
. |
211 |
. {* Entries for byte swapping for data. These are different from the |
. {* Entries for byte swapping for data. These are different from the |
212 |
. other entry points, since they don't take a BFD asthe first argument. |
. other entry points, since they don't take a BFD as the first argument. |
213 |
. Certain other handlers could do the same. *} |
. Certain other handlers could do the same. *} |
214 |
. bfd_vma (*bfd_getx64) PARAMS ((const bfd_byte *)); |
. bfd_uint64_t (*bfd_getx64) (const void *); |
215 |
. bfd_signed_vma (*bfd_getx_signed_64) PARAMS ((const bfd_byte *)); |
. bfd_int64_t (*bfd_getx_signed_64) (const void *); |
216 |
. void (*bfd_putx64) PARAMS ((bfd_vma, bfd_byte *)); |
. void (*bfd_putx64) (bfd_uint64_t, void *); |
217 |
. bfd_vma (*bfd_getx32) PARAMS ((const bfd_byte *)); |
. bfd_vma (*bfd_getx32) (const void *); |
218 |
. bfd_signed_vma (*bfd_getx_signed_32) PARAMS ((const bfd_byte *)); |
. bfd_signed_vma (*bfd_getx_signed_32) (const void *); |
219 |
. void (*bfd_putx32) PARAMS ((bfd_vma, bfd_byte *)); |
. void (*bfd_putx32) (bfd_vma, void *); |
220 |
. bfd_vma (*bfd_getx16) PARAMS ((const bfd_byte *)); |
. bfd_vma (*bfd_getx16) (const void *); |
221 |
. bfd_signed_vma (*bfd_getx_signed_16) PARAMS ((const bfd_byte *)); |
. bfd_signed_vma (*bfd_getx_signed_16) (const void *); |
222 |
. void (*bfd_putx16) PARAMS ((bfd_vma, bfd_byte *)); |
. void (*bfd_putx16) (bfd_vma, void *); |
223 |
. |
. |
224 |
. {* Byte swapping for the headers. *} |
. {* Byte swapping for the headers. *} |
225 |
. bfd_vma (*bfd_h_getx64) PARAMS ((const bfd_byte *)); |
. bfd_uint64_t (*bfd_h_getx64) (const void *); |
226 |
. bfd_signed_vma (*bfd_h_getx_signed_64) PARAMS ((const bfd_byte *)); |
. bfd_int64_t (*bfd_h_getx_signed_64) (const void *); |
227 |
. void (*bfd_h_putx64) PARAMS ((bfd_vma, bfd_byte *)); |
. void (*bfd_h_putx64) (bfd_uint64_t, void *); |
228 |
. bfd_vma (*bfd_h_getx32) PARAMS ((const bfd_byte *)); |
. bfd_vma (*bfd_h_getx32) (const void *); |
229 |
. bfd_signed_vma (*bfd_h_getx_signed_32) PARAMS ((const bfd_byte *)); |
. bfd_signed_vma (*bfd_h_getx_signed_32) (const void *); |
230 |
. void (*bfd_h_putx32) PARAMS ((bfd_vma, bfd_byte *)); |
. void (*bfd_h_putx32) (bfd_vma, void *); |
231 |
. bfd_vma (*bfd_h_getx16) PARAMS ((const bfd_byte *)); |
. bfd_vma (*bfd_h_getx16) (const void *); |
232 |
. bfd_signed_vma (*bfd_h_getx_signed_16) PARAMS ((const bfd_byte *)); |
. bfd_signed_vma (*bfd_h_getx_signed_16) (const void *); |
233 |
. void (*bfd_h_putx16) PARAMS ((bfd_vma, bfd_byte *)); |
. void (*bfd_h_putx16) (bfd_vma, void *); |
234 |
. |
. |
235 |
. {* Format dependent routines: these are vectors of entry points |
. {* Format dependent routines: these are vectors of entry points |
236 |
. within the target vector structure, one for each format to check. *} |
. within the target vector structure, one for each format to check. *} |
237 |
. |
. |
238 |
. {* Check the format of a file being read. Return a <<bfd_target *>> or zero. *} |
. {* Check the format of a file being read. Return a <<bfd_target *>> or zero. *} |
239 |
. const struct bfd_target *(*_bfd_check_format[bfd_type_end]) PARAMS ((bfd *)); |
. const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *); |
240 |
. |
. |
241 |
. {* Set the format of a file being written. *} |
. {* Set the format of a file being written. *} |
242 |
. boolean (*_bfd_set_format[bfd_type_end]) PARAMS ((bfd *)); |
. bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); |
243 |
. |
. |
244 |
. {* Write cached information into a file being written, at <<bfd_close>>. *} |
. {* Write cached information into a file being written, at <<bfd_close>>. *} |
245 |
. boolean (*_bfd_write_contents[bfd_type_end]) PARAMS ((bfd *)); |
. bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *); |
246 |
. |
. |
247 |
The general target vector. These vectors are initialized using the |
The general target vector. These vectors are initialized using the |
248 |
BFD_JUMP_TABLE macros. |
BFD_JUMP_TABLE macros. |
249 |
. |
. |
250 |
. {* Generic entry points. *} |
. {* Generic entry points. *} |
|
Do not "beautify" the CONCAT* macro args. Traditional C will not |
|
|
remove whitespace added here, and thus will fail to concatenate |
|
|
the tokens. |
|
251 |
.#define BFD_JUMP_TABLE_GENERIC(NAME) \ |
.#define BFD_JUMP_TABLE_GENERIC(NAME) \ |
252 |
.CONCAT2 (NAME,_close_and_cleanup), \ |
. NAME##_close_and_cleanup, \ |
253 |
.CONCAT2 (NAME,_bfd_free_cached_info), \ |
. NAME##_bfd_free_cached_info, \ |
254 |
.CONCAT2 (NAME,_new_section_hook), \ |
. NAME##_new_section_hook, \ |
255 |
.CONCAT2 (NAME,_get_section_contents), \ |
. NAME##_get_section_contents, \ |
256 |
.CONCAT2 (NAME,_get_section_contents_in_window) |
. NAME##_get_section_contents_in_window |
257 |
. |
. |
258 |
. {* Called when the BFD is being closed to do any necessary cleanup. *} |
. {* Called when the BFD is being closed to do any necessary cleanup. *} |
259 |
. boolean (*_close_and_cleanup) PARAMS ((bfd *)); |
. bfd_boolean (*_close_and_cleanup) (bfd *); |
260 |
. {* Ask the BFD to free all cached information. *} |
. {* Ask the BFD to free all cached information. *} |
261 |
. boolean (*_bfd_free_cached_info) PARAMS ((bfd *)); |
. bfd_boolean (*_bfd_free_cached_info) (bfd *); |
262 |
. {* Called when a new section is created. *} |
. {* Called when a new section is created. *} |
263 |
. boolean (*_new_section_hook) PARAMS ((bfd *, sec_ptr)); |
. bfd_boolean (*_new_section_hook) (bfd *, sec_ptr); |
264 |
. {* Read the contents of a section. *} |
. {* Read the contents of a section. *} |
265 |
. boolean (*_bfd_get_section_contents) PARAMS ((bfd *, sec_ptr, PTR, |
. bfd_boolean (*_bfd_get_section_contents) |
266 |
. file_ptr, bfd_size_type)); |
. (bfd *, sec_ptr, void *, file_ptr, bfd_size_type); |
267 |
. boolean (*_bfd_get_section_contents_in_window) |
. bfd_boolean (*_bfd_get_section_contents_in_window) |
268 |
. PARAMS ((bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type)); |
. (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type); |
269 |
. |
. |
270 |
. {* Entry points to copy private data. *} |
. {* Entry points to copy private data. *} |
271 |
.#define BFD_JUMP_TABLE_COPY(NAME) \ |
.#define BFD_JUMP_TABLE_COPY(NAME) \ |
272 |
.CONCAT2 (NAME,_bfd_copy_private_bfd_data), \ |
. NAME##_bfd_copy_private_bfd_data, \ |
273 |
.CONCAT2 (NAME,_bfd_merge_private_bfd_data), \ |
. NAME##_bfd_merge_private_bfd_data, \ |
274 |
.CONCAT2 (NAME,_bfd_copy_private_section_data), \ |
. NAME##_bfd_copy_private_section_data, \ |
275 |
.CONCAT2 (NAME,_bfd_copy_private_symbol_data), \ |
. NAME##_bfd_copy_private_symbol_data, \ |
276 |
.CONCAT2 (NAME,_bfd_set_private_flags), \ |
. NAME##_bfd_copy_private_header_data, \ |
277 |
.CONCAT2 (NAME,_bfd_print_private_bfd_data) \ |
. NAME##_bfd_set_private_flags, \ |
278 |
|
. NAME##_bfd_print_private_bfd_data |
279 |
|
. |
280 |
. {* Called to copy BFD general private data from one object file |
. {* Called to copy BFD general private data from one object file |
281 |
. to another. *} |
. to another. *} |
282 |
. boolean (*_bfd_copy_private_bfd_data) PARAMS ((bfd *, bfd *)); |
. bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *); |
283 |
. {* Called to merge BFD general private data from one object file |
. {* Called to merge BFD general private data from one object file |
284 |
. to a common output file when linking. *} |
. to a common output file when linking. *} |
285 |
. boolean (*_bfd_merge_private_bfd_data) PARAMS ((bfd *, bfd *)); |
. bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *); |
286 |
. {* Called to copy BFD private section data from one object file |
. {* Called to copy BFD private section data from one object file |
287 |
. to another. *} |
. to another. *} |
288 |
. boolean (*_bfd_copy_private_section_data) PARAMS ((bfd *, sec_ptr, |
. bfd_boolean (*_bfd_copy_private_section_data) |
289 |
. bfd *, sec_ptr)); |
. (bfd *, sec_ptr, bfd *, sec_ptr); |
290 |
. {* Called to copy BFD private symbol data from one symbol |
. {* Called to copy BFD private symbol data from one symbol |
291 |
. to another. *} |
. to another. *} |
292 |
. boolean (*_bfd_copy_private_symbol_data) PARAMS ((bfd *, asymbol *, |
. bfd_boolean (*_bfd_copy_private_symbol_data) |
293 |
. bfd *, asymbol *)); |
. (bfd *, asymbol *, bfd *, asymbol *); |
294 |
|
. {* Called to copy BFD private header data from one object file |
295 |
|
. to another. *} |
296 |
|
. bfd_boolean (*_bfd_copy_private_header_data) |
297 |
|
. (bfd *, bfd *); |
298 |
. {* Called to set private backend flags. *} |
. {* Called to set private backend flags. *} |
299 |
. boolean (*_bfd_set_private_flags) PARAMS ((bfd *, flagword)); |
. bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword); |
300 |
. |
. |
301 |
. {* Called to print private BFD data. *} |
. {* Called to print private BFD data. *} |
302 |
. boolean (*_bfd_print_private_bfd_data) PARAMS ((bfd *, PTR)); |
. bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *); |
303 |
. |
. |
304 |
. {* Core file entry points. *} |
. {* Core file entry points. *} |
305 |
.#define BFD_JUMP_TABLE_CORE(NAME) \ |
.#define BFD_JUMP_TABLE_CORE(NAME) \ |
306 |
.CONCAT2 (NAME,_core_file_failing_command), \ |
. NAME##_core_file_failing_command, \ |
307 |
.CONCAT2 (NAME,_core_file_failing_signal), \ |
. NAME##_core_file_failing_signal, \ |
308 |
.CONCAT2 (NAME,_core_file_matches_executable_p) |
. NAME##_core_file_matches_executable_p |
309 |
. char * (*_core_file_failing_command) PARAMS ((bfd *)); |
. |
310 |
. int (*_core_file_failing_signal) PARAMS ((bfd *)); |
. char * (*_core_file_failing_command) (bfd *); |
311 |
. boolean (*_core_file_matches_executable_p) PARAMS ((bfd *, bfd *)); |
. int (*_core_file_failing_signal) (bfd *); |
312 |
|
. bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *); |
313 |
. |
. |
314 |
. {* Archive entry points. *} |
. {* Archive entry points. *} |
315 |
.#define BFD_JUMP_TABLE_ARCHIVE(NAME) \ |
.#define BFD_JUMP_TABLE_ARCHIVE(NAME) \ |
316 |
.CONCAT2 (NAME,_slurp_armap), \ |
. NAME##_slurp_armap, \ |
317 |
.CONCAT2 (NAME,_slurp_extended_name_table), \ |
. NAME##_slurp_extended_name_table, \ |
318 |
.CONCAT2 (NAME,_construct_extended_name_table), \ |
. NAME##_construct_extended_name_table, \ |
319 |
.CONCAT2 (NAME,_truncate_arname), \ |
. NAME##_truncate_arname, \ |
320 |
.CONCAT2 (NAME,_write_armap), \ |
. NAME##_write_armap, \ |
321 |
.CONCAT2 (NAME,_read_ar_hdr), \ |
. NAME##_read_ar_hdr, \ |
322 |
.CONCAT2 (NAME,_openr_next_archived_file), \ |
. NAME##_openr_next_archived_file, \ |
323 |
.CONCAT2 (NAME,_get_elt_at_index), \ |
. NAME##_get_elt_at_index, \ |
324 |
.CONCAT2 (NAME,_generic_stat_arch_elt), \ |
. NAME##_generic_stat_arch_elt, \ |
325 |
.CONCAT2 (NAME,_update_armap_timestamp) |
. NAME##_update_armap_timestamp |
326 |
. boolean (*_bfd_slurp_armap) PARAMS ((bfd *)); |
. |
327 |
. boolean (*_bfd_slurp_extended_name_table) PARAMS ((bfd *)); |
. bfd_boolean (*_bfd_slurp_armap) (bfd *); |
328 |
. boolean (*_bfd_construct_extended_name_table) |
. bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *); |
329 |
. PARAMS ((bfd *, char **, bfd_size_type *, const char **)); |
. bfd_boolean (*_bfd_construct_extended_name_table) |
330 |
. void (*_bfd_truncate_arname) PARAMS ((bfd *, const char *, char *)); |
. (bfd *, char **, bfd_size_type *, const char **); |
331 |
. boolean (*write_armap) |
. void (*_bfd_truncate_arname) (bfd *, const char *, char *); |
332 |
. PARAMS ((bfd *, unsigned int, struct orl *, unsigned int, int)); |
. bfd_boolean (*write_armap) |
333 |
. PTR (*_bfd_read_ar_hdr_fn) PARAMS ((bfd *)); |
. (bfd *, unsigned int, struct orl *, unsigned int, int); |
334 |
. bfd * (*openr_next_archived_file) PARAMS ((bfd *, bfd *)); |
. void * (*_bfd_read_ar_hdr_fn) (bfd *); |
335 |
.#define bfd_get_elt_at_index(b,i) BFD_SEND(b, _bfd_get_elt_at_index, (b,i)) |
. bfd * (*openr_next_archived_file) (bfd *, bfd *); |
336 |
. bfd * (*_bfd_get_elt_at_index) PARAMS ((bfd *, symindex)); |
.#define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i)) |
337 |
. int (*_bfd_stat_arch_elt) PARAMS ((bfd *, struct stat *)); |
. bfd * (*_bfd_get_elt_at_index) (bfd *, symindex); |
338 |
. boolean (*_bfd_update_armap_timestamp) PARAMS ((bfd *)); |
. int (*_bfd_stat_arch_elt) (bfd *, struct stat *); |
339 |
|
. bfd_boolean (*_bfd_update_armap_timestamp) (bfd *); |
340 |
. |
. |
341 |
. {* Entry points used for symbols. *} |
. {* Entry points used for symbols. *} |
342 |
.#define BFD_JUMP_TABLE_SYMBOLS(NAME) \ |
.#define BFD_JUMP_TABLE_SYMBOLS(NAME) \ |
343 |
.CONCAT2 (NAME,_get_symtab_upper_bound), \ |
. NAME##_get_symtab_upper_bound, \ |
344 |
.CONCAT2 (NAME,_get_symtab), \ |
. NAME##_canonicalize_symtab, \ |
345 |
.CONCAT2 (NAME,_make_empty_symbol), \ |
. NAME##_make_empty_symbol, \ |
346 |
.CONCAT2 (NAME,_print_symbol), \ |
. NAME##_print_symbol, \ |
347 |
.CONCAT2 (NAME,_get_symbol_info), \ |
. NAME##_get_symbol_info, \ |
348 |
.CONCAT2 (NAME,_bfd_is_local_label_name), \ |
. NAME##_bfd_is_local_label_name, \ |
349 |
.CONCAT2 (NAME,_get_lineno), \ |
. NAME##_bfd_is_target_special_symbol, \ |
350 |
.CONCAT2 (NAME,_find_nearest_line), \ |
. NAME##_get_lineno, \ |
351 |
.CONCAT2 (NAME,_bfd_make_debug_symbol), \ |
. NAME##_find_nearest_line, \ |
352 |
.CONCAT2 (NAME,_read_minisymbols), \ |
. NAME##_bfd_make_debug_symbol, \ |
353 |
.CONCAT2 (NAME,_minisymbol_to_symbol) |
. NAME##_read_minisymbols, \ |
354 |
. long (*_bfd_get_symtab_upper_bound) PARAMS ((bfd *)); |
. NAME##_minisymbol_to_symbol |
355 |
. long (*_bfd_canonicalize_symtab) PARAMS ((bfd *, |
. |
356 |
. struct symbol_cache_entry **)); |
. long (*_bfd_get_symtab_upper_bound) (bfd *); |
357 |
. struct symbol_cache_entry * |
. long (*_bfd_canonicalize_symtab) |
358 |
. (*_bfd_make_empty_symbol) PARAMS ((bfd *)); |
. (bfd *, struct bfd_symbol **); |
359 |
. void (*_bfd_print_symbol) PARAMS ((bfd *, PTR, |
. struct bfd_symbol * |
360 |
. struct symbol_cache_entry *, |
. (*_bfd_make_empty_symbol) (bfd *); |
361 |
. bfd_print_symbol_type)); |
. void (*_bfd_print_symbol) |
362 |
.#define bfd_print_symbol(b,p,s,e) BFD_SEND(b, _bfd_print_symbol, (b,p,s,e)) |
. (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type); |
363 |
. void (*_bfd_get_symbol_info) PARAMS ((bfd *, |
.#define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e)) |
364 |
. struct symbol_cache_entry *, |
. void (*_bfd_get_symbol_info) |
365 |
. symbol_info *)); |
. (bfd *, struct bfd_symbol *, symbol_info *); |
366 |
.#define bfd_get_symbol_info(b,p,e) BFD_SEND(b, _bfd_get_symbol_info, (b,p,e)) |
.#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) |
367 |
. boolean (*_bfd_is_local_label_name) PARAMS ((bfd *, const char *)); |
. bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); |
368 |
. |
. bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); |
369 |
. alent * (*_get_lineno) PARAMS ((bfd *, struct symbol_cache_entry *)); |
. alent * (*_get_lineno) (bfd *, struct bfd_symbol *); |
370 |
. boolean (*_bfd_find_nearest_line) |
. bfd_boolean (*_bfd_find_nearest_line) |
371 |
. PARAMS ((bfd *, struct sec *, struct symbol_cache_entry **, bfd_vma, |
. (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma, |
372 |
. const char **, const char **, unsigned int *)); |
. const char **, const char **, unsigned int *); |
373 |
. {* Back-door to allow format-aware applications to create debug symbols |
. {* Back-door to allow format-aware applications to create debug symbols |
374 |
. while using BFD for everything else. Currently used by the assembler |
. while using BFD for everything else. Currently used by the assembler |
375 |
. when creating COFF files. *} |
. when creating COFF files. *} |
376 |
. asymbol *(*_bfd_make_debug_symbol) PARAMS ((bfd *, void *, |
. asymbol * (*_bfd_make_debug_symbol) |
377 |
. unsigned long size)); |
. (bfd *, void *, unsigned long size); |
378 |
.#define bfd_read_minisymbols(b, d, m, s) \ |
.#define bfd_read_minisymbols(b, d, m, s) \ |
379 |
. BFD_SEND (b, _read_minisymbols, (b, d, m, s)) |
. BFD_SEND (b, _read_minisymbols, (b, d, m, s)) |
380 |
. long (*_read_minisymbols) PARAMS ((bfd *, boolean, PTR *, |
. long (*_read_minisymbols) |
381 |
. unsigned int *)); |
. (bfd *, bfd_boolean, void **, unsigned int *); |
382 |
.#define bfd_minisymbol_to_symbol(b, d, m, f) \ |
.#define bfd_minisymbol_to_symbol(b, d, m, f) \ |
383 |
. BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) |
. BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) |
384 |
. asymbol *(*_minisymbol_to_symbol) PARAMS ((bfd *, boolean, const PTR, |
. asymbol * (*_minisymbol_to_symbol) |
385 |
. asymbol *)); |
. (bfd *, bfd_boolean, const void *, asymbol *); |
386 |
. |
. |
387 |
. {* Routines for relocs. *} |
. {* Routines for relocs. *} |
388 |
.#define BFD_JUMP_TABLE_RELOCS(NAME) \ |
.#define BFD_JUMP_TABLE_RELOCS(NAME) \ |
389 |
.CONCAT2 (NAME,_get_reloc_upper_bound), \ |
. NAME##_get_reloc_upper_bound, \ |
390 |
.CONCAT2 (NAME,_canonicalize_reloc), \ |
. NAME##_canonicalize_reloc, \ |
391 |
.CONCAT2 (NAME,_bfd_reloc_type_lookup) |
. NAME##_bfd_reloc_type_lookup |
392 |
. long (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr)); |
. |
393 |
. long (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **, |
. long (*_get_reloc_upper_bound) (bfd *, sec_ptr); |
394 |
. struct symbol_cache_entry **)); |
. long (*_bfd_canonicalize_reloc) |
395 |
|
. (bfd *, sec_ptr, arelent **, struct bfd_symbol **); |
396 |
. {* See documentation on reloc types. *} |
. {* See documentation on reloc types. *} |
397 |
. reloc_howto_type * |
. reloc_howto_type * |
398 |
. (*reloc_type_lookup) PARAMS ((bfd *, bfd_reloc_code_real_type)); |
. (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type); |
399 |
. |
. |
400 |
. {* Routines used when writing an object file. *} |
. {* Routines used when writing an object file. *} |
401 |
.#define BFD_JUMP_TABLE_WRITE(NAME) \ |
.#define BFD_JUMP_TABLE_WRITE(NAME) \ |
402 |
.CONCAT2 (NAME,_set_arch_mach), \ |
. NAME##_set_arch_mach, \ |
403 |
.CONCAT2 (NAME,_set_section_contents) |
. NAME##_set_section_contents |
404 |
. boolean (*_bfd_set_arch_mach) PARAMS ((bfd *, enum bfd_architecture, |
. |
405 |
. unsigned long)); |
. bfd_boolean (*_bfd_set_arch_mach) |
406 |
. boolean (*_bfd_set_section_contents) PARAMS ((bfd *, sec_ptr, PTR, |
. (bfd *, enum bfd_architecture, unsigned long); |
407 |
. file_ptr, bfd_size_type)); |
. bfd_boolean (*_bfd_set_section_contents) |
408 |
|
. (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type); |
409 |
. |
. |
410 |
. {* Routines used by the linker. *} |
. {* Routines used by the linker. *} |
411 |
.#define BFD_JUMP_TABLE_LINK(NAME) \ |
.#define BFD_JUMP_TABLE_LINK(NAME) \ |
412 |
.CONCAT2 (NAME,_sizeof_headers), \ |
. NAME##_sizeof_headers, \ |
413 |
.CONCAT2 (NAME,_bfd_get_relocated_section_contents), \ |
. NAME##_bfd_get_relocated_section_contents, \ |
414 |
.CONCAT2 (NAME,_bfd_relax_section), \ |
. NAME##_bfd_relax_section, \ |
415 |
.CONCAT2 (NAME,_bfd_link_hash_table_create), \ |
. NAME##_bfd_link_hash_table_create, \ |
416 |
.CONCAT2 (NAME,_bfd_link_hash_table_free), \ |
. NAME##_bfd_link_hash_table_free, \ |
417 |
.CONCAT2 (NAME,_bfd_link_add_symbols), \ |
. NAME##_bfd_link_add_symbols, \ |
418 |
.CONCAT2 (NAME,_bfd_link_just_syms), \ |
. NAME##_bfd_link_just_syms, \ |
419 |
.CONCAT2 (NAME,_bfd_final_link), \ |
. NAME##_bfd_final_link, \ |
420 |
.CONCAT2 (NAME,_bfd_link_split_section), \ |
. NAME##_bfd_link_split_section, \ |
421 |
.CONCAT2 (NAME,_bfd_gc_sections), \ |
. NAME##_bfd_gc_sections, \ |
422 |
.CONCAT2 (NAME,_bfd_merge_sections), \ |
. NAME##_bfd_merge_sections, \ |
423 |
.CONCAT2 (NAME,_bfd_discard_group) |
. NAME##_bfd_is_group_section, \ |
424 |
. int (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean)); |
. NAME##_bfd_discard_group, \ |
425 |
. bfd_byte *(*_bfd_get_relocated_section_contents) |
. NAME##_section_already_linked \ |
426 |
. PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *, |
. |
427 |
. bfd_byte *, boolean, struct symbol_cache_entry **)); |
. int (*_bfd_sizeof_headers) (bfd *, bfd_boolean); |
428 |
|
. bfd_byte * (*_bfd_get_relocated_section_contents) |
429 |
|
. (bfd *, struct bfd_link_info *, struct bfd_link_order *, |
430 |
|
. bfd_byte *, bfd_boolean, struct bfd_symbol **); |
431 |
. |
. |
432 |
. boolean (*_bfd_relax_section) |
. bfd_boolean (*_bfd_relax_section) |
433 |
. PARAMS ((bfd *, struct sec *, struct bfd_link_info *, boolean *)); |
. (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *); |
434 |
. |
. |
435 |
. {* Create a hash table for the linker. Different backends store |
. {* Create a hash table for the linker. Different backends store |
436 |
. different information in this table. *} |
. different information in this table. *} |
437 |
. struct bfd_link_hash_table *(*_bfd_link_hash_table_create) PARAMS ((bfd *)); |
. struct bfd_link_hash_table * |
438 |
|
. (*_bfd_link_hash_table_create) (bfd *); |
439 |
. |
. |
440 |
. {* Release the memory associated with the linker hash table. *} |
. {* Release the memory associated with the linker hash table. *} |
441 |
. void (*_bfd_link_hash_table_free) PARAMS ((struct bfd_link_hash_table *)); |
. void (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *); |
442 |
. |
. |
443 |
. {* Add symbols from this object file into the hash table. *} |
. {* Add symbols from this object file into the hash table. *} |
444 |
. boolean (*_bfd_link_add_symbols) PARAMS ((bfd *, struct bfd_link_info *)); |
. bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *); |
445 |
. |
. |
446 |
. {* Indicate that we are only retrieving symbol values from this section. *} |
. {* Indicate that we are only retrieving symbol values from this section. *} |
447 |
. void (*_bfd_link_just_syms) PARAMS ((asection *, struct bfd_link_info *)); |
. void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *); |
448 |
. |
. |
449 |
. {* Do a link based on the link_order structures attached to each |
. {* Do a link based on the link_order structures attached to each |
450 |
. section of the BFD. *} |
. section of the BFD. *} |
451 |
. boolean (*_bfd_final_link) PARAMS ((bfd *, struct bfd_link_info *)); |
. bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *); |
452 |
. |
. |
453 |
. {* Should this section be split up into smaller pieces during linking. *} |
. {* Should this section be split up into smaller pieces during linking. *} |
454 |
. boolean (*_bfd_link_split_section) PARAMS ((bfd *, struct sec *)); |
. bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); |
455 |
. |
. |
456 |
. {* Remove sections that are not referenced from the output. *} |
. {* Remove sections that are not referenced from the output. *} |
457 |
. boolean (*_bfd_gc_sections) PARAMS ((bfd *, struct bfd_link_info *)); |
. bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); |
458 |
. |
. |
459 |
. {* Attempt to merge SEC_MERGE sections. *} |
. {* Attempt to merge SEC_MERGE sections. *} |
460 |
. boolean (*_bfd_merge_sections) PARAMS ((bfd *, struct bfd_link_info *)); |
. bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); |
461 |
|
. |
462 |
|
. {* Is this section a member of a group? *} |
463 |
|
. bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *); |
464 |
. |
. |
465 |
. {* Discard members of a group. *} |
. {* Discard members of a group. *} |
466 |
. boolean (*_bfd_discard_group) PARAMS ((bfd *, struct sec *)); |
. bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *); |
467 |
|
. |
468 |
|
. {* Check if SEC has been already linked during a reloceatable or |
469 |
|
. final link. *} |
470 |
|
. void (*_section_already_linked) (bfd *, struct bfd_section *); |
471 |
. |
. |
472 |
. {* Routines to handle dynamic symbols and relocs. *} |
. {* Routines to handle dynamic symbols and relocs. *} |
473 |
.#define BFD_JUMP_TABLE_DYNAMIC(NAME) \ |
.#define BFD_JUMP_TABLE_DYNAMIC(NAME) \ |
474 |
.CONCAT2 (NAME,_get_dynamic_symtab_upper_bound), \ |
. NAME##_get_dynamic_symtab_upper_bound, \ |
475 |
.CONCAT2 (NAME,_canonicalize_dynamic_symtab), \ |
. NAME##_canonicalize_dynamic_symtab, \ |
476 |
.CONCAT2 (NAME,_get_dynamic_reloc_upper_bound), \ |
. NAME##_get_synthetic_symtab, \ |
477 |
.CONCAT2 (NAME,_canonicalize_dynamic_reloc) |
. NAME##_get_dynamic_reloc_upper_bound, \ |
478 |
|
. NAME##_canonicalize_dynamic_reloc |
479 |
|
. |
480 |
. {* Get the amount of memory required to hold the dynamic symbols. *} |
. {* Get the amount of memory required to hold the dynamic symbols. *} |
481 |
. long (*_bfd_get_dynamic_symtab_upper_bound) PARAMS ((bfd *)); |
. long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *); |
482 |
. {* Read in the dynamic symbols. *} |
. {* Read in the dynamic symbols. *} |
483 |
. long (*_bfd_canonicalize_dynamic_symtab) |
. long (*_bfd_canonicalize_dynamic_symtab) |
484 |
. PARAMS ((bfd *, struct symbol_cache_entry **)); |
. (bfd *, struct bfd_symbol **); |
485 |
|
. {* Create synthetized symbols. *} |
486 |
|
. long (*_bfd_get_synthetic_symtab) |
487 |
|
. (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **, |
488 |
|
. struct bfd_symbol **); |
489 |
. {* Get the amount of memory required to hold the dynamic relocs. *} |
. {* Get the amount of memory required to hold the dynamic relocs. *} |
490 |
. long (*_bfd_get_dynamic_reloc_upper_bound) PARAMS ((bfd *)); |
. long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *); |
491 |
. {* Read in the dynamic relocs. *} |
. {* Read in the dynamic relocs. *} |
492 |
. long (*_bfd_canonicalize_dynamic_reloc) |
. long (*_bfd_canonicalize_dynamic_reloc) |
493 |
. PARAMS ((bfd *, arelent **, struct symbol_cache_entry **)); |
. (bfd *, arelent **, struct bfd_symbol **); |
494 |
. |
. |
495 |
|
|
496 |
A pointer to an alternative bfd_target in case the current one is not |
A pointer to an alternative bfd_target in case the current one is not |
505 |
|
|
506 |
. {* Data for use by back-end routines, which isn't |
. {* Data for use by back-end routines, which isn't |
507 |
. generic enough to belong in this structure. *} |
. generic enough to belong in this structure. *} |
508 |
. PTR backend_data; |
. const void *backend_data; |
509 |
. |
. |
510 |
.} bfd_target; |
.} bfd_target; |
511 |
. |
. |
542 |
extern const bfd_target bfd_elf32_avr_vec; |
extern const bfd_target bfd_elf32_avr_vec; |
543 |
extern const bfd_target bfd_elf32_big_generic_vec; |
extern const bfd_target bfd_elf32_big_generic_vec; |
544 |
extern const bfd_target bfd_elf32_bigarc_vec; |
extern const bfd_target bfd_elf32_bigarc_vec; |
|
extern const bfd_target bfd_elf32_bigarm_oabi_vec; |
|
545 |
extern const bfd_target bfd_elf32_bigarm_vec; |
extern const bfd_target bfd_elf32_bigarm_vec; |
546 |
|
extern const bfd_target bfd_elf32_bigarm_symbian_vec; |
547 |
|
extern const bfd_target bfd_elf32_bigarm_vxworks_vec; |
548 |
extern const bfd_target bfd_elf32_bigmips_vec; |
extern const bfd_target bfd_elf32_bigmips_vec; |
549 |
|
extern const bfd_target bfd_elf32_cr16c_vec; |
550 |
extern const bfd_target bfd_elf32_cris_vec; |
extern const bfd_target bfd_elf32_cris_vec; |
551 |
|
extern const bfd_target bfd_elf32_crx_vec; |
552 |
extern const bfd_target bfd_elf32_d10v_vec; |
extern const bfd_target bfd_elf32_d10v_vec; |
553 |
extern const bfd_target bfd_elf32_d30v_vec; |
extern const bfd_target bfd_elf32_d30v_vec; |
554 |
extern const bfd_target bfd_elf32_dlx_big_vec; |
extern const bfd_target bfd_elf32_dlx_big_vec; |
555 |
extern const bfd_target bfd_elf32_fr30_vec; |
extern const bfd_target bfd_elf32_fr30_vec; |
556 |
extern const bfd_target bfd_elf32_frv_vec; |
extern const bfd_target bfd_elf32_frv_vec; |
557 |
|
extern const bfd_target bfd_elf32_frvfdpic_vec; |
558 |
extern const bfd_target bfd_elf32_h8300_vec; |
extern const bfd_target bfd_elf32_h8300_vec; |
559 |
extern const bfd_target bfd_elf32_hppa_linux_vec; |
extern const bfd_target bfd_elf32_hppa_linux_vec; |
560 |
|
extern const bfd_target bfd_elf32_hppa_nbsd_vec; |
561 |
extern const bfd_target bfd_elf32_hppa_vec; |
extern const bfd_target bfd_elf32_hppa_vec; |
562 |
extern const bfd_target bfd_elf32_i370_vec; |
extern const bfd_target bfd_elf32_i370_vec; |
563 |
|
extern const bfd_target bfd_elf32_i386_freebsd_vec; |
564 |
extern const bfd_target bfd_elf32_i386_vec; |
extern const bfd_target bfd_elf32_i386_vec; |
|
extern const bfd_target bfd_elf32_i386qnx_vec; |
|
565 |
extern const bfd_target bfd_elf32_i860_little_vec; |
extern const bfd_target bfd_elf32_i860_little_vec; |
566 |
extern const bfd_target bfd_elf32_i860_vec; |
extern const bfd_target bfd_elf32_i860_vec; |
567 |
extern const bfd_target bfd_elf32_i960_vec; |
extern const bfd_target bfd_elf32_i960_vec; |
568 |
extern const bfd_target bfd_elf32_ia64_big_vec; |
extern const bfd_target bfd_elf32_ia64_big_vec; |
569 |
extern const bfd_target bfd_elf32_ia64_hpux_big_vec; |
extern const bfd_target bfd_elf32_ia64_hpux_big_vec; |
570 |
extern const bfd_target bfd_elf32_ip2k_vec; |
extern const bfd_target bfd_elf32_ip2k_vec; |
571 |
|
extern const bfd_target bfd_elf32_iq2000_vec; |
572 |
extern const bfd_target bfd_elf32_little_generic_vec; |
extern const bfd_target bfd_elf32_little_generic_vec; |
573 |
extern const bfd_target bfd_elf32_littlearc_vec; |
extern const bfd_target bfd_elf32_littlearc_vec; |
|
extern const bfd_target bfd_elf32_littlearm_oabi_vec; |
|
574 |
extern const bfd_target bfd_elf32_littlearm_vec; |
extern const bfd_target bfd_elf32_littlearm_vec; |
575 |
|
extern const bfd_target bfd_elf32_littlearm_symbian_vec; |
576 |
|
extern const bfd_target bfd_elf32_littlearm_vxworks_vec; |
577 |
extern const bfd_target bfd_elf32_littlemips_vec; |
extern const bfd_target bfd_elf32_littlemips_vec; |
578 |
extern const bfd_target bfd_elf32_m32r_vec; |
extern const bfd_target bfd_elf32_m32r_vec; |
579 |
|
extern const bfd_target bfd_elf32_m32rle_vec; |
580 |
|
extern const bfd_target bfd_elf32_m32rlin_vec; |
581 |
|
extern const bfd_target bfd_elf32_m32rlelin_vec; |
582 |
extern const bfd_target bfd_elf32_m68hc11_vec; |
extern const bfd_target bfd_elf32_m68hc11_vec; |
583 |
extern const bfd_target bfd_elf32_m68hc12_vec; |
extern const bfd_target bfd_elf32_m68hc12_vec; |
584 |
extern const bfd_target bfd_elf32_m68k_vec; |
extern const bfd_target bfd_elf32_m68k_vec; |
587 |
extern const bfd_target bfd_elf32_mcore_little_vec; |
extern const bfd_target bfd_elf32_mcore_little_vec; |
588 |
extern const bfd_target bfd_elf32_mn10200_vec; |
extern const bfd_target bfd_elf32_mn10200_vec; |
589 |
extern const bfd_target bfd_elf32_mn10300_vec; |
extern const bfd_target bfd_elf32_mn10300_vec; |
590 |
|
extern const bfd_target bfd_elf32_msp430_vec; |
591 |
|
extern const bfd_target bfd_elf32_nbigmips_vec; |
592 |
|
extern const bfd_target bfd_elf32_nlittlemips_vec; |
593 |
|
extern const bfd_target bfd_elf32_ntradbigmips_vec; |
594 |
|
extern const bfd_target bfd_elf32_ntradlittlemips_vec; |
595 |
extern const bfd_target bfd_elf32_openrisc_vec; |
extern const bfd_target bfd_elf32_openrisc_vec; |
596 |
extern const bfd_target bfd_elf32_or32_big_vec; |
extern const bfd_target bfd_elf32_or32_big_vec; |
597 |
extern const bfd_target bfd_elf32_pj_vec; |
extern const bfd_target bfd_elf32_pj_vec; |
601 |
extern const bfd_target bfd_elf32_s390_vec; |
extern const bfd_target bfd_elf32_s390_vec; |
602 |
extern const bfd_target bfd_elf32_sh64_vec; |
extern const bfd_target bfd_elf32_sh64_vec; |
603 |
extern const bfd_target bfd_elf32_sh64l_vec; |
extern const bfd_target bfd_elf32_sh64l_vec; |
604 |
|
extern const bfd_target bfd_elf32_sh64lin_vec; |
605 |
|
extern const bfd_target bfd_elf32_sh64blin_vec; |
606 |
extern const bfd_target bfd_elf32_sh64lnbsd_vec; |
extern const bfd_target bfd_elf32_sh64lnbsd_vec; |
607 |
extern const bfd_target bfd_elf32_sh64nbsd_vec; |
extern const bfd_target bfd_elf32_sh64nbsd_vec; |
608 |
extern const bfd_target bfd_elf32_sh_vec; |
extern const bfd_target bfd_elf32_sh_vec; |
609 |
extern const bfd_target bfd_elf32_shblin_vec; |
extern const bfd_target bfd_elf32_shblin_vec; |
610 |
extern const bfd_target bfd_elf32_shl_vec; |
extern const bfd_target bfd_elf32_shl_vec; |
611 |
|
extern const bfd_target bfd_elf32_shl_symbian_vec; |
612 |
extern const bfd_target bfd_elf32_shlin_vec; |
extern const bfd_target bfd_elf32_shlin_vec; |
613 |
extern const bfd_target bfd_elf32_shlnbsd_vec; |
extern const bfd_target bfd_elf32_shlnbsd_vec; |
614 |
extern const bfd_target bfd_elf32_shnbsd_vec; |
extern const bfd_target bfd_elf32_shnbsd_vec; |
619 |
extern const bfd_target bfd_elf32_v850_vec; |
extern const bfd_target bfd_elf32_v850_vec; |
620 |
extern const bfd_target bfd_elf32_vax_vec; |
extern const bfd_target bfd_elf32_vax_vec; |
621 |
extern const bfd_target bfd_elf32_xstormy16_vec; |
extern const bfd_target bfd_elf32_xstormy16_vec; |
622 |
|
extern const bfd_target bfd_elf32_xtensa_be_vec; |
623 |
|
extern const bfd_target bfd_elf32_xtensa_le_vec; |
624 |
|
extern const bfd_target bfd_elf64_alpha_freebsd_vec; |
625 |
extern const bfd_target bfd_elf64_alpha_vec; |
extern const bfd_target bfd_elf64_alpha_vec; |
626 |
extern const bfd_target bfd_elf64_big_generic_vec; |
extern const bfd_target bfd_elf64_big_generic_vec; |
627 |
extern const bfd_target bfd_elf64_bigmips_vec; |
extern const bfd_target bfd_elf64_bigmips_vec; |
628 |
extern const bfd_target bfd_elf64_hppa_linux_vec; |
extern const bfd_target bfd_elf64_hppa_linux_vec; |
629 |
extern const bfd_target bfd_elf64_hppa_vec; |
extern const bfd_target bfd_elf64_hppa_vec; |
|
extern const bfd_target bfd_elf64_ia64_aix_big_vec; |
|
|
extern const bfd_target bfd_elf64_ia64_aix_little_vec; |
|
630 |
extern const bfd_target bfd_elf64_ia64_big_vec; |
extern const bfd_target bfd_elf64_ia64_big_vec; |
631 |
extern const bfd_target bfd_elf64_ia64_hpux_big_vec; |
extern const bfd_target bfd_elf64_ia64_hpux_big_vec; |
632 |
extern const bfd_target bfd_elf64_ia64_little_vec; |
extern const bfd_target bfd_elf64_ia64_little_vec; |
638 |
extern const bfd_target bfd_elf64_s390_vec; |
extern const bfd_target bfd_elf64_s390_vec; |
639 |
extern const bfd_target bfd_elf64_sh64_vec; |
extern const bfd_target bfd_elf64_sh64_vec; |
640 |
extern const bfd_target bfd_elf64_sh64l_vec; |
extern const bfd_target bfd_elf64_sh64l_vec; |
641 |
|
extern const bfd_target bfd_elf64_sh64lin_vec; |
642 |
|
extern const bfd_target bfd_elf64_sh64blin_vec; |
643 |
extern const bfd_target bfd_elf64_sh64lnbsd_vec; |
extern const bfd_target bfd_elf64_sh64lnbsd_vec; |
644 |
extern const bfd_target bfd_elf64_sh64nbsd_vec; |
extern const bfd_target bfd_elf64_sh64nbsd_vec; |
645 |
extern const bfd_target bfd_elf64_sparc_vec; |
extern const bfd_target bfd_elf64_sparc_vec; |
693 |
extern const bfd_target m68ksysvcoff_vec; |
extern const bfd_target m68ksysvcoff_vec; |
694 |
extern const bfd_target m88kbcs_vec; |
extern const bfd_target m88kbcs_vec; |
695 |
extern const bfd_target m88kmach3_vec; |
extern const bfd_target m88kmach3_vec; |
696 |
|
extern const bfd_target m88kopenbsd_vec; |
697 |
extern const bfd_target mach_o_be_vec; |
extern const bfd_target mach_o_be_vec; |
698 |
extern const bfd_target mach_o_le_vec; |
extern const bfd_target mach_o_le_vec; |
699 |
extern const bfd_target mach_o_fat_vec; |
extern const bfd_target mach_o_fat_vec; |
700 |
|
extern const bfd_target maxqcoff_vec; |
701 |
extern const bfd_target mcore_pe_big_vec; |
extern const bfd_target mcore_pe_big_vec; |
702 |
extern const bfd_target mcore_pe_little_vec; |
extern const bfd_target mcore_pe_little_vec; |
703 |
extern const bfd_target mcore_pei_big_vec; |
extern const bfd_target mcore_pei_big_vec; |
714 |
extern const bfd_target pc532machaout_vec; |
extern const bfd_target pc532machaout_vec; |
715 |
extern const bfd_target pc532netbsd_vec; |
extern const bfd_target pc532netbsd_vec; |
716 |
extern const bfd_target pdp11_aout_vec; |
extern const bfd_target pdp11_aout_vec; |
717 |
|
extern const bfd_target pef_vec; |
718 |
|
extern const bfd_target pef_xlib_vec; |
719 |
extern const bfd_target pmac_xcoff_vec; |
extern const bfd_target pmac_xcoff_vec; |
720 |
extern const bfd_target ppcboot_vec; |
extern const bfd_target ppcboot_vec; |
721 |
extern const bfd_target riscix_vec; |
extern const bfd_target riscix_vec; |
735 |
extern const bfd_target sparclynx_coff_vec; |
extern const bfd_target sparclynx_coff_vec; |
736 |
extern const bfd_target sparcnetbsd_vec; |
extern const bfd_target sparcnetbsd_vec; |
737 |
extern const bfd_target sunos_big_vec; |
extern const bfd_target sunos_big_vec; |
738 |
|
extern const bfd_target sym_vec; |
739 |
extern const bfd_target tic30_aout_vec; |
extern const bfd_target tic30_aout_vec; |
740 |
extern const bfd_target tic30_coff_vec; |
extern const bfd_target tic30_coff_vec; |
741 |
|
extern const bfd_target tic4x_coff0_beh_vec; |
742 |
|
extern const bfd_target tic4x_coff0_vec; |
743 |
|
extern const bfd_target tic4x_coff1_beh_vec; |
744 |
|
extern const bfd_target tic4x_coff1_vec; |
745 |
|
extern const bfd_target tic4x_coff2_beh_vec; |
746 |
|
extern const bfd_target tic4x_coff2_vec; |
747 |
extern const bfd_target tic54x_coff0_beh_vec; |
extern const bfd_target tic54x_coff0_beh_vec; |
748 |
extern const bfd_target tic54x_coff0_vec; |
extern const bfd_target tic54x_coff0_vec; |
749 |
extern const bfd_target tic54x_coff1_beh_vec; |
extern const bfd_target tic54x_coff1_beh_vec; |
781 |
extern const bfd_target sco5_core_vec; |
extern const bfd_target sco5_core_vec; |
782 |
extern const bfd_target trad_core_vec; |
extern const bfd_target trad_core_vec; |
783 |
|
|
784 |
|
extern const bfd_target bfd_elf32_am33lin_vec; |
785 |
static const bfd_target * const _bfd_target_vector[] = { |
static const bfd_target * const _bfd_target_vector[] = { |
786 |
|
|
787 |
#ifdef SELECT_VECS |
#ifdef SELECT_VECS |
806 |
#endif |
#endif |
807 |
&aout0_big_vec, |
&aout0_big_vec, |
808 |
#if 0 |
#if 0 |
809 |
/* We have no way of distinguishing these from other a.out variants */ |
/* We have no way of distinguishing these from other a.out variants. */ |
810 |
&aout_arm_big_vec, |
&aout_arm_big_vec, |
811 |
&aout_arm_little_vec, |
&aout_arm_little_vec, |
812 |
/* No one seems to use this. */ |
/* No one seems to use this. */ |
841 |
the file even if we don't recognize the machine type. */ |
the file even if we don't recognize the machine type. */ |
842 |
&bfd_elf32_big_generic_vec, |
&bfd_elf32_big_generic_vec, |
843 |
&bfd_elf32_bigarc_vec, |
&bfd_elf32_bigarc_vec, |
|
&bfd_elf32_bigarm_oabi_vec, |
|
844 |
&bfd_elf32_bigarm_vec, |
&bfd_elf32_bigarm_vec, |
845 |
|
&bfd_elf32_bigarm_symbian_vec, |
846 |
|
&bfd_elf32_bigarm_vxworks_vec, |
847 |
&bfd_elf32_bigmips_vec, |
&bfd_elf32_bigmips_vec, |
848 |
|
&bfd_elf32_cr16c_vec, |
849 |
&bfd_elf32_cris_vec, |
&bfd_elf32_cris_vec, |
850 |
|
&bfd_elf32_crx_vec, |
851 |
&bfd_elf32_d10v_vec, |
&bfd_elf32_d10v_vec, |
852 |
&bfd_elf32_d30v_vec, |
&bfd_elf32_d30v_vec, |
853 |
&bfd_elf32_dlx_big_vec, |
&bfd_elf32_dlx_big_vec, |
854 |
&bfd_elf32_fr30_vec, |
&bfd_elf32_fr30_vec, |
855 |
&bfd_elf32_frv_vec, |
&bfd_elf32_frv_vec, |
856 |
|
&bfd_elf32_frvfdpic_vec, |
857 |
&bfd_elf32_h8300_vec, |
&bfd_elf32_h8300_vec, |
858 |
&bfd_elf32_hppa_linux_vec, |
&bfd_elf32_hppa_linux_vec, |
859 |
|
&bfd_elf32_hppa_nbsd_vec, |
860 |
&bfd_elf32_hppa_vec, |
&bfd_elf32_hppa_vec, |
861 |
&bfd_elf32_i370_vec, |
&bfd_elf32_i370_vec, |
862 |
|
&bfd_elf32_i386_freebsd_vec, |
863 |
&bfd_elf32_i386_vec, |
&bfd_elf32_i386_vec, |
|
&bfd_elf32_i386qnx_vec, |
|
864 |
&bfd_elf32_i860_little_vec, |
&bfd_elf32_i860_little_vec, |
865 |
&bfd_elf32_i860_vec, |
&bfd_elf32_i860_vec, |
866 |
&bfd_elf32_i960_vec, |
&bfd_elf32_i960_vec, |
869 |
#endif |
#endif |
870 |
&bfd_elf32_ia64_hpux_big_vec, |
&bfd_elf32_ia64_hpux_big_vec, |
871 |
&bfd_elf32_ip2k_vec, |
&bfd_elf32_ip2k_vec, |
872 |
|
&bfd_elf32_iq2000_vec, |
873 |
&bfd_elf32_little_generic_vec, |
&bfd_elf32_little_generic_vec, |
874 |
&bfd_elf32_littlearc_vec, |
&bfd_elf32_littlearc_vec, |
|
&bfd_elf32_littlearm_oabi_vec, |
|
875 |
&bfd_elf32_littlearm_vec, |
&bfd_elf32_littlearm_vec, |
876 |
|
&bfd_elf32_littlearm_symbian_vec, |
877 |
|
&bfd_elf32_littlearm_vxworks_vec, |
878 |
&bfd_elf32_littlemips_vec, |
&bfd_elf32_littlemips_vec, |
879 |
&bfd_elf32_m32r_vec, |
&bfd_elf32_m32r_vec, |
880 |
|
&bfd_elf32_m32rle_vec, |
881 |
|
&bfd_elf32_m32rlin_vec, |
882 |
|
&bfd_elf32_m32rlelin_vec, |
883 |
&bfd_elf32_m68hc11_vec, |
&bfd_elf32_m68hc11_vec, |
884 |
&bfd_elf32_m68hc12_vec, |
&bfd_elf32_m68hc12_vec, |
885 |
&bfd_elf32_m68k_vec, |
&bfd_elf32_m68k_vec, |
888 |
&bfd_elf32_mcore_little_vec, |
&bfd_elf32_mcore_little_vec, |
889 |
&bfd_elf32_mn10200_vec, |
&bfd_elf32_mn10200_vec, |
890 |
&bfd_elf32_mn10300_vec, |
&bfd_elf32_mn10300_vec, |
891 |
|
&bfd_elf32_msp430_vec, |
892 |
|
#ifdef BFD64 |
893 |
|
&bfd_elf32_nbigmips_vec, |
894 |
|
&bfd_elf32_nlittlemips_vec, |
895 |
|
&bfd_elf32_ntradbigmips_vec, |
896 |
|
&bfd_elf32_ntradlittlemips_vec, |
897 |
|
#endif |
898 |
&bfd_elf32_openrisc_vec, |
&bfd_elf32_openrisc_vec, |
899 |
&bfd_elf32_or32_big_vec, |
&bfd_elf32_or32_big_vec, |
900 |
&bfd_elf32_pj_vec, |
&bfd_elf32_pj_vec, |
905 |
&bfd_elf32_sh_vec, |
&bfd_elf32_sh_vec, |
906 |
&bfd_elf32_shblin_vec, |
&bfd_elf32_shblin_vec, |
907 |
&bfd_elf32_shl_vec, |
&bfd_elf32_shl_vec, |
908 |
|
&bfd_elf32_shl_symbian_vec, |
909 |
&bfd_elf32_shlin_vec, |
&bfd_elf32_shlin_vec, |
910 |
&bfd_elf32_shlnbsd_vec, |
&bfd_elf32_shlnbsd_vec, |
911 |
&bfd_elf32_shnbsd_vec, |
&bfd_elf32_shnbsd_vec, |
914 |
&bfd_elf32_sh64l_vec, |
&bfd_elf32_sh64l_vec, |
915 |
&bfd_elf32_sh64lnbsd_vec, |
&bfd_elf32_sh64lnbsd_vec, |
916 |
&bfd_elf32_sh64nbsd_vec, |
&bfd_elf32_sh64nbsd_vec, |
917 |
|
&bfd_elf32_sh64lin_vec, |
918 |
|
&bfd_elf32_sh64blin_vec, |
919 |
#endif |
#endif |
920 |
&bfd_elf32_sparc_vec, |
&bfd_elf32_sparc_vec, |
921 |
&bfd_elf32_tradbigmips_vec, |
&bfd_elf32_tradbigmips_vec, |
924 |
&bfd_elf32_v850_vec, |
&bfd_elf32_v850_vec, |
925 |
&bfd_elf32_vax_vec, |
&bfd_elf32_vax_vec, |
926 |
&bfd_elf32_xstormy16_vec, |
&bfd_elf32_xstormy16_vec, |
927 |
|
&bfd_elf32_xtensa_be_vec, |
928 |
|
&bfd_elf32_xtensa_le_vec, |
929 |
#ifdef BFD64 |
#ifdef BFD64 |
930 |
|
&bfd_elf64_alpha_freebsd_vec, |
931 |
&bfd_elf64_alpha_vec, |
&bfd_elf64_alpha_vec, |
932 |
&bfd_elf64_big_generic_vec, |
&bfd_elf64_big_generic_vec, |
933 |
&bfd_elf64_bigmips_vec, |
&bfd_elf64_bigmips_vec, |
934 |
&bfd_elf64_hppa_linux_vec, |
&bfd_elf64_hppa_linux_vec, |
935 |
&bfd_elf64_hppa_vec, |
&bfd_elf64_hppa_vec, |
|
&bfd_elf64_ia64_aix_big_vec, |
|
|
&bfd_elf64_ia64_aix_little_vec, |
|
936 |
&bfd_elf64_ia64_big_vec, |
&bfd_elf64_ia64_big_vec, |
937 |
&bfd_elf64_ia64_hpux_big_vec, |
&bfd_elf64_ia64_hpux_big_vec, |
938 |
&bfd_elf64_ia64_little_vec, |
&bfd_elf64_ia64_little_vec, |
946 |
&bfd_elf64_sh64l_vec, |
&bfd_elf64_sh64l_vec, |
947 |
&bfd_elf64_sh64lnbsd_vec, |
&bfd_elf64_sh64lnbsd_vec, |
948 |
&bfd_elf64_sh64nbsd_vec, |
&bfd_elf64_sh64nbsd_vec, |
949 |
#if 0 |
&bfd_elf64_sh64lin_vec, |
950 |
|
&bfd_elf64_sh64blin_vec, |
951 |
&bfd_elf64_sparc_vec, |
&bfd_elf64_sparc_vec, |
|
#endif |
|
952 |
&bfd_elf64_tradbigmips_vec, |
&bfd_elf64_tradbigmips_vec, |
953 |
&bfd_elf64_tradlittlemips_vec, |
&bfd_elf64_tradlittlemips_vec, |
954 |
&bfd_elf64_x86_64_vec, |
&bfd_elf64_x86_64_vec, |
960 |
&bfd_powerpcle_pei_vec, |
&bfd_powerpcle_pei_vec, |
961 |
&cris_aout_vec, |
&cris_aout_vec, |
962 |
#ifdef BFD64 |
#ifdef BFD64 |
963 |
&demo_64_vec, /* Only compiled if host has long-long support */ |
&demo_64_vec, /* Only compiled if host has long-long support. */ |
964 |
#endif |
#endif |
965 |
&ecoff_big_vec, |
&ecoff_big_vec, |
966 |
&ecoff_biglittle_vec, |
&ecoff_biglittle_vec, |
1024 |
&m68ksysvcoff_vec, |
&m68ksysvcoff_vec, |
1025 |
&m88kbcs_vec, |
&m88kbcs_vec, |
1026 |
&m88kmach3_vec, |
&m88kmach3_vec, |
1027 |
|
&m88kopenbsd_vec, |
1028 |
&mach_o_be_vec, |
&mach_o_be_vec, |
1029 |
&mach_o_le_vec, |
&mach_o_le_vec, |
1030 |
&mach_o_fat_vec, |
&mach_o_fat_vec, |
1031 |
|
&maxqcoff_vec, |
1032 |
&mcore_pe_big_vec, |
&mcore_pe_big_vec, |
1033 |
&mcore_pe_little_vec, |
&mcore_pe_little_vec, |
1034 |
&mcore_pei_big_vec, |
&mcore_pei_big_vec, |
1056 |
&pc532machaout_vec, |
&pc532machaout_vec, |
1057 |
&pc532netbsd_vec, |
&pc532netbsd_vec, |
1058 |
&pdp11_aout_vec, |
&pdp11_aout_vec, |
1059 |
|
&pef_vec, |
1060 |
|
&pef_xlib_vec, |
1061 |
#if 0 |
#if 0 |
1062 |
/* This has the same magic number as RS/6000. */ |
/* This has the same magic number as RS/6000. */ |
1063 |
&pmac_xcoff_vec, |
&pmac_xcoff_vec, |
1064 |
#endif |
#endif |
1065 |
&ppcboot_vec, |
&ppcboot_vec, |
1066 |
#if 0 |
#if 0 |
1067 |
/* We have no way of distinguishing these from other a.out variants */ |
/* We have no way of distinguishing these from other a.out variants. */ |
1068 |
&riscix_vec, |
&riscix_vec, |
1069 |
#endif |
#endif |
1070 |
#ifdef BFD64 |
#ifdef BFD64 |
1087 |
&sparclynx_coff_vec, |
&sparclynx_coff_vec, |
1088 |
&sparcnetbsd_vec, |
&sparcnetbsd_vec, |
1089 |
&sunos_big_vec, |
&sunos_big_vec, |
1090 |
|
&sym_vec, |
1091 |
&tic30_aout_vec, |
&tic30_aout_vec, |
1092 |
&tic30_coff_vec, |
&tic30_coff_vec, |
1093 |
&tic54x_coff0_beh_vec, |
&tic54x_coff0_beh_vec, |
1108 |
&w65_vec, |
&w65_vec, |
1109 |
&we32kcoff_vec, |
&we32kcoff_vec, |
1110 |
&z8kcoff_vec, |
&z8kcoff_vec, |
1111 |
|
&bfd_elf32_am33lin_vec, |
1112 |
#endif /* not SELECT_VECS */ |
#endif /* not SELECT_VECS */ |
1113 |
|
|
1114 |
/* Always support S-records, for convenience. */ |
/* Always support S-records, for convenience. */ |
1172 |
NULL |
NULL |
1173 |
}; |
}; |
1174 |
|
|
1175 |
|
/* bfd_associated_vector[] contains the associated target vectors used |
1176 |
|
to reduce the ambiguity in bfd_check_format_matches. */ |
1177 |
|
|
1178 |
|
static const bfd_target *_bfd_associated_vector[] = { |
1179 |
|
#ifdef ASSOCIATED_VECS |
1180 |
|
ASSOCIATED_VECS, |
1181 |
|
#endif |
1182 |
|
NULL |
1183 |
|
}; |
1184 |
|
const bfd_target * const *bfd_associated_vector = _bfd_associated_vector; |
1185 |
|
|
1186 |
/* When there is an ambiguous match, bfd_check_format_matches puts the |
/* When there is an ambiguous match, bfd_check_format_matches puts the |
1187 |
names of the matching targets in an array. This variable is the maximum |
names of the matching targets in an array. This variable is the maximum |
1188 |
number of entries that the array could possibly need. */ |
number of entries that the array could possibly need. */ |
1206 |
{ NULL, NULL } |
{ NULL, NULL } |
1207 |
}; |
}; |
1208 |
|
|
|
static const bfd_target *find_target PARAMS ((const char *)); |
|
|
|
|
1209 |
/* Find a target vector, given a name or configuration triplet. */ |
/* Find a target vector, given a name or configuration triplet. */ |
1210 |
|
|
1211 |
static const bfd_target * |
static const bfd_target * |
1212 |
find_target (name) |
find_target (const char *name) |
|
const char *name; |
|
1213 |
{ |
{ |
1214 |
const bfd_target * const *target; |
const bfd_target * const *target; |
1215 |
const struct targmatch *match; |
const struct targmatch *match; |
1241 |
bfd_set_default_target |
bfd_set_default_target |
1242 |
|
|
1243 |
SYNOPSIS |
SYNOPSIS |
1244 |
boolean bfd_set_default_target (const char *name); |
bfd_boolean bfd_set_default_target (const char *name); |
1245 |
|
|
1246 |
DESCRIPTION |
DESCRIPTION |
1247 |
Set the default target vector to use when recognizing a BFD. |
Set the default target vector to use when recognizing a BFD. |
1249 |
name or a configuration triplet. |
name or a configuration triplet. |
1250 |
*/ |
*/ |
1251 |
|
|
1252 |
boolean |
bfd_boolean |
1253 |
bfd_set_default_target (name) |
bfd_set_default_target (const char *name) |
|
const char *name; |
|
1254 |
{ |
{ |
1255 |
const bfd_target *target; |
const bfd_target *target; |
1256 |
|
|
1257 |
if (bfd_default_vector[0] != NULL |
if (bfd_default_vector[0] != NULL |
1258 |
&& strcmp (name, bfd_default_vector[0]->name) == 0) |
&& strcmp (name, bfd_default_vector[0]->name) == 0) |
1259 |
return true; |
return TRUE; |
1260 |
|
|
1261 |
target = find_target (name); |
target = find_target (name); |
1262 |
if (target == NULL) |
if (target == NULL) |
1263 |
return false; |
return FALSE; |
1264 |
|
|
1265 |
bfd_default_vector[0] = target; |
bfd_default_vector[0] = target; |
1266 |
return true; |
return TRUE; |
1267 |
} |
} |
1268 |
|
|
1269 |
/* |
/* |
1271 |
bfd_find_target |
bfd_find_target |
1272 |
|
|
1273 |
SYNOPSIS |
SYNOPSIS |
1274 |
const bfd_target *bfd_find_target(const char *target_name, bfd *abfd); |
const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); |
1275 |
|
|
1276 |
DESCRIPTION |
DESCRIPTION |
1277 |
Return a pointer to the transfer vector for the object target |
Return a pointer to the transfer vector for the object target |
1286 |
*/ |
*/ |
1287 |
|
|
1288 |
const bfd_target * |
const bfd_target * |
1289 |
bfd_find_target (target_name, abfd) |
bfd_find_target (const char *target_name, bfd *abfd) |
|
const char *target_name; |
|
|
bfd *abfd; |
|
1290 |
{ |
{ |
1291 |
const char *targname; |
const char *targname; |
1292 |
const bfd_target *target; |
const bfd_target *target; |
1296 |
else |
else |
1297 |
targname = getenv ("GNUTARGET"); |
targname = getenv ("GNUTARGET"); |
1298 |
|
|
1299 |
/* This is safe; the vector cannot be null */ |
/* This is safe; the vector cannot be null. */ |
1300 |
if (targname == NULL || strcmp (targname, "default") == 0) |
if (targname == NULL || strcmp (targname, "default") == 0) |
1301 |
{ |
{ |
1302 |
abfd->target_defaulted = true; |
abfd->target_defaulted = TRUE; |
1303 |
if (bfd_default_vector[0] != NULL) |
if (bfd_default_vector[0] != NULL) |
1304 |
abfd->xvec = bfd_default_vector[0]; |
abfd->xvec = bfd_default_vector[0]; |
1305 |
else |
else |
1307 |
return abfd->xvec; |
return abfd->xvec; |
1308 |
} |
} |
1309 |
|
|
1310 |
abfd->target_defaulted = false; |
abfd->target_defaulted = FALSE; |
1311 |
|
|
1312 |
target = find_target (targname); |
target = find_target (targname); |
1313 |
if (target == NULL) |
if (target == NULL) |
1322 |
bfd_target_list |
bfd_target_list |
1323 |
|
|
1324 |
SYNOPSIS |
SYNOPSIS |
1325 |
const char **bfd_target_list(void); |
const char ** bfd_target_list (void); |
1326 |
|
|
1327 |
DESCRIPTION |
DESCRIPTION |
1328 |
Return a freshly malloced NULL-terminated |
Return a freshly malloced NULL-terminated |
1332 |
*/ |
*/ |
1333 |
|
|
1334 |
const char ** |
const char ** |
1335 |
bfd_target_list () |
bfd_target_list (void) |
1336 |
{ |
{ |
1337 |
int vec_length= 0; |
int vec_length = 0; |
1338 |
bfd_size_type amt; |
bfd_size_type amt; |
1339 |
#if defined (HOST_HPPAHPUX) && ! defined (__STDC__) |
#if defined (HOST_HPPAHPUX) && ! defined (__STDC__) |
1340 |
/* The native compiler on the HP9000/700 has a bug which causes it |
/* The native compiler on the HP9000/700 has a bug which causes it |
1348 |
vec_length++; |
vec_length++; |
1349 |
|
|
1350 |
amt = (vec_length + 1) * sizeof (char **); |
amt = (vec_length + 1) * sizeof (char **); |
1351 |
name_ptr = name_list = (const char **) bfd_zmalloc (amt); |
name_ptr = name_list = bfd_malloc (amt); |
1352 |
|
|
1353 |
if (name_list == NULL) |
if (name_list == NULL) |
1354 |
return NULL; |
return NULL; |
1355 |
|
|
1356 |
for (target = &bfd_target_vector[0]; *target != NULL; target++) |
for (target = &bfd_target_vector[0]; *target != NULL; target++) |
1357 |
*(name_ptr++) = (*target)->name; |
if (target == &bfd_target_vector[0] |
1358 |
|
|| *target != bfd_target_vector[0]) |
1359 |
|
*name_ptr++ = (*target)->name; |
1360 |
|
|
1361 |
|
*name_ptr = NULL; |
1362 |
return name_list; |
return name_list; |
1363 |
} |
} |
1364 |
|
|
1367 |
bfd_seach_for_target |
bfd_seach_for_target |
1368 |
|
|
1369 |
SYNOPSIS |
SYNOPSIS |
1370 |
const bfd_target * bfd_search_for_target (int (* search_func) (const bfd_target *, void *), void *); |
const bfd_target *bfd_search_for_target |
1371 |
|
(int (*search_func) (const bfd_target *, void *), |
1372 |
|
void *); |
1373 |
|
|
1374 |
DESCRIPTION |
DESCRIPTION |
1375 |
Return a pointer to the first transfer vector in the list of |
Return a pointer to the first transfer vector in the list of |
1380 |
*/ |
*/ |
1381 |
|
|
1382 |
const bfd_target * |
const bfd_target * |
1383 |
bfd_search_for_target (search_func, data) |
bfd_search_for_target (int (*search_func) (const bfd_target *, void *), |
1384 |
int (* search_func) PARAMS ((const bfd_target * target, void * data)); |
void *data) |
|
void * data; |
|
1385 |
{ |
{ |
1386 |
const bfd_target * const * target; |
const bfd_target * const *target; |
1387 |
|
|
1388 |
for (target = bfd_target_vector; * target != NULL; target ++) |
for (target = bfd_target_vector; *target != NULL; target ++) |
1389 |
if (search_func (* target, data)) |
if (search_func (*target, data)) |
1390 |
return * target; |
return *target; |
1391 |
|
|
1392 |
return NULL; |
return NULL; |
1393 |
} |
} |