Home | History | Annotate | Line # | Download | only in bfd
libbfd-in.h revision 1.1
      1 /* libbfd.h -- Declarations used by bfd library *implementation*.
      2    (This include file is not for users of the library.)
      3 
      4    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
      5    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
      6    2010, 2011, 2012
      7    Free Software Foundation, Inc.
      8 
      9    Written by Cygnus Support.
     10 
     11    This file is part of BFD, the Binary File Descriptor library.
     12 
     13    This program is free software; you can redistribute it and/or modify
     14    it under the terms of the GNU General Public License as published by
     15    the Free Software Foundation; either version 3 of the License, or
     16    (at your option) any later version.
     17 
     18    This program is distributed in the hope that it will be useful,
     19    but WITHOUT ANY WARRANTY; without even the implied warranty of
     20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     21    GNU General Public License for more details.
     22 
     23    You should have received a copy of the GNU General Public License
     24    along with this program; if not, write to the Free Software
     25    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     26    MA 02110-1301, USA.  */
     27 
     28 #include "hashtab.h"
     29 
     30 /* Align an address upward to a boundary, expressed as a number of bytes.
     31    E.g. align to an 8-byte boundary with argument of 8.  Take care never
     32    to wrap around if the address is within boundary-1 of the end of the
     33    address space.  */
     34 #define BFD_ALIGN(this, boundary)					  \
     35   ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this))		  \
     36    ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
     37    : ~ (bfd_vma) 0)
     38 
     39 /* If you want to read and write large blocks, you might want to do it
     40    in quanta of this amount */
     41 #define DEFAULT_BUFFERSIZE 8192
     42 
     43 /* Set a tdata field.  Can't use the other macros for this, since they
     44    do casts, and casting to the left of assignment isn't portable.  */
     45 #define set_tdata(bfd, v) ((bfd)->tdata.any = (v))
     46 
     47 /* If BFD_IN_MEMORY is set for a BFD, then the iostream fields points
     48    to an instance of this structure.  */
     49 
     50 struct bfd_in_memory
     51 {
     52   /* Size of buffer.  */
     53   bfd_size_type size;
     54   /* Buffer holding contents of BFD.  */
     55   bfd_byte *buffer;
     56 };
     57 
     58 struct section_hash_entry
     59 {
     60   struct bfd_hash_entry root;
     61   asection section;
     62 };
     63 
     64 /* tdata for an archive.  For an input archive, cache
     65    needs to be free()'d.  For an output archive, symdefs do.  */
     66 
     67 struct artdata
     68 {
     69   file_ptr first_file_filepos;
     70   /* Speed up searching the armap */
     71   htab_t cache;
     72   bfd *archive_head;		/* Only interesting in output routines.  */
     73   carsym *symdefs;		/* The symdef entries.  */
     74   symindex symdef_count;	/* How many there are.  */
     75   char *extended_names;		/* Clever intel extension.  */
     76   bfd_size_type extended_names_size; /* Size of extended names.  */
     77   /* When more compilers are standard C, this can be a time_t.  */
     78   long  armap_timestamp;	/* Timestamp value written into armap.
     79 				   This is used for BSD archives to check
     80 				   that the timestamp is recent enough
     81 				   for the BSD linker to not complain,
     82 				   just before we finish writing an
     83 				   archive.  */
     84   file_ptr armap_datepos;	/* Position within archive to seek to
     85 				   rewrite the date field.  */
     86   void *tdata;			/* Backend specific information.  */
     87 };
     88 
     89 #define bfd_ardata(bfd) ((bfd)->tdata.aout_ar_data)
     90 
     91 /* Goes in bfd's arelt_data slot */
     92 struct areltdata
     93 {
     94   char * arch_header;		/* It's actually a string.  */
     95   bfd_size_type parsed_size;	/* Octets of filesize not including ar_hdr.  */
     96   bfd_size_type extra_size;	/* BSD4.4: extra bytes after the header.  */
     97   char *filename;		/* Null-terminated.  */
     98   file_ptr origin;		/* For element of a thin archive.  */
     99 };
    100 
    101 #define arelt_size(bfd) (((struct areltdata *)((bfd)->arelt_data))->parsed_size)
    102 
    103 extern void *bfd_malloc
    104   (bfd_size_type);
    105 extern void *bfd_realloc
    106   (void *, bfd_size_type);
    107 extern void *bfd_realloc_or_free
    108   (void *, bfd_size_type);
    109 extern void *bfd_zmalloc
    110   (bfd_size_type);
    111 extern void *bfd_malloc2
    112   (bfd_size_type, bfd_size_type);
    113 extern void *bfd_realloc2
    114   (void *, bfd_size_type, bfd_size_type);
    115 extern void *bfd_zmalloc2
    116   (bfd_size_type, bfd_size_type);
    117 
    118 extern void _bfd_default_error_handler (const char *s, ...);
    119 extern bfd_error_handler_type _bfd_error_handler;
    120 extern bfd_assert_handler_type _bfd_assert_handler;
    121 
    122 /* These routines allocate and free things on the BFD's objalloc.  */
    123 
    124 extern void *bfd_alloc2
    125   (bfd *, bfd_size_type, bfd_size_type);
    126 extern void *bfd_zalloc2
    127   (bfd *, bfd_size_type, bfd_size_type);
    128 extern void bfd_release
    129   (bfd *, void *);
    130 
    131 bfd * _bfd_create_empty_archive_element_shell
    132   (bfd *obfd);
    133 bfd * _bfd_look_for_bfd_in_cache
    134   (bfd *, file_ptr);
    135 bfd_boolean _bfd_add_bfd_to_archive_cache
    136   (bfd *, file_ptr, bfd *);
    137 bfd_boolean _bfd_generic_mkarchive
    138   (bfd *abfd);
    139 char *_bfd_append_relative_path
    140   (bfd *arch, char *elt_name);
    141 const bfd_target *bfd_generic_archive_p
    142   (bfd *abfd);
    143 bfd_boolean bfd_slurp_armap
    144   (bfd *abfd);
    145 bfd_boolean bfd_slurp_bsd_armap_f2
    146   (bfd *abfd);
    147 #define bfd_slurp_bsd_armap bfd_slurp_armap
    148 #define bfd_slurp_coff_armap bfd_slurp_armap
    149 bfd_boolean _bfd_slurp_extended_name_table
    150   (bfd *abfd);
    151 extern bfd_boolean _bfd_construct_extended_name_table
    152   (bfd *, bfd_boolean, char **, bfd_size_type *);
    153 bfd_boolean _bfd_write_archive_contents
    154   (bfd *abfd);
    155 bfd_boolean _bfd_compute_and_write_armap
    156   (bfd *, unsigned int elength);
    157 bfd *_bfd_get_elt_at_filepos
    158   (bfd *archive, file_ptr filepos);
    159 extern bfd *_bfd_generic_get_elt_at_index
    160   (bfd *, symindex);
    161 bfd * _bfd_new_bfd
    162   (void);
    163 void _bfd_delete_bfd
    164   (bfd *);
    165 bfd_boolean _bfd_free_cached_info
    166   (bfd *);
    167 
    168 bfd_boolean bfd_false
    169   (bfd *ignore);
    170 bfd_boolean bfd_true
    171   (bfd *ignore);
    172 void *bfd_nullvoidptr
    173   (bfd *ignore);
    174 int bfd_0
    175   (bfd *ignore);
    176 unsigned int bfd_0u
    177   (bfd *ignore);
    178 long bfd_0l
    179   (bfd *ignore);
    180 long _bfd_n1
    181   (bfd *ignore);
    182 void bfd_void
    183   (bfd *ignore);
    184 
    185 bfd *_bfd_new_bfd_contained_in
    186   (bfd *);
    187 const bfd_target *_bfd_dummy_target
    188   (bfd *abfd);
    189 
    190 void bfd_dont_truncate_arname
    191   (bfd *abfd, const char *filename, char *hdr);
    192 void bfd_bsd_truncate_arname
    193   (bfd *abfd, const char *filename, char *hdr);
    194 void bfd_gnu_truncate_arname
    195   (bfd *abfd, const char *filename, char *hdr);
    196 
    197 bfd_boolean bsd_write_armap
    198   (bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count,
    199    int stridx);
    200 
    201 bfd_boolean coff_write_armap
    202   (bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count,
    203    int stridx);
    204 
    205 extern void *_bfd_generic_read_ar_hdr
    206   (bfd *);
    207 extern void _bfd_ar_spacepad
    208   (char *, size_t, const char *, long);
    209 extern bfd_boolean _bfd_ar_sizepad
    210   (char *, size_t, bfd_size_type);
    211 
    212 extern void *_bfd_generic_read_ar_hdr_mag
    213   (bfd *, const char *);
    214 
    215 extern bfd_boolean _bfd_generic_write_ar_hdr
    216   (bfd *, bfd *);
    217 
    218 extern bfd_boolean _bfd_bsd44_write_ar_hdr
    219   (bfd *, bfd *);
    220 
    221 bfd * bfd_generic_openr_next_archived_file
    222   (bfd *archive, bfd *last_file);
    223 
    224 int bfd_generic_stat_arch_elt
    225   (bfd *, struct stat *);
    226 
    227 #define _bfd_read_ar_hdr(abfd) \
    228   BFD_SEND (abfd, _bfd_read_ar_hdr_fn, (abfd))
    229 #define _bfd_write_ar_hdr(archive, abfd)         \
    230   BFD_SEND (abfd, _bfd_write_ar_hdr_fn, (archive, abfd))
    231 
    232 /* Generic routines to use for BFD_JUMP_TABLE_GENERIC.  Use
    234    BFD_JUMP_TABLE_GENERIC (_bfd_generic).  */
    235 
    236 #define _bfd_generic_close_and_cleanup bfd_true
    237 #define _bfd_generic_bfd_free_cached_info bfd_true
    238 extern bfd_boolean _bfd_generic_new_section_hook
    239   (bfd *, asection *);
    240 extern bfd_boolean _bfd_generic_get_section_contents
    241   (bfd *, asection *, void *, file_ptr, bfd_size_type);
    242 extern bfd_boolean _bfd_generic_get_section_contents_in_window
    243   (bfd *, asection *, bfd_window *, file_ptr, bfd_size_type);
    244 
    245 /* Generic routines to use for BFD_JUMP_TABLE_COPY.  Use
    246    BFD_JUMP_TABLE_COPY (_bfd_generic).  */
    247 
    248 #define _bfd_generic_bfd_copy_private_bfd_data \
    249   ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
    250 #define _bfd_generic_bfd_merge_private_bfd_data \
    251   ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
    252 #define _bfd_generic_bfd_set_private_flags \
    253   ((bfd_boolean (*) (bfd *, flagword)) bfd_true)
    254 #define _bfd_generic_bfd_copy_private_section_data \
    255   ((bfd_boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true)
    256 #define _bfd_generic_bfd_copy_private_symbol_data \
    257   ((bfd_boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true)
    258 #define _bfd_generic_bfd_copy_private_header_data \
    259   ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
    260 #define _bfd_generic_bfd_print_private_bfd_data \
    261   ((bfd_boolean (*) (bfd *, void *)) bfd_true)
    262 
    263 extern bfd_boolean _bfd_generic_init_private_section_data
    264   (bfd *, asection *, bfd *, asection *, struct bfd_link_info *);
    265 
    266 /* Routines to use for BFD_JUMP_TABLE_CORE when there is no core file
    267    support.  Use BFD_JUMP_TABLE_CORE (_bfd_nocore).  */
    268 
    269 extern char *_bfd_nocore_core_file_failing_command
    270   (bfd *);
    271 extern int _bfd_nocore_core_file_failing_signal
    272   (bfd *);
    273 extern bfd_boolean _bfd_nocore_core_file_matches_executable_p
    274   (bfd *, bfd *);
    275 extern int _bfd_nocore_core_file_pid
    276   (bfd *);
    277 
    278 /* Routines to use for BFD_JUMP_TABLE_ARCHIVE when there is no archive
    279    file support.  Use BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive).  */
    280 
    281 #define _bfd_noarchive_slurp_armap bfd_false
    282 #define _bfd_noarchive_slurp_extended_name_table bfd_false
    283 #define _bfd_noarchive_construct_extended_name_table \
    284   ((bfd_boolean (*) (bfd *, char **, bfd_size_type *, const char **)) \
    285    bfd_false)
    286 #define _bfd_noarchive_truncate_arname \
    287   ((void (*) (bfd *, const char *, char *)) bfd_void)
    288 #define _bfd_noarchive_write_armap \
    289   ((bfd_boolean (*) (bfd *, unsigned int, struct orl *, unsigned int, int)) \
    290    bfd_false)
    291 #define _bfd_noarchive_read_ar_hdr bfd_nullvoidptr
    292 #define _bfd_noarchive_write_ar_hdr \
    293   ((bfd_boolean (*) (bfd *, bfd *)) bfd_false)
    294 #define _bfd_noarchive_openr_next_archived_file \
    295   ((bfd *(*) (bfd *, bfd *)) bfd_nullvoidptr)
    296 #define _bfd_noarchive_get_elt_at_index \
    297   ((bfd *(*) (bfd *, symindex)) bfd_nullvoidptr)
    298 #define _bfd_noarchive_generic_stat_arch_elt bfd_generic_stat_arch_elt
    299 #define _bfd_noarchive_update_armap_timestamp bfd_false
    300 
    301 /* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get BSD style
    302    archives.  Use BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_bsd).  */
    303 
    304 #define _bfd_archive_bsd_slurp_armap bfd_slurp_bsd_armap
    305 #define _bfd_archive_bsd_slurp_extended_name_table \
    306   _bfd_slurp_extended_name_table
    307 extern bfd_boolean _bfd_archive_bsd_construct_extended_name_table
    308   (bfd *, char **, bfd_size_type *, const char **);
    309 #define _bfd_archive_bsd_truncate_arname bfd_bsd_truncate_arname
    310 #define _bfd_archive_bsd_write_armap bsd_write_armap
    311 #define _bfd_archive_bsd_read_ar_hdr _bfd_generic_read_ar_hdr
    312 #define _bfd_archive_bsd_write_ar_hdr _bfd_generic_write_ar_hdr
    313 #define _bfd_archive_bsd_openr_next_archived_file \
    314   bfd_generic_openr_next_archived_file
    315 #define _bfd_archive_bsd_get_elt_at_index _bfd_generic_get_elt_at_index
    316 #define _bfd_archive_bsd_generic_stat_arch_elt \
    317   bfd_generic_stat_arch_elt
    318 extern bfd_boolean _bfd_archive_bsd_update_armap_timestamp
    319   (bfd *);
    320 
    321 /* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get COFF style
    322    archives.  Use BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff).  */
    323 
    324 #define _bfd_archive_coff_slurp_armap bfd_slurp_coff_armap
    325 #define _bfd_archive_coff_slurp_extended_name_table \
    326   _bfd_slurp_extended_name_table
    327 extern bfd_boolean _bfd_archive_coff_construct_extended_name_table
    328   (bfd *, char **, bfd_size_type *, const char **);
    329 #define _bfd_archive_coff_truncate_arname bfd_dont_truncate_arname
    330 #define _bfd_archive_coff_write_armap coff_write_armap
    331 #define _bfd_archive_coff_read_ar_hdr _bfd_generic_read_ar_hdr
    332 #define _bfd_archive_coff_write_ar_hdr _bfd_generic_write_ar_hdr
    333 #define _bfd_archive_coff_openr_next_archived_file \
    334   bfd_generic_openr_next_archived_file
    335 #define _bfd_archive_coff_get_elt_at_index _bfd_generic_get_elt_at_index
    336 #define _bfd_archive_coff_generic_stat_arch_elt \
    337   bfd_generic_stat_arch_elt
    338 #define _bfd_archive_coff_update_armap_timestamp bfd_true
    339 
    340 /* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get BSD4.4 style
    341    archives.  Use BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_bsd44).  */
    342 
    343 #define _bfd_archive_bsd44_slurp_armap bfd_slurp_bsd_armap
    344 #define _bfd_archive_bsd44_slurp_extended_name_table \
    345   _bfd_slurp_extended_name_table
    346 extern bfd_boolean _bfd_archive_bsd44_construct_extended_name_table
    347   (bfd *, char **, bfd_size_type *, const char **);
    348 #define _bfd_archive_bsd44_truncate_arname bfd_bsd_truncate_arname
    349 #define _bfd_archive_bsd44_write_armap bsd_write_armap
    350 #define _bfd_archive_bsd44_read_ar_hdr _bfd_generic_read_ar_hdr
    351 #define _bfd_archive_bsd44_write_ar_hdr _bfd_bsd44_write_ar_hdr
    352 #define _bfd_archive_bsd44_openr_next_archived_file \
    353   bfd_generic_openr_next_archived_file
    354 #define _bfd_archive_bsd44_get_elt_at_index _bfd_generic_get_elt_at_index
    355 #define _bfd_archive_bsd44_generic_stat_arch_elt \
    356   bfd_generic_stat_arch_elt
    357 #define _bfd_archive_bsd44_update_armap_timestamp \
    358   _bfd_archive_bsd_update_armap_timestamp
    359 
    360 /* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get VMS style
    361    archives.  Use BFD_JUMP_TABLE_ARCHIVE (_bfd_vms_lib).  Some of them
    362    are irrelevant and never called, so defined as NULL.  */
    363 
    364 extern bfd_boolean _bfd_vms_lib_write_archive_contents (bfd *arch);
    365 #define _bfd_vms_lib_slurp_armap NULL
    366 #define _bfd_vms_lib_slurp_extended_name_table NULL
    367 #define _bfd_vms_lib_construct_extended_name_table NULL
    368 #define _bfd_vms_lib_truncate_arname NULL
    369 #define _bfd_vms_lib_write_armap NULL
    370 #define _bfd_vms_lib_read_ar_hdr NULL
    371 #define _bfd_vms_lib_write_ar_hdr NULL
    372 extern bfd *_bfd_vms_lib_openr_next_archived_file (bfd *, bfd *);
    373 extern bfd *_bfd_vms_lib_get_elt_at_index (bfd *, symindex);
    374 extern int _bfd_vms_lib_generic_stat_arch_elt (bfd *, struct stat *);
    375 #define _bfd_vms_lib_update_armap_timestamp bfd_true
    376 
    377 /* Extra routines for VMS style archives.  */
    378 
    379 extern symindex _bfd_vms_lib_find_symbol (bfd *, const char *);
    380 extern bfd *_bfd_vms_lib_get_imagelib_file (bfd *);
    381 extern const bfd_target *_bfd_vms_lib_alpha_archive_p (bfd *abfd);
    382 extern const bfd_target *_bfd_vms_lib_ia64_archive_p (bfd *abfd);
    383 extern bfd_boolean _bfd_vms_lib_alpha_mkarchive (bfd *abfd);
    384 extern bfd_boolean _bfd_vms_lib_ia64_mkarchive (bfd *abfd);
    385 
    386 /* Routines to use for BFD_JUMP_TABLE_SYMBOLS where there is no symbol
    387    support.  Use BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols).  */
    388 
    389 #define _bfd_nosymbols_get_symtab_upper_bound _bfd_n1
    390 #define _bfd_nosymbols_canonicalize_symtab \
    391   ((long (*) (bfd *, asymbol **)) _bfd_n1)
    392 #define _bfd_nosymbols_make_empty_symbol _bfd_generic_make_empty_symbol
    393 #define _bfd_nosymbols_print_symbol \
    394   ((void (*) (bfd *, void *, asymbol *, bfd_print_symbol_type)) bfd_void)
    395 #define _bfd_nosymbols_get_symbol_info \
    396   ((void (*) (bfd *, asymbol *, symbol_info *)) bfd_void)
    397 #define _bfd_nosymbols_bfd_is_local_label_name \
    398   ((bfd_boolean (*) (bfd *, const char *)) bfd_false)
    399 #define _bfd_nosymbols_bfd_is_target_special_symbol \
    400   ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
    401 #define _bfd_nosymbols_get_lineno \
    402   ((alent *(*) (bfd *, asymbol *)) bfd_nullvoidptr)
    403 #define _bfd_nosymbols_find_nearest_line \
    404   ((bfd_boolean (*) (bfd *, asection *, asymbol **, bfd_vma, const char **, \
    405 		     const char **, unsigned int *)) \
    406    bfd_false)
    407 #define _bfd_nosymbols_find_inliner_info \
    408   ((bfd_boolean (*) (bfd *, const char **, const char **, unsigned int *)) \
    409    bfd_false)
    410 #define _bfd_nosymbols_bfd_make_debug_symbol \
    411   ((asymbol *(*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
    412 #define _bfd_nosymbols_read_minisymbols \
    413   ((long (*) (bfd *, bfd_boolean, void **, unsigned int *)) _bfd_n1)
    414 #define _bfd_nosymbols_minisymbol_to_symbol \
    415   ((asymbol *(*) (bfd *, bfd_boolean, const void *, asymbol *)) \
    416    bfd_nullvoidptr)
    417 
    418 /* Routines to use for BFD_JUMP_TABLE_RELOCS when there is no reloc
    419    support.  Use BFD_JUMP_TABLE_RELOCS (_bfd_norelocs).  */
    420 
    421 extern long _bfd_norelocs_get_reloc_upper_bound (bfd *, asection *);
    422 extern long _bfd_norelocs_canonicalize_reloc (bfd *, asection *,
    423 					      arelent **, asymbol **);
    424 #define _bfd_norelocs_bfd_reloc_type_lookup \
    425   ((reloc_howto_type *(*) (bfd *, bfd_reloc_code_real_type)) bfd_nullvoidptr)
    426 #define _bfd_norelocs_bfd_reloc_name_lookup \
    427   ((reloc_howto_type *(*) (bfd *, const char *)) bfd_nullvoidptr)
    428 
    429 /* Routines to use for BFD_JUMP_TABLE_WRITE for targets which may not
    430    be written.  Use BFD_JUMP_TABLE_WRITE (_bfd_nowrite).  */
    431 
    432 #define _bfd_nowrite_set_arch_mach \
    433   ((bfd_boolean (*) (bfd *, enum bfd_architecture, unsigned long)) \
    434    bfd_false)
    435 #define _bfd_nowrite_set_section_contents \
    436   ((bfd_boolean (*) (bfd *, asection *, const void *, file_ptr, bfd_size_type)) \
    437    bfd_false)
    438 
    439 /* Generic routines to use for BFD_JUMP_TABLE_WRITE.  Use
    440    BFD_JUMP_TABLE_WRITE (_bfd_generic).  */
    441 
    442 #define _bfd_generic_set_arch_mach bfd_default_set_arch_mach
    443 extern bfd_boolean _bfd_generic_set_section_contents
    444   (bfd *, asection *, const void *, file_ptr, bfd_size_type);
    445 
    446 /* Routines to use for BFD_JUMP_TABLE_LINK for targets which do not
    447    support linking.  Use BFD_JUMP_TABLE_LINK (_bfd_nolink).  */
    448 
    449 #define _bfd_nolink_sizeof_headers \
    450   ((int (*) (bfd *, struct bfd_link_info *)) bfd_0)
    451 #define _bfd_nolink_bfd_get_relocated_section_contents \
    452   ((bfd_byte *(*) (bfd *, struct bfd_link_info *, struct bfd_link_order *, \
    453 		   bfd_byte *, bfd_boolean, asymbol **)) \
    454    bfd_nullvoidptr)
    455 #define _bfd_nolink_bfd_relax_section \
    456   ((bfd_boolean (*) \
    457     (bfd *, asection *, struct bfd_link_info *, bfd_boolean *)) \
    458    bfd_false)
    459 #define _bfd_nolink_bfd_gc_sections \
    460   ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \
    461    bfd_false)
    462 #define _bfd_nolink_bfd_lookup_section_flags \
    463   ((bfd_boolean (*) (struct bfd_link_info *, struct flag_info *, asection *)) \
    464    bfd_0)
    465 #define _bfd_nolink_bfd_merge_sections \
    466   ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \
    467    bfd_false)
    468 #define _bfd_nolink_bfd_is_group_section \
    469   ((bfd_boolean (*) (bfd *, const struct bfd_section *)) \
    470    bfd_false)
    471 #define _bfd_nolink_bfd_discard_group \
    472   ((bfd_boolean (*) (bfd *, struct bfd_section *)) \
    473    bfd_false)
    474 #define _bfd_nolink_bfd_link_hash_table_create \
    475   ((struct bfd_link_hash_table *(*) (bfd *)) bfd_nullvoidptr)
    476 #define _bfd_nolink_bfd_link_hash_table_free \
    477   ((void (*) (struct bfd_link_hash_table *)) bfd_void)
    478 #define _bfd_nolink_bfd_link_add_symbols \
    479   ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false)
    480 #define _bfd_nolink_bfd_link_just_syms \
    481   ((void (*) (asection *, struct bfd_link_info *)) bfd_void)
    482 #define _bfd_nolink_bfd_copy_link_hash_symbol_type \
    483   ((void (*) (bfd *, struct bfd_link_hash_entry *, \
    484 	      struct bfd_link_hash_entry *)) bfd_void)
    485 #define _bfd_nolink_bfd_final_link \
    486   ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false)
    487 #define _bfd_nolink_bfd_link_split_section \
    488   ((bfd_boolean (*) (bfd *, struct bfd_section *)) bfd_false)
    489 #define _bfd_nolink_section_already_linked \
    490   ((bfd_boolean (*) (bfd *, asection *, \
    491 		     struct bfd_link_info *)) bfd_false)
    492 #define _bfd_nolink_bfd_define_common_symbol \
    493   ((bfd_boolean (*) (bfd *, struct bfd_link_info *, \
    494 		     struct bfd_link_hash_entry *)) bfd_false)
    495 
    496 /* Routines to use for BFD_JUMP_TABLE_DYNAMIC for targets which do not
    497    have dynamic symbols or relocs.  Use BFD_JUMP_TABLE_DYNAMIC
    498    (_bfd_nodynamic).  */
    499 
    500 #define _bfd_nodynamic_get_dynamic_symtab_upper_bound _bfd_n1
    501 #define _bfd_nodynamic_canonicalize_dynamic_symtab \
    502   ((long (*) (bfd *, asymbol **)) _bfd_n1)
    503 #define _bfd_nodynamic_get_synthetic_symtab \
    504   ((long (*) (bfd *, long, asymbol **, long, asymbol **, asymbol **)) _bfd_n1)
    505 #define _bfd_nodynamic_get_dynamic_reloc_upper_bound _bfd_n1
    506 #define _bfd_nodynamic_canonicalize_dynamic_reloc \
    507   ((long (*) (bfd *, arelent **, asymbol **)) _bfd_n1)
    508 
    509 /* Generic routine to determine of the given symbol is a local
    511    label.  */
    512 extern bfd_boolean bfd_generic_is_local_label_name
    513   (bfd *, const char *);
    514 
    515 /* Generic minisymbol routines.  */
    516 extern long _bfd_generic_read_minisymbols
    517   (bfd *, bfd_boolean, void **, unsigned int *);
    518 extern asymbol *_bfd_generic_minisymbol_to_symbol
    519   (bfd *, bfd_boolean, const void *, asymbol *);
    520 
    521 /* Find the nearest line using .stab/.stabstr sections.  */
    522 extern bfd_boolean _bfd_stab_section_find_nearest_line
    523   (bfd *, asymbol **, asection *, bfd_vma, bfd_boolean *,
    524    const char **, const char **, unsigned int *, void **);
    525 
    526 /* Find the nearest line using DWARF 1 debugging information.  */
    527 extern bfd_boolean _bfd_dwarf1_find_nearest_line
    528   (bfd *, asection *, asymbol **, bfd_vma, const char **,
    529    const char **, unsigned int *);
    530 
    531 struct dwarf_debug_section
    532 {
    533   const char *uncompressed_name;
    534   const char *compressed_name;
    535 };
    536 
    537 /* Map of uncompressed DWARF debug section name to compressed one.  It
    538    is terminated by NULL uncompressed_name.  */
    539 
    540 extern const struct dwarf_debug_section dwarf_debug_sections[];
    541 
    542 /* Find the nearest line using DWARF 2 debugging information.  */
    543 extern bfd_boolean _bfd_dwarf2_find_nearest_line
    544   (bfd *, const struct dwarf_debug_section *, asection *, asymbol **, bfd_vma,
    545    const char **, const char **, unsigned int *, unsigned int *, unsigned int,
    546    void **);
    547 
    548 /* Find the line using DWARF 2 debugging information.  */
    549 extern bfd_boolean _bfd_dwarf2_find_line
    550   (bfd *, asymbol **, asymbol *, const char **,
    551    unsigned int *, unsigned int *, unsigned int, void **);
    552 
    553 bfd_boolean _bfd_generic_find_line
    554   (bfd *, asymbol **, asymbol *, const char **, unsigned int *);
    555 
    556 bfd_boolean _bfd_generic_find_nearest_line_discriminator
    557   (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **,
    558    unsigned int *, unsigned int *);
    559 
    560 /* Find inliner info after calling bfd_find_nearest_line. */
    561 extern bfd_boolean _bfd_dwarf2_find_inliner_info
    562   (bfd *, const char **, const char **, unsigned int *, void **);
    563 
    564 /* Read DWARF 2 debugging information. */
    565 extern bfd_boolean _bfd_dwarf2_slurp_debug_info
    566   (bfd *, bfd *, const struct dwarf_debug_section *, asymbol **, void **);
    567 
    568 /* Clean up the data used to handle DWARF 2 debugging information. */
    569 extern void _bfd_dwarf2_cleanup_debug_info
    570   (bfd *, void **);
    571 
    572 /* Create a new section entry.  */
    573 extern struct bfd_hash_entry *bfd_section_hash_newfunc
    574   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
    575 
    576 /* A routine to create entries for a bfd_link_hash_table.  */
    577 extern struct bfd_hash_entry *_bfd_link_hash_newfunc
    578   (struct bfd_hash_entry *entry, struct bfd_hash_table *table,
    579    const char *string);
    580 
    581 /* Initialize a bfd_link_hash_table.  */
    582 extern bfd_boolean _bfd_link_hash_table_init
    583   (struct bfd_link_hash_table *, bfd *,
    584    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
    585 			       struct bfd_hash_table *,
    586 			       const char *),
    587    unsigned int);
    588 
    589 /* Generic link hash table creation routine.  */
    590 extern struct bfd_link_hash_table *_bfd_generic_link_hash_table_create
    591   (bfd *);
    592 
    593 /* Generic link hash table destruction routine.  */
    594 extern void _bfd_generic_link_hash_table_free
    595   (struct bfd_link_hash_table *);
    596 
    597 /* Generic add symbol routine.  */
    598 extern bfd_boolean _bfd_generic_link_add_symbols
    599   (bfd *, struct bfd_link_info *);
    600 
    601 /* Generic add symbol routine.  This version is used by targets for
    602    which the linker must collect constructors and destructors by name,
    603    as the collect2 program does.  */
    604 extern bfd_boolean _bfd_generic_link_add_symbols_collect
    605   (bfd *, struct bfd_link_info *);
    606 
    607 /* Generic archive add symbol routine.  */
    608 extern bfd_boolean _bfd_generic_link_add_archive_symbols
    609   (bfd *, struct bfd_link_info *,
    610    bfd_boolean (*) (bfd *, struct bfd_link_info *, bfd_boolean *));
    611 
    612 /* Forward declaration to avoid prototype errors.  */
    613 typedef struct bfd_link_hash_entry _bfd_link_hash_entry;
    614 
    615 /* Generic routine to add a single symbol.  */
    616 extern bfd_boolean _bfd_generic_link_add_one_symbol
    617   (struct bfd_link_info *, bfd *, const char *name, flagword,
    618    asection *, bfd_vma, const char *, bfd_boolean copy,
    619    bfd_boolean constructor, struct bfd_link_hash_entry **);
    620 
    621 /* Generic routine to mark section as supplying symbols only.  */
    622 extern void _bfd_generic_link_just_syms
    623   (asection *, struct bfd_link_info *);
    624 
    625 /* Generic routine that does nothing.  */
    626 extern void _bfd_generic_copy_link_hash_symbol_type
    627   (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
    628 
    629 /* Generic link routine.  */
    630 extern bfd_boolean _bfd_generic_final_link
    631   (bfd *, struct bfd_link_info *);
    632 
    633 extern bfd_boolean _bfd_generic_link_split_section
    634   (bfd *, struct bfd_section *);
    635 
    636 extern bfd_boolean _bfd_generic_section_already_linked
    637   (bfd *, asection *, struct bfd_link_info *);
    638 
    639 /* Generic reloc_link_order processing routine.  */
    640 extern bfd_boolean _bfd_generic_reloc_link_order
    641   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);
    642 
    643 /* Default link order processing routine.  */
    644 extern bfd_boolean _bfd_default_link_order
    645   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);
    646 
    647 /* Count the number of reloc entries in a link order list.  */
    648 extern unsigned int _bfd_count_link_order_relocs
    649   (struct bfd_link_order *);
    650 
    651 /* Final link relocation routine.  */
    652 extern bfd_reloc_status_type _bfd_final_link_relocate
    653   (reloc_howto_type *, bfd *, asection *, bfd_byte *,
    654    bfd_vma, bfd_vma, bfd_vma);
    655 
    656 /* Relocate a particular location by a howto and a value.  */
    657 extern bfd_reloc_status_type _bfd_relocate_contents
    658   (reloc_howto_type *, bfd *, bfd_vma, bfd_byte *);
    659 
    660 /* Clear a given location using a given howto.  */
    661 extern void _bfd_clear_contents (reloc_howto_type *howto, bfd *input_bfd,
    662 				 asection *input_section, bfd_byte *location);
    663 
    664 /* Link stabs in sections in the first pass.  */
    665 
    666 extern bfd_boolean _bfd_link_section_stabs
    667   (bfd *, struct stab_info *, asection *, asection *, void **,
    668    bfd_size_type *);
    669 
    670 /* Eliminate stabs for discarded functions and symbols.  */
    671 extern bfd_boolean _bfd_discard_section_stabs
    672   (bfd *, asection *, void *, bfd_boolean (*) (bfd_vma, void *), void *);
    673 
    674 /* Write out the .stab section when linking stabs in sections.  */
    675 
    676 extern bfd_boolean _bfd_write_section_stabs
    677   (bfd *, struct stab_info *, asection *, void **, bfd_byte *);
    678 
    679 /* Write out the .stabstr string table when linking stabs in sections.  */
    680 
    681 extern bfd_boolean _bfd_write_stab_strings
    682   (bfd *, struct stab_info *);
    683 
    684 /* Find an offset within a .stab section when linking stabs in
    685    sections.  */
    686 
    687 extern bfd_vma _bfd_stab_section_offset
    688   (asection *, void *, bfd_vma);
    689 
    690 /* Register a SEC_MERGE section as a candidate for merging.  */
    691 
    692 extern bfd_boolean _bfd_add_merge_section
    693   (bfd *, void **, asection *, void **);
    694 
    695 /* Attempt to merge SEC_MERGE sections.  */
    696 
    697 extern bfd_boolean _bfd_merge_sections
    698   (bfd *, struct bfd_link_info *, void *, void (*) (bfd *, asection *));
    699 
    700 /* Write out a merged section.  */
    701 
    702 extern bfd_boolean _bfd_write_merged_section
    703   (bfd *, asection *, void *);
    704 
    705 /* Find an offset within a modified SEC_MERGE section.  */
    706 
    707 extern bfd_vma _bfd_merged_section_offset
    708   (bfd *, asection **, void *, bfd_vma);
    709 
    710 /* Create a string table.  */
    711 extern struct bfd_strtab_hash *_bfd_stringtab_init
    712   (void);
    713 
    714 /* Create an XCOFF .debug section style string table.  */
    715 extern struct bfd_strtab_hash *_bfd_xcoff_stringtab_init
    716   (void);
    717 
    718 /* Free a string table.  */
    719 extern void _bfd_stringtab_free
    720   (struct bfd_strtab_hash *);
    721 
    722 /* Get the size of a string table.  */
    723 extern bfd_size_type _bfd_stringtab_size
    724   (struct bfd_strtab_hash *);
    725 
    726 /* Add a string to a string table.  */
    727 extern bfd_size_type _bfd_stringtab_add
    728   (struct bfd_strtab_hash *, const char *, bfd_boolean hash, bfd_boolean copy);
    729 
    730 /* Write out a string table.  */
    731 extern bfd_boolean _bfd_stringtab_emit
    732   (bfd *, struct bfd_strtab_hash *);
    733 
    734 /* Check that endianness of input and output file match.  */
    735 extern bfd_boolean _bfd_generic_verify_endian_match
    736   (bfd *, bfd *);
    737 
    738 /* Macros to tell if bfds are read or write enabled.
    740 
    741    Note that bfds open for read may be scribbled into if the fd passed
    742    to bfd_fdopenr is actually open both for read and write
    743    simultaneously.  However an output bfd will never be open for
    744    read.  Therefore sometimes you want to check bfd_read_p or
    745    !bfd_read_p, and only sometimes bfd_write_p.
    746 */
    747 
    748 #define	bfd_read_p(abfd) \
    749   ((abfd)->direction == read_direction || (abfd)->direction == both_direction)
    750 #define	bfd_write_p(abfd) \
    751   ((abfd)->direction == write_direction || (abfd)->direction == both_direction)
    752 
    753 void bfd_assert
    754   (const char*,int);
    755 
    756 #define BFD_ASSERT(x) \
    757   do { if (!(x)) bfd_assert(__FILE__,__LINE__); } while (0)
    758 
    759 #define BFD_FAIL() \
    760   do { bfd_assert(__FILE__,__LINE__); } while (0)
    761 
    762 extern void _bfd_abort
    763   (const char *, int, const char *) ATTRIBUTE_NORETURN;
    764 
    765 /* if gcc >= 2.6, we can give a function name, too */
    766 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
    767 #define __PRETTY_FUNCTION__  ((char *) NULL)
    768 #endif
    769 
    770 #undef abort
    771 #define abort() _bfd_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
    772 
    773 /* Manipulate a system FILE but using BFD's "file_ptr", rather than
    774    the system "off_t" or "off64_t", as the offset.  */
    775 extern file_ptr real_ftell (FILE *file);
    776 extern int real_fseek (FILE *file, file_ptr offset, int whence);
    777 extern FILE *real_fopen (const char *filename, const char *modes);
    778 
    779 /* List of supported target vectors, and the default vector (if
    780    bfd_default_vector[0] is NULL, there is no default).  */
    781 extern const bfd_target * const *bfd_target_vector;
    782 extern const bfd_target *bfd_default_vector[];
    783 
    784 /* List of associated target vectors.  */
    785 extern const bfd_target * const *bfd_associated_vector;
    786 
    787 /* Functions shared by the ECOFF and MIPS ELF backends, which have no
    788    other common header files.  */
    789 
    790 #if defined(__STDC__) || defined(ALMOST_STDC)
    791 struct ecoff_find_line;
    792 #endif
    793 
    794 extern bfd_boolean _bfd_ecoff_locate_line
    795   (bfd *, asection *, bfd_vma, struct ecoff_debug_info * const,
    796    const struct ecoff_debug_swap * const, struct ecoff_find_line *,
    797    const char **, const char **, unsigned int *);
    798 extern bfd_boolean _bfd_ecoff_get_accumulated_pdr
    799   (void *, bfd_byte *);
    800 extern bfd_boolean _bfd_ecoff_get_accumulated_sym
    801   (void *, bfd_byte *);
    802 extern bfd_boolean _bfd_ecoff_get_accumulated_ss
    803   (void *, bfd_byte *);
    804 
    805 extern bfd_vma _bfd_get_gp_value
    806   (bfd *);
    807 extern void _bfd_set_gp_value
    808   (bfd *, bfd_vma);
    809 
    810 /* Function shared by the COFF and ELF SH backends, which have no
    811    other common header files.  */
    812 
    813 #ifndef _bfd_sh_align_load_span
    814 extern bfd_boolean _bfd_sh_align_load_span
    815   (bfd *, asection *, bfd_byte *,
    816    bfd_boolean (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
    817    void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bfd_boolean *);
    818 #endif
    819 
    820 /* This is the shape of the elements inside the already_linked hash
    821    table. It maps a name onto a list of already_linked elements with
    822    the same name.  */
    823 
    824 struct bfd_section_already_linked_hash_entry
    825 {
    826   struct bfd_hash_entry root;
    827   struct bfd_section_already_linked *entry;
    828 };
    829 
    830 struct bfd_section_already_linked
    831 {
    832   struct bfd_section_already_linked *next;
    833   asection *sec;
    834 };
    835 
    836 extern struct bfd_section_already_linked_hash_entry *
    837   bfd_section_already_linked_table_lookup (const char *);
    838 extern bfd_boolean bfd_section_already_linked_table_insert
    839   (struct bfd_section_already_linked_hash_entry *, asection *);
    840 extern void bfd_section_already_linked_table_traverse
    841   (bfd_boolean (*) (struct bfd_section_already_linked_hash_entry *,
    842 		    void *), void *);
    843 
    844 extern bfd_vma read_unsigned_leb128 (bfd *, bfd_byte *, unsigned int *);
    845 extern bfd_signed_vma read_signed_leb128 (bfd *, bfd_byte *, unsigned int *);
    846