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