550 lines
		
	
	
	
		
			23 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			550 lines
		
	
	
	
		
			23 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
|  | <html lang="en"> | ||
|  | <head> | ||
|  | <title>bfd_target - Untitled</title> | ||
|  | <meta http-equiv="Content-Type" content="text/html"> | ||
|  | <meta name="description" content="Untitled"> | ||
|  | <meta name="generator" content="makeinfo 4.7"> | ||
|  | <link title="Top" rel="start" href="index.html#Top"> | ||
|  | <link rel="up" href="Targets.html#Targets" title="Targets"> | ||
|  | <link rel="prev" href="Targets.html#Targets" title="Targets"> | ||
|  | <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> | ||
|  | <!--
 | ||
|  | This file documents the BFD library. | ||
|  | 
 | ||
|  | Copyright (C) 1991, 2000, 2001, 2003, 2006, 2007 Free Software Foundation, Inc. | ||
|  | 
 | ||
|  | Permission is granted to copy, distribute and/or modify this document | ||
|  | under the terms of the GNU Free Documentation License, Version 1.1 or | ||
|  | any later version published by the Free Software Foundation; with the | ||
|  | Invariant Sections being ``GNU General Public License'' and ``Funding | ||
|  | Free Software'', the Front-Cover texts being (a) (see below), and with | ||
|  | the Back-Cover Texts being (b) (see below).  A copy of the license is | ||
|  | included in the section entitled ``GNU Free Documentation License''. | ||
|  | 
 | ||
|  | (a) The FSF's Front-Cover Text is: | ||
|  | 
 | ||
|  |      A GNU Manual | ||
|  | 
 | ||
|  | (b) The FSF's Back-Cover Text is: | ||
|  | 
 | ||
|  |      You have freedom to copy and modify this GNU Manual, like GNU | ||
|  |      software.  Copies published by the Free Software Foundation raise | ||
|  |      funds for GNU development.--> | ||
|  | <meta http-equiv="Content-Style-Type" content="text/css"> | ||
|  | <style type="text/css"><!-- | ||
|  |   pre.display { font-family:inherit } | ||
|  |   pre.format  { font-family:inherit } | ||
|  |   pre.smalldisplay { font-family:inherit; font-size:smaller } | ||
|  |   pre.smallformat  { font-family:inherit; font-size:smaller } | ||
|  |   pre.smallexample { font-size:smaller } | ||
|  |   pre.smalllisp    { font-size:smaller } | ||
|  |   span.sc { font-variant:small-caps } | ||
|  |   span.roman { font-family: serif; font-weight: normal; }  | ||
|  | --></style> | ||
|  | </head> | ||
|  | <body> | ||
|  | <div class="node"> | ||
|  | <p> | ||
|  | <a name="bfd_005ftarget"></a>Previous: <a rel="previous" accesskey="p" href="Targets.html#Targets">Targets</a>, | ||
|  | Up: <a rel="up" accesskey="u" href="Targets.html#Targets">Targets</a> | ||
|  | <hr><br> | ||
|  | </div> | ||
|  | 
 | ||
|  | <h4 class="subsection">2.12.1 bfd_target</h4> | ||
|  | 
 | ||
|  | <p><strong>Description</strong><br> | ||
|  | This structure contains everything that BFD knows about a | ||
|  | target. It includes things like its byte order, name, and which | ||
|  | routines to call to do various operations. | ||
|  | 
 | ||
|  |    <p>Every BFD points to a target structure with its <code>xvec</code> | ||
|  | member. | ||
|  | 
 | ||
|  |    <p>The macros below are used to dispatch to functions through the | ||
|  | <code>bfd_target</code> vector. They are used in a number of macros further | ||
|  | down in <span class="file">bfd.h</span>, and are also used when calling various | ||
|  | routines by hand inside the BFD implementation.  The <var>arglist</var> | ||
|  | argument must be parenthesized; it contains all the arguments | ||
|  | to the called function. | ||
|  | 
 | ||
|  |    <p>They make the documentation (more) unpleasant to read, so if | ||
|  | someone wants to fix this and not break the above, please do. | ||
|  | <pre class="example">     #define BFD_SEND(bfd, message, arglist) \ | ||
|  |        ((*((bfd)->xvec->message)) arglist) | ||
|  |       | ||
|  |      #ifdef DEBUG_BFD_SEND | ||
|  |      #undef BFD_SEND | ||
|  |      #define BFD_SEND(bfd, message, arglist) \ | ||
|  |        (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ | ||
|  |          ((*((bfd)->xvec->message)) arglist) : \ | ||
|  |          (bfd_assert (__FILE__,__LINE__), NULL)) | ||
|  |      #endif | ||
|  | </pre> | ||
|  |    <p>For operations which index on the BFD format: | ||
|  | <pre class="example">     #define BFD_SEND_FMT(bfd, message, arglist) \ | ||
|  |        (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) | ||
|  |       | ||
|  |      #ifdef DEBUG_BFD_SEND | ||
|  |      #undef BFD_SEND_FMT | ||
|  |      #define BFD_SEND_FMT(bfd, message, arglist) \ | ||
|  |        (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ | ||
|  |         (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \ | ||
|  |         (bfd_assert (__FILE__,__LINE__), NULL)) | ||
|  |      #endif | ||
|  |       | ||
|  | </pre> | ||
|  |    <p>This is the structure which defines the type of BFD this is.  The | ||
|  | <code>xvec</code> member of the struct <code>bfd</code> itself points here.  Each | ||
|  | module that implements access to a different target under BFD, | ||
|  | defines one of these. | ||
|  | 
 | ||
|  |    <p>FIXME, these names should be rationalised with the names of | ||
|  | the entry points which call them. Too bad we can't have one | ||
|  | macro to define them both! | ||
|  | <pre class="example">     enum bfd_flavour | ||
|  |      { | ||
|  |        bfd_target_unknown_flavour, | ||
|  |        bfd_target_aout_flavour, | ||
|  |        bfd_target_coff_flavour, | ||
|  |        bfd_target_ecoff_flavour, | ||
|  |        bfd_target_xcoff_flavour, | ||
|  |        bfd_target_elf_flavour, | ||
|  |        bfd_target_ieee_flavour, | ||
|  |        bfd_target_nlm_flavour, | ||
|  |        bfd_target_oasys_flavour, | ||
|  |        bfd_target_tekhex_flavour, | ||
|  |        bfd_target_srec_flavour, | ||
|  |        bfd_target_ihex_flavour, | ||
|  |        bfd_target_som_flavour, | ||
|  |        bfd_target_os9k_flavour, | ||
|  |        bfd_target_versados_flavour, | ||
|  |        bfd_target_msdos_flavour, | ||
|  |        bfd_target_ovax_flavour, | ||
|  |        bfd_target_evax_flavour, | ||
|  |        bfd_target_mmo_flavour, | ||
|  |        bfd_target_mach_o_flavour, | ||
|  |        bfd_target_pef_flavour, | ||
|  |        bfd_target_pef_xlib_flavour, | ||
|  |        bfd_target_sym_flavour | ||
|  |      }; | ||
|  |       | ||
|  |      enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; | ||
|  |       | ||
|  |      /* Forward declaration.  */ | ||
|  |      typedef struct bfd_link_info _bfd_link_info; | ||
|  |       | ||
|  |      typedef struct bfd_target | ||
|  |      { | ||
|  |        /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */ | ||
|  |        char *name; | ||
|  |       | ||
|  |       /* The "flavour" of a back end is a general indication about | ||
|  |          the contents of a file.  */ | ||
|  |        enum bfd_flavour flavour; | ||
|  |       | ||
|  |        /* The order of bytes within the data area of a file.  */ | ||
|  |        enum bfd_endian byteorder; | ||
|  |       | ||
|  |       /* The order of bytes within the header parts of a file.  */ | ||
|  |        enum bfd_endian header_byteorder; | ||
|  |       | ||
|  |        /* A mask of all the flags which an executable may have set - | ||
|  |           from the set <code>BFD_NO_FLAGS</code>, <code>HAS_RELOC</code>, ...<code>D_PAGED</code>.  */ | ||
|  |        flagword object_flags; | ||
|  |       | ||
|  |       /* A mask of all the flags which a section may have set - from | ||
|  |          the set <code>SEC_NO_FLAGS</code>, <code>SEC_ALLOC</code>, ...<code>SET_NEVER_LOAD</code>.  */ | ||
|  |        flagword section_flags; | ||
|  |       | ||
|  |       /* The character normally found at the front of a symbol. | ||
|  |          (if any), perhaps `_'.  */ | ||
|  |        char symbol_leading_char; | ||
|  |       | ||
|  |       /* The pad character for file names within an archive header.  */ | ||
|  |        char ar_pad_char; | ||
|  |       | ||
|  |        /* The maximum number of characters in an archive header.  */ | ||
|  |        unsigned short ar_max_namelen; | ||
|  |       | ||
|  |        /* Entries for byte swapping for data. These are different from the | ||
|  |           other entry points, since they don't take a BFD as the first argument. | ||
|  |           Certain other handlers could do the same.  */ | ||
|  |        bfd_uint64_t   (*bfd_getx64) (const void *); | ||
|  |        bfd_int64_t    (*bfd_getx_signed_64) (const void *); | ||
|  |        void           (*bfd_putx64) (bfd_uint64_t, void *); | ||
|  |        bfd_vma        (*bfd_getx32) (const void *); | ||
|  |        bfd_signed_vma (*bfd_getx_signed_32) (const void *); | ||
|  |        void           (*bfd_putx32) (bfd_vma, void *); | ||
|  |        bfd_vma        (*bfd_getx16) (const void *); | ||
|  |        bfd_signed_vma (*bfd_getx_signed_16) (const void *); | ||
|  |        void           (*bfd_putx16) (bfd_vma, void *); | ||
|  |       | ||
|  |        /* Byte swapping for the headers.  */ | ||
|  |        bfd_uint64_t   (*bfd_h_getx64) (const void *); | ||
|  |        bfd_int64_t    (*bfd_h_getx_signed_64) (const void *); | ||
|  |        void           (*bfd_h_putx64) (bfd_uint64_t, void *); | ||
|  |        bfd_vma        (*bfd_h_getx32) (const void *); | ||
|  |        bfd_signed_vma (*bfd_h_getx_signed_32) (const void *); | ||
|  |        void           (*bfd_h_putx32) (bfd_vma, void *); | ||
|  |        bfd_vma        (*bfd_h_getx16) (const void *); | ||
|  |        bfd_signed_vma (*bfd_h_getx_signed_16) (const void *); | ||
|  |        void           (*bfd_h_putx16) (bfd_vma, void *); | ||
|  |       | ||
|  |        /* Format dependent routines: these are vectors of entry points | ||
|  |           within the target vector structure, one for each format to check.  */ | ||
|  |       | ||
|  |        /* Check the format of a file being read.  Return a <code>bfd_target *</code> or zero.  */ | ||
|  |        const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *); | ||
|  |       | ||
|  |        /* Set the format of a file being written.  */ | ||
|  |        bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); | ||
|  |       | ||
|  |        /* Write cached information into a file being written, at <code>bfd_close</code>.  */ | ||
|  |        bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *); | ||
|  |       | ||
|  | </pre> | ||
|  |    <p>The general target vector.  These vectors are initialized using the | ||
|  | BFD_JUMP_TABLE macros. | ||
|  | <pre class="example">      | ||
|  |        /* Generic entry points.  */ | ||
|  |      #define BFD_JUMP_TABLE_GENERIC(NAME) \ | ||
|  |        NAME##_close_and_cleanup, \ | ||
|  |        NAME##_bfd_free_cached_info, \ | ||
|  |        NAME##_new_section_hook, \ | ||
|  |        NAME##_get_section_contents, \ | ||
|  |        NAME##_get_section_contents_in_window | ||
|  |       | ||
|  |        /* Called when the BFD is being closed to do any necessary cleanup.  */ | ||
|  |        bfd_boolean (*_close_and_cleanup) (bfd *); | ||
|  |        /* Ask the BFD to free all cached information.  */ | ||
|  |        bfd_boolean (*_bfd_free_cached_info) (bfd *); | ||
|  |        /* Called when a new section is created.  */ | ||
|  |        bfd_boolean (*_new_section_hook) (bfd *, sec_ptr); | ||
|  |        /* Read the contents of a section.  */ | ||
|  |        bfd_boolean (*_bfd_get_section_contents) | ||
|  |          (bfd *, sec_ptr, void *, file_ptr, bfd_size_type); | ||
|  |        bfd_boolean (*_bfd_get_section_contents_in_window) | ||
|  |          (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type); | ||
|  |       | ||
|  |        /* Entry points to copy private data.  */ | ||
|  |      #define BFD_JUMP_TABLE_COPY(NAME) \ | ||
|  |        NAME##_bfd_copy_private_bfd_data, \ | ||
|  |        NAME##_bfd_merge_private_bfd_data, \ | ||
|  |        _bfd_generic_init_private_section_data, \ | ||
|  |        NAME##_bfd_copy_private_section_data, \ | ||
|  |        NAME##_bfd_copy_private_symbol_data, \ | ||
|  |        NAME##_bfd_copy_private_header_data, \ | ||
|  |        NAME##_bfd_set_private_flags, \ | ||
|  |        NAME##_bfd_print_private_bfd_data | ||
|  |       | ||
|  |        /* Called to copy BFD general private data from one object file | ||
|  |           to another.  */ | ||
|  |        bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *); | ||
|  |        /* Called to merge BFD general private data from one object file | ||
|  |           to a common output file when linking.  */ | ||
|  |        bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *); | ||
|  |        /* Called to initialize BFD private section data from one object file | ||
|  |           to another.  */ | ||
|  |      #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \ | ||
|  |        BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info)) | ||
|  |        bfd_boolean (*_bfd_init_private_section_data) | ||
|  |          (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *); | ||
|  |        /* Called to copy BFD private section data from one object file | ||
|  |           to another.  */ | ||
|  |        bfd_boolean (*_bfd_copy_private_section_data) | ||
|  |          (bfd *, sec_ptr, bfd *, sec_ptr); | ||
|  |        /* Called to copy BFD private symbol data from one symbol | ||
|  |           to another.  */ | ||
|  |        bfd_boolean (*_bfd_copy_private_symbol_data) | ||
|  |          (bfd *, asymbol *, bfd *, asymbol *); | ||
|  |        /* Called to copy BFD private header data from one object file | ||
|  |           to another.  */ | ||
|  |        bfd_boolean (*_bfd_copy_private_header_data) | ||
|  |          (bfd *, bfd *); | ||
|  |        /* Called to set private backend flags.  */ | ||
|  |        bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword); | ||
|  |       | ||
|  |        /* Called to print private BFD data.  */ | ||
|  |        bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *); | ||
|  |       | ||
|  |        /* Core file entry points.  */ | ||
|  |      #define BFD_JUMP_TABLE_CORE(NAME) \ | ||
|  |        NAME##_core_file_failing_command, \ | ||
|  |        NAME##_core_file_failing_signal, \ | ||
|  |        NAME##_core_file_matches_executable_p | ||
|  |       | ||
|  |        char *      (*_core_file_failing_command) (bfd *); | ||
|  |        int         (*_core_file_failing_signal) (bfd *); | ||
|  |        bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *); | ||
|  |       | ||
|  |        /* Archive entry points.  */ | ||
|  |      #define BFD_JUMP_TABLE_ARCHIVE(NAME) \ | ||
|  |        NAME##_slurp_armap, \ | ||
|  |        NAME##_slurp_extended_name_table, \ | ||
|  |        NAME##_construct_extended_name_table, \ | ||
|  |        NAME##_truncate_arname, \ | ||
|  |        NAME##_write_armap, \ | ||
|  |        NAME##_read_ar_hdr, \ | ||
|  |        NAME##_openr_next_archived_file, \ | ||
|  |        NAME##_get_elt_at_index, \ | ||
|  |        NAME##_generic_stat_arch_elt, \ | ||
|  |        NAME##_update_armap_timestamp | ||
|  |       | ||
|  |        bfd_boolean (*_bfd_slurp_armap) (bfd *); | ||
|  |        bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *); | ||
|  |        bfd_boolean (*_bfd_construct_extended_name_table) | ||
|  |          (bfd *, char **, bfd_size_type *, const char **); | ||
|  |        void        (*_bfd_truncate_arname) (bfd *, const char *, char *); | ||
|  |        bfd_boolean (*write_armap) | ||
|  |          (bfd *, unsigned int, struct orl *, unsigned int, int); | ||
|  |        void *      (*_bfd_read_ar_hdr_fn) (bfd *); | ||
|  |        bfd *       (*openr_next_archived_file) (bfd *, bfd *); | ||
|  |      #define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i)) | ||
|  |        bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex); | ||
|  |        int         (*_bfd_stat_arch_elt) (bfd *, struct stat *); | ||
|  |        bfd_boolean (*_bfd_update_armap_timestamp) (bfd *); | ||
|  |       | ||
|  |        /* Entry points used for symbols.  */ | ||
|  |      #define BFD_JUMP_TABLE_SYMBOLS(NAME) \ | ||
|  |        NAME##_get_symtab_upper_bound, \ | ||
|  |        NAME##_canonicalize_symtab, \ | ||
|  |        NAME##_make_empty_symbol, \ | ||
|  |        NAME##_print_symbol, \ | ||
|  |        NAME##_get_symbol_info, \ | ||
|  |        NAME##_bfd_is_local_label_name, \ | ||
|  |        NAME##_bfd_is_target_special_symbol, \ | ||
|  |        NAME##_get_lineno, \ | ||
|  |        NAME##_find_nearest_line, \ | ||
|  |        _bfd_generic_find_line, \ | ||
|  |        NAME##_find_inliner_info, \ | ||
|  |        NAME##_bfd_make_debug_symbol, \ | ||
|  |        NAME##_read_minisymbols, \ | ||
|  |        NAME##_minisymbol_to_symbol | ||
|  |       | ||
|  |        long        (*_bfd_get_symtab_upper_bound) (bfd *); | ||
|  |        long        (*_bfd_canonicalize_symtab) | ||
|  |          (bfd *, struct bfd_symbol **); | ||
|  |        struct bfd_symbol * | ||
|  |                    (*_bfd_make_empty_symbol) (bfd *); | ||
|  |        void        (*_bfd_print_symbol) | ||
|  |          (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type); | ||
|  |      #define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e)) | ||
|  |        void        (*_bfd_get_symbol_info) | ||
|  |          (bfd *, struct bfd_symbol *, symbol_info *); | ||
|  |      #define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) | ||
|  |        bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); | ||
|  |        bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); | ||
|  |        alent *     (*_get_lineno) (bfd *, struct bfd_symbol *); | ||
|  |        bfd_boolean (*_bfd_find_nearest_line) | ||
|  |          (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma, | ||
|  |           const char **, const char **, unsigned int *); | ||
|  |        bfd_boolean (*_bfd_find_line) | ||
|  |          (bfd *, struct bfd_symbol **, struct bfd_symbol *, | ||
|  |           const char **, unsigned int *); | ||
|  |        bfd_boolean (*_bfd_find_inliner_info) | ||
|  |          (bfd *, const char **, const char **, unsigned int *); | ||
|  |       /* Back-door to allow format-aware applications to create debug symbols | ||
|  |          while using BFD for everything else.  Currently used by the assembler | ||
|  |          when creating COFF files.  */ | ||
|  |        asymbol *   (*_bfd_make_debug_symbol) | ||
|  |          (bfd *, void *, unsigned long size); | ||
|  |      #define bfd_read_minisymbols(b, d, m, s) \ | ||
|  |        BFD_SEND (b, _read_minisymbols, (b, d, m, s)) | ||
|  |        long        (*_read_minisymbols) | ||
|  |          (bfd *, bfd_boolean, void **, unsigned int *); | ||
|  |      #define bfd_minisymbol_to_symbol(b, d, m, f) \ | ||
|  |        BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) | ||
|  |        asymbol *   (*_minisymbol_to_symbol) | ||
|  |          (bfd *, bfd_boolean, const void *, asymbol *); | ||
|  |       | ||
|  |        /* Routines for relocs.  */ | ||
|  |      #define BFD_JUMP_TABLE_RELOCS(NAME) \ | ||
|  |        NAME##_get_reloc_upper_bound, \ | ||
|  |        NAME##_canonicalize_reloc, \ | ||
|  |        NAME##_bfd_reloc_type_lookup, \ | ||
|  |        NAME##_bfd_reloc_name_lookup | ||
|  |       | ||
|  |        long        (*_get_reloc_upper_bound) (bfd *, sec_ptr); | ||
|  |        long        (*_bfd_canonicalize_reloc) | ||
|  |          (bfd *, sec_ptr, arelent **, struct bfd_symbol **); | ||
|  |        /* See documentation on reloc types.  */ | ||
|  |        reloc_howto_type * | ||
|  |                    (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type); | ||
|  |        reloc_howto_type * | ||
|  |                    (*reloc_name_lookup) (bfd *, const char *); | ||
|  |       | ||
|  |       | ||
|  |        /* Routines used when writing an object file.  */ | ||
|  |      #define BFD_JUMP_TABLE_WRITE(NAME) \ | ||
|  |        NAME##_set_arch_mach, \ | ||
|  |        NAME##_set_section_contents | ||
|  |       | ||
|  |        bfd_boolean (*_bfd_set_arch_mach) | ||
|  |          (bfd *, enum bfd_architecture, unsigned long); | ||
|  |        bfd_boolean (*_bfd_set_section_contents) | ||
|  |          (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type); | ||
|  |       | ||
|  |        /* Routines used by the linker.  */ | ||
|  |      #define BFD_JUMP_TABLE_LINK(NAME) \ | ||
|  |        NAME##_sizeof_headers, \ | ||
|  |        NAME##_bfd_get_relocated_section_contents, \ | ||
|  |        NAME##_bfd_relax_section, \ | ||
|  |        NAME##_bfd_link_hash_table_create, \ | ||
|  |        NAME##_bfd_link_hash_table_free, \ | ||
|  |        NAME##_bfd_link_add_symbols, \ | ||
|  |        NAME##_bfd_link_just_syms, \ | ||
|  |        NAME##_bfd_final_link, \ | ||
|  |        NAME##_bfd_link_split_section, \ | ||
|  |        NAME##_bfd_gc_sections, \ | ||
|  |        NAME##_bfd_merge_sections, \ | ||
|  |        NAME##_bfd_is_group_section, \ | ||
|  |        NAME##_bfd_discard_group, \ | ||
|  |        NAME##_section_already_linked \ | ||
|  |       | ||
|  |        int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); | ||
|  |        bfd_byte *  (*_bfd_get_relocated_section_contents) | ||
|  |          (bfd *, struct bfd_link_info *, struct bfd_link_order *, | ||
|  |           bfd_byte *, bfd_boolean, struct bfd_symbol **); | ||
|  |       | ||
|  |        bfd_boolean (*_bfd_relax_section) | ||
|  |          (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *); | ||
|  |       | ||
|  |        /* Create a hash table for the linker.  Different backends store | ||
|  |           different information in this table.  */ | ||
|  |        struct bfd_link_hash_table * | ||
|  |                    (*_bfd_link_hash_table_create) (bfd *); | ||
|  |       | ||
|  |        /* Release the memory associated with the linker hash table.  */ | ||
|  |        void        (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *); | ||
|  |       | ||
|  |        /* Add symbols from this object file into the hash table.  */ | ||
|  |        bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *); | ||
|  |       | ||
|  |        /* Indicate that we are only retrieving symbol values from this section.  */ | ||
|  |        void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *); | ||
|  |       | ||
|  |        /* Do a link based on the link_order structures attached to each | ||
|  |           section of the BFD.  */ | ||
|  |        bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *); | ||
|  |       | ||
|  |        /* Should this section be split up into smaller pieces during linking.  */ | ||
|  |        bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); | ||
|  |       | ||
|  |        /* Remove sections that are not referenced from the output.  */ | ||
|  |        bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); | ||
|  |       | ||
|  |        /* Attempt to merge SEC_MERGE sections.  */ | ||
|  |        bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); | ||
|  |       | ||
|  |        /* Is this section a member of a group?  */ | ||
|  |        bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *); | ||
|  |       | ||
|  |        /* Discard members of a group.  */ | ||
|  |        bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *); | ||
|  |       | ||
|  |        /* Check if SEC has been already linked during a reloceatable or | ||
|  |           final link.  */ | ||
|  |        void (*_section_already_linked) (bfd *, struct bfd_section *, | ||
|  |                                         struct bfd_link_info *); | ||
|  |       | ||
|  |        /* Routines to handle dynamic symbols and relocs.  */ | ||
|  |      #define BFD_JUMP_TABLE_DYNAMIC(NAME) \ | ||
|  |        NAME##_get_dynamic_symtab_upper_bound, \ | ||
|  |        NAME##_canonicalize_dynamic_symtab, \ | ||
|  |        NAME##_get_synthetic_symtab, \ | ||
|  |        NAME##_get_dynamic_reloc_upper_bound, \ | ||
|  |        NAME##_canonicalize_dynamic_reloc | ||
|  |       | ||
|  |        /* Get the amount of memory required to hold the dynamic symbols.  */ | ||
|  |        long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *); | ||
|  |        /* Read in the dynamic symbols.  */ | ||
|  |        long        (*_bfd_canonicalize_dynamic_symtab) | ||
|  |          (bfd *, struct bfd_symbol **); | ||
|  |        /* Create synthetized symbols.  */ | ||
|  |        long        (*_bfd_get_synthetic_symtab) | ||
|  |          (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **, | ||
|  |           struct bfd_symbol **); | ||
|  |        /* Get the amount of memory required to hold the dynamic relocs.  */ | ||
|  |        long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *); | ||
|  |        /* Read in the dynamic relocs.  */ | ||
|  |        long        (*_bfd_canonicalize_dynamic_reloc) | ||
|  |          (bfd *, arelent **, struct bfd_symbol **); | ||
|  |       | ||
|  | </pre> | ||
|  |    <p>A pointer to an alternative bfd_target in case the current one is not | ||
|  | satisfactory.  This can happen when the target cpu supports both big | ||
|  | and little endian code, and target chosen by the linker has the wrong | ||
|  | endianness.  The function open_output() in ld/ldlang.c uses this field | ||
|  | to find an alternative output format that is suitable. | ||
|  | <pre class="example">       /* Opposite endian version of this target.  */ | ||
|  |        const struct bfd_target * alternative_target; | ||
|  |       | ||
|  |        /* Data for use by back-end routines, which isn't | ||
|  |           generic enough to belong in this structure.  */ | ||
|  |        const void *backend_data; | ||
|  |       | ||
|  |      } bfd_target; | ||
|  |       | ||
|  | </pre> | ||
|  |    <p><a name="index-bfd_005fset_005fdefault_005ftarget-1315"></a> | ||
|  | 
 | ||
|  | <h5 class="subsubsection">2.12.1.1 <code>bfd_set_default_target</code></h5> | ||
|  | 
 | ||
|  | <p><strong>Synopsis</strong> | ||
|  | <pre class="example">     bfd_boolean bfd_set_default_target (const char *name); | ||
|  | </pre> | ||
|  |    <p><strong>Description</strong><br> | ||
|  | Set the default target vector to use when recognizing a BFD.  | ||
|  | This takes the name of the target, which may be a BFD target | ||
|  | name or a configuration triplet. | ||
|  | 
 | ||
|  |    <p><a name="index-bfd_005ffind_005ftarget-1316"></a> | ||
|  | 
 | ||
|  | <h5 class="subsubsection">2.12.1.2 <code>bfd_find_target</code></h5> | ||
|  | 
 | ||
|  | <p><strong>Synopsis</strong> | ||
|  | <pre class="example">     const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); | ||
|  | </pre> | ||
|  |    <p><strong>Description</strong><br> | ||
|  | Return a pointer to the transfer vector for the object target | ||
|  | named <var>target_name</var>.  If <var>target_name</var> is <code>NULL</code>, | ||
|  | choose the one in the environment variable <code>GNUTARGET</code>; if | ||
|  | that is null or not defined, then choose the first entry in the | ||
|  | target list.  Passing in the string "default" or setting the | ||
|  | environment variable to "default" will cause the first entry in | ||
|  | the target list to be returned, and "target_defaulted" will be | ||
|  | set in the BFD if <var>abfd</var> isn't <code>NULL</code>.  This causes | ||
|  | <code>bfd_check_format</code> to loop over all the targets to find the | ||
|  | one that matches the file being read. | ||
|  | 
 | ||
|  |    <p><a name="index-bfd_005ftarget_005flist-1317"></a> | ||
|  | 
 | ||
|  | <h5 class="subsubsection">2.12.1.3 <code>bfd_target_list</code></h5> | ||
|  | 
 | ||
|  | <p><strong>Synopsis</strong> | ||
|  | <pre class="example">     const char ** bfd_target_list (void); | ||
|  | </pre> | ||
|  |    <p><strong>Description</strong><br> | ||
|  | Return a freshly malloced NULL-terminated | ||
|  | vector of the names of all the valid BFD targets. Do not | ||
|  | modify the names. | ||
|  | 
 | ||
|  |    <p><a name="index-bfd_005fseach_005ffor_005ftarget-1318"></a> | ||
|  | 
 | ||
|  | <h5 class="subsubsection">2.12.1.4 <code>bfd_seach_for_target</code></h5> | ||
|  | 
 | ||
|  | <p><strong>Synopsis</strong> | ||
|  | <pre class="example">     const bfd_target *bfd_search_for_target | ||
|  |         (int (*search_func) (const bfd_target *, void *), | ||
|  |          void *); | ||
|  | </pre> | ||
|  |    <p><strong>Description</strong><br> | ||
|  | Return a pointer to the first transfer vector in the list of | ||
|  | transfer vectors maintained by BFD that produces a non-zero | ||
|  | result when passed to the function <var>search_func</var>.  The | ||
|  | parameter <var>data</var> is passed, unexamined, to the search | ||
|  | function. | ||
|  | 
 | ||
|  |    </body></html> | ||
|  | 
 |