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