bfd/
[external/binutils.git] / bfd / bfd-in2.h
1 /* DO NOT EDIT!  -*- buffer-read-only: t -*-  This file is automatically 
2    generated from "bfd-in.h", "init.c", "opncls.c", "libbfd.c", 
3    "section.c", "archures.c", "reloc.c", "syms.c", "bfd.c", "archive.c", 
4    "corefile.c", "targets.c" and "format.c".
5    Run "make headers" in your build bfd/ to regenerate.  */
6
7 /* Main header file for the bfd library -- portable access to object files.
8    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
9    2000, 2001
10    Free Software Foundation, Inc.
11    Contributed by Cygnus Support.
12
13 This file is part of BFD, the Binary File Descriptor library.
14
15 This program is free software; you can redistribute it and/or modify
16 it under the terms of the GNU General Public License as published by
17 the Free Software Foundation; either version 2 of the License, or
18 (at your option) any later version.
19
20 This program is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 GNU General Public License for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with this program; if not, write to the Free Software
27 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
28
29 #ifndef __BFD_H_SEEN__
30 #define __BFD_H_SEEN__
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 #include "ansidecl.h"
37
38 #define BFD_VERSION  "@VERSION@"
39
40 /* The word size used by BFD on the host.  This may be 64 with a 32
41    bit target if the host is 64 bit, or if other 64 bit targets have
42    been selected with --enable-targets, or if --enable-64-bit-bfd.  */
43 #define BFD_ARCH_SIZE @wordsize@
44
45 /* The word size of the default bfd target.  */
46 #define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@
47
48 #define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@
49 #if @BFD_HOST_64_BIT_DEFINED@
50 #define BFD_HOST_64_BIT @BFD_HOST_64_BIT@
51 #define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@
52 #endif
53
54 #if BFD_ARCH_SIZE >= 64
55 #define BFD64
56 #endif
57
58 #ifndef INLINE
59 #if __GNUC__ >= 2
60 #define INLINE __inline__
61 #else
62 #define INLINE
63 #endif
64 #endif
65
66 /* forward declaration */
67 typedef struct _bfd bfd;
68
69 /* To squelch erroneous compiler warnings ("illegal pointer
70    combination") from the SVR3 compiler, we would like to typedef
71    boolean to int (it doesn't like functions which return boolean.
72    Making sure they are never implicitly declared to return int
73    doesn't seem to help).  But this file is not configured based on
74    the host.  */
75 /* General rules: functions which are boolean return true on success
76    and false on failure (unless they're a predicate).   -- bfd.doc */
77 /* I'm sure this is going to break something and someone is going to
78    force me to change it.  */
79 /* typedef enum boolean {false, true} boolean; */
80 /* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h>  -fnf */
81 /* It gets worse if the host also defines a true/false enum... -sts */
82 /* And even worse if your compiler has built-in boolean types... -law */
83 #if defined (__GNUG__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6))
84 #define TRUE_FALSE_ALREADY_DEFINED
85 #endif
86 #ifdef MPW
87 /* Pre-emptive strike - get the file with the enum.  */
88 #include <Types.h>
89 #define TRUE_FALSE_ALREADY_DEFINED
90 #endif /* MPW */
91 #ifndef TRUE_FALSE_ALREADY_DEFINED
92 typedef enum bfd_boolean {false, true} boolean;
93 #define BFD_TRUE_FALSE
94 #else
95 /* Use enum names that will appear nowhere else.  */
96 typedef enum bfd_boolean {bfd_fffalse, bfd_tttrue} boolean;
97 #endif
98
99 /* Support for different sizes of target format ints and addresses.
100    If the type `long' is at least 64 bits, BFD_HOST_64BIT_LONG will be
101    set to 1 above.  Otherwise, if gcc is being used, this code will
102    use gcc's "long long" type.  Otherwise, BFD_HOST_64_BIT must be
103    defined above.  */
104
105 #ifndef BFD_HOST_64_BIT
106 # if BFD_HOST_64BIT_LONG
107 #  define BFD_HOST_64_BIT long
108 #  define BFD_HOST_U_64_BIT unsigned long
109 # else
110 #  ifdef __GNUC__
111 #   if __GNUC__ >= 2
112 #    define BFD_HOST_64_BIT long long
113 #    define BFD_HOST_U_64_BIT unsigned long long
114 #   endif /* __GNUC__ >= 2 */
115 #  endif /* ! defined (__GNUC__) */
116 # endif /* ! BFD_HOST_64BIT_LONG */
117 #endif /* ! defined (BFD_HOST_64_BIT) */
118
119 #ifdef BFD64
120
121 #ifndef BFD_HOST_64_BIT
122  #error No 64 bit integer type available
123 #endif /* ! defined (BFD_HOST_64_BIT) */
124
125 typedef BFD_HOST_U_64_BIT bfd_vma;
126 typedef BFD_HOST_64_BIT bfd_signed_vma;
127 typedef BFD_HOST_U_64_BIT bfd_size_type;
128 typedef BFD_HOST_U_64_BIT symvalue;
129
130 #ifndef fprintf_vma
131 #if BFD_HOST_64BIT_LONG
132 #define sprintf_vma(s,x) sprintf (s, "%016lx", x)
133 #define fprintf_vma(f,x) fprintf (f, "%016lx", x)
134 #else
135 #define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff)))
136 #define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff))
137 #define fprintf_vma(s,x) \
138   fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x))
139 #define sprintf_vma(s,x) \
140   sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x))
141 #endif
142 #endif
143
144 #else /* not BFD64  */
145
146 /* Represent a target address.  Also used as a generic unsigned type
147    which is guaranteed to be big enough to hold any arithmetic types
148    we need to deal with.  */
149 typedef unsigned long bfd_vma;
150
151 /* A generic signed type which is guaranteed to be big enough to hold any
152    arithmetic types we need to deal with.  Can be assumed to be compatible
153    with bfd_vma in the same way that signed and unsigned ints are compatible
154    (as parameters, in assignment, etc).  */
155 typedef long bfd_signed_vma;
156
157 typedef unsigned long symvalue;
158 typedef unsigned long bfd_size_type;
159
160 /* Print a bfd_vma x on stream s.  */
161 #define fprintf_vma(s,x) fprintf (s, "%08lx", x)
162 #define sprintf_vma(s,x) sprintf (s, "%08lx", x)
163
164 #endif /* not BFD64  */
165
166 /* A pointer to a position in a file.  */
167 /* FIXME:  This should be using off_t from <sys/types.h>.
168    For now, try to avoid breaking stuff by not including <sys/types.h> here.
169    This will break on systems with 64-bit file offsets (e.g. 4.4BSD).
170    Probably the best long-term answer is to avoid using file_ptr AND off_t
171    in this header file, and to handle this in the BFD implementation
172    rather than in its interface.  */
173 /* typedef off_t        file_ptr; */
174 typedef bfd_signed_vma file_ptr;
175 typedef bfd_vma ufile_ptr;
176
177 extern void bfd_sprintf_vma PARAMS ((bfd *, char *, bfd_vma));
178 extern void bfd_fprintf_vma PARAMS ((bfd *, PTR, bfd_vma));
179
180 #define printf_vma(x) fprintf_vma(stdout,x)
181 #define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x)
182
183 typedef unsigned int flagword;  /* 32 bits of flags */
184 typedef unsigned char bfd_byte;
185 \f
186 /** File formats */
187
188 typedef enum bfd_format {
189               bfd_unknown = 0,  /* file format is unknown */
190               bfd_object,       /* linker/assember/compiler output */
191               bfd_archive,      /* object archive file */
192               bfd_core,         /* core dump */
193               bfd_type_end}     /* marks the end; don't use it! */
194          bfd_format;
195
196 /* Values that may appear in the flags field of a BFD.  These also
197    appear in the object_flags field of the bfd_target structure, where
198    they indicate the set of flags used by that backend (not all flags
199    are meaningful for all object file formats) (FIXME: at the moment,
200    the object_flags values have mostly just been copied from backend
201    to another, and are not necessarily correct).  */
202
203 /* No flags.  */
204 #define BFD_NO_FLAGS    0x00
205
206 /* BFD contains relocation entries.  */
207 #define HAS_RELOC       0x01
208
209 /* BFD is directly executable.  */
210 #define EXEC_P          0x02
211
212 /* BFD has line number information (basically used for F_LNNO in a
213    COFF header).  */
214 #define HAS_LINENO      0x04
215
216 /* BFD has debugging information.  */
217 #define HAS_DEBUG       0x08
218
219 /* BFD has symbols.  */
220 #define HAS_SYMS        0x10
221
222 /* BFD has local symbols (basically used for F_LSYMS in a COFF
223    header).  */
224 #define HAS_LOCALS      0x20
225
226 /* BFD is a dynamic object.  */
227 #define DYNAMIC         0x40
228
229 /* Text section is write protected (if D_PAGED is not set, this is
230    like an a.out NMAGIC file) (the linker sets this by default, but
231    clears it for -r or -N).  */
232 #define WP_TEXT         0x80
233
234 /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
235    linker sets this by default, but clears it for -r or -n or -N).  */
236 #define D_PAGED         0x100
237
238 /* BFD is relaxable (this means that bfd_relax_section may be able to
239    do something) (sometimes bfd_relax_section can do something even if
240    this is not set).  */
241 #define BFD_IS_RELAXABLE 0x200
242
243 /* This may be set before writing out a BFD to request using a
244    traditional format.  For example, this is used to request that when
245    writing out an a.out object the symbols not be hashed to eliminate
246    duplicates.  */
247 #define BFD_TRADITIONAL_FORMAT 0x400
248
249 /* This flag indicates that the BFD contents are actually cached in
250    memory.  If this is set, iostream points to a bfd_in_memory struct.  */
251 #define BFD_IN_MEMORY 0x800
252 \f
253 /* symbols and relocation */
254
255 /* A count of carsyms (canonical archive symbols).  */
256 typedef unsigned long symindex;
257
258 /* How to perform a relocation.  */
259 typedef const struct reloc_howto_struct reloc_howto_type;
260
261 #define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
262
263 /* General purpose part of a symbol X;
264    target specific parts are in libcoff.h, libaout.h, etc.  */
265
266 #define bfd_get_section(x) ((x)->section)
267 #define bfd_get_output_section(x) ((x)->section->output_section)
268 #define bfd_set_section(x,y) ((x)->section) = (y)
269 #define bfd_asymbol_base(x) ((x)->section->vma)
270 #define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value)
271 #define bfd_asymbol_name(x) ((x)->name)
272 /*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/
273 #define bfd_asymbol_bfd(x) ((x)->the_bfd)
274 #define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour)
275
276 /* A canonical archive symbol.  */
277 /* This is a type pun with struct ranlib on purpose! */
278 typedef struct carsym {
279   char *name;
280   file_ptr file_offset;         /* look here to find the file */
281 } carsym;                       /* to make these you call a carsymogen */
282
283 /* Used in generating armaps (archive tables of contents).
284    Perhaps just a forward definition would do? */
285 struct orl {                    /* output ranlib */
286   char **name;                  /* symbol name */
287   union {
288     file_ptr pos;
289     bfd *abfd;
290   } u;                          /* bfd* or file position */
291   int namidx;                   /* index into string table */
292 };
293 \f
294 /* Linenumber stuff */
295 typedef struct lineno_cache_entry {
296   unsigned int line_number;     /* Linenumber from start of function*/
297   union {
298     struct symbol_cache_entry *sym; /* Function name */
299     bfd_vma offset;         /* Offset into section */
300   } u;
301 } alent;
302 \f
303 /* object and core file sections */
304
305 #define align_power(addr, align)        \
306         ( ((addr) + ((1<<(align))-1)) & (-1 << (align)))
307
308 typedef struct sec *sec_ptr;
309
310 #define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0)
311 #define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0)
312 #define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0)
313 #define bfd_section_name(bfd, ptr) ((ptr)->name)
314 #define bfd_section_size(bfd, ptr) (bfd_get_section_size_before_reloc(ptr))
315 #define bfd_section_vma(bfd, ptr) ((ptr)->vma)
316 #define bfd_section_lma(bfd, ptr) ((ptr)->lma)
317 #define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
318 #define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0)
319 #define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata)
320
321 #define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
322
323 #define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma= (val)), ((ptr)->user_set_vma = (boolean)true), true)
324 #define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),true)
325 #define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),true)
326
327 typedef struct stat stat_type;
328 \f
329 typedef enum bfd_print_symbol
330 {
331   bfd_print_symbol_name,
332   bfd_print_symbol_more,
333   bfd_print_symbol_all
334 } bfd_print_symbol_type;
335
336 /* Information about a symbol that nm needs.  */
337
338 typedef struct _symbol_info
339 {
340   symvalue value;
341   char type;
342   const char *name;            /* Symbol name.  */
343   unsigned char stab_type;     /* Stab type.  */
344   char stab_other;             /* Stab other.  */
345   short stab_desc;             /* Stab desc.  */
346   const char *stab_name;       /* String for stab type.  */
347 } symbol_info;
348
349 /* Get the name of a stabs type code.  */
350
351 extern const char *bfd_get_stab_name PARAMS ((int));
352 \f
353 /* Hash table routines.  There is no way to free up a hash table.  */
354
355 /* An element in the hash table.  Most uses will actually use a larger
356    structure, and an instance of this will be the first field.  */
357
358 struct bfd_hash_entry
359 {
360   /* Next entry for this hash code.  */
361   struct bfd_hash_entry *next;
362   /* String being hashed.  */
363   const char *string;
364   /* Hash code.  This is the full hash code, not the index into the
365      table.  */
366   unsigned long hash;
367 };
368
369 /* A hash table.  */
370
371 struct bfd_hash_table
372 {
373   /* The hash array.  */
374   struct bfd_hash_entry **table;
375   /* The number of slots in the hash table.  */
376   unsigned int size;
377   /* A function used to create new elements in the hash table.  The
378      first entry is itself a pointer to an element.  When this
379      function is first invoked, this pointer will be NULL.  However,
380      having the pointer permits a hierarchy of method functions to be
381      built each of which calls the function in the superclass.  Thus
382      each function should be written to allocate a new block of memory
383      only if the argument is NULL.  */
384   struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
385                                              struct bfd_hash_table *,
386                                              const char *));
387    /* An objalloc for this hash table.  This is a struct objalloc *,
388      but we use PTR to avoid requiring the inclusion of objalloc.h.  */
389   PTR memory;
390 };
391
392 /* Initialize a hash table.  */
393 extern boolean bfd_hash_table_init
394   PARAMS ((struct bfd_hash_table *,
395            struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
396                                        struct bfd_hash_table *,
397                                        const char *)));
398
399 /* Initialize a hash table specifying a size.  */
400 extern boolean bfd_hash_table_init_n
401   PARAMS ((struct bfd_hash_table *,
402            struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
403                                        struct bfd_hash_table *,
404                                        const char *),
405            unsigned int size));
406
407 /* Free up a hash table.  */
408 extern void bfd_hash_table_free PARAMS ((struct bfd_hash_table *));
409
410 /* Look up a string in a hash table.  If CREATE is true, a new entry
411    will be created for this string if one does not already exist.  The
412    COPY argument must be true if this routine should copy the string
413    into newly allocated memory when adding an entry.  */
414 extern struct bfd_hash_entry *bfd_hash_lookup
415   PARAMS ((struct bfd_hash_table *, const char *, boolean create,
416            boolean copy));
417
418 /* Replace an entry in a hash table.  */
419 extern void bfd_hash_replace
420   PARAMS ((struct bfd_hash_table *, struct bfd_hash_entry *old,
421            struct bfd_hash_entry *nw));
422
423 /* Base method for creating a hash table entry.  */
424 extern struct bfd_hash_entry *bfd_hash_newfunc
425   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
426            const char *));
427
428 /* Grab some space for a hash table entry.  */
429 extern PTR bfd_hash_allocate PARAMS ((struct bfd_hash_table *,
430                                       unsigned int));
431
432 /* Traverse a hash table in a random order, calling a function on each
433    element.  If the function returns false, the traversal stops.  The
434    INFO argument is passed to the function.  */
435 extern void bfd_hash_traverse PARAMS ((struct bfd_hash_table *,
436                                        boolean (*) (struct bfd_hash_entry *,
437                                                     PTR),
438                                        PTR info));
439 \f
440 /* Semi-portable string concatenation in cpp.
441    The CAT4 hack is to avoid a problem with some strict ANSI C preprocessors.
442    The problem is, "32_" is not a valid preprocessing token, and we don't
443    want extra underscores (e.g., "nlm_32_").  The XCAT2 macro will cause the
444    inner CAT macros to be evaluated first, producing still-valid pp-tokens.
445    Then the final concatenation can be done.  (Sigh.)  */
446 #ifndef CAT
447 #ifdef SABER
448 #define CAT(a,b)        a##b
449 #define CAT3(a,b,c)     a##b##c
450 #define CAT4(a,b,c,d)   a##b##c##d
451 #else
452 #if defined(__STDC__) || defined(ALMOST_STDC)
453 #define CAT(a,b) a##b
454 #define CAT3(a,b,c) a##b##c
455 #define XCAT2(a,b)      CAT(a,b)
456 #define CAT4(a,b,c,d)   XCAT2(CAT(a,b),CAT(c,d))
457 #else
458 #define CAT(a,b) a/**/b
459 #define CAT3(a,b,c) a/**/b/**/c
460 #define CAT4(a,b,c,d)   a/**/b/**/c/**/d
461 #endif
462 #endif
463 #endif
464
465 #define COFF_SWAP_TABLE (PTR) &bfd_coff_std_swap_table
466 \f
467 /* User program access to BFD facilities */
468
469 /* Direct I/O routines, for programs which know more about the object
470    file than BFD does.  Use higher level routines if possible.  */
471
472 extern bfd_size_type bfd_bread PARAMS ((PTR, bfd_size_type, bfd *));
473 extern bfd_size_type bfd_bwrite PARAMS ((const PTR, bfd_size_type, bfd *));
474 extern int bfd_seek PARAMS ((bfd *, file_ptr, int));
475 extern ufile_ptr bfd_tell PARAMS ((bfd *));
476 extern int bfd_flush PARAMS ((bfd *));
477 extern int bfd_stat PARAMS ((bfd *, struct stat *));
478
479 /* Deprecated old routines.  */
480 #if __GNUC__
481 #define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)                            \
482   (warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__),      \
483    bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
484 #define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)                           \
485   (warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__),     \
486    bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
487 #else
488 #define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)                            \
489   (warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \
490    bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
491 #define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)                           \
492   (warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\
493    bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
494 #endif
495 extern void warn_deprecated
496   PARAMS ((const char *, const char *, int, const char *));
497
498 /* Cast from const char * to char * so that caller can assign to
499    a char * without a warning.  */
500 #define bfd_get_filename(abfd) ((char *) (abfd)->filename)
501 #define bfd_get_cacheable(abfd) ((abfd)->cacheable)
502 #define bfd_get_format(abfd) ((abfd)->format)
503 #define bfd_get_target(abfd) ((abfd)->xvec->name)
504 #define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
505 #define bfd_family_coff(abfd) \
506   (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \
507    bfd_get_flavour (abfd) == bfd_target_xcoff_flavour)
508 #define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG)
509 #define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE)
510 #define bfd_header_big_endian(abfd) \
511   ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG)
512 #define bfd_header_little_endian(abfd) \
513   ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
514 #define bfd_get_file_flags(abfd) ((abfd)->flags)
515 #define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
516 #define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
517 #define bfd_my_archive(abfd) ((abfd)->my_archive)
518 #define bfd_has_map(abfd) ((abfd)->has_armap)
519
520 #define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
521 #define bfd_usrdata(abfd) ((abfd)->usrdata)
522
523 #define bfd_get_start_address(abfd) ((abfd)->start_address)
524 #define bfd_get_symcount(abfd) ((abfd)->symcount)
525 #define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
526 #define bfd_count_sections(abfd) ((abfd)->section_count)
527
528 #define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
529
530 #define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean) (bool)), true)
531
532 extern boolean bfd_cache_close PARAMS ((bfd *abfd));
533 /* NB: This declaration should match the autogenerated one in libbfd.h.  */
534
535 extern boolean bfd_record_phdr
536   PARAMS ((bfd *, unsigned long, boolean, flagword, boolean, bfd_vma,
537            boolean, boolean, unsigned int, struct sec **));
538
539 /* Byte swapping routines.  */
540
541 bfd_vma         bfd_getb64         PARAMS ((const unsigned char *));
542 bfd_vma         bfd_getl64         PARAMS ((const unsigned char *));
543 bfd_signed_vma  bfd_getb_signed_64 PARAMS ((const unsigned char *));
544 bfd_signed_vma  bfd_getl_signed_64 PARAMS ((const unsigned char *));
545 bfd_vma         bfd_getb32         PARAMS ((const unsigned char *));
546 bfd_vma         bfd_getl32         PARAMS ((const unsigned char *));
547 bfd_signed_vma  bfd_getb_signed_32 PARAMS ((const unsigned char *));
548 bfd_signed_vma  bfd_getl_signed_32 PARAMS ((const unsigned char *));
549 bfd_vma         bfd_getb16         PARAMS ((const unsigned char *));
550 bfd_vma         bfd_getl16         PARAMS ((const unsigned char *));
551 bfd_signed_vma  bfd_getb_signed_16 PARAMS ((const unsigned char *));
552 bfd_signed_vma  bfd_getl_signed_16 PARAMS ((const unsigned char *));
553 void            bfd_putb64         PARAMS ((bfd_vma, unsigned char *));
554 void            bfd_putl64         PARAMS ((bfd_vma, unsigned char *));
555 void            bfd_putb32         PARAMS ((bfd_vma, unsigned char *));
556 void            bfd_putl32         PARAMS ((bfd_vma, unsigned char *));
557 void            bfd_putb16         PARAMS ((bfd_vma, unsigned char *));
558 void            bfd_putl16         PARAMS ((bfd_vma, unsigned char *));
559
560 /* Byte swapping routines which take size and endiannes as arguments.  */
561
562 bfd_vma         bfd_get_bits       PARAMS ((bfd_byte *, int, boolean));
563 void            bfd_put_bits       PARAMS ((bfd_vma, bfd_byte *, int, boolean));
564 \f
565 /* Externally visible ECOFF routines.  */
566
567 #if defined(__STDC__) || defined(ALMOST_STDC)
568 struct ecoff_debug_info;
569 struct ecoff_debug_swap;
570 struct ecoff_extr;
571 struct symbol_cache_entry;
572 struct bfd_link_info;
573 struct bfd_link_hash_entry;
574 struct bfd_elf_version_tree;
575 #endif
576 extern bfd_vma bfd_ecoff_get_gp_value PARAMS ((bfd * abfd));
577 extern boolean bfd_ecoff_set_gp_value PARAMS ((bfd *abfd, bfd_vma gp_value));
578 extern boolean bfd_ecoff_set_regmasks
579   PARAMS ((bfd *abfd, unsigned long gprmask, unsigned long fprmask,
580            unsigned long *cprmask));
581 extern PTR bfd_ecoff_debug_init
582   PARAMS ((bfd *output_bfd, struct ecoff_debug_info *output_debug,
583            const struct ecoff_debug_swap *output_swap,
584            struct bfd_link_info *));
585 extern void bfd_ecoff_debug_free
586   PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
587            const struct ecoff_debug_swap *output_swap,
588            struct bfd_link_info *));
589 extern boolean bfd_ecoff_debug_accumulate
590   PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
591            const struct ecoff_debug_swap *output_swap,
592            bfd *input_bfd, struct ecoff_debug_info *input_debug,
593            const struct ecoff_debug_swap *input_swap,
594            struct bfd_link_info *));
595 extern boolean bfd_ecoff_debug_accumulate_other
596   PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
597            const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
598            struct bfd_link_info *));
599 extern boolean bfd_ecoff_debug_externals
600   PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
601            const struct ecoff_debug_swap *swap,
602            boolean relocateable,
603            boolean (*get_extr) (struct symbol_cache_entry *,
604                                 struct ecoff_extr *),
605            void (*set_index) (struct symbol_cache_entry *,
606                               bfd_size_type)));
607 extern boolean bfd_ecoff_debug_one_external
608   PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
609            const struct ecoff_debug_swap *swap,
610            const char *name, struct ecoff_extr *esym));
611 extern bfd_size_type bfd_ecoff_debug_size
612   PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
613            const struct ecoff_debug_swap *swap));
614 extern boolean bfd_ecoff_write_debug
615   PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
616            const struct ecoff_debug_swap *swap, file_ptr where));
617 extern boolean bfd_ecoff_write_accumulated_debug
618   PARAMS ((PTR handle, bfd *abfd, struct ecoff_debug_info *debug,
619            const struct ecoff_debug_swap *swap,
620            struct bfd_link_info *info, file_ptr where));
621 extern boolean bfd_mips_ecoff_create_embedded_relocs
622   PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
623            char **));
624
625 /* Externally visible ELF routines.  */
626
627 struct bfd_link_needed_list
628 {
629   struct bfd_link_needed_list *next;
630   bfd *by;
631   const char *name;
632 };
633
634 extern boolean bfd_elf32_record_link_assignment
635   PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean));
636 extern boolean bfd_elf64_record_link_assignment
637   PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean));
638 extern struct bfd_link_needed_list *bfd_elf_get_needed_list
639   PARAMS ((bfd *, struct bfd_link_info *));
640 extern boolean bfd_elf_get_bfd_needed_list
641   PARAMS ((bfd *, struct bfd_link_needed_list **));
642 extern boolean bfd_elf32_size_dynamic_sections
643   PARAMS ((bfd *, const char *, const char *, const char *,
644            const char * const *, struct bfd_link_info *, struct sec **,
645            struct bfd_elf_version_tree *));
646 extern boolean bfd_elf64_size_dynamic_sections
647   PARAMS ((bfd *, const char *, const char *, const char *,
648            const char * const *, struct bfd_link_info *, struct sec **,
649            struct bfd_elf_version_tree *));
650 extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
651 extern void bfd_elf_set_dt_needed_soname PARAMS ((bfd *, const char *));
652 extern const char *bfd_elf_get_dt_soname PARAMS ((bfd *));
653 extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
654   PARAMS ((bfd *, struct bfd_link_info *));
655
656 /* Return an upper bound on the number of bytes required to store a
657    copy of ABFD's program header table entries.  Return -1 if an error
658    occurs; bfd_get_error will return an appropriate code.  */
659 extern long bfd_get_elf_phdr_upper_bound PARAMS ((bfd *abfd));
660
661 /* Copy ABFD's program header table entries to *PHDRS.  The entries
662    will be stored as an array of Elf_Internal_Phdr structures, as
663    defined in include/elf/internal.h.  To find out how large the
664    buffer needs to be, call bfd_get_elf_phdr_upper_bound.
665
666    Return the number of program header table entries read, or -1 if an
667    error occurs; bfd_get_error will return an appropriate code.  */
668 extern int bfd_get_elf_phdrs PARAMS ((bfd *abfd, void *phdrs));
669
670 /* Return the arch_size field of an elf bfd, or -1 if not elf.  */
671 extern int bfd_get_arch_size PARAMS ((bfd *));
672
673 /* Return true if address "naturally" sign extends, or -1 if not elf.  */
674 extern int bfd_get_sign_extend_vma PARAMS ((bfd *));
675
676 extern boolean bfd_m68k_elf32_create_embedded_relocs
677   PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
678            char **));
679
680 /* SunOS shared library support routines for the linker.  */
681
682 extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
683   PARAMS ((bfd *, struct bfd_link_info *));
684 extern boolean bfd_sunos_record_link_assignment
685   PARAMS ((bfd *, struct bfd_link_info *, const char *));
686 extern boolean bfd_sunos_size_dynamic_sections
687   PARAMS ((bfd *, struct bfd_link_info *, struct sec **, struct sec **,
688            struct sec **));
689
690 /* Linux shared library support routines for the linker.  */
691
692 extern boolean bfd_i386linux_size_dynamic_sections
693   PARAMS ((bfd *, struct bfd_link_info *));
694 extern boolean bfd_m68klinux_size_dynamic_sections
695   PARAMS ((bfd *, struct bfd_link_info *));
696 extern boolean bfd_sparclinux_size_dynamic_sections
697   PARAMS ((bfd *, struct bfd_link_info *));
698
699 /* mmap hacks */
700
701 struct _bfd_window_internal;
702 typedef struct _bfd_window_internal bfd_window_internal;
703
704 typedef struct _bfd_window {
705   /* What the user asked for.  */
706   PTR data;
707   bfd_size_type size;
708   /* The actual window used by BFD.  Small user-requested read-only
709      regions sharing a page may share a single window into the object
710      file.  Read-write versions shouldn't until I've fixed things to
711      keep track of which portions have been claimed by the
712      application; don't want to give the same region back when the
713      application wants two writable copies!  */
714   struct _bfd_window_internal *i;
715 } bfd_window;
716
717 extern void bfd_init_window PARAMS ((bfd_window *));
718 extern void bfd_free_window PARAMS ((bfd_window *));
719 extern boolean bfd_get_file_window
720   PARAMS ((bfd *, file_ptr, bfd_size_type, bfd_window *, boolean));
721
722 /* XCOFF support routines for the linker.  */
723
724 extern boolean bfd_xcoff_link_record_set
725   PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *,
726            bfd_size_type));
727 extern boolean bfd_xcoff_import_symbol
728   PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *,
729            bfd_vma, const char *, const char *, const char *, unsigned int));
730 extern boolean bfd_xcoff_export_symbol
731   PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *));
732 extern boolean bfd_xcoff_link_count_reloc
733   PARAMS ((bfd *, struct bfd_link_info *, const char *));
734 extern boolean bfd_xcoff_record_link_assignment
735   PARAMS ((bfd *, struct bfd_link_info *, const char *));
736 extern boolean bfd_xcoff_size_dynamic_sections
737   PARAMS ((bfd *, struct bfd_link_info *, const char *, const char *,
738            unsigned long, unsigned long, unsigned long, boolean,
739            int, boolean, boolean, struct sec **));
740
741 /* Externally visible COFF routines.  */
742
743 #if defined(__STDC__) || defined(ALMOST_STDC)
744 struct internal_syment;
745 union internal_auxent;
746 #endif
747
748 extern boolean bfd_coff_get_syment
749   PARAMS ((bfd *, struct symbol_cache_entry *, struct internal_syment *));
750
751 extern boolean bfd_coff_get_auxent
752   PARAMS ((bfd *, struct symbol_cache_entry *, int, union internal_auxent *));
753
754 extern boolean bfd_coff_set_symbol_class
755   PARAMS ((bfd *, struct symbol_cache_entry *, unsigned int));
756
757 extern boolean bfd_m68k_coff_create_embedded_relocs
758   PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
759            char **));
760
761 /* ARM Interworking support.  Called from linker.  */
762 extern boolean bfd_arm_allocate_interworking_sections
763   PARAMS ((struct bfd_link_info *));
764
765 extern boolean bfd_arm_process_before_allocation
766   PARAMS ((bfd *, struct bfd_link_info *, int));
767
768 extern boolean bfd_arm_get_bfd_for_interworking
769   PARAMS ((bfd *, struct bfd_link_info *));
770
771 /* PE ARM Interworking support.  Called from linker.  */
772 extern boolean bfd_arm_pe_allocate_interworking_sections
773   PARAMS ((struct bfd_link_info *));
774
775 extern boolean bfd_arm_pe_process_before_allocation
776   PARAMS ((bfd *, struct bfd_link_info *, int));
777
778 extern boolean bfd_arm_pe_get_bfd_for_interworking
779   PARAMS ((bfd *, struct bfd_link_info *));
780
781 /* ELF ARM Interworking support.  Called from linker.  */
782 extern boolean bfd_elf32_arm_allocate_interworking_sections
783   PARAMS ((struct bfd_link_info *));
784
785 extern boolean bfd_elf32_arm_process_before_allocation
786   PARAMS ((bfd *, struct bfd_link_info *, int));
787
788 extern boolean bfd_elf32_arm_get_bfd_for_interworking
789   PARAMS ((bfd *, struct bfd_link_info *));
790
791 /* TI COFF load page support.  */
792 extern void bfd_ticoff_set_section_load_page
793   PARAMS ((struct sec *, int));
794
795 extern int bfd_ticoff_get_section_load_page
796   PARAMS ((struct sec *));
797
798 /* And more from the source.  */
799 void
800 bfd_init PARAMS ((void));
801
802 bfd *
803 bfd_openr PARAMS ((const char *filename, const char *target));
804
805 bfd *
806 bfd_fdopenr PARAMS ((const char *filename, const char *target, int fd));
807
808 bfd *
809 bfd_openstreamr PARAMS ((const char *, const char *, PTR));
810
811 bfd *
812 bfd_openw PARAMS ((const char *filename, const char *target));
813
814 boolean
815 bfd_close PARAMS ((bfd *abfd));
816
817 boolean
818 bfd_close_all_done PARAMS ((bfd *));
819
820 bfd *
821 bfd_create PARAMS ((const char *filename, bfd *templ));
822
823 boolean
824 bfd_make_writable PARAMS ((bfd *abfd));
825
826 boolean
827 bfd_make_readable PARAMS ((bfd *abfd));
828
829
830 /* Byte swapping macros for user section data.  */
831
832 #define bfd_put_8(abfd, val, ptr) \
833                 ((void) (*((unsigned char *) (ptr)) = (unsigned char) (val)))
834 #define bfd_put_signed_8 \
835                bfd_put_8
836 #define bfd_get_8(abfd, ptr) \
837                 (*(unsigned char *) (ptr) & 0xff)
838 #define bfd_get_signed_8(abfd, ptr) \
839                (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
840
841 #define bfd_put_16(abfd, val, ptr) \
842                 BFD_SEND(abfd, bfd_putx16, ((val),(ptr)))
843 #define bfd_put_signed_16 \
844                 bfd_put_16
845 #define bfd_get_16(abfd, ptr) \
846                 BFD_SEND(abfd, bfd_getx16, (ptr))
847 #define bfd_get_signed_16(abfd, ptr) \
848                 BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
849
850 #define bfd_put_32(abfd, val, ptr) \
851                 BFD_SEND(abfd, bfd_putx32, ((val),(ptr)))
852 #define bfd_put_signed_32 \
853                 bfd_put_32
854 #define bfd_get_32(abfd, ptr) \
855                 BFD_SEND(abfd, bfd_getx32, (ptr))
856 #define bfd_get_signed_32(abfd, ptr) \
857                 BFD_SEND(abfd, bfd_getx_signed_32, (ptr))
858
859 #define bfd_put_64(abfd, val, ptr) \
860                 BFD_SEND(abfd, bfd_putx64, ((val), (ptr)))
861 #define bfd_put_signed_64 \
862                 bfd_put_64
863 #define bfd_get_64(abfd, ptr) \
864                 BFD_SEND(abfd, bfd_getx64, (ptr))
865 #define bfd_get_signed_64(abfd, ptr) \
866                 BFD_SEND(abfd, bfd_getx_signed_64, (ptr))
867
868 #define bfd_get(bits, abfd, ptr)                               \
869                 ( (bits) ==  8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
870                 : (bits) == 16 ? bfd_get_16 (abfd, ptr)        \
871                 : (bits) == 32 ? bfd_get_32 (abfd, ptr)        \
872                 : (bits) == 64 ? bfd_get_64 (abfd, ptr)        \
873                 : (abort (), (bfd_vma) - 1))
874
875 #define bfd_put(bits, abfd, val, ptr)                          \
876                 ( (bits) ==  8 ? bfd_put_8  (abfd, val, ptr)   \
877                 : (bits) == 16 ? bfd_put_16 (abfd, val, ptr)   \
878                 : (bits) == 32 ? bfd_put_32 (abfd, val, ptr)   \
879                 : (bits) == 64 ? bfd_put_64 (abfd, val, ptr)   \
880                 : (abort (), (void) 0))
881
882
883 /* Byte swapping macros for file header data.  */
884
885 #define bfd_h_put_8(abfd, val, ptr) \
886   bfd_put_8 (abfd, val, ptr)
887 #define bfd_h_put_signed_8(abfd, val, ptr) \
888   bfd_put_8 (abfd, val, ptr)
889 #define bfd_h_get_8(abfd, ptr) \
890   bfd_get_8 (abfd, ptr)
891 #define bfd_h_get_signed_8(abfd, ptr) \
892   bfd_get_signed_8 (abfd, ptr)
893
894 #define bfd_h_put_16(abfd, val, ptr) \
895   BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
896 #define bfd_h_put_signed_16 \
897   bfd_h_put_16
898 #define bfd_h_get_16(abfd, ptr) \
899   BFD_SEND (abfd, bfd_h_getx16, (ptr))
900 #define bfd_h_get_signed_16(abfd, ptr) \
901   BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))
902
903 #define bfd_h_put_32(abfd, val, ptr) \
904   BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
905 #define bfd_h_put_signed_32 \
906   bfd_h_put_32
907 #define bfd_h_get_32(abfd, ptr) \
908   BFD_SEND (abfd, bfd_h_getx32, (ptr))
909 #define bfd_h_get_signed_32(abfd, ptr) \
910   BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))
911
912 #define bfd_h_put_64(abfd, val, ptr) \
913   BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
914 #define bfd_h_put_signed_64 \
915   bfd_h_put_64
916 #define bfd_h_get_64(abfd, ptr) \
917   BFD_SEND (abfd, bfd_h_getx64, (ptr))
918 #define bfd_h_get_signed_64(abfd, ptr) \
919   BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))
920
921 /* Refinements on the above, which should eventually go away.  Save
922    cluttering the source with (bfd_vma) and (bfd_byte *) casts.  */
923
924 #define H_PUT_64(abfd, val, where) \
925   bfd_h_put_64 ((abfd), (bfd_vma) (val), (bfd_byte *) (where))
926
927 #define H_PUT_32(abfd, val, where) \
928   bfd_h_put_32 ((abfd), (bfd_vma) (val), (bfd_byte *) (where))
929
930 #define H_PUT_16(abfd, val, where) \
931   bfd_h_put_16 ((abfd), (bfd_vma) (val), (bfd_byte *) (where))
932
933 #define H_PUT_8 bfd_h_put_8
934
935 #define H_PUT_S64(abfd, val, where) \
936   bfd_h_put_signed_64 ((abfd), (bfd_vma) (val), (bfd_byte *) (where))
937
938 #define H_PUT_S32(abfd, val, where) \
939   bfd_h_put_signed_32 ((abfd), (bfd_vma) (val), (bfd_byte *) (where))
940
941 #define H_PUT_S16(abfd, val, where) \
942   bfd_h_put_signed_16 ((abfd), (bfd_vma) (val), (bfd_byte *) (where))
943
944 #define H_PUT_S8 bfd_h_put_signed_8
945
946 #define H_GET_64(abfd, where) \
947   bfd_h_get_64 ((abfd), (bfd_byte *) (where))
948
949 #define H_GET_32(abfd, where) \
950   bfd_h_get_32 ((abfd), (bfd_byte *) (where))
951
952 #define H_GET_16(abfd, where) \
953   bfd_h_get_16 ((abfd), (bfd_byte *) (where))
954
955 #define H_GET_8 bfd_h_get_8
956
957 #define H_GET_S64(abfd, where) \
958   bfd_h_get_signed_64 ((abfd), (bfd_byte *) (where))
959
960 #define H_GET_S32(abfd, where) \
961   bfd_h_get_signed_32 ((abfd), (bfd_byte *) (where))
962
963 #define H_GET_S16(abfd, where) \
964   bfd_h_get_signed_16 ((abfd), (bfd_byte *) (where))
965
966 #define H_GET_S8 bfd_h_get_signed_8
967
968
969 /* This structure is used for a comdat section, as in PE.  A comdat
970    section is associated with a particular symbol.  When the linker
971    sees a comdat section, it keeps only one of the sections with a
972    given name and associated with a given symbol.  */
973
974 struct bfd_comdat_info
975 {
976   /* The name of the symbol associated with a comdat section.  */
977   const char *name;
978
979   /* The local symbol table index of the symbol associated with a
980      comdat section.  This is only meaningful to the object file format
981      specific code; it is not an index into the list returned by
982      bfd_canonicalize_symtab.  */
983   long symbol;
984 };
985
986 typedef struct sec
987 {
988   /* The name of the section; the name isn't a copy, the pointer is
989      the same as that passed to bfd_make_section.  */
990
991   const char *name;
992
993   /* A unique sequence number.  */
994
995   int id;
996
997   /* Which section is it; 0..nth.  */
998
999   int index;
1000
1001   /* The next section in the list belonging to the BFD, or NULL.  */
1002
1003   struct sec *next;
1004
1005   /* The field flags contains attributes of the section. Some
1006      flags are read in from the object file, and some are
1007      synthesized from other information.  */
1008
1009   flagword flags;
1010
1011 #define SEC_NO_FLAGS   0x000
1012
1013   /* Tells the OS to allocate space for this section when loading.
1014      This is clear for a section containing debug information only.  */
1015 #define SEC_ALLOC      0x001
1016
1017   /* Tells the OS to load the section from the file when loading.
1018      This is clear for a .bss section.  */
1019 #define SEC_LOAD       0x002
1020
1021   /* The section contains data still to be relocated, so there is
1022      some relocation information too.  */
1023 #define SEC_RELOC      0x004
1024
1025   /* ELF reserves 4 processor specific bits and 8 operating system
1026      specific bits in sh_flags; at present we can get away with just
1027      one in communicating between the assembler and BFD, but this
1028      isn't a good long-term solution.  */
1029 #define SEC_ARCH_BIT_0 0x008
1030
1031   /* A signal to the OS that the section contains read only data.  */
1032 #define SEC_READONLY   0x010
1033
1034   /* The section contains code only.  */
1035 #define SEC_CODE       0x020
1036
1037   /* The section contains data only.  */
1038 #define SEC_DATA       0x040
1039
1040   /* The section will reside in ROM.  */
1041 #define SEC_ROM        0x080
1042
1043   /* The section contains constructor information. This section
1044      type is used by the linker to create lists of constructors and
1045      destructors used by <<g++>>. When a back end sees a symbol
1046      which should be used in a constructor list, it creates a new
1047      section for the type of name (e.g., <<__CTOR_LIST__>>), attaches
1048      the symbol to it, and builds a relocation. To build the lists
1049      of constructors, all the linker has to do is catenate all the
1050      sections called <<__CTOR_LIST__>> and relocate the data
1051      contained within - exactly the operations it would peform on
1052      standard data.  */
1053 #define SEC_CONSTRUCTOR 0x100
1054
1055   /* The section is a constructor, and should be placed at the
1056      end of the text, data, or bss section(?).  */
1057 #define SEC_CONSTRUCTOR_TEXT 0x1100
1058 #define SEC_CONSTRUCTOR_DATA 0x2100
1059 #define SEC_CONSTRUCTOR_BSS  0x3100
1060
1061   /* The section has contents - a data section could be
1062      <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
1063      <<SEC_HAS_CONTENTS>>  */
1064 #define SEC_HAS_CONTENTS 0x200
1065
1066   /* An instruction to the linker to not output the section
1067      even if it has information which would normally be written.  */
1068 #define SEC_NEVER_LOAD 0x400
1069
1070   /* The section is a COFF shared library section.  This flag is
1071      only for the linker.  If this type of section appears in
1072      the input file, the linker must copy it to the output file
1073      without changing the vma or size.  FIXME: Although this
1074      was originally intended to be general, it really is COFF
1075      specific (and the flag was renamed to indicate this).  It
1076      might be cleaner to have some more general mechanism to
1077      allow the back end to control what the linker does with
1078      sections.  */
1079 #define SEC_COFF_SHARED_LIBRARY 0x800
1080
1081   /* The section has GOT references.  This flag is only for the
1082      linker, and is currently only used by the elf32-hppa back end.
1083      It will be set if global offset table references were detected
1084      in this section, which indicate to the linker that the section
1085      contains PIC code, and must be handled specially when doing a
1086      static link.  */
1087 #define SEC_HAS_GOT_REF 0x4000
1088
1089   /* The section contains common symbols (symbols may be defined
1090      multiple times, the value of a symbol is the amount of
1091      space it requires, and the largest symbol value is the one
1092      used).  Most targets have exactly one of these (which we
1093      translate to bfd_com_section_ptr), but ECOFF has two.  */
1094 #define SEC_IS_COMMON 0x8000
1095
1096   /* The section contains only debugging information.  For
1097      example, this is set for ELF .debug and .stab sections.
1098      strip tests this flag to see if a section can be
1099      discarded.  */
1100 #define SEC_DEBUGGING 0x10000
1101
1102   /* The contents of this section are held in memory pointed to
1103      by the contents field.  This is checked by bfd_get_section_contents,
1104      and the data is retrieved from memory if appropriate.  */
1105 #define SEC_IN_MEMORY 0x20000
1106
1107   /* The contents of this section are to be excluded by the
1108      linker for executable and shared objects unless those
1109      objects are to be further relocated.  */
1110 #define SEC_EXCLUDE 0x40000
1111
1112   /* The contents of this section are to be sorted by the
1113      based on the address specified in the associated symbol
1114      table.  */
1115 #define SEC_SORT_ENTRIES 0x80000
1116
1117   /* When linking, duplicate sections of the same name should be
1118      discarded, rather than being combined into a single section as
1119      is usually done.  This is similar to how common symbols are
1120      handled.  See SEC_LINK_DUPLICATES below.  */
1121 #define SEC_LINK_ONCE 0x100000
1122
1123   /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
1124      should handle duplicate sections.  */
1125 #define SEC_LINK_DUPLICATES 0x600000
1126
1127   /* This value for SEC_LINK_DUPLICATES means that duplicate
1128      sections with the same name should simply be discarded.  */
1129 #define SEC_LINK_DUPLICATES_DISCARD 0x0
1130
1131   /* This value for SEC_LINK_DUPLICATES means that the linker
1132      should warn if there are any duplicate sections, although
1133      it should still only link one copy.  */
1134 #define SEC_LINK_DUPLICATES_ONE_ONLY 0x200000
1135
1136   /* This value for SEC_LINK_DUPLICATES means that the linker
1137      should warn if any duplicate sections are a different size.  */
1138 #define SEC_LINK_DUPLICATES_SAME_SIZE 0x400000
1139
1140   /* This value for SEC_LINK_DUPLICATES means that the linker
1141      should warn if any duplicate sections contain different
1142      contents.  */
1143 #define SEC_LINK_DUPLICATES_SAME_CONTENTS 0x600000
1144
1145   /* This section was created by the linker as part of dynamic
1146      relocation or other arcane processing.  It is skipped when
1147      going through the first-pass output, trusting that someone
1148      else up the line will take care of it later.  */
1149 #define SEC_LINKER_CREATED 0x800000
1150
1151   /* This section should not be subject to garbage collection.  */
1152 #define SEC_KEEP 0x1000000
1153
1154   /* This section contains "short" data, and should be placed
1155      "near" the GP.  */
1156 #define SEC_SMALL_DATA 0x2000000
1157
1158   /* This section contains data which may be shared with other
1159      executables or shared objects.  */
1160 #define SEC_SHARED 0x4000000
1161
1162   /* When a section with this flag is being linked, then if the size of
1163      the input section is less than a page, it should not cross a page
1164      boundary.  If the size of the input section is one page or more, it
1165      should be aligned on a page boundary.  */
1166 #define SEC_BLOCK 0x8000000
1167
1168   /* Conditionally link this section; do not link if there are no
1169      references found to any symbol in the section.  */
1170 #define SEC_CLINK 0x10000000
1171
1172   /* Attempt to merge identical entities in the section.
1173      Entity size is given in the entsize field.  */
1174 #define SEC_MERGE 0x20000000
1175
1176   /* If given with SEC_MERGE, entities to merge are zero terminated
1177      strings where entsize specifies character size instead of fixed
1178      size entries.  */
1179 #define SEC_STRINGS 0x40000000
1180
1181   /*  End of section flags.  */
1182
1183   /* Some internal packed boolean fields.  */
1184
1185   /* See the vma field.  */
1186   unsigned int user_set_vma : 1;
1187
1188   /* Whether relocations have been processed.  */
1189   unsigned int reloc_done : 1;
1190
1191   /* A mark flag used by some of the linker backends.  */
1192   unsigned int linker_mark : 1;
1193
1194   /* Another mark flag used by some of the linker backends.  Set for
1195      output sections that have a input section.  */
1196   unsigned int linker_has_input : 1;
1197
1198   /* A mark flag used by some linker backends for garbage collection.  */
1199   unsigned int gc_mark : 1;
1200
1201   /* Used by the ELF code to mark sections which have been allocated to segments.  */
1202   unsigned int segment_mark : 1;
1203
1204   /* End of internal packed boolean fields.  */
1205
1206   /*  The virtual memory address of the section - where it will be
1207       at run time.  The symbols are relocated against this.  The
1208       user_set_vma flag is maintained by bfd; if it's not set, the
1209       backend can assign addresses (for example, in <<a.out>>, where
1210       the default address for <<.data>> is dependent on the specific
1211       target and various flags).  */
1212
1213   bfd_vma vma;
1214
1215   /*  The load address of the section - where it would be in a
1216       rom image; really only used for writing section header
1217       information. */
1218
1219   bfd_vma lma;
1220
1221   /* The size of the section in octets, as it will be output.
1222      Contains a value even if the section has no contents (e.g., the
1223      size of <<.bss>>).  This will be filled in after relocation.  */
1224
1225   bfd_size_type _cooked_size;
1226
1227   /* The original size on disk of the section, in octets.  Normally this
1228      value is the same as the size, but if some relaxing has
1229      been done, then this value will be bigger.  */
1230
1231   bfd_size_type _raw_size;
1232
1233   /* If this section is going to be output, then this value is the
1234      offset in *bytes* into the output section of the first byte in the
1235      input section (byte ==> smallest addressable unit on the
1236      target).  In most cases, if this was going to start at the
1237      100th octet (8-bit quantity) in the output section, this value
1238      would be 100.  However, if the target byte size is 16 bits
1239      (bfd_octets_per_byte is "2"), this value would be 50.  */
1240
1241   bfd_vma output_offset;
1242
1243   /* The output section through which to map on output.  */
1244
1245   struct sec *output_section;
1246
1247   /* The alignment requirement of the section, as an exponent of 2 -
1248      e.g., 3 aligns to 2^3 (or 8).  */
1249
1250   unsigned int alignment_power;
1251
1252   /* If an input section, a pointer to a vector of relocation
1253      records for the data in this section.  */
1254
1255   struct reloc_cache_entry *relocation;
1256
1257   /* If an output section, a pointer to a vector of pointers to
1258      relocation records for the data in this section.  */
1259
1260   struct reloc_cache_entry **orelocation;
1261
1262   /* The number of relocation records in one of the above  */
1263
1264   unsigned reloc_count;
1265
1266   /* Information below is back end specific - and not always used
1267      or updated.  */
1268
1269   /* File position of section data.  */
1270
1271   file_ptr filepos;
1272
1273   /* File position of relocation info.  */
1274
1275   file_ptr rel_filepos;
1276
1277   /* File position of line data.  */
1278
1279   file_ptr line_filepos;
1280
1281   /* Pointer to data for applications.  */
1282
1283   PTR userdata;
1284
1285   /* If the SEC_IN_MEMORY flag is set, this points to the actual
1286      contents.  */
1287   unsigned char *contents;
1288
1289   /* Attached line number information.  */
1290
1291   alent *lineno;
1292
1293   /* Number of line number records.  */
1294
1295   unsigned int lineno_count;
1296
1297   /* Entity size for merging purposes.  */
1298
1299   unsigned int entsize;
1300
1301   /* Optional information about a COMDAT entry; NULL if not COMDAT.  */
1302
1303   struct bfd_comdat_info *comdat;
1304
1305   /* When a section is being output, this value changes as more
1306      linenumbers are written out.  */
1307
1308   file_ptr moving_line_filepos;
1309
1310   /* What the section number is in the target world.  */
1311
1312   int target_index;
1313
1314   PTR used_by_bfd;
1315
1316   /* If this is a constructor section then here is a list of the
1317      relocations created to relocate items within it.  */
1318
1319   struct relent_chain *constructor_chain;
1320
1321   /* The BFD which owns the section.  */
1322
1323   bfd *owner;
1324
1325   /* A symbol which points at this section only */
1326   struct symbol_cache_entry *symbol;
1327   struct symbol_cache_entry **symbol_ptr_ptr;
1328
1329   struct bfd_link_order *link_order_head;
1330   struct bfd_link_order *link_order_tail;
1331 } asection ;
1332
1333 /* These sections are global, and are managed by BFD.  The application
1334    and target back end are not permitted to change the values in
1335    these sections.  New code should use the section_ptr macros rather
1336    than referring directly to the const sections.  The const sections
1337    may eventually vanish.  */
1338 #define BFD_ABS_SECTION_NAME "*ABS*"
1339 #define BFD_UND_SECTION_NAME "*UND*"
1340 #define BFD_COM_SECTION_NAME "*COM*"
1341 #define BFD_IND_SECTION_NAME "*IND*"
1342
1343 /* the absolute section */
1344 extern const asection bfd_abs_section;
1345 #define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
1346 #define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
1347 /* Pointer to the undefined section */
1348 extern const asection bfd_und_section;
1349 #define bfd_und_section_ptr ((asection *) &bfd_und_section)
1350 #define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
1351 /* Pointer to the common section */
1352 extern const asection bfd_com_section;
1353 #define bfd_com_section_ptr ((asection *) &bfd_com_section)
1354 /* Pointer to the indirect section */
1355 extern const asection bfd_ind_section;
1356 #define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
1357 #define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
1358
1359 extern const struct symbol_cache_entry * const bfd_abs_symbol;
1360 extern const struct symbol_cache_entry * const bfd_com_symbol;
1361 extern const struct symbol_cache_entry * const bfd_und_symbol;
1362 extern const struct symbol_cache_entry * const bfd_ind_symbol;
1363 #define bfd_get_section_size_before_reloc(section) \
1364      ((section)->reloc_done ? (abort (), (bfd_size_type) 1) \
1365                             : (section)->_raw_size)
1366 #define bfd_get_section_size_after_reloc(section) \
1367      ((section)->reloc_done ? (section)->_cooked_size \
1368                             : (abort (), (bfd_size_type) 1))
1369 asection *
1370 bfd_get_section_by_name PARAMS ((bfd *abfd, const char *name));
1371
1372 char *
1373 bfd_get_unique_section_name PARAMS ((bfd *abfd,
1374     const char *templat,
1375     int *count));
1376
1377 asection *
1378 bfd_make_section_old_way PARAMS ((bfd *abfd, const char *name));
1379
1380 asection *
1381 bfd_make_section_anyway PARAMS ((bfd *abfd, const char *name));
1382
1383 asection *
1384 bfd_make_section PARAMS ((bfd *, const char *name));
1385
1386 boolean
1387 bfd_set_section_flags PARAMS ((bfd *abfd, asection *sec, flagword flags));
1388
1389 void
1390 bfd_map_over_sections PARAMS ((bfd *abfd,
1391     void (*func) (bfd *abfd,
1392     asection *sect,
1393     PTR obj),
1394     PTR obj));
1395
1396 boolean
1397 bfd_set_section_size PARAMS ((bfd *abfd, asection *sec, bfd_size_type val));
1398
1399 boolean
1400 bfd_set_section_contents PARAMS ((bfd *abfd, asection *section,
1401     PTR data, file_ptr offset,
1402     bfd_size_type count));
1403
1404 boolean
1405 bfd_get_section_contents PARAMS ((bfd *abfd, asection *section,
1406     PTR location, file_ptr offset,
1407     bfd_size_type count));
1408
1409 boolean
1410 bfd_copy_private_section_data PARAMS ((bfd *ibfd, asection *isec,
1411     bfd *obfd, asection *osec));
1412
1413 #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
1414      BFD_SEND (obfd, _bfd_copy_private_section_data, \
1415                (ibfd, isection, obfd, osection))
1416 void
1417 _bfd_strip_section_from_output PARAMS ((struct bfd_link_info *info, asection *section));
1418
1419 enum bfd_architecture
1420 {
1421   bfd_arch_unknown,   /* File arch not known */
1422   bfd_arch_obscure,   /* Arch known, not one of these */
1423   bfd_arch_m68k,      /* Motorola 68xxx */
1424 #define bfd_mach_m68000 1
1425 #define bfd_mach_m68008 2
1426 #define bfd_mach_m68010 3
1427 #define bfd_mach_m68020 4
1428 #define bfd_mach_m68030 5
1429 #define bfd_mach_m68040 6
1430 #define bfd_mach_m68060 7
1431 #define bfd_mach_cpu32  8
1432 #define bfd_mach_mcf5200  9
1433 #define bfd_mach_mcf5206e 10
1434 #define bfd_mach_mcf5307  11
1435 #define bfd_mach_mcf5407  12
1436   bfd_arch_vax,       /* DEC Vax */
1437   bfd_arch_i960,      /* Intel 960 */
1438     /* The order of the following is important.
1439        lower number indicates a machine type that
1440        only accepts a subset of the instructions
1441        available to machines with higher numbers.
1442        The exception is the "ca", which is
1443        incompatible with all other machines except
1444        "core". */
1445
1446 #define bfd_mach_i960_core      1
1447 #define bfd_mach_i960_ka_sa     2
1448 #define bfd_mach_i960_kb_sb     3
1449 #define bfd_mach_i960_mc        4
1450 #define bfd_mach_i960_xa        5
1451 #define bfd_mach_i960_ca        6
1452 #define bfd_mach_i960_jx        7
1453 #define bfd_mach_i960_hx        8
1454
1455   bfd_arch_a29k,      /* AMD 29000 */
1456   bfd_arch_sparc,     /* SPARC */
1457 #define bfd_mach_sparc                 1
1458 /* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
1459 #define bfd_mach_sparc_sparclet        2
1460 #define bfd_mach_sparc_sparclite       3
1461 #define bfd_mach_sparc_v8plus          4
1462 #define bfd_mach_sparc_v8plusa         5 /* with ultrasparc add'ns */
1463 #define bfd_mach_sparc_sparclite_le    6
1464 #define bfd_mach_sparc_v9              7
1465 #define bfd_mach_sparc_v9a             8 /* with ultrasparc add'ns */
1466 #define bfd_mach_sparc_v8plusb         9 /* with cheetah add'ns */
1467 #define bfd_mach_sparc_v9b             10 /* with cheetah add'ns */
1468 /* Nonzero if MACH has the v9 instruction set.  */
1469 #define bfd_mach_sparc_v9_p(mach) \
1470   ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \
1471    && (mach) != bfd_mach_sparc_sparclite_le)
1472   bfd_arch_mips,      /* MIPS Rxxxx */
1473 #define bfd_mach_mips3000              3000
1474 #define bfd_mach_mips3900              3900
1475 #define bfd_mach_mips4000              4000
1476 #define bfd_mach_mips4010              4010
1477 #define bfd_mach_mips4100              4100
1478 #define bfd_mach_mips4111              4111
1479 #define bfd_mach_mips4300              4300
1480 #define bfd_mach_mips4400              4400
1481 #define bfd_mach_mips4600              4600
1482 #define bfd_mach_mips4650              4650
1483 #define bfd_mach_mips5000              5000
1484 #define bfd_mach_mips6000              6000
1485 #define bfd_mach_mips8000              8000
1486 #define bfd_mach_mips10000             10000
1487 #define bfd_mach_mips12000             12000
1488 #define bfd_mach_mips16                16
1489 #define bfd_mach_mips5                 5
1490 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
1491 #define bfd_mach_mipsisa32             32
1492 #define bfd_mach_mipsisa64             64
1493   bfd_arch_i386,      /* Intel 386 */
1494 #define bfd_mach_i386_i386 0
1495 #define bfd_mach_i386_i8086 1
1496 #define bfd_mach_i386_i386_intel_syntax 2
1497 #define bfd_mach_x86_64 3
1498 #define bfd_mach_x86_64_intel_syntax 4
1499   bfd_arch_we32k,     /* AT&T WE32xxx */
1500   bfd_arch_tahoe,     /* CCI/Harris Tahoe */
1501   bfd_arch_i860,      /* Intel 860 */
1502   bfd_arch_i370,      /* IBM 360/370 Mainframes */
1503   bfd_arch_romp,      /* IBM ROMP PC/RT */
1504   bfd_arch_alliant,   /* Alliant */
1505   bfd_arch_convex,    /* Convex */
1506   bfd_arch_m88k,      /* Motorola 88xxx */
1507   bfd_arch_pyramid,   /* Pyramid Technology */
1508   bfd_arch_h8300,     /* Hitachi H8/300 */
1509 #define bfd_mach_h8300   1
1510 #define bfd_mach_h8300h  2
1511 #define bfd_mach_h8300s  3
1512   bfd_arch_pdp11,     /* DEC PDP-11 */
1513   bfd_arch_powerpc,   /* PowerPC */
1514 #define bfd_mach_ppc           0
1515 #define bfd_mach_ppc_403       403
1516 #define bfd_mach_ppc_403gc     4030
1517 #define bfd_mach_ppc_505       505
1518 #define bfd_mach_ppc_601       601
1519 #define bfd_mach_ppc_602       602
1520 #define bfd_mach_ppc_603       603
1521 #define bfd_mach_ppc_ec603e    6031
1522 #define bfd_mach_ppc_604       604
1523 #define bfd_mach_ppc_620       620
1524 #define bfd_mach_ppc_630       630
1525 #define bfd_mach_ppc_750       750
1526 #define bfd_mach_ppc_860       860
1527 #define bfd_mach_ppc_a35       35
1528 #define bfd_mach_ppc_rs64ii    642
1529 #define bfd_mach_ppc_rs64iii   643
1530 #define bfd_mach_ppc_7400      7400
1531   bfd_arch_rs6000,    /* IBM RS/6000 */
1532 #define bfd_mach_rs6k          0
1533 #define bfd_mach_rs6k_rs1      6001
1534 #define bfd_mach_rs6k_rsc      6003
1535 #define bfd_mach_rs6k_rs2      6002
1536   bfd_arch_hppa,      /* HP PA RISC */
1537   bfd_arch_d10v,      /* Mitsubishi D10V */
1538 #define bfd_mach_d10v          0
1539 #define bfd_mach_d10v_ts2      2
1540 #define bfd_mach_d10v_ts3      3
1541   bfd_arch_d30v,      /* Mitsubishi D30V */
1542   bfd_arch_m68hc11,   /* Motorola 68HC11 */
1543   bfd_arch_m68hc12,   /* Motorola 68HC12 */
1544   bfd_arch_z8k,       /* Zilog Z8000 */
1545 #define bfd_mach_z8001         1
1546 #define bfd_mach_z8002         2
1547   bfd_arch_h8500,     /* Hitachi H8/500 */
1548   bfd_arch_sh,        /* Hitachi SH */
1549 #define bfd_mach_sh            0
1550 #define bfd_mach_sh2        0x20
1551 #define bfd_mach_sh_dsp     0x2d
1552 #define bfd_mach_sh3        0x30
1553 #define bfd_mach_sh3_dsp    0x3d
1554 #define bfd_mach_sh3e       0x3e
1555 #define bfd_mach_sh4        0x40
1556   bfd_arch_alpha,     /* Dec Alpha */
1557 #define bfd_mach_alpha_ev4  0x10
1558 #define bfd_mach_alpha_ev5  0x20
1559 #define bfd_mach_alpha_ev6  0x30
1560   bfd_arch_arm,       /* Advanced Risc Machines ARM */
1561 #define bfd_mach_arm_2         1
1562 #define bfd_mach_arm_2a        2
1563 #define bfd_mach_arm_3         3
1564 #define bfd_mach_arm_3M        4
1565 #define bfd_mach_arm_4         5
1566 #define bfd_mach_arm_4T        6
1567 #define bfd_mach_arm_5         7
1568 #define bfd_mach_arm_5T        8
1569 #define bfd_mach_arm_5TE       9
1570 #define bfd_mach_arm_XScale    10
1571   bfd_arch_ns32k,     /* National Semiconductors ns32000 */
1572   bfd_arch_w65,       /* WDC 65816 */
1573   bfd_arch_tic30,     /* Texas Instruments TMS320C30 */
1574   bfd_arch_tic54x,    /* Texas Instruments TMS320C54X */
1575   bfd_arch_tic80,     /* TI TMS320c80 (MVP) */
1576   bfd_arch_v850,      /* NEC V850 */
1577 #define bfd_mach_v850          0
1578 #define bfd_mach_v850e         'E'
1579 #define bfd_mach_v850ea        'A'
1580   bfd_arch_arc,       /* ARC Cores */
1581 #define bfd_mach_arc_5         0
1582 #define bfd_mach_arc_6         1
1583 #define bfd_mach_arc_7         2
1584 #define bfd_mach_arc_8         3
1585   bfd_arch_m32r,      /* Mitsubishi M32R/D */
1586 #define bfd_mach_m32r          0 /* backwards compatibility */
1587 #define bfd_mach_m32rx         'x'
1588   bfd_arch_mn10200,   /* Matsushita MN10200 */
1589   bfd_arch_mn10300,   /* Matsushita MN10300 */
1590 #define bfd_mach_mn10300               300
1591 #define bfd_mach_am33          330
1592   bfd_arch_fr30,
1593 #define bfd_mach_fr30          0x46523330
1594   bfd_arch_mcore,
1595   bfd_arch_ia64,      /* HP/Intel ia64 */
1596 #define bfd_mach_ia64_elf64    0
1597 #define bfd_mach_ia64_elf32    1
1598   bfd_arch_pj,
1599   bfd_arch_avr,       /* Atmel AVR microcontrollers */
1600 #define bfd_mach_avr1          1
1601 #define bfd_mach_avr2          2
1602 #define bfd_mach_avr3          3
1603 #define bfd_mach_avr4          4
1604 #define bfd_mach_avr5          5
1605   bfd_arch_cris,      /* Axis CRIS */
1606   bfd_arch_s390,      /* IBM s390 */
1607 #define bfd_mach_s390_esa      0
1608 #define bfd_mach_s390_esame    1
1609   bfd_arch_openrisc,  /* OpenRISC */
1610   bfd_arch_last
1611   };
1612
1613 typedef struct bfd_arch_info
1614 {
1615   int bits_per_word;
1616   int bits_per_address;
1617   int bits_per_byte;
1618   enum bfd_architecture arch;
1619   unsigned long mach;
1620   const char *arch_name;
1621   const char *printable_name;
1622   unsigned int section_align_power;
1623   /* True if this is the default machine for the architecture.  */
1624   boolean the_default;
1625   const struct bfd_arch_info * (*compatible)
1626        PARAMS ((const struct bfd_arch_info *a,
1627                 const struct bfd_arch_info *b));
1628
1629   boolean (*scan) PARAMS ((const struct bfd_arch_info *, const char *));
1630
1631   const struct bfd_arch_info *next;
1632 } bfd_arch_info_type;
1633 const char *
1634 bfd_printable_name PARAMS ((bfd *abfd));
1635
1636 const bfd_arch_info_type *
1637 bfd_scan_arch PARAMS ((const char *string));
1638
1639 const char **
1640 bfd_arch_list PARAMS ((void));
1641
1642 const bfd_arch_info_type *
1643 bfd_arch_get_compatible PARAMS ((
1644     const bfd *abfd,
1645     const bfd *bbfd));
1646
1647 void
1648 bfd_set_arch_info PARAMS ((bfd *abfd, const bfd_arch_info_type *arg));
1649
1650 enum bfd_architecture
1651 bfd_get_arch PARAMS ((bfd *abfd));
1652
1653 unsigned long
1654 bfd_get_mach PARAMS ((bfd *abfd));
1655
1656 unsigned int
1657 bfd_arch_bits_per_byte PARAMS ((bfd *abfd));
1658
1659 unsigned int
1660 bfd_arch_bits_per_address PARAMS ((bfd *abfd));
1661
1662 const bfd_arch_info_type *
1663 bfd_get_arch_info PARAMS ((bfd *abfd));
1664
1665 const bfd_arch_info_type *
1666 bfd_lookup_arch PARAMS ((enum bfd_architecture
1667     arch,
1668     unsigned long machine));
1669
1670 const char *
1671 bfd_printable_arch_mach PARAMS ((enum bfd_architecture arch, unsigned long machine));
1672
1673 unsigned int
1674 bfd_octets_per_byte PARAMS ((bfd *abfd));
1675
1676 unsigned int
1677 bfd_arch_mach_octets_per_byte PARAMS ((enum bfd_architecture arch,
1678     unsigned long machine));
1679
1680 typedef enum bfd_reloc_status
1681 {
1682   /* No errors detected */
1683   bfd_reloc_ok,
1684
1685   /* The relocation was performed, but there was an overflow. */
1686   bfd_reloc_overflow,
1687
1688   /* The address to relocate was not within the section supplied. */
1689   bfd_reloc_outofrange,
1690
1691   /* Used by special functions */
1692   bfd_reloc_continue,
1693
1694   /* Unsupported relocation size requested. */
1695   bfd_reloc_notsupported,
1696
1697   /* Unused */
1698   bfd_reloc_other,
1699
1700   /* The symbol to relocate against was undefined. */
1701   bfd_reloc_undefined,
1702
1703   /* The relocation was performed, but may not be ok - presently
1704      generated only when linking i960 coff files with i960 b.out
1705      symbols.  If this type is returned, the error_message argument
1706      to bfd_perform_relocation will be set.  */
1707   bfd_reloc_dangerous
1708  }
1709  bfd_reloc_status_type;
1710
1711
1712 typedef struct reloc_cache_entry
1713 {
1714   /* A pointer into the canonical table of pointers  */
1715   struct symbol_cache_entry **sym_ptr_ptr;
1716
1717   /* offset in section */
1718   bfd_size_type address;
1719
1720   /* addend for relocation value */
1721   bfd_vma addend;
1722
1723   /* Pointer to how to perform the required relocation */
1724   reloc_howto_type *howto;
1725
1726 } arelent;
1727 enum complain_overflow
1728 {
1729   /* Do not complain on overflow. */
1730   complain_overflow_dont,
1731
1732   /* Complain if the bitfield overflows, whether it is considered
1733      as signed or unsigned. */
1734   complain_overflow_bitfield,
1735
1736   /* Complain if the value overflows when considered as signed
1737      number. */
1738   complain_overflow_signed,
1739
1740   /* Complain if the value overflows when considered as an
1741      unsigned number. */
1742   complain_overflow_unsigned
1743 };
1744
1745 struct reloc_howto_struct
1746 {
1747   /*  The type field has mainly a documentary use - the back end can
1748       do what it wants with it, though normally the back end's
1749       external idea of what a reloc number is stored
1750       in this field.  For example, a PC relative word relocation
1751       in a coff environment has the type 023 - because that's
1752       what the outside world calls a R_PCRWORD reloc.  */
1753   unsigned int type;
1754
1755   /*  The value the final relocation is shifted right by.  This drops
1756       unwanted data from the relocation.  */
1757   unsigned int rightshift;
1758
1759   /*  The size of the item to be relocated.  This is *not* a
1760       power-of-two measure.  To get the number of bytes operated
1761       on by a type of relocation, use bfd_get_reloc_size.  */
1762   int size;
1763
1764   /*  The number of bits in the item to be relocated.  This is used
1765       when doing overflow checking.  */
1766   unsigned int bitsize;
1767
1768   /*  Notes that the relocation is relative to the location in the
1769       data section of the addend.  The relocation function will
1770       subtract from the relocation value the address of the location
1771       being relocated.  */
1772   boolean pc_relative;
1773
1774   /*  The bit position of the reloc value in the destination.
1775       The relocated value is left shifted by this amount.  */
1776   unsigned int bitpos;
1777
1778   /* What type of overflow error should be checked for when
1779      relocating.  */
1780   enum complain_overflow complain_on_overflow;
1781
1782   /* If this field is non null, then the supplied function is
1783      called rather than the normal function.  This allows really
1784      strange relocation methods to be accomodated (e.g., i960 callj
1785      instructions).  */
1786   bfd_reloc_status_type (*special_function)
1787     PARAMS ((bfd *, arelent *, struct symbol_cache_entry *, PTR, asection *,
1788              bfd *, char **));
1789
1790   /* The textual name of the relocation type.  */
1791   char *name;
1792
1793   /* Some formats record a relocation addend in the section contents
1794      rather than with the relocation.  For ELF formats this is the
1795      distinction between USE_REL and USE_RELA (though the code checks
1796      for USE_REL == 1/0).  The value of this field is TRUE if the
1797      addend is recorded with the section contents; when performing a
1798      partial link (ld -r) the section contents (the data) will be
1799      modified.  The value of this field is FALSE if addends are
1800      recorded with the relocation (in arelent.addend); when performing
1801      a partial link the relocation will be modified.
1802      All relocations for all ELF USE_RELA targets should set this field
1803      to FALSE (values of TRUE should be looked on with suspicion).
1804      However, the converse is not true: not all relocations of all ELF
1805      USE_REL targets set this field to TRUE.  Why this is so is peculiar
1806      to each particular target.  For relocs that aren't used in partial
1807      links (e.g. GOT stuff) it doesn't matter what this is set to.  */
1808   boolean partial_inplace;
1809
1810   /* The src_mask selects which parts of the read in data
1811      are to be used in the relocation sum.  E.g., if this was an 8 bit
1812      byte of data which we read and relocated, this would be
1813      0x000000ff.  When we have relocs which have an addend, such as
1814      sun4 extended relocs, the value in the offset part of a
1815      relocating field is garbage so we never use it.  In this case
1816      the mask would be 0x00000000.  */
1817   bfd_vma src_mask;
1818
1819   /* The dst_mask selects which parts of the instruction are replaced
1820      into the instruction.  In most cases src_mask == dst_mask,
1821      except in the above special case, where dst_mask would be
1822      0x000000ff, and src_mask would be 0x00000000.  */
1823   bfd_vma dst_mask;
1824
1825   /* When some formats create PC relative instructions, they leave
1826      the value of the pc of the place being relocated in the offset
1827      slot of the instruction, so that a PC relative relocation can
1828      be made just by adding in an ordinary offset (e.g., sun3 a.out).
1829      Some formats leave the displacement part of an instruction
1830      empty (e.g., m88k bcs); this flag signals the fact.  */
1831   boolean pcrel_offset;
1832 };
1833 #define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
1834   { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC }
1835 #define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
1836   HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
1837          NAME, false, 0, 0, IN)
1838
1839 #define EMPTY_HOWTO(C) \
1840   HOWTO ((C), 0, 0, 0, false, 0, complain_overflow_dont, NULL, \
1841          NULL, false, 0, 0, false)
1842
1843 #define HOWTO_PREPARE(relocation, symbol)               \
1844   {                                                     \
1845     if (symbol != (asymbol *) NULL)                     \
1846       {                                                 \
1847         if (bfd_is_com_section (symbol->section))       \
1848           {                                             \
1849             relocation = 0;                             \
1850           }                                             \
1851         else                                            \
1852           {                                             \
1853             relocation = symbol->value;                 \
1854           }                                             \
1855       }                                                 \
1856   }
1857 unsigned int
1858 bfd_get_reloc_size PARAMS ((reloc_howto_type *));
1859
1860 typedef struct relent_chain
1861 {
1862   arelent relent;
1863   struct relent_chain *next;
1864 } arelent_chain;
1865 bfd_reloc_status_type
1866 bfd_check_overflow PARAMS ((enum complain_overflow how,
1867     unsigned int bitsize,
1868     unsigned int rightshift,
1869     unsigned int addrsize,
1870     bfd_vma relocation));
1871
1872 bfd_reloc_status_type
1873 bfd_perform_relocation PARAMS ((bfd *abfd,
1874     arelent *reloc_entry,
1875     PTR data,
1876     asection *input_section,
1877     bfd *output_bfd,
1878     char **error_message));
1879
1880 bfd_reloc_status_type
1881 bfd_install_relocation PARAMS ((bfd *abfd,
1882     arelent *reloc_entry,
1883     PTR data, bfd_vma data_start,
1884     asection *input_section,
1885     char **error_message));
1886
1887 enum bfd_reloc_code_real {
1888   _dummy_first_bfd_reloc_code_real,
1889
1890
1891 /* Basic absolute relocations of N bits. */
1892   BFD_RELOC_64,
1893   BFD_RELOC_32,
1894   BFD_RELOC_26,
1895   BFD_RELOC_24,
1896   BFD_RELOC_16,
1897   BFD_RELOC_14,
1898   BFD_RELOC_8,
1899
1900 /* PC-relative relocations.  Sometimes these are relative to the address
1901 of the relocation itself; sometimes they are relative to the start of
1902 the section containing the relocation.  It depends on the specific target.
1903
1904 The 24-bit relocation is used in some Intel 960 configurations. */
1905   BFD_RELOC_64_PCREL,
1906   BFD_RELOC_32_PCREL,
1907   BFD_RELOC_24_PCREL,
1908   BFD_RELOC_16_PCREL,
1909   BFD_RELOC_12_PCREL,
1910   BFD_RELOC_8_PCREL,
1911
1912 /* For ELF. */
1913   BFD_RELOC_32_GOT_PCREL,
1914   BFD_RELOC_16_GOT_PCREL,
1915   BFD_RELOC_8_GOT_PCREL,
1916   BFD_RELOC_32_GOTOFF,
1917   BFD_RELOC_16_GOTOFF,
1918   BFD_RELOC_LO16_GOTOFF,
1919   BFD_RELOC_HI16_GOTOFF,
1920   BFD_RELOC_HI16_S_GOTOFF,
1921   BFD_RELOC_8_GOTOFF,
1922   BFD_RELOC_64_PLT_PCREL,
1923   BFD_RELOC_32_PLT_PCREL,
1924   BFD_RELOC_24_PLT_PCREL,
1925   BFD_RELOC_16_PLT_PCREL,
1926   BFD_RELOC_8_PLT_PCREL,
1927   BFD_RELOC_64_PLTOFF,
1928   BFD_RELOC_32_PLTOFF,
1929   BFD_RELOC_16_PLTOFF,
1930   BFD_RELOC_LO16_PLTOFF,
1931   BFD_RELOC_HI16_PLTOFF,
1932   BFD_RELOC_HI16_S_PLTOFF,
1933   BFD_RELOC_8_PLTOFF,
1934
1935 /* Relocations used by 68K ELF. */
1936   BFD_RELOC_68K_GLOB_DAT,
1937   BFD_RELOC_68K_JMP_SLOT,
1938   BFD_RELOC_68K_RELATIVE,
1939
1940 /* Linkage-table relative. */
1941   BFD_RELOC_32_BASEREL,
1942   BFD_RELOC_16_BASEREL,
1943   BFD_RELOC_LO16_BASEREL,
1944   BFD_RELOC_HI16_BASEREL,
1945   BFD_RELOC_HI16_S_BASEREL,
1946   BFD_RELOC_8_BASEREL,
1947   BFD_RELOC_RVA,
1948
1949 /* Absolute 8-bit relocation, but used to form an address like 0xFFnn. */
1950   BFD_RELOC_8_FFnn,
1951
1952 /* These PC-relative relocations are stored as word displacements --
1953 i.e., byte displacements shifted right two bits.  The 30-bit word
1954 displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
1955 SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
1956 signed 16-bit displacement is used on the MIPS, and the 23-bit
1957 displacement is used on the Alpha. */
1958   BFD_RELOC_32_PCREL_S2,
1959   BFD_RELOC_16_PCREL_S2,
1960   BFD_RELOC_23_PCREL_S2,
1961
1962 /* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
1963 the target word.  These are used on the SPARC. */
1964   BFD_RELOC_HI22,
1965   BFD_RELOC_LO10,
1966
1967 /* For systems that allocate a Global Pointer register, these are
1968 displacements off that register.  These relocation types are
1969 handled specially, because the value the register will have is
1970 decided relatively late. */
1971   BFD_RELOC_GPREL16,
1972   BFD_RELOC_GPREL32,
1973
1974 /* Reloc types used for i960/b.out. */
1975   BFD_RELOC_I960_CALLJ,
1976
1977 /* SPARC ELF relocations.  There is probably some overlap with other
1978 relocation types already defined. */
1979   BFD_RELOC_NONE,
1980   BFD_RELOC_SPARC_WDISP22,
1981   BFD_RELOC_SPARC22,
1982   BFD_RELOC_SPARC13,
1983   BFD_RELOC_SPARC_GOT10,
1984   BFD_RELOC_SPARC_GOT13,
1985   BFD_RELOC_SPARC_GOT22,
1986   BFD_RELOC_SPARC_PC10,
1987   BFD_RELOC_SPARC_PC22,
1988   BFD_RELOC_SPARC_WPLT30,
1989   BFD_RELOC_SPARC_COPY,
1990   BFD_RELOC_SPARC_GLOB_DAT,
1991   BFD_RELOC_SPARC_JMP_SLOT,
1992   BFD_RELOC_SPARC_RELATIVE,
1993   BFD_RELOC_SPARC_UA16,
1994   BFD_RELOC_SPARC_UA32,
1995   BFD_RELOC_SPARC_UA64,
1996
1997 /* I think these are specific to SPARC a.out (e.g., Sun 4). */
1998   BFD_RELOC_SPARC_BASE13,
1999   BFD_RELOC_SPARC_BASE22,
2000
2001 /* SPARC64 relocations */
2002 #define BFD_RELOC_SPARC_64 BFD_RELOC_64
2003   BFD_RELOC_SPARC_10,
2004   BFD_RELOC_SPARC_11,
2005   BFD_RELOC_SPARC_OLO10,
2006   BFD_RELOC_SPARC_HH22,
2007   BFD_RELOC_SPARC_HM10,
2008   BFD_RELOC_SPARC_LM22,
2009   BFD_RELOC_SPARC_PC_HH22,
2010   BFD_RELOC_SPARC_PC_HM10,
2011   BFD_RELOC_SPARC_PC_LM22,
2012   BFD_RELOC_SPARC_WDISP16,
2013   BFD_RELOC_SPARC_WDISP19,
2014   BFD_RELOC_SPARC_7,
2015   BFD_RELOC_SPARC_6,
2016   BFD_RELOC_SPARC_5,
2017 #define BFD_RELOC_SPARC_DISP64 BFD_RELOC_64_PCREL
2018   BFD_RELOC_SPARC_PLT64,
2019   BFD_RELOC_SPARC_HIX22,
2020   BFD_RELOC_SPARC_LOX10,
2021   BFD_RELOC_SPARC_H44,
2022   BFD_RELOC_SPARC_M44,
2023   BFD_RELOC_SPARC_L44,
2024   BFD_RELOC_SPARC_REGISTER,
2025
2026 /* SPARC little endian relocation */
2027   BFD_RELOC_SPARC_REV32,
2028
2029 /* Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
2030 "addend" in some special way.
2031 For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
2032 writing; when reading, it will be the absolute section symbol.  The
2033 addend is the displacement in bytes of the "lda" instruction from
2034 the "ldah" instruction (which is at the address of this reloc). */
2035   BFD_RELOC_ALPHA_GPDISP_HI16,
2036
2037 /* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
2038 with GPDISP_HI16 relocs.  The addend is ignored when writing the
2039 relocations out, and is filled in with the file's GP value on
2040 reading, for convenience. */
2041   BFD_RELOC_ALPHA_GPDISP_LO16,
2042
2043 /* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
2044 relocation except that there is no accompanying GPDISP_LO16
2045 relocation. */
2046   BFD_RELOC_ALPHA_GPDISP,
2047
2048 /* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
2049 the assembler turns it into a LDQ instruction to load the address of
2050 the symbol, and then fills in a register in the real instruction.
2051
2052 The LITERAL reloc, at the LDQ instruction, refers to the .lita
2053 section symbol.  The addend is ignored when writing, but is filled
2054 in with the file's GP value on reading, for convenience, as with the
2055 GPDISP_LO16 reloc.
2056
2057 The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
2058 It should refer to the symbol to be referenced, as with 16_GOTOFF,
2059 but it generates output not based on the position within the .got
2060 section, but relative to the GP value chosen for the file during the
2061 final link stage.
2062
2063 The LITUSE reloc, on the instruction using the loaded address, gives
2064 information to the linker that it might be able to use to optimize
2065 away some literal section references.  The symbol is ignored (read
2066 as the absolute section symbol), and the "addend" indicates the type
2067 of instruction using the register:
2068 1 - "memory" fmt insn
2069 2 - byte-manipulation (byte offset reg)
2070 3 - jsr (target of branch) */
2071   BFD_RELOC_ALPHA_LITERAL,
2072   BFD_RELOC_ALPHA_ELF_LITERAL,
2073   BFD_RELOC_ALPHA_LITUSE,
2074
2075 /* The HINT relocation indicates a value that should be filled into the
2076 "hint" field of a jmp/jsr/ret instruction, for possible branch-
2077 prediction logic which may be provided on some processors. */
2078   BFD_RELOC_ALPHA_HINT,
2079
2080 /* The LINKAGE relocation outputs a linkage pair in the object file,
2081 which is filled by the linker. */
2082   BFD_RELOC_ALPHA_LINKAGE,
2083
2084 /* The CODEADDR relocation outputs a STO_CA in the object file,
2085 which is filled by the linker. */
2086   BFD_RELOC_ALPHA_CODEADDR,
2087
2088 /* The GPREL_HI/LO relocations together form a 32-bit offset from the
2089 GP register. */
2090   BFD_RELOC_ALPHA_GPREL_HI16,
2091   BFD_RELOC_ALPHA_GPREL_LO16,
2092
2093 /* Bits 27..2 of the relocation address shifted right 2 bits;
2094 simple reloc otherwise. */
2095   BFD_RELOC_MIPS_JMP,
2096
2097 /* The MIPS16 jump instruction. */
2098   BFD_RELOC_MIPS16_JMP,
2099
2100 /* MIPS16 GP relative reloc. */
2101   BFD_RELOC_MIPS16_GPREL,
2102
2103 /* High 16 bits of 32-bit value; simple reloc. */
2104   BFD_RELOC_HI16,
2105
2106 /* High 16 bits of 32-bit value but the low 16 bits will be sign
2107 extended and added to form the final result.  If the low 16
2108 bits form a negative number, we need to add one to the high value
2109 to compensate for the borrow when the low bits are added. */
2110   BFD_RELOC_HI16_S,
2111
2112 /* Low 16 bits. */
2113   BFD_RELOC_LO16,
2114
2115 /* Like BFD_RELOC_HI16_S, but PC relative. */
2116   BFD_RELOC_PCREL_HI16_S,
2117
2118 /* Like BFD_RELOC_LO16, but PC relative. */
2119   BFD_RELOC_PCREL_LO16,
2120
2121 /* Relocation relative to the global pointer. */
2122 #define BFD_RELOC_MIPS_GPREL BFD_RELOC_GPREL16
2123
2124 /* Relocation against a MIPS literal section. */
2125   BFD_RELOC_MIPS_LITERAL,
2126
2127 /* MIPS ELF relocations. */
2128   BFD_RELOC_MIPS_GOT16,
2129   BFD_RELOC_MIPS_CALL16,
2130 #define BFD_RELOC_MIPS_GPREL32 BFD_RELOC_GPREL32
2131   BFD_RELOC_MIPS_GOT_HI16,
2132   BFD_RELOC_MIPS_GOT_LO16,
2133   BFD_RELOC_MIPS_CALL_HI16,
2134   BFD_RELOC_MIPS_CALL_LO16,
2135   BFD_RELOC_MIPS_SUB,
2136   BFD_RELOC_MIPS_GOT_PAGE,
2137   BFD_RELOC_MIPS_GOT_OFST,
2138   BFD_RELOC_MIPS_GOT_DISP,
2139   BFD_RELOC_MIPS_SHIFT5,
2140   BFD_RELOC_MIPS_SHIFT6,
2141   BFD_RELOC_MIPS_INSERT_A,
2142   BFD_RELOC_MIPS_INSERT_B,
2143   BFD_RELOC_MIPS_DELETE,
2144   BFD_RELOC_MIPS_HIGHEST,
2145   BFD_RELOC_MIPS_HIGHER,
2146   BFD_RELOC_MIPS_SCN_DISP,
2147   BFD_RELOC_MIPS_REL16,
2148   BFD_RELOC_MIPS_RELGOT,
2149   BFD_RELOC_MIPS_JALR,
2150
2151
2152 /* i386/elf relocations */
2153   BFD_RELOC_386_GOT32,
2154   BFD_RELOC_386_PLT32,
2155   BFD_RELOC_386_COPY,
2156   BFD_RELOC_386_GLOB_DAT,
2157   BFD_RELOC_386_JUMP_SLOT,
2158   BFD_RELOC_386_RELATIVE,
2159   BFD_RELOC_386_GOTOFF,
2160   BFD_RELOC_386_GOTPC,
2161
2162 /* x86-64/elf relocations */
2163   BFD_RELOC_X86_64_GOT32,
2164   BFD_RELOC_X86_64_PLT32,
2165   BFD_RELOC_X86_64_COPY,
2166   BFD_RELOC_X86_64_GLOB_DAT,
2167   BFD_RELOC_X86_64_JUMP_SLOT,
2168   BFD_RELOC_X86_64_RELATIVE,
2169   BFD_RELOC_X86_64_GOTPCREL,
2170   BFD_RELOC_X86_64_32S,
2171
2172 /* ns32k relocations */
2173   BFD_RELOC_NS32K_IMM_8,
2174   BFD_RELOC_NS32K_IMM_16,
2175   BFD_RELOC_NS32K_IMM_32,
2176   BFD_RELOC_NS32K_IMM_8_PCREL,
2177   BFD_RELOC_NS32K_IMM_16_PCREL,
2178   BFD_RELOC_NS32K_IMM_32_PCREL,
2179   BFD_RELOC_NS32K_DISP_8,
2180   BFD_RELOC_NS32K_DISP_16,
2181   BFD_RELOC_NS32K_DISP_32,
2182   BFD_RELOC_NS32K_DISP_8_PCREL,
2183   BFD_RELOC_NS32K_DISP_16_PCREL,
2184   BFD_RELOC_NS32K_DISP_32_PCREL,
2185
2186 /* PDP11 relocations */
2187   BFD_RELOC_PDP11_DISP_8_PCREL,
2188   BFD_RELOC_PDP11_DISP_6_PCREL,
2189
2190 /* Picojava relocs.  Not all of these appear in object files. */
2191   BFD_RELOC_PJ_CODE_HI16,
2192   BFD_RELOC_PJ_CODE_LO16,
2193   BFD_RELOC_PJ_CODE_DIR16,
2194   BFD_RELOC_PJ_CODE_DIR32,
2195   BFD_RELOC_PJ_CODE_REL16,
2196   BFD_RELOC_PJ_CODE_REL32,
2197
2198 /* Power(rs6000) and PowerPC relocations. */
2199   BFD_RELOC_PPC_B26,
2200   BFD_RELOC_PPC_BA26,
2201   BFD_RELOC_PPC_TOC16,
2202   BFD_RELOC_PPC_B16,
2203   BFD_RELOC_PPC_B16_BRTAKEN,
2204   BFD_RELOC_PPC_B16_BRNTAKEN,
2205   BFD_RELOC_PPC_BA16,
2206   BFD_RELOC_PPC_BA16_BRTAKEN,
2207   BFD_RELOC_PPC_BA16_BRNTAKEN,
2208   BFD_RELOC_PPC_COPY,
2209   BFD_RELOC_PPC_GLOB_DAT,
2210   BFD_RELOC_PPC_JMP_SLOT,
2211   BFD_RELOC_PPC_RELATIVE,
2212   BFD_RELOC_PPC_LOCAL24PC,
2213   BFD_RELOC_PPC_EMB_NADDR32,
2214   BFD_RELOC_PPC_EMB_NADDR16,
2215   BFD_RELOC_PPC_EMB_NADDR16_LO,
2216   BFD_RELOC_PPC_EMB_NADDR16_HI,
2217   BFD_RELOC_PPC_EMB_NADDR16_HA,
2218   BFD_RELOC_PPC_EMB_SDAI16,
2219   BFD_RELOC_PPC_EMB_SDA2I16,
2220   BFD_RELOC_PPC_EMB_SDA2REL,
2221   BFD_RELOC_PPC_EMB_SDA21,
2222   BFD_RELOC_PPC_EMB_MRKREF,
2223   BFD_RELOC_PPC_EMB_RELSEC16,
2224   BFD_RELOC_PPC_EMB_RELST_LO,
2225   BFD_RELOC_PPC_EMB_RELST_HI,
2226   BFD_RELOC_PPC_EMB_RELST_HA,
2227   BFD_RELOC_PPC_EMB_BIT_FLD,
2228   BFD_RELOC_PPC_EMB_RELSDA,
2229   BFD_RELOC_PPC64_HIGHER,
2230   BFD_RELOC_PPC64_HIGHER_S,
2231   BFD_RELOC_PPC64_HIGHEST,
2232   BFD_RELOC_PPC64_HIGHEST_S,
2233   BFD_RELOC_PPC64_TOC16_LO,
2234   BFD_RELOC_PPC64_TOC16_HI,
2235   BFD_RELOC_PPC64_TOC16_HA,
2236   BFD_RELOC_PPC64_TOC,
2237   BFD_RELOC_PPC64_PLTGOT16,
2238   BFD_RELOC_PPC64_PLTGOT16_LO,
2239   BFD_RELOC_PPC64_PLTGOT16_HI,
2240   BFD_RELOC_PPC64_PLTGOT16_HA,
2241   BFD_RELOC_PPC64_ADDR16_DS,
2242   BFD_RELOC_PPC64_ADDR16_LO_DS,
2243   BFD_RELOC_PPC64_GOT16_DS,
2244   BFD_RELOC_PPC64_GOT16_LO_DS,
2245   BFD_RELOC_PPC64_PLT16_LO_DS,
2246   BFD_RELOC_PPC64_SECTOFF_DS,
2247   BFD_RELOC_PPC64_SECTOFF_LO_DS,
2248   BFD_RELOC_PPC64_TOC16_DS,
2249   BFD_RELOC_PPC64_TOC16_LO_DS,
2250   BFD_RELOC_PPC64_PLTGOT16_DS,
2251   BFD_RELOC_PPC64_PLTGOT16_LO_DS,
2252
2253 /* IBM 370/390 relocations */
2254   BFD_RELOC_I370_D12,
2255
2256 /* The type of reloc used to build a contructor table - at the moment
2257 probably a 32 bit wide absolute relocation, but the target can choose.
2258 It generally does map to one of the other relocation types. */
2259   BFD_RELOC_CTOR,
2260
2261 /* ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
2262 not stored in the instruction. */
2263   BFD_RELOC_ARM_PCREL_BRANCH,
2264
2265 /* ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
2266 not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
2267 field in the instruction. */
2268   BFD_RELOC_ARM_PCREL_BLX,
2269
2270 /* Thumb 22 bit pc-relative branch.  The lowest bit must be zero and is
2271 not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
2272 field in the instruction. */
2273   BFD_RELOC_THUMB_PCREL_BLX,
2274
2275 /* These relocs are only used within the ARM assembler.  They are not
2276 (at present) written to any object files. */
2277   BFD_RELOC_ARM_IMMEDIATE,
2278   BFD_RELOC_ARM_ADRL_IMMEDIATE,
2279   BFD_RELOC_ARM_OFFSET_IMM,
2280   BFD_RELOC_ARM_SHIFT_IMM,
2281   BFD_RELOC_ARM_SWI,
2282   BFD_RELOC_ARM_MULTI,
2283   BFD_RELOC_ARM_CP_OFF_IMM,
2284   BFD_RELOC_ARM_ADR_IMM,
2285   BFD_RELOC_ARM_LDR_IMM,
2286   BFD_RELOC_ARM_LITERAL,
2287   BFD_RELOC_ARM_IN_POOL,
2288   BFD_RELOC_ARM_OFFSET_IMM8,
2289   BFD_RELOC_ARM_HWLITERAL,
2290   BFD_RELOC_ARM_THUMB_ADD,
2291   BFD_RELOC_ARM_THUMB_IMM,
2292   BFD_RELOC_ARM_THUMB_SHIFT,
2293   BFD_RELOC_ARM_THUMB_OFFSET,
2294   BFD_RELOC_ARM_GOT12,
2295   BFD_RELOC_ARM_GOT32,
2296   BFD_RELOC_ARM_JUMP_SLOT,
2297   BFD_RELOC_ARM_COPY,
2298   BFD_RELOC_ARM_GLOB_DAT,
2299   BFD_RELOC_ARM_PLT32,
2300   BFD_RELOC_ARM_RELATIVE,
2301   BFD_RELOC_ARM_GOTOFF,
2302   BFD_RELOC_ARM_GOTPC,
2303
2304 /* Hitachi SH relocs.  Not all of these appear in object files. */
2305   BFD_RELOC_SH_PCDISP8BY2,
2306   BFD_RELOC_SH_PCDISP12BY2,
2307   BFD_RELOC_SH_IMM4,
2308   BFD_RELOC_SH_IMM4BY2,
2309   BFD_RELOC_SH_IMM4BY4,
2310   BFD_RELOC_SH_IMM8,
2311   BFD_RELOC_SH_IMM8BY2,
2312   BFD_RELOC_SH_IMM8BY4,
2313   BFD_RELOC_SH_PCRELIMM8BY2,
2314   BFD_RELOC_SH_PCRELIMM8BY4,
2315   BFD_RELOC_SH_SWITCH16,
2316   BFD_RELOC_SH_SWITCH32,
2317   BFD_RELOC_SH_USES,
2318   BFD_RELOC_SH_COUNT,
2319   BFD_RELOC_SH_ALIGN,
2320   BFD_RELOC_SH_CODE,
2321   BFD_RELOC_SH_DATA,
2322   BFD_RELOC_SH_LABEL,
2323   BFD_RELOC_SH_LOOP_START,
2324   BFD_RELOC_SH_LOOP_END,
2325   BFD_RELOC_SH_COPY,
2326   BFD_RELOC_SH_GLOB_DAT,
2327   BFD_RELOC_SH_JMP_SLOT,
2328   BFD_RELOC_SH_RELATIVE,
2329   BFD_RELOC_SH_GOTPC,
2330
2331 /* Thumb 23-, 12- and 9-bit pc-relative branches.  The lowest bit must
2332 be zero and is not stored in the instruction. */
2333   BFD_RELOC_THUMB_PCREL_BRANCH9,
2334   BFD_RELOC_THUMB_PCREL_BRANCH12,
2335   BFD_RELOC_THUMB_PCREL_BRANCH23,
2336
2337 /* ARC Cores relocs.
2338 ARC 22 bit pc-relative branch.  The lowest two bits must be zero and are
2339 not stored in the instruction.  The high 20 bits are installed in bits 26
2340 through 7 of the instruction. */
2341   BFD_RELOC_ARC_B22_PCREL,
2342
2343 /* ARC 26 bit absolute branch.  The lowest two bits must be zero and are not
2344 stored in the instruction.  The high 24 bits are installed in bits 23
2345 through 0. */
2346   BFD_RELOC_ARC_B26,
2347
2348 /* Mitsubishi D10V relocs.
2349 This is a 10-bit reloc with the right 2 bits
2350 assumed to be 0. */
2351   BFD_RELOC_D10V_10_PCREL_R,
2352
2353 /* Mitsubishi D10V relocs.
2354 This is a 10-bit reloc with the right 2 bits
2355 assumed to be 0.  This is the same as the previous reloc
2356 except it is in the left container, i.e.,
2357 shifted left 15 bits. */
2358   BFD_RELOC_D10V_10_PCREL_L,
2359
2360 /* This is an 18-bit reloc with the right 2 bits
2361 assumed to be 0. */
2362   BFD_RELOC_D10V_18,
2363
2364 /* This is an 18-bit reloc with the right 2 bits
2365 assumed to be 0. */
2366   BFD_RELOC_D10V_18_PCREL,
2367
2368 /* Mitsubishi D30V relocs.
2369 This is a 6-bit absolute reloc. */
2370   BFD_RELOC_D30V_6,
2371
2372 /* This is a 6-bit pc-relative reloc with
2373 the right 3 bits assumed to be 0. */
2374   BFD_RELOC_D30V_9_PCREL,
2375
2376 /* This is a 6-bit pc-relative reloc with
2377 the right 3 bits assumed to be 0. Same
2378 as the previous reloc but on the right side
2379 of the container. */
2380   BFD_RELOC_D30V_9_PCREL_R,
2381
2382 /* This is a 12-bit absolute reloc with the
2383 right 3 bitsassumed to be 0. */
2384   BFD_RELOC_D30V_15,
2385
2386 /* This is a 12-bit pc-relative reloc with
2387 the right 3 bits assumed to be 0. */
2388   BFD_RELOC_D30V_15_PCREL,
2389
2390 /* This is a 12-bit pc-relative reloc with
2391 the right 3 bits assumed to be 0. Same
2392 as the previous reloc but on the right side
2393 of the container. */
2394   BFD_RELOC_D30V_15_PCREL_R,
2395
2396 /* This is an 18-bit absolute reloc with
2397 the right 3 bits assumed to be 0. */
2398   BFD_RELOC_D30V_21,
2399
2400 /* This is an 18-bit pc-relative reloc with
2401 the right 3 bits assumed to be 0. */
2402   BFD_RELOC_D30V_21_PCREL,
2403
2404 /* This is an 18-bit pc-relative reloc with
2405 the right 3 bits assumed to be 0. Same
2406 as the previous reloc but on the right side
2407 of the container. */
2408   BFD_RELOC_D30V_21_PCREL_R,
2409
2410 /* This is a 32-bit absolute reloc. */
2411   BFD_RELOC_D30V_32,
2412
2413 /* This is a 32-bit pc-relative reloc. */
2414   BFD_RELOC_D30V_32_PCREL,
2415
2416 /* Mitsubishi M32R relocs.
2417 This is a 24 bit absolute address. */
2418   BFD_RELOC_M32R_24,
2419
2420 /* This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0. */
2421   BFD_RELOC_M32R_10_PCREL,
2422
2423 /* This is an 18-bit reloc with the right 2 bits assumed to be 0. */
2424   BFD_RELOC_M32R_18_PCREL,
2425
2426 /* This is a 26-bit reloc with the right 2 bits assumed to be 0. */
2427   BFD_RELOC_M32R_26_PCREL,
2428
2429 /* This is a 16-bit reloc containing the high 16 bits of an address
2430 used when the lower 16 bits are treated as unsigned. */
2431   BFD_RELOC_M32R_HI16_ULO,
2432
2433 /* This is a 16-bit reloc containing the high 16 bits of an address
2434 used when the lower 16 bits are treated as signed. */
2435   BFD_RELOC_M32R_HI16_SLO,
2436
2437 /* This is a 16-bit reloc containing the lower 16 bits of an address. */
2438   BFD_RELOC_M32R_LO16,
2439
2440 /* This is a 16-bit reloc containing the small data area offset for use in
2441 add3, load, and store instructions. */
2442   BFD_RELOC_M32R_SDA16,
2443
2444 /* This is a 9-bit reloc */
2445   BFD_RELOC_V850_9_PCREL,
2446
2447 /* This is a 22-bit reloc */
2448   BFD_RELOC_V850_22_PCREL,
2449
2450 /* This is a 16 bit offset from the short data area pointer. */
2451   BFD_RELOC_V850_SDA_16_16_OFFSET,
2452
2453 /* This is a 16 bit offset (of which only 15 bits are used) from the
2454 short data area pointer. */
2455   BFD_RELOC_V850_SDA_15_16_OFFSET,
2456
2457 /* This is a 16 bit offset from the zero data area pointer. */
2458   BFD_RELOC_V850_ZDA_16_16_OFFSET,
2459
2460 /* This is a 16 bit offset (of which only 15 bits are used) from the
2461 zero data area pointer. */
2462   BFD_RELOC_V850_ZDA_15_16_OFFSET,
2463
2464 /* This is an 8 bit offset (of which only 6 bits are used) from the
2465 tiny data area pointer. */
2466   BFD_RELOC_V850_TDA_6_8_OFFSET,
2467
2468 /* This is an 8bit offset (of which only 7 bits are used) from the tiny
2469 data area pointer. */
2470   BFD_RELOC_V850_TDA_7_8_OFFSET,
2471
2472 /* This is a 7 bit offset from the tiny data area pointer. */
2473   BFD_RELOC_V850_TDA_7_7_OFFSET,
2474
2475 /* This is a 16 bit offset from the tiny data area pointer. */
2476   BFD_RELOC_V850_TDA_16_16_OFFSET,
2477
2478 /* This is a 5 bit offset (of which only 4 bits are used) from the tiny
2479 data area pointer. */
2480   BFD_RELOC_V850_TDA_4_5_OFFSET,
2481
2482 /* This is a 4 bit offset from the tiny data area pointer. */
2483   BFD_RELOC_V850_TDA_4_4_OFFSET,
2484
2485 /* This is a 16 bit offset from the short data area pointer, with the
2486 bits placed non-contigously in the instruction. */
2487   BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET,
2488
2489 /* This is a 16 bit offset from the zero data area pointer, with the
2490 bits placed non-contigously in the instruction. */
2491   BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET,
2492
2493 /* This is a 6 bit offset from the call table base pointer. */
2494   BFD_RELOC_V850_CALLT_6_7_OFFSET,
2495
2496 /* This is a 16 bit offset from the call table base pointer. */
2497   BFD_RELOC_V850_CALLT_16_16_OFFSET,
2498
2499
2500 /* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
2501 instruction. */
2502   BFD_RELOC_MN10300_32_PCREL,
2503
2504 /* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
2505 instruction. */
2506   BFD_RELOC_MN10300_16_PCREL,
2507
2508 /* This is a 8bit DP reloc for the tms320c30, where the most
2509 significant 8 bits of a 24 bit word are placed into the least
2510 significant 8 bits of the opcode. */
2511   BFD_RELOC_TIC30_LDP,
2512
2513 /* This is a 7bit reloc for the tms320c54x, where the least
2514 significant 7 bits of a 16 bit word are placed into the least
2515 significant 7 bits of the opcode. */
2516   BFD_RELOC_TIC54X_PARTLS7,
2517
2518 /* This is a 9bit DP reloc for the tms320c54x, where the most
2519 significant 9 bits of a 16 bit word are placed into the least
2520 significant 9 bits of the opcode. */
2521   BFD_RELOC_TIC54X_PARTMS9,
2522
2523 /* This is an extended address 23-bit reloc for the tms320c54x. */
2524   BFD_RELOC_TIC54X_23,
2525
2526 /* This is a 16-bit reloc for the tms320c54x, where the least
2527 significant 16 bits of a 23-bit extended address are placed into
2528 the opcode. */
2529   BFD_RELOC_TIC54X_16_OF_23,
2530
2531 /* This is a reloc for the tms320c54x, where the most
2532 significant 7 bits of a 23-bit extended address are placed into
2533 the opcode. */
2534   BFD_RELOC_TIC54X_MS7_OF_23,
2535
2536 /* This is a 48 bit reloc for the FR30 that stores 32 bits. */
2537   BFD_RELOC_FR30_48,
2538
2539 /* This is a 32 bit reloc for the FR30 that stores 20 bits split up into
2540 two sections. */
2541   BFD_RELOC_FR30_20,
2542
2543 /* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
2544 4 bits. */
2545   BFD_RELOC_FR30_6_IN_4,
2546
2547 /* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
2548 into 8 bits. */
2549   BFD_RELOC_FR30_8_IN_8,
2550
2551 /* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
2552 into 8 bits. */
2553   BFD_RELOC_FR30_9_IN_8,
2554
2555 /* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
2556 into 8 bits. */
2557   BFD_RELOC_FR30_10_IN_8,
2558
2559 /* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
2560 short offset into 8 bits. */
2561   BFD_RELOC_FR30_9_PCREL,
2562
2563 /* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
2564 short offset into 11 bits. */
2565   BFD_RELOC_FR30_12_PCREL,
2566
2567 /* Motorola Mcore relocations. */
2568   BFD_RELOC_MCORE_PCREL_IMM8BY4,
2569   BFD_RELOC_MCORE_PCREL_IMM11BY2,
2570   BFD_RELOC_MCORE_PCREL_IMM4BY2,
2571   BFD_RELOC_MCORE_PCREL_32,
2572   BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
2573   BFD_RELOC_MCORE_RVA,
2574
2575 /* This is a 16 bit reloc for the AVR that stores 8 bit pc relative
2576 short offset into 7 bits. */
2577   BFD_RELOC_AVR_7_PCREL,
2578
2579 /* This is a 16 bit reloc for the AVR that stores 13 bit pc relative
2580 short offset into 12 bits. */
2581   BFD_RELOC_AVR_13_PCREL,
2582
2583 /* This is a 16 bit reloc for the AVR that stores 17 bit value (usually
2584 program memory address) into 16 bits. */
2585   BFD_RELOC_AVR_16_PM,
2586
2587 /* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
2588 data memory address) into 8 bit immediate value of LDI insn. */
2589   BFD_RELOC_AVR_LO8_LDI,
2590
2591 /* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
2592 of data memory address) into 8 bit immediate value of LDI insn. */
2593   BFD_RELOC_AVR_HI8_LDI,
2594
2595 /* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
2596 of program memory address) into 8 bit immediate value of LDI insn. */
2597   BFD_RELOC_AVR_HH8_LDI,
2598
2599 /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
2600 (usually data memory address) into 8 bit immediate value of SUBI insn. */
2601   BFD_RELOC_AVR_LO8_LDI_NEG,
2602
2603 /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
2604 (high 8 bit of data memory address) into 8 bit immediate value of
2605 SUBI insn. */
2606   BFD_RELOC_AVR_HI8_LDI_NEG,
2607
2608 /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
2609 (most high 8 bit of program memory address) into 8 bit immediate value
2610 of LDI or SUBI insn. */
2611   BFD_RELOC_AVR_HH8_LDI_NEG,
2612
2613 /* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
2614 command address) into 8 bit immediate value of LDI insn. */
2615   BFD_RELOC_AVR_LO8_LDI_PM,
2616
2617 /* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
2618 of command address) into 8 bit immediate value of LDI insn. */
2619   BFD_RELOC_AVR_HI8_LDI_PM,
2620
2621 /* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
2622 of command address) into 8 bit immediate value of LDI insn. */
2623   BFD_RELOC_AVR_HH8_LDI_PM,
2624
2625 /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
2626 (usually command address) into 8 bit immediate value of SUBI insn. */
2627   BFD_RELOC_AVR_LO8_LDI_PM_NEG,
2628
2629 /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
2630 (high 8 bit of 16 bit command address) into 8 bit immediate value
2631 of SUBI insn. */
2632   BFD_RELOC_AVR_HI8_LDI_PM_NEG,
2633
2634 /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
2635 (high 6 bit of 22 bit command address) into 8 bit immediate
2636 value of SUBI insn. */
2637   BFD_RELOC_AVR_HH8_LDI_PM_NEG,
2638
2639 /* This is a 32 bit reloc for the AVR that stores 23 bit value
2640 into 22 bits. */
2641   BFD_RELOC_AVR_CALL,
2642
2643 /* Direct 12 bit. */
2644   BFD_RELOC_390_12,
2645
2646 /* 12 bit GOT offset. */
2647   BFD_RELOC_390_GOT12,
2648
2649 /* 32 bit PC relative PLT address. */
2650   BFD_RELOC_390_PLT32,
2651
2652 /* Copy symbol at runtime. */
2653   BFD_RELOC_390_COPY,
2654
2655 /* Create GOT entry. */
2656   BFD_RELOC_390_GLOB_DAT,
2657
2658 /* Create PLT entry. */
2659   BFD_RELOC_390_JMP_SLOT,
2660
2661 /* Adjust by program base. */
2662   BFD_RELOC_390_RELATIVE,
2663
2664 /* 32 bit PC relative offset to GOT. */
2665   BFD_RELOC_390_GOTPC,
2666
2667 /* 16 bit GOT offset. */
2668   BFD_RELOC_390_GOT16,
2669
2670 /* PC relative 16 bit shifted by 1. */
2671   BFD_RELOC_390_PC16DBL,
2672
2673 /* 16 bit PC rel. PLT shifted by 1. */
2674   BFD_RELOC_390_PLT16DBL,
2675
2676 /* PC relative 32 bit shifted by 1. */
2677   BFD_RELOC_390_PC32DBL,
2678
2679 /* 32 bit PC rel. PLT shifted by 1. */
2680   BFD_RELOC_390_PLT32DBL,
2681
2682 /* 32 bit PC rel. GOT shifted by 1. */
2683   BFD_RELOC_390_GOTPCDBL,
2684
2685 /* 64 bit GOT offset. */
2686   BFD_RELOC_390_GOT64,
2687
2688 /* 64 bit PC relative PLT address. */
2689   BFD_RELOC_390_PLT64,
2690
2691 /* 32 bit rel. offset to GOT entry. */
2692   BFD_RELOC_390_GOTENT,
2693
2694 /* These two relocations are used by the linker to determine which of
2695 the entries in a C++ virtual function table are actually used.  When
2696 the --gc-sections option is given, the linker will zero out the entries
2697 that are not used, so that the code for those functions need not be
2698 included in the output.
2699
2700 VTABLE_INHERIT is a zero-space relocation used to describe to the
2701 linker the inheritence tree of a C++ virtual function table.  The
2702 relocation's symbol should be the parent class' vtable, and the
2703 relocation should be located at the child vtable.
2704
2705 VTABLE_ENTRY is a zero-space relocation that describes the use of a
2706 virtual function table entry.  The reloc's symbol should refer to the
2707 table of the class mentioned in the code.  Off of that base, an offset
2708 describes the entry that is being used.  For Rela hosts, this offset
2709 is stored in the reloc's addend.  For Rel hosts, we are forced to put
2710 this offset in the reloc's section offset. */
2711   BFD_RELOC_VTABLE_INHERIT,
2712   BFD_RELOC_VTABLE_ENTRY,
2713
2714 /* Intel IA64 Relocations. */
2715   BFD_RELOC_IA64_IMM14,
2716   BFD_RELOC_IA64_IMM22,
2717   BFD_RELOC_IA64_IMM64,
2718   BFD_RELOC_IA64_DIR32MSB,
2719   BFD_RELOC_IA64_DIR32LSB,
2720   BFD_RELOC_IA64_DIR64MSB,
2721   BFD_RELOC_IA64_DIR64LSB,
2722   BFD_RELOC_IA64_GPREL22,
2723   BFD_RELOC_IA64_GPREL64I,
2724   BFD_RELOC_IA64_GPREL32MSB,
2725   BFD_RELOC_IA64_GPREL32LSB,
2726   BFD_RELOC_IA64_GPREL64MSB,
2727   BFD_RELOC_IA64_GPREL64LSB,
2728   BFD_RELOC_IA64_LTOFF22,
2729   BFD_RELOC_IA64_LTOFF64I,
2730   BFD_RELOC_IA64_PLTOFF22,
2731   BFD_RELOC_IA64_PLTOFF64I,
2732   BFD_RELOC_IA64_PLTOFF64MSB,
2733   BFD_RELOC_IA64_PLTOFF64LSB,
2734   BFD_RELOC_IA64_FPTR64I,
2735   BFD_RELOC_IA64_FPTR32MSB,
2736   BFD_RELOC_IA64_FPTR32LSB,
2737   BFD_RELOC_IA64_FPTR64MSB,
2738   BFD_RELOC_IA64_FPTR64LSB,
2739   BFD_RELOC_IA64_PCREL21B,
2740   BFD_RELOC_IA64_PCREL21BI,
2741   BFD_RELOC_IA64_PCREL21M,
2742   BFD_RELOC_IA64_PCREL21F,
2743   BFD_RELOC_IA64_PCREL22,
2744   BFD_RELOC_IA64_PCREL60B,
2745   BFD_RELOC_IA64_PCREL64I,
2746   BFD_RELOC_IA64_PCREL32MSB,
2747   BFD_RELOC_IA64_PCREL32LSB,
2748   BFD_RELOC_IA64_PCREL64MSB,
2749   BFD_RELOC_IA64_PCREL64LSB,
2750   BFD_RELOC_IA64_LTOFF_FPTR22,
2751   BFD_RELOC_IA64_LTOFF_FPTR64I,
2752   BFD_RELOC_IA64_LTOFF_FPTR32MSB,
2753   BFD_RELOC_IA64_LTOFF_FPTR32LSB,
2754   BFD_RELOC_IA64_LTOFF_FPTR64MSB,
2755   BFD_RELOC_IA64_LTOFF_FPTR64LSB,
2756   BFD_RELOC_IA64_SEGREL32MSB,
2757   BFD_RELOC_IA64_SEGREL32LSB,
2758   BFD_RELOC_IA64_SEGREL64MSB,
2759   BFD_RELOC_IA64_SEGREL64LSB,
2760   BFD_RELOC_IA64_SECREL32MSB,
2761   BFD_RELOC_IA64_SECREL32LSB,
2762   BFD_RELOC_IA64_SECREL64MSB,
2763   BFD_RELOC_IA64_SECREL64LSB,
2764   BFD_RELOC_IA64_REL32MSB,
2765   BFD_RELOC_IA64_REL32LSB,
2766   BFD_RELOC_IA64_REL64MSB,
2767   BFD_RELOC_IA64_REL64LSB,
2768   BFD_RELOC_IA64_LTV32MSB,
2769   BFD_RELOC_IA64_LTV32LSB,
2770   BFD_RELOC_IA64_LTV64MSB,
2771   BFD_RELOC_IA64_LTV64LSB,
2772   BFD_RELOC_IA64_IPLTMSB,
2773   BFD_RELOC_IA64_IPLTLSB,
2774   BFD_RELOC_IA64_COPY,
2775   BFD_RELOC_IA64_TPREL22,
2776   BFD_RELOC_IA64_TPREL64MSB,
2777   BFD_RELOC_IA64_TPREL64LSB,
2778   BFD_RELOC_IA64_LTOFF_TP22,
2779   BFD_RELOC_IA64_LTOFF22X,
2780   BFD_RELOC_IA64_LDXMOV,
2781
2782 /* Motorola 68HC11 reloc.
2783 This is the 8 bits high part of an absolute address. */
2784   BFD_RELOC_M68HC11_HI8,
2785
2786 /* Motorola 68HC11 reloc.
2787 This is the 8 bits low part of an absolute address. */
2788   BFD_RELOC_M68HC11_LO8,
2789
2790 /* Motorola 68HC11 reloc.
2791 This is the 3 bits of a value. */
2792   BFD_RELOC_M68HC11_3B,
2793
2794 /* These relocs are only used within the CRIS assembler.  They are not
2795 (at present) written to any object files. */
2796   BFD_RELOC_CRIS_BDISP8,
2797   BFD_RELOC_CRIS_UNSIGNED_5,
2798   BFD_RELOC_CRIS_SIGNED_6,
2799   BFD_RELOC_CRIS_UNSIGNED_6,
2800   BFD_RELOC_CRIS_UNSIGNED_4,
2801
2802 /* Relocs used in ELF shared libraries for CRIS. */
2803   BFD_RELOC_CRIS_COPY,
2804   BFD_RELOC_CRIS_GLOB_DAT,
2805   BFD_RELOC_CRIS_JUMP_SLOT,
2806   BFD_RELOC_CRIS_RELATIVE,
2807
2808 /* 32-bit offset to symbol-entry within GOT. */
2809   BFD_RELOC_CRIS_32_GOT,
2810
2811 /* 16-bit offset to symbol-entry within GOT. */
2812   BFD_RELOC_CRIS_16_GOT,
2813
2814 /* 32-bit offset to symbol-entry within GOT, with PLT handling. */
2815   BFD_RELOC_CRIS_32_GOTPLT,
2816
2817 /* 16-bit offset to symbol-entry within GOT, with PLT handling. */
2818   BFD_RELOC_CRIS_16_GOTPLT,
2819
2820 /* 32-bit offset to symbol, relative to GOT. */
2821   BFD_RELOC_CRIS_32_GOTREL,
2822
2823 /* 32-bit offset to symbol with PLT entry, relative to GOT. */
2824   BFD_RELOC_CRIS_32_PLT_GOTREL,
2825
2826 /* 32-bit offset to symbol with PLT entry, relative to this relocation. */
2827   BFD_RELOC_CRIS_32_PLT_PCREL,
2828
2829 /* Intel i860 Relocations. */
2830   BFD_RELOC_860_COPY,
2831   BFD_RELOC_860_GLOB_DAT,
2832   BFD_RELOC_860_JUMP_SLOT,
2833   BFD_RELOC_860_RELATIVE,
2834   BFD_RELOC_860_PC26,
2835   BFD_RELOC_860_PLT26,
2836   BFD_RELOC_860_PC16,
2837   BFD_RELOC_860_LOW0,
2838   BFD_RELOC_860_SPLIT0,
2839   BFD_RELOC_860_LOW1,
2840   BFD_RELOC_860_SPLIT1,
2841   BFD_RELOC_860_LOW2,
2842   BFD_RELOC_860_SPLIT2,
2843   BFD_RELOC_860_LOW3,
2844   BFD_RELOC_860_LOGOT0,
2845   BFD_RELOC_860_SPGOT0,
2846   BFD_RELOC_860_LOGOT1,
2847   BFD_RELOC_860_SPGOT1,
2848   BFD_RELOC_860_LOGOTOFF0,
2849   BFD_RELOC_860_SPGOTOFF0,
2850   BFD_RELOC_860_LOGOTOFF1,
2851   BFD_RELOC_860_SPGOTOFF1,
2852   BFD_RELOC_860_LOGOTOFF2,
2853   BFD_RELOC_860_LOGOTOFF3,
2854   BFD_RELOC_860_LOPC,
2855   BFD_RELOC_860_HIGHADJ,
2856   BFD_RELOC_860_HAGOT,
2857   BFD_RELOC_860_HAGOTOFF,
2858   BFD_RELOC_860_HAPC,
2859   BFD_RELOC_860_HIGH,
2860   BFD_RELOC_860_HIGOT,
2861   BFD_RELOC_860_HIGOTOFF,
2862
2863 /* OpenRISC Relocations. */
2864   BFD_RELOC_OPENRISC_ABS_26,
2865   BFD_RELOC_OPENRISC_REL_26,
2866
2867 /* H8 elf Relocations. */
2868   BFD_RELOC_H8_DIR16A8,
2869   BFD_RELOC_H8_DIR16R8,
2870   BFD_RELOC_H8_DIR24A8,
2871   BFD_RELOC_H8_DIR24R8,
2872   BFD_RELOC_H8_DIR32A16,
2873   BFD_RELOC_UNUSED };
2874 typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
2875 reloc_howto_type *
2876 bfd_reloc_type_lookup PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
2877
2878 const char *
2879 bfd_get_reloc_code_name PARAMS ((bfd_reloc_code_real_type code));
2880
2881
2882 typedef struct symbol_cache_entry
2883 {
2884        /* A pointer to the BFD which owns the symbol. This information
2885           is necessary so that a back end can work out what additional
2886           information (invisible to the application writer) is carried
2887           with the symbol.
2888
2889           This field is *almost* redundant, since you can use section->owner
2890           instead, except that some symbols point to the global sections
2891           bfd_{abs,com,und}_section.  This could be fixed by making
2892           these globals be per-bfd (or per-target-flavor).  FIXME. */
2893
2894   struct _bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */
2895
2896        /* The text of the symbol. The name is left alone, and not copied; the
2897           application may not alter it. */
2898   const char *name;
2899
2900        /* The value of the symbol.  This really should be a union of a
2901           numeric value with a pointer, since some flags indicate that
2902           a pointer to another symbol is stored here.  */
2903   symvalue value;
2904
2905        /* Attributes of a symbol: */
2906
2907 #define BSF_NO_FLAGS    0x00
2908
2909        /* The symbol has local scope; <<static>> in <<C>>. The value
2910           is the offset into the section of the data. */
2911 #define BSF_LOCAL      0x01
2912
2913        /* The symbol has global scope; initialized data in <<C>>. The
2914           value is the offset into the section of the data. */
2915 #define BSF_GLOBAL     0x02
2916
2917        /* The symbol has global scope and is exported. The value is
2918           the offset into the section of the data. */
2919 #define BSF_EXPORT     BSF_GLOBAL /* no real difference */
2920
2921        /* A normal C symbol would be one of:
2922           <<BSF_LOCAL>>, <<BSF_FORT_COMM>>,  <<BSF_UNDEFINED>> or
2923           <<BSF_GLOBAL>> */
2924
2925        /* The symbol is a debugging record. The value has an arbitary
2926           meaning, unless BSF_DEBUGGING_RELOC is also set.  */
2927 #define BSF_DEBUGGING  0x08
2928
2929        /* The symbol denotes a function entry point.  Used in ELF,
2930           perhaps others someday.  */
2931 #define BSF_FUNCTION    0x10
2932
2933        /* Used by the linker. */
2934 #define BSF_KEEP        0x20
2935 #define BSF_KEEP_G      0x40
2936
2937        /* A weak global symbol, overridable without warnings by
2938           a regular global symbol of the same name.  */
2939 #define BSF_WEAK        0x80
2940
2941        /* This symbol was created to point to a section, e.g. ELF's
2942           STT_SECTION symbols.  */
2943 #define BSF_SECTION_SYM 0x100
2944
2945        /* The symbol used to be a common symbol, but now it is
2946           allocated. */
2947 #define BSF_OLD_COMMON  0x200
2948
2949        /* The default value for common data. */
2950 #define BFD_FORT_COMM_DEFAULT_VALUE 0
2951
2952        /* In some files the type of a symbol sometimes alters its
2953           location in an output file - ie in coff a <<ISFCN>> symbol
2954           which is also <<C_EXT>> symbol appears where it was
2955           declared and not at the end of a section.  This bit is set
2956           by the target BFD part to convey this information. */
2957
2958 #define BSF_NOT_AT_END    0x400
2959
2960        /* Signal that the symbol is the label of constructor section. */
2961 #define BSF_CONSTRUCTOR   0x800
2962
2963        /* Signal that the symbol is a warning symbol.  The name is a
2964           warning.  The name of the next symbol is the one to warn about;
2965           if a reference is made to a symbol with the same name as the next
2966           symbol, a warning is issued by the linker. */
2967 #define BSF_WARNING       0x1000
2968
2969        /* Signal that the symbol is indirect.  This symbol is an indirect
2970           pointer to the symbol with the same name as the next symbol. */
2971 #define BSF_INDIRECT      0x2000
2972
2973        /* BSF_FILE marks symbols that contain a file name.  This is used
2974           for ELF STT_FILE symbols.  */
2975 #define BSF_FILE          0x4000
2976
2977        /* Symbol is from dynamic linking information.  */
2978 #define BSF_DYNAMIC       0x8000
2979
2980        /* The symbol denotes a data object.  Used in ELF, and perhaps
2981           others someday.  */
2982 #define BSF_OBJECT        0x10000
2983
2984        /* This symbol is a debugging symbol.  The value is the offset
2985           into the section of the data.  BSF_DEBUGGING should be set
2986           as well.  */
2987 #define BSF_DEBUGGING_RELOC 0x20000
2988
2989   flagword flags;
2990
2991        /* A pointer to the section to which this symbol is
2992           relative.  This will always be non NULL, there are special
2993           sections for undefined and absolute symbols.  */
2994   struct sec *section;
2995
2996        /* Back end special data.  */
2997   union
2998     {
2999       PTR p;
3000       bfd_vma i;
3001     } udata;
3002
3003 } asymbol;
3004 #define bfd_get_symtab_upper_bound(abfd) \
3005      BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
3006 boolean
3007 bfd_is_local_label PARAMS ((bfd *abfd, asymbol *sym));
3008
3009 boolean
3010 bfd_is_local_label_name PARAMS ((bfd *abfd, const char *name));
3011
3012 #define bfd_is_local_label_name(abfd, name) \
3013      BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
3014 #define bfd_canonicalize_symtab(abfd, location) \
3015      BFD_SEND (abfd, _bfd_canonicalize_symtab,\
3016                   (abfd, location))
3017 boolean
3018 bfd_set_symtab PARAMS ((bfd *abfd, asymbol **location, unsigned int count));
3019
3020 void
3021 bfd_print_symbol_vandf PARAMS ((bfd *abfd, PTR file, asymbol *symbol));
3022
3023 #define bfd_make_empty_symbol(abfd) \
3024      BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
3025 #define bfd_make_debug_symbol(abfd,ptr,size) \
3026         BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
3027 int
3028 bfd_decode_symclass PARAMS ((asymbol *symbol));
3029
3030 boolean
3031 bfd_is_undefined_symclass PARAMS ((int symclass));
3032
3033 void
3034 bfd_symbol_info PARAMS ((asymbol *symbol, symbol_info *ret));
3035
3036 boolean
3037 bfd_copy_private_symbol_data PARAMS ((bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym));
3038
3039 #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
3040      BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
3041                (ibfd, isymbol, obfd, osymbol))
3042 struct _bfd
3043 {
3044     /* The filename the application opened the BFD with.  */
3045     const char *filename;
3046
3047     /* A pointer to the target jump table.             */
3048     const struct bfd_target *xvec;
3049
3050     /* To avoid dragging too many header files into every file that
3051        includes `<<bfd.h>>', IOSTREAM has been declared as a "char
3052        *", and MTIME as a "long".  Their correct types, to which they
3053        are cast when used, are "FILE *" and "time_t".    The iostream
3054        is the result of an fopen on the filename.  However, if the
3055        BFD_IN_MEMORY flag is set, then iostream is actually a pointer
3056        to a bfd_in_memory struct.  */
3057     PTR iostream;
3058
3059     /* Is the file descriptor being cached?  That is, can it be closed as
3060        needed, and re-opened when accessed later?  */
3061
3062     boolean cacheable;
3063
3064     /* Marks whether there was a default target specified when the
3065        BFD was opened. This is used to select which matching algorithm
3066        to use to choose the back end. */
3067
3068     boolean target_defaulted;
3069
3070     /* The caching routines use these to maintain a
3071        least-recently-used list of BFDs */
3072
3073     struct _bfd *lru_prev, *lru_next;
3074
3075     /* When a file is closed by the caching routines, BFD retains
3076        state information on the file here: */
3077
3078     ufile_ptr where;
3079
3080     /* and here: (``once'' means at least once) */
3081
3082     boolean opened_once;
3083
3084     /* Set if we have a locally maintained mtime value, rather than
3085        getting it from the file each time: */
3086
3087     boolean mtime_set;
3088
3089     /* File modified time, if mtime_set is true: */
3090
3091     long mtime;
3092
3093     /* Reserved for an unimplemented file locking extension.*/
3094
3095     int ifd;
3096
3097     /* The format which belongs to the BFD. (object, core, etc.) */
3098
3099     bfd_format format;
3100
3101     /* The direction the BFD was opened with*/
3102
3103     enum bfd_direction {no_direction = 0,
3104                         read_direction = 1,
3105                         write_direction = 2,
3106                         both_direction = 3} direction;
3107
3108     /* Format_specific flags*/
3109
3110     flagword flags;
3111
3112     /* Currently my_archive is tested before adding origin to
3113        anything. I believe that this can become always an add of
3114        origin, with origin set to 0 for non archive files.   */
3115
3116     ufile_ptr origin;
3117
3118     /* Remember when output has begun, to stop strange things
3119        from happening. */
3120     boolean output_has_begun;
3121
3122     /* Pointer to linked list of sections*/
3123     struct sec  *sections;
3124
3125     /* The number of sections */
3126     unsigned int section_count;
3127
3128     /* Stuff only useful for object files:
3129        The start address. */
3130     bfd_vma start_address;
3131
3132     /* Used for input and output*/
3133     unsigned int symcount;
3134
3135     /* Symbol table for output BFD (with symcount entries) */
3136     struct symbol_cache_entry  **outsymbols;
3137
3138     /* Pointer to structure which contains architecture information*/
3139     const struct bfd_arch_info *arch_info;
3140
3141     /* Stuff only useful for archives:*/
3142     PTR arelt_data;
3143     struct _bfd *my_archive;     /* The containing archive BFD.  */
3144     struct _bfd *next;           /* The next BFD in the archive.  */
3145     struct _bfd *archive_head;   /* The first BFD in the archive.  */
3146     boolean has_armap;
3147
3148     /* A chain of BFD structures involved in a link.  */
3149     struct _bfd *link_next;
3150
3151     /* A field used by _bfd_generic_link_add_archive_symbols.  This will
3152        be used only for archive elements.  */
3153     int archive_pass;
3154
3155     /* Used by the back end to hold private data. */
3156
3157     union
3158       {
3159       struct aout_data_struct *aout_data;
3160       struct artdata *aout_ar_data;
3161       struct _oasys_data *oasys_obj_data;
3162       struct _oasys_ar_data *oasys_ar_data;
3163       struct coff_tdata *coff_obj_data;
3164       struct pe_tdata *pe_obj_data;
3165       struct xcoff_tdata *xcoff_obj_data;
3166       struct ecoff_tdata *ecoff_obj_data;
3167       struct ieee_data_struct *ieee_data;
3168       struct ieee_ar_data_struct *ieee_ar_data;
3169       struct srec_data_struct *srec_data;
3170       struct ihex_data_struct *ihex_data;
3171       struct tekhex_data_struct *tekhex_data;
3172       struct elf_obj_tdata *elf_obj_data;
3173       struct nlm_obj_tdata *nlm_obj_data;
3174       struct bout_data_struct *bout_data;
3175       struct sun_core_struct *sun_core_data;
3176       struct sco5_core_struct *sco5_core_data;
3177       struct trad_core_struct *trad_core_data;
3178       struct som_data_struct *som_data;
3179       struct hpux_core_struct *hpux_core_data;
3180       struct hppabsd_core_struct *hppabsd_core_data;
3181       struct sgi_core_struct *sgi_core_data;
3182       struct lynx_core_struct *lynx_core_data;
3183       struct osf_core_struct *osf_core_data;
3184       struct cisco_core_struct *cisco_core_data;
3185       struct versados_data_struct *versados_data;
3186       struct netbsd_core_struct *netbsd_core_data;
3187       PTR any;
3188       } tdata;
3189
3190     /* Used by the application to hold private data*/
3191     PTR usrdata;
3192
3193   /* Where all the allocated stuff under this BFD goes.  This is a
3194      struct objalloc *, but we use PTR to avoid requiring the inclusion of
3195      objalloc.h.  */
3196     PTR memory;
3197 };
3198
3199 typedef enum bfd_error
3200 {
3201   bfd_error_no_error = 0,
3202   bfd_error_system_call,
3203   bfd_error_invalid_target,
3204   bfd_error_wrong_format,
3205   bfd_error_wrong_object_format,
3206   bfd_error_invalid_operation,
3207   bfd_error_no_memory,
3208   bfd_error_no_symbols,
3209   bfd_error_no_armap,
3210   bfd_error_no_more_archived_files,
3211   bfd_error_malformed_archive,
3212   bfd_error_file_not_recognized,
3213   bfd_error_file_ambiguously_recognized,
3214   bfd_error_no_contents,
3215   bfd_error_nonrepresentable_section,
3216   bfd_error_no_debug_section,
3217   bfd_error_bad_value,
3218   bfd_error_file_truncated,
3219   bfd_error_file_too_big,
3220   bfd_error_invalid_error_code
3221 } bfd_error_type;
3222
3223 bfd_error_type
3224 bfd_get_error PARAMS ((void));
3225
3226 void
3227 bfd_set_error PARAMS ((bfd_error_type error_tag));
3228
3229 const char *
3230 bfd_errmsg PARAMS ((bfd_error_type error_tag));
3231
3232 void
3233 bfd_perror PARAMS ((const char *message));
3234
3235 typedef void (*bfd_error_handler_type) PARAMS ((const char *, ...));
3236
3237 bfd_error_handler_type
3238 bfd_set_error_handler PARAMS ((bfd_error_handler_type));
3239
3240 void
3241 bfd_set_error_program_name PARAMS ((const char *));
3242
3243 bfd_error_handler_type
3244 bfd_get_error_handler PARAMS ((void));
3245
3246 const char *
3247 bfd_archive_filename PARAMS ((bfd *));
3248
3249 long
3250 bfd_get_reloc_upper_bound PARAMS ((bfd *abfd, asection *sect));
3251
3252 long
3253 bfd_canonicalize_reloc PARAMS ((bfd *abfd,
3254     asection *sec,
3255     arelent **loc,
3256     asymbol **syms));
3257
3258 void
3259 bfd_set_reloc PARAMS ((bfd *abfd, asection *sec, arelent **rel, unsigned int count)
3260     
3261     );
3262
3263 boolean
3264 bfd_set_file_flags PARAMS ((bfd *abfd, flagword flags));
3265
3266 int
3267 bfd_get_arch_size PARAMS ((bfd *abfd));
3268
3269 int
3270 bfd_get_sign_extend_vma PARAMS ((bfd *abfd));
3271
3272 boolean
3273 bfd_set_start_address PARAMS ((bfd *abfd, bfd_vma vma));
3274
3275 long
3276 bfd_get_mtime PARAMS ((bfd *abfd));
3277
3278 long
3279 bfd_get_size PARAMS ((bfd *abfd));
3280
3281 unsigned int
3282 bfd_get_gp_size PARAMS ((bfd *abfd));
3283
3284 void
3285 bfd_set_gp_size PARAMS ((bfd *abfd, unsigned int i));
3286
3287 bfd_vma
3288 bfd_scan_vma PARAMS ((const char *string, const char **end, int base));
3289
3290 boolean
3291 bfd_copy_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd));
3292
3293 #define bfd_copy_private_bfd_data(ibfd, obfd) \
3294      BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
3295                (ibfd, obfd))
3296 boolean
3297 bfd_merge_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd));
3298
3299 #define bfd_merge_private_bfd_data(ibfd, obfd) \
3300      BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
3301                (ibfd, obfd))
3302 boolean
3303 bfd_set_private_flags PARAMS ((bfd *abfd, flagword flags));
3304
3305 #define bfd_set_private_flags(abfd, flags) \
3306      BFD_SEND (abfd, _bfd_set_private_flags, \
3307                (abfd, flags))
3308 #define bfd_sizeof_headers(abfd, reloc) \
3309      BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
3310
3311 #define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
3312      BFD_SEND (abfd, _bfd_find_nearest_line,  (abfd, sec, syms, off, file, func, line))
3313
3314        /* Do these three do anything useful at all, for any back end?  */
3315 #define bfd_debug_info_start(abfd) \
3316         BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
3317
3318 #define bfd_debug_info_end(abfd) \
3319         BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
3320
3321 #define bfd_debug_info_accumulate(abfd, section) \
3322         BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
3323
3324
3325 #define bfd_stat_arch_elt(abfd, stat) \
3326         BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
3327
3328 #define bfd_update_armap_timestamp(abfd) \
3329         BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
3330
3331 #define bfd_set_arch_mach(abfd, arch, mach)\
3332         BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
3333
3334 #define bfd_relax_section(abfd, section, link_info, again) \
3335        BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
3336
3337 #define bfd_gc_sections(abfd, link_info) \
3338        BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
3339
3340 #define bfd_merge_sections(abfd, link_info) \
3341        BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
3342
3343 #define bfd_link_hash_table_create(abfd) \
3344        BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
3345
3346 #define bfd_link_add_symbols(abfd, info) \
3347        BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
3348
3349 #define bfd_final_link(abfd, info) \
3350        BFD_SEND (abfd, _bfd_final_link, (abfd, info))
3351
3352 #define bfd_free_cached_info(abfd) \
3353        BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
3354
3355 #define bfd_get_dynamic_symtab_upper_bound(abfd) \
3356        BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
3357
3358 #define bfd_print_private_bfd_data(abfd, file)\
3359        BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
3360
3361 #define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
3362        BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
3363
3364 #define bfd_get_dynamic_reloc_upper_bound(abfd) \
3365        BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
3366
3367 #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
3368        BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
3369
3370 extern bfd_byte *bfd_get_relocated_section_contents
3371        PARAMS ((bfd *, struct bfd_link_info *,
3372                  struct bfd_link_order *, bfd_byte *,
3373                  boolean, asymbol **));
3374
3375 boolean
3376 bfd_alt_mach_code PARAMS ((bfd *abfd, int index));
3377
3378 symindex
3379 bfd_get_next_mapent PARAMS ((bfd *abfd, symindex previous, carsym **sym));
3380
3381 boolean
3382 bfd_set_archive_head PARAMS ((bfd *output, bfd *new_head));
3383
3384 bfd *
3385 bfd_openr_next_archived_file PARAMS ((bfd *archive, bfd *previous));
3386
3387 const char *
3388 bfd_core_file_failing_command PARAMS ((bfd *abfd));
3389
3390 int
3391 bfd_core_file_failing_signal PARAMS ((bfd *abfd));
3392
3393 boolean
3394 core_file_matches_executable_p PARAMS ((bfd *core_bfd, bfd *exec_bfd));
3395
3396 #define BFD_SEND(bfd, message, arglist) \
3397                ((*((bfd)->xvec->message)) arglist)
3398
3399 #ifdef DEBUG_BFD_SEND
3400 #undef BFD_SEND
3401 #define BFD_SEND(bfd, message, arglist) \
3402   (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
3403     ((*((bfd)->xvec->message)) arglist) : \
3404     (bfd_assert (__FILE__,__LINE__), NULL))
3405 #endif
3406 #define BFD_SEND_FMT(bfd, message, arglist) \
3407             (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
3408
3409 #ifdef DEBUG_BFD_SEND
3410 #undef BFD_SEND_FMT
3411 #define BFD_SEND_FMT(bfd, message, arglist) \
3412   (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
3413    (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
3414    (bfd_assert (__FILE__,__LINE__), NULL))
3415 #endif
3416 enum bfd_flavour {
3417   bfd_target_unknown_flavour,
3418   bfd_target_aout_flavour,
3419   bfd_target_coff_flavour,
3420   bfd_target_ecoff_flavour,
3421   bfd_target_xcoff_flavour,
3422   bfd_target_elf_flavour,
3423   bfd_target_ieee_flavour,
3424   bfd_target_nlm_flavour,
3425   bfd_target_oasys_flavour,
3426   bfd_target_tekhex_flavour,
3427   bfd_target_srec_flavour,
3428   bfd_target_ihex_flavour,
3429   bfd_target_som_flavour,
3430   bfd_target_os9k_flavour,
3431   bfd_target_versados_flavour,
3432   bfd_target_msdos_flavour,
3433   bfd_target_ovax_flavour,
3434   bfd_target_evax_flavour
3435 };
3436
3437 enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
3438
3439 /* Forward declaration.  */
3440 typedef struct bfd_link_info _bfd_link_info;
3441
3442 typedef struct bfd_target
3443 {
3444   char *name;
3445   enum bfd_flavour flavour;
3446   enum bfd_endian byteorder;
3447   enum bfd_endian header_byteorder;
3448   flagword object_flags;
3449   flagword section_flags;
3450   char symbol_leading_char;
3451   char ar_pad_char;
3452   unsigned short ar_max_namelen;
3453   bfd_vma        (*bfd_getx64) PARAMS ((const bfd_byte *));
3454   bfd_signed_vma (*bfd_getx_signed_64) PARAMS ((const bfd_byte *));
3455   void           (*bfd_putx64) PARAMS ((bfd_vma, bfd_byte *));
3456   bfd_vma        (*bfd_getx32) PARAMS ((const bfd_byte *));
3457   bfd_signed_vma (*bfd_getx_signed_32) PARAMS ((const bfd_byte *));
3458   void           (*bfd_putx32) PARAMS ((bfd_vma, bfd_byte *));
3459   bfd_vma        (*bfd_getx16) PARAMS ((const bfd_byte *));
3460   bfd_signed_vma (*bfd_getx_signed_16) PARAMS ((const bfd_byte *));
3461   void           (*bfd_putx16) PARAMS ((bfd_vma, bfd_byte *));
3462   bfd_vma        (*bfd_h_getx64) PARAMS ((const bfd_byte *));
3463   bfd_signed_vma (*bfd_h_getx_signed_64) PARAMS ((const bfd_byte *));
3464   void           (*bfd_h_putx64) PARAMS ((bfd_vma, bfd_byte *));
3465   bfd_vma        (*bfd_h_getx32) PARAMS ((const bfd_byte *));
3466   bfd_signed_vma (*bfd_h_getx_signed_32) PARAMS ((const bfd_byte *));
3467   void           (*bfd_h_putx32) PARAMS ((bfd_vma, bfd_byte *));
3468   bfd_vma        (*bfd_h_getx16) PARAMS ((const bfd_byte *));
3469   bfd_signed_vma (*bfd_h_getx_signed_16) PARAMS ((const bfd_byte *));
3470   void           (*bfd_h_putx16) PARAMS ((bfd_vma, bfd_byte *));
3471   const struct bfd_target *(*_bfd_check_format[bfd_type_end]) PARAMS ((bfd *));
3472   boolean  (*_bfd_set_format[bfd_type_end]) PARAMS ((bfd *));
3473   boolean  (*_bfd_write_contents[bfd_type_end]) PARAMS ((bfd *));
3474
3475   /* Generic entry points.  */
3476 #define BFD_JUMP_TABLE_GENERIC(NAME)\
3477 CAT(NAME,_close_and_cleanup),\
3478 CAT(NAME,_bfd_free_cached_info),\
3479 CAT(NAME,_new_section_hook),\
3480 CAT(NAME,_get_section_contents),\
3481 CAT(NAME,_get_section_contents_in_window)
3482
3483   /* Called when the BFD is being closed to do any necessary cleanup.  */
3484   boolean  (*_close_and_cleanup) PARAMS ((bfd *));
3485   /* Ask the BFD to free all cached information.  */
3486   boolean  (*_bfd_free_cached_info) PARAMS ((bfd *));
3487   /* Called when a new section is created.  */
3488   boolean  (*_new_section_hook) PARAMS ((bfd *, sec_ptr));
3489   /* Read the contents of a section.  */
3490   boolean  (*_bfd_get_section_contents) PARAMS ((bfd *, sec_ptr, PTR,
3491                                                  file_ptr, bfd_size_type));
3492   boolean  (*_bfd_get_section_contents_in_window)
3493     PARAMS ((bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type));
3494
3495   /* Entry points to copy private data.  */
3496 #define BFD_JUMP_TABLE_COPY(NAME)\
3497 CAT(NAME,_bfd_copy_private_bfd_data),\
3498 CAT(NAME,_bfd_merge_private_bfd_data),\
3499 CAT(NAME,_bfd_copy_private_section_data),\
3500 CAT(NAME,_bfd_copy_private_symbol_data),\
3501 CAT(NAME,_bfd_set_private_flags),\
3502 CAT(NAME,_bfd_print_private_bfd_data)\
3503   /* Called to copy BFD general private data from one object file
3504      to another.  */
3505   boolean  (*_bfd_copy_private_bfd_data) PARAMS ((bfd *, bfd *));
3506   /* Called to merge BFD general private data from one object file
3507      to a common output file when linking.  */
3508   boolean  (*_bfd_merge_private_bfd_data) PARAMS ((bfd *, bfd *));
3509   /* Called to copy BFD private section data from one object file
3510      to another.  */
3511   boolean  (*_bfd_copy_private_section_data) PARAMS ((bfd *, sec_ptr,
3512                                                       bfd *, sec_ptr));
3513   /* Called to copy BFD private symbol data from one symbol
3514      to another.  */
3515   boolean  (*_bfd_copy_private_symbol_data) PARAMS ((bfd *, asymbol *,
3516                                                      bfd *, asymbol *));
3517   /* Called to set private backend flags */
3518   boolean  (*_bfd_set_private_flags) PARAMS ((bfd *, flagword));
3519
3520   /* Called to print private BFD data */
3521   boolean  (*_bfd_print_private_bfd_data) PARAMS ((bfd *, PTR));
3522
3523   /* Core file entry points.  */
3524 #define BFD_JUMP_TABLE_CORE(NAME)\
3525 CAT(NAME,_core_file_failing_command),\
3526 CAT(NAME,_core_file_failing_signal),\
3527 CAT(NAME,_core_file_matches_executable_p)
3528   char *   (*_core_file_failing_command) PARAMS ((bfd *));
3529   int      (*_core_file_failing_signal) PARAMS ((bfd *));
3530   boolean  (*_core_file_matches_executable_p) PARAMS ((bfd *, bfd *));
3531
3532   /* Archive entry points.  */
3533 #define BFD_JUMP_TABLE_ARCHIVE(NAME)\
3534 CAT(NAME,_slurp_armap),\
3535 CAT(NAME,_slurp_extended_name_table),\
3536 CAT(NAME,_construct_extended_name_table),\
3537 CAT(NAME,_truncate_arname),\
3538 CAT(NAME,_write_armap),\
3539 CAT(NAME,_read_ar_hdr),\
3540 CAT(NAME,_openr_next_archived_file),\
3541 CAT(NAME,_get_elt_at_index),\
3542 CAT(NAME,_generic_stat_arch_elt),\
3543 CAT(NAME,_update_armap_timestamp)
3544   boolean  (*_bfd_slurp_armap) PARAMS ((bfd *));
3545   boolean  (*_bfd_slurp_extended_name_table) PARAMS ((bfd *));
3546   boolean  (*_bfd_construct_extended_name_table)
3547     PARAMS ((bfd *, char **, bfd_size_type *, const char **));
3548   void     (*_bfd_truncate_arname) PARAMS ((bfd *, const char *, char *));
3549   boolean  (*write_armap)
3550     PARAMS ((bfd *, unsigned int, struct orl *, unsigned int, int));
3551   PTR      (*_bfd_read_ar_hdr_fn) PARAMS ((bfd *));
3552   bfd *    (*openr_next_archived_file) PARAMS ((bfd *, bfd *));
3553 #define bfd_get_elt_at_index(b,i) BFD_SEND(b, _bfd_get_elt_at_index, (b,i))
3554   bfd *    (*_bfd_get_elt_at_index) PARAMS ((bfd *, symindex));
3555   int      (*_bfd_stat_arch_elt) PARAMS ((bfd *, struct stat *));
3556   boolean  (*_bfd_update_armap_timestamp) PARAMS ((bfd *));
3557
3558   /* Entry points used for symbols.  */
3559 #define BFD_JUMP_TABLE_SYMBOLS(NAME)\
3560 CAT(NAME,_get_symtab_upper_bound),\
3561 CAT(NAME,_get_symtab),\
3562 CAT(NAME,_make_empty_symbol),\
3563 CAT(NAME,_print_symbol),\
3564 CAT(NAME,_get_symbol_info),\
3565 CAT(NAME,_bfd_is_local_label_name),\
3566 CAT(NAME,_get_lineno),\
3567 CAT(NAME,_find_nearest_line),\
3568 CAT(NAME,_bfd_make_debug_symbol),\
3569 CAT(NAME,_read_minisymbols),\
3570 CAT(NAME,_minisymbol_to_symbol)
3571   long     (*_bfd_get_symtab_upper_bound) PARAMS ((bfd *));
3572   long     (*_bfd_canonicalize_symtab) PARAMS ((bfd *,
3573                                                 struct symbol_cache_entry **));
3574   struct symbol_cache_entry *
3575            (*_bfd_make_empty_symbol) PARAMS ((bfd *));
3576   void     (*_bfd_print_symbol) PARAMS ((bfd *, PTR,
3577                                          struct symbol_cache_entry *,
3578                                          bfd_print_symbol_type));
3579 #define bfd_print_symbol(b,p,s,e) BFD_SEND(b, _bfd_print_symbol, (b,p,s,e))
3580   void     (*_bfd_get_symbol_info) PARAMS ((bfd *,
3581                                             struct symbol_cache_entry *,
3582                                             symbol_info *));
3583 #define bfd_get_symbol_info(b,p,e) BFD_SEND(b, _bfd_get_symbol_info, (b,p,e))
3584   boolean  (*_bfd_is_local_label_name) PARAMS ((bfd *, const char *));
3585
3586   alent *  (*_get_lineno) PARAMS ((bfd *, struct symbol_cache_entry *));
3587   boolean  (*_bfd_find_nearest_line)
3588     PARAMS ((bfd *, struct sec *, struct symbol_cache_entry **, bfd_vma,
3589              const char **, const char **, unsigned int *));
3590  /* Back-door to allow format-aware applications to create debug symbols
3591     while using BFD for everything else.  Currently used by the assembler
3592     when creating COFF files.  */
3593   asymbol *(*_bfd_make_debug_symbol) PARAMS ((bfd *, void *,
3594                                               unsigned long size));
3595 #define bfd_read_minisymbols(b, d, m, s) \
3596   BFD_SEND (b, _read_minisymbols, (b, d, m, s))
3597   long     (*_read_minisymbols) PARAMS ((bfd *, boolean, PTR *,
3598                                          unsigned int *));
3599 #define bfd_minisymbol_to_symbol(b, d, m, f) \
3600   BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
3601   asymbol *(*_minisymbol_to_symbol) PARAMS ((bfd *, boolean, const PTR,
3602                                              asymbol *));
3603
3604   /* Routines for relocs.  */
3605 #define BFD_JUMP_TABLE_RELOCS(NAME)\
3606 CAT(NAME,_get_reloc_upper_bound),\
3607 CAT(NAME,_canonicalize_reloc),\
3608 CAT(NAME,_bfd_reloc_type_lookup)
3609   long     (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr));
3610   long     (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **,
3611                                                struct symbol_cache_entry **));
3612   /* See documentation on reloc types.  */
3613   reloc_howto_type *
3614            (*reloc_type_lookup) PARAMS ((bfd *, bfd_reloc_code_real_type));
3615
3616   /* Routines used when writing an object file.  */
3617 #define BFD_JUMP_TABLE_WRITE(NAME)\
3618 CAT(NAME,_set_arch_mach),\
3619 CAT(NAME,_set_section_contents)
3620   boolean  (*_bfd_set_arch_mach) PARAMS ((bfd *, enum bfd_architecture,
3621                                           unsigned long));
3622   boolean  (*_bfd_set_section_contents) PARAMS ((bfd *, sec_ptr, PTR,
3623                                                  file_ptr, bfd_size_type));
3624
3625   /* Routines used by the linker.  */
3626 #define BFD_JUMP_TABLE_LINK(NAME)\
3627 CAT(NAME,_sizeof_headers),\
3628 CAT(NAME,_bfd_get_relocated_section_contents),\
3629 CAT(NAME,_bfd_relax_section),\
3630 CAT(NAME,_bfd_link_hash_table_create),\
3631 CAT(NAME,_bfd_link_add_symbols),\
3632 CAT(NAME,_bfd_final_link),\
3633 CAT(NAME,_bfd_link_split_section),\
3634 CAT(NAME,_bfd_gc_sections),\
3635 CAT(NAME,_bfd_merge_sections)
3636   int      (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean));
3637   bfd_byte *(*_bfd_get_relocated_section_contents)
3638     PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *,
3639              bfd_byte *, boolean, struct symbol_cache_entry **));
3640
3641   boolean  (*_bfd_relax_section)
3642     PARAMS ((bfd *, struct sec *, struct bfd_link_info *, boolean *));
3643
3644   /* Create a hash table for the linker.  Different backends store
3645      different information in this table.  */
3646   struct bfd_link_hash_table *(*_bfd_link_hash_table_create) PARAMS ((bfd *));
3647
3648   /* Add symbols from this object file into the hash table.  */
3649   boolean  (*_bfd_link_add_symbols) PARAMS ((bfd *, struct bfd_link_info *));
3650
3651   /* Do a link based on the link_order structures attached to each
3652      section of the BFD.  */
3653   boolean  (*_bfd_final_link) PARAMS ((bfd *, struct bfd_link_info *));
3654
3655   /* Should this section be split up into smaller pieces during linking.  */
3656   boolean  (*_bfd_link_split_section) PARAMS ((bfd *, struct sec *));
3657
3658   /* Remove sections that are not referenced from the output.  */
3659   boolean  (*_bfd_gc_sections) PARAMS ((bfd *, struct bfd_link_info *));
3660
3661   /* Attempt to merge SEC_MERGE sections.  */
3662   boolean  (*_bfd_merge_sections) PARAMS ((bfd *, struct bfd_link_info *));
3663
3664   /* Routines to handle dynamic symbols and relocs.  */
3665 #define BFD_JUMP_TABLE_DYNAMIC(NAME)\
3666 CAT(NAME,_get_dynamic_symtab_upper_bound),\
3667 CAT(NAME,_canonicalize_dynamic_symtab),\
3668 CAT(NAME,_get_dynamic_reloc_upper_bound),\
3669 CAT(NAME,_canonicalize_dynamic_reloc)
3670   /* Get the amount of memory required to hold the dynamic symbols. */
3671   long     (*_bfd_get_dynamic_symtab_upper_bound) PARAMS ((bfd *));
3672   /* Read in the dynamic symbols.  */
3673   long     (*_bfd_canonicalize_dynamic_symtab)
3674     PARAMS ((bfd *, struct symbol_cache_entry **));
3675   /* Get the amount of memory required to hold the dynamic relocs.  */
3676   long     (*_bfd_get_dynamic_reloc_upper_bound) PARAMS ((bfd *));
3677   /* Read in the dynamic relocs.  */
3678   long     (*_bfd_canonicalize_dynamic_reloc)
3679     PARAMS ((bfd *, arelent **, struct symbol_cache_entry **));
3680
3681  /* Opposite endian version of this target.  */
3682  const struct bfd_target * alternative_target;
3683
3684  PTR backend_data;
3685
3686 } bfd_target;
3687 boolean
3688 bfd_set_default_target PARAMS ((const char *name));
3689
3690 const bfd_target *
3691 bfd_find_target PARAMS ((const char *target_name, bfd *abfd));
3692
3693 const char **
3694 bfd_target_list PARAMS ((void));
3695
3696 const bfd_target *
3697 bfd_search_for_target PARAMS ((int (* search_func) (const bfd_target *, void *), void *));
3698
3699 boolean
3700 bfd_check_format PARAMS ((bfd *abfd, bfd_format format));
3701
3702 boolean
3703 bfd_check_format_matches PARAMS ((bfd *abfd, bfd_format format, char ***matching));
3704
3705 boolean
3706 bfd_set_format PARAMS ((bfd *abfd, bfd_format format));
3707
3708 const char *
3709 bfd_format_string PARAMS ((bfd_format format));
3710
3711 #ifdef __cplusplus
3712 }
3713 #endif
3714 #endif