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   "bfdio.c", "bfdwin.c", "section.c", "archures.c", "reloc.c",
4   "syms.c", "bfd.c", "archive.c", "corefile.c", "targets.c", "format.c",
5   "linker.c" and "simple.c".
6   Run "make headers" in your build bfd/ to regenerate.  */
7
8/* Main header file for the bfd library -- portable access to object files.
9
10   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
11   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
12   Free Software Foundation, Inc.
13
14   Contributed by Cygnus Support.
15
16   This file is part of BFD, the Binary File Descriptor library.
17
18   This program is free software; you can redistribute it and/or modify
19   it under the terms of the GNU General Public License as published by
20   the Free Software Foundation; either version 2 of the License, or
21   (at your option) any later version.
22
23   This program is distributed in the hope that it will be useful,
24   but WITHOUT ANY WARRANTY; without even the implied warranty of
25   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26   GNU General Public License for more details.
27
28   You should have received a copy of the GNU General Public License
29   along with this program; if not, write to the Free Software
30   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
31
32#ifndef __BFD_H_SEEN__
33#define __BFD_H_SEEN__
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39#include "ansidecl.h"
40#include "symcat.h"
41#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
42#ifndef SABER
43/* This hack is to avoid a problem with some strict ANSI C preprocessors.
44   The problem is, "32_" is not a valid preprocessing token, and we don't
45   want extra underscores (e.g., "nlm_32_").  The XCONCAT2 macro will
46   cause the inner CONCAT2 macros to be evaluated first, producing
47   still-valid pp-tokens.  Then the final concatenation can be done.  */
48#undef CONCAT4
49#define CONCAT4(a,b,c,d) XCONCAT2(CONCAT2(a,b),CONCAT2(c,d))
50#endif
51#endif
52
53/* This is a utility macro to handle the situation where the code
54   wants to place a constant string into the code, followed by a
55   comma and then the length of the string.  Doing this by hand
56   is error prone, so using this macro is safer.  The macro will
57   also safely handle the case where a NULL is passed as the arg.  */
58#define STRING_COMMA_LEN(STR) (STR), ((STR) ? sizeof (STR) - 1 : 0)
59/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro
60   to create the arguments to another macro, since the preprocessor
61   will mis-count the number of arguments to the outer macro (by not
62   evaluating STRING_COMMA_LEN and so missing the comma).  This is a
63   problem for example when trying to use STRING_COMMA_LEN to build
64   the arguments to the strncmp() macro.  Hence this alternative
65   definition of strncmp is provided here.
66
67   Note - these macros do NOT work if STR2 is not a constant string.  */
68#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
69  /* strcpy() can have a similar problem, but since we know we are
70     copying a constant string, we can use memcpy which will be faster
71     since there is no need to check for a NUL byte inside STR.  We
72     can also save time if we do not need to copy the terminating NUL.  */
73#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1)
74#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2))
75
76
77/* The word size used by BFD on the host.  This may be 64 with a 32
78   bit target if the host is 64 bit, or if other 64 bit targets have
79   been selected with --enable-targets, or if --enable-64-bit-bfd.  */
80#define BFD_ARCH_SIZE @wordsize@
81
82/* The word size of the default bfd target.  */
83#define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@
84
85#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@
86#define BFD_HOST_LONG_LONG @BFD_HOST_LONG_LONG@
87#if @BFD_HOST_64_BIT_DEFINED@
88#define BFD_HOST_64_BIT @BFD_HOST_64_BIT@
89#define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@
90typedef BFD_HOST_64_BIT bfd_int64_t;
91typedef BFD_HOST_U_64_BIT bfd_uint64_t;
92#endif
93
94#if BFD_ARCH_SIZE >= 64
95#define BFD64
96#endif
97
98#ifndef INLINE
99#if __GNUC__ >= 2
100#define INLINE __inline__
101#else
102#define INLINE
103#endif
104#endif
105
106/* Forward declaration.  */
107typedef struct bfd bfd;
108
109/* Boolean type used in bfd.  Too many systems define their own
110   versions of "boolean" for us to safely typedef a "boolean" of
111   our own.  Using an enum for "bfd_boolean" has its own set of
112   problems, with strange looking casts required to avoid warnings
113   on some older compilers.  Thus we just use an int.
114
115   General rule: Functions which are bfd_boolean return TRUE on
116   success and FALSE on failure (unless they're a predicate).  */
117
118typedef int bfd_boolean;
119#undef FALSE
120#undef TRUE
121#define FALSE 0
122#define TRUE 1
123
124#ifdef BFD64
125
126#ifndef BFD_HOST_64_BIT
127 #error No 64 bit integer type available
128#endif /* ! defined (BFD_HOST_64_BIT) */
129
130typedef BFD_HOST_U_64_BIT bfd_vma;
131typedef BFD_HOST_64_BIT bfd_signed_vma;
132typedef BFD_HOST_U_64_BIT bfd_size_type;
133typedef BFD_HOST_U_64_BIT symvalue;
134
135#ifndef fprintf_vma
136#if BFD_HOST_64BIT_LONG
137#define sprintf_vma(s,x) sprintf (s, "%016lx", x)
138#define fprintf_vma(f,x) fprintf (f, "%016lx", x)
139#else
140#define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff)))
141#define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff))
142#define fprintf_vma(s,x) \
143  fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x))
144#define sprintf_vma(s,x) \
145  sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x))
146#endif
147#endif
148
149#else /* not BFD64  */
150
151/* Represent a target address.  Also used as a generic unsigned type
152   which is guaranteed to be big enough to hold any arithmetic types
153   we need to deal with.  */
154typedef unsigned long bfd_vma;
155
156/* A generic signed type which is guaranteed to be big enough to hold any
157   arithmetic types we need to deal with.  Can be assumed to be compatible
158   with bfd_vma in the same way that signed and unsigned ints are compatible
159   (as parameters, in assignment, etc).  */
160typedef long bfd_signed_vma;
161
162typedef unsigned long symvalue;
163typedef unsigned long bfd_size_type;
164
165/* Print a bfd_vma x on stream s.  */
166#define fprintf_vma(s,x) fprintf (s, "%08lx", x)
167#define sprintf_vma(s,x) sprintf (s, "%08lx", x)
168
169#endif /* not BFD64  */
170
171#define HALF_BFD_SIZE_TYPE \
172  (((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2))
173
174#ifndef BFD_HOST_64_BIT
175/* Fall back on a 32 bit type.  The idea is to make these types always
176   available for function return types, but in the case that
177   BFD_HOST_64_BIT is undefined such a function should abort or
178   otherwise signal an error.  */
179typedef bfd_signed_vma bfd_int64_t;
180typedef bfd_vma bfd_uint64_t;
181#endif
182
183/* An offset into a file.  BFD always uses the largest possible offset
184   based on the build time availability of fseek, fseeko, or fseeko64.  */
185typedef @bfd_file_ptr@ file_ptr;
186typedef unsigned @bfd_file_ptr@ ufile_ptr;
187
188extern void bfd_sprintf_vma (bfd *, char *, bfd_vma);
189extern void bfd_fprintf_vma (bfd *, void *, bfd_vma);
190
191#define printf_vma(x) fprintf_vma(stdout,x)
192#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x)
193
194typedef unsigned int flagword;	/* 32 bits of flags */
195typedef unsigned char bfd_byte;
196
197/* File formats.  */
198
199typedef enum bfd_format
200{
201  bfd_unknown = 0,	/* File format is unknown.  */
202  bfd_object,		/* Linker/assembler/compiler output.  */
203  bfd_archive,		/* Object archive file.  */
204  bfd_core,		/* Core dump.  */
205  bfd_type_end		/* Marks the end; don't use it!  */
206}
207bfd_format;
208
209/* Values that may appear in the flags field of a BFD.  These also
210   appear in the object_flags field of the bfd_target structure, where
211   they indicate the set of flags used by that backend (not all flags
212   are meaningful for all object file formats) (FIXME: at the moment,
213   the object_flags values have mostly just been copied from backend
214   to another, and are not necessarily correct).  */
215
216/* No flags.  */
217#define BFD_NO_FLAGS   	0x00
218
219/* BFD contains relocation entries.  */
220#define HAS_RELOC   	0x01
221
222/* BFD is directly executable.  */
223#define EXEC_P      	0x02
224
225/* BFD has line number information (basically used for F_LNNO in a
226   COFF header).  */
227#define HAS_LINENO  	0x04
228
229/* BFD has debugging information.  */
230#define HAS_DEBUG   	0x08
231
232/* BFD has symbols.  */
233#define HAS_SYMS    	0x10
234
235/* BFD has local symbols (basically used for F_LSYMS in a COFF
236   header).  */
237#define HAS_LOCALS  	0x20
238
239/* BFD is a dynamic object.  */
240#define DYNAMIC     	0x40
241
242/* Text section is write protected (if D_PAGED is not set, this is
243   like an a.out NMAGIC file) (the linker sets this by default, but
244   clears it for -r or -N).  */
245#define WP_TEXT     	0x80
246
247/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
248   linker sets this by default, but clears it for -r or -n or -N).  */
249#define D_PAGED     	0x100
250
251/* BFD is relaxable (this means that bfd_relax_section may be able to
252   do something) (sometimes bfd_relax_section can do something even if
253   this is not set).  */
254#define BFD_IS_RELAXABLE 0x200
255
256/* This may be set before writing out a BFD to request using a
257   traditional format.  For example, this is used to request that when
258   writing out an a.out object the symbols not be hashed to eliminate
259   duplicates.  */
260#define BFD_TRADITIONAL_FORMAT 0x400
261
262/* This flag indicates that the BFD contents are actually cached in
263   memory.  If this is set, iostream points to a bfd_in_memory struct.  */
264#define BFD_IN_MEMORY 0x800
265
266/* The sections in this BFD specify a memory page.  */
267#define HAS_LOAD_PAGE 0x1000
268
269/* This BFD has been created by the linker and doesn't correspond
270   to any input file.  */
271#define BFD_LINKER_CREATED 0x2000
272
273/* Symbols and relocation.  */
274
275/* A count of carsyms (canonical archive symbols).  */
276typedef unsigned long symindex;
277
278/* How to perform a relocation.  */
279typedef const struct reloc_howto_struct reloc_howto_type;
280
281#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
282
283/* General purpose part of a symbol X;
284   target specific parts are in libcoff.h, libaout.h, etc.  */
285
286#define bfd_get_section(x) ((x)->section)
287#define bfd_get_output_section(x) ((x)->section->output_section)
288#define bfd_set_section(x,y) ((x)->section) = (y)
289#define bfd_asymbol_base(x) ((x)->section->vma)
290#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value)
291#define bfd_asymbol_name(x) ((x)->name)
292/*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/
293#define bfd_asymbol_bfd(x) ((x)->the_bfd)
294#define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour)
295
296/* A canonical archive symbol.  */
297/* This is a type pun with struct ranlib on purpose!  */
298typedef struct carsym
299{
300  char *name;
301  file_ptr file_offset;	/* Look here to find the file.  */
302}
303carsym;			/* To make these you call a carsymogen.  */
304
305/* Used in generating armaps (archive tables of contents).
306   Perhaps just a forward definition would do?  */
307struct orl 			/* Output ranlib.  */
308{
309  char **name;		/* Symbol name.  */
310  union
311  {
312    file_ptr pos;
313    bfd *abfd;
314  } u;			/* bfd* or file position.  */
315  int namidx;		/* Index into string table.  */
316};
317
318/* Linenumber stuff.  */
319typedef struct lineno_cache_entry
320{
321  unsigned int line_number;	/* Linenumber from start of function.  */
322  union
323  {
324    struct bfd_symbol *sym;	/* Function name.  */
325    bfd_vma offset;	    		/* Offset into section.  */
326  } u;
327}
328alent;
329
330/* Object and core file sections.  */
331
332#define	align_power(addr, align)	\
333  (((addr) + ((bfd_vma) 1 << (align)) - 1) & ((bfd_vma) -1 << (align)))
334
335typedef struct bfd_section *sec_ptr;
336
337#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0)
338#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0)
339#define bfd_get_section_lma(bfd, ptr) ((ptr)->lma + 0)
340#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0)
341#define bfd_section_name(bfd, ptr) ((ptr)->name)
342#define bfd_section_size(bfd, ptr) ((ptr)->size)
343#define bfd_get_section_size(ptr) ((ptr)->size)
344#define bfd_section_vma(bfd, ptr) ((ptr)->vma)
345#define bfd_section_lma(bfd, ptr) ((ptr)->lma)
346#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
347#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0)
348#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata)
349
350#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
351
352#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma = (val)), ((ptr)->user_set_vma = TRUE), TRUE)
353#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),TRUE)
354#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),TRUE)
355/* Find the address one past the end of SEC.  */
356#define bfd_get_section_limit(bfd, sec) \
357  (((sec)->rawsize ? (sec)->rawsize : (sec)->size) \
358   / bfd_octets_per_byte (bfd))
359
360/* Forward define.  */
361struct stat;
362
363typedef enum bfd_print_symbol
364{
365  bfd_print_symbol_name,
366  bfd_print_symbol_more,
367  bfd_print_symbol_all
368} bfd_print_symbol_type;
369
370/* Information about a symbol that nm needs.  */
371
372typedef struct _symbol_info
373{
374  symvalue value;
375  char type;
376  const char *name;            /* Symbol name.  */
377  unsigned char stab_type;     /* Stab type.  */
378  char stab_other;             /* Stab other.  */
379  short stab_desc;             /* Stab desc.  */
380  const char *stab_name;       /* String for stab type.  */
381} symbol_info;
382
383/* Get the name of a stabs type code.  */
384
385extern const char *bfd_get_stab_name (int);
386
387/* Hash table routines.  There is no way to free up a hash table.  */
388
389/* An element in the hash table.  Most uses will actually use a larger
390   structure, and an instance of this will be the first field.  */
391
392struct bfd_hash_entry
393{
394  /* Next entry for this hash code.  */
395  struct bfd_hash_entry *next;
396  /* String being hashed.  */
397  const char *string;
398  /* Hash code.  This is the full hash code, not the index into the
399     table.  */
400  unsigned long hash;
401};
402
403/* A hash table.  */
404
405struct bfd_hash_table
406{
407  /* The hash array.  */
408  struct bfd_hash_entry **table;
409  /* A function used to create new elements in the hash table.  The
410     first entry is itself a pointer to an element.  When this
411     function is first invoked, this pointer will be NULL.  However,
412     having the pointer permits a hierarchy of method functions to be
413     built each of which calls the function in the superclass.  Thus
414     each function should be written to allocate a new block of memory
415     only if the argument is NULL.  */
416  struct bfd_hash_entry *(*newfunc)
417    (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
418   /* An objalloc for this hash table.  This is a struct objalloc *,
419     but we use void * to avoid requiring the inclusion of objalloc.h.  */
420  void *memory;
421  /* The number of slots in the hash table.  */
422  unsigned int size;
423  /* The number of entries in the hash table.  */
424  unsigned int count;
425  /* The size of elements.  */
426  unsigned int entsize;
427  /* If non-zero, don't grow the hash table.  */
428  unsigned int frozen:1;
429};
430
431/* Initialize a hash table.  */
432extern bfd_boolean bfd_hash_table_init
433  (struct bfd_hash_table *,
434   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
435			       struct bfd_hash_table *,
436			       const char *),
437   unsigned int);
438
439/* Initialize a hash table specifying a size.  */
440extern bfd_boolean bfd_hash_table_init_n
441  (struct bfd_hash_table *,
442   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
443			       struct bfd_hash_table *,
444			       const char *),
445   unsigned int, unsigned int);
446
447/* Free up a hash table.  */
448extern void bfd_hash_table_free
449  (struct bfd_hash_table *);
450
451/* Look up a string in a hash table.  If CREATE is TRUE, a new entry
452   will be created for this string if one does not already exist.  The
453   COPY argument must be TRUE if this routine should copy the string
454   into newly allocated memory when adding an entry.  */
455extern struct bfd_hash_entry *bfd_hash_lookup
456  (struct bfd_hash_table *, const char *, bfd_boolean create,
457   bfd_boolean copy);
458
459/* Replace an entry in a hash table.  */
460extern void bfd_hash_replace
461  (struct bfd_hash_table *, struct bfd_hash_entry *old,
462   struct bfd_hash_entry *nw);
463
464/* Base method for creating a hash table entry.  */
465extern struct bfd_hash_entry *bfd_hash_newfunc
466  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
467
468/* Grab some space for a hash table entry.  */
469extern void *bfd_hash_allocate
470  (struct bfd_hash_table *, unsigned int);
471
472/* Traverse a hash table in a random order, calling a function on each
473   element.  If the function returns FALSE, the traversal stops.  The
474   INFO argument is passed to the function.  */
475extern void bfd_hash_traverse
476  (struct bfd_hash_table *,
477   bfd_boolean (*) (struct bfd_hash_entry *, void *),
478   void *info);
479
480/* Allows the default size of a hash table to be configured. New hash
481   tables allocated using bfd_hash_table_init will be created with
482   this size.  */
483extern void bfd_hash_set_default_size (bfd_size_type);
484
485/* This structure is used to keep track of stabs in sections
486   information while linking.  */
487
488struct stab_info
489{
490  /* A hash table used to hold stabs strings.  */
491  struct bfd_strtab_hash *strings;
492  /* The header file hash table.  */
493  struct bfd_hash_table includes;
494  /* The first .stabstr section.  */
495  struct bfd_section *stabstr;
496};
497
498#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
499
500/* User program access to BFD facilities.  */
501
502/* Direct I/O routines, for programs which know more about the object
503   file than BFD does.  Use higher level routines if possible.  */
504
505extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *);
506extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *);
507extern int bfd_seek (bfd *, file_ptr, int);
508extern file_ptr bfd_tell (bfd *);
509extern int bfd_flush (bfd *);
510extern int bfd_stat (bfd *, struct stat *);
511
512/* Deprecated old routines.  */
513#if __GNUC__
514#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
515  (warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__),	\
516   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
517#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
518  (warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__),	\
519   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
520#else
521#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
522  (warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \
523   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
524#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
525  (warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\
526   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
527#endif
528extern void warn_deprecated (const char *, const char *, int, const char *);
529
530/* Cast from const char * to char * so that caller can assign to
531   a char * without a warning.  */
532#define bfd_get_filename(abfd) ((char *) (abfd)->filename)
533#define bfd_get_cacheable(abfd) ((abfd)->cacheable)
534#define bfd_get_format(abfd) ((abfd)->format)
535#define bfd_get_target(abfd) ((abfd)->xvec->name)
536#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
537#define bfd_family_coff(abfd) \
538  (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \
539   bfd_get_flavour (abfd) == bfd_target_xcoff_flavour)
540#define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG)
541#define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE)
542#define bfd_header_big_endian(abfd) \
543  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG)
544#define bfd_header_little_endian(abfd) \
545  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
546#define bfd_get_file_flags(abfd) ((abfd)->flags)
547#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
548#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
549#define bfd_my_archive(abfd) ((abfd)->my_archive)
550#define bfd_has_map(abfd) ((abfd)->has_armap)
551
552#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
553#define bfd_usrdata(abfd) ((abfd)->usrdata)
554
555#define bfd_get_start_address(abfd) ((abfd)->start_address)
556#define bfd_get_symcount(abfd) ((abfd)->symcount)
557#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
558#define bfd_count_sections(abfd) ((abfd)->section_count)
559
560#define bfd_get_dynamic_symcount(abfd) ((abfd)->dynsymcount)
561
562#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
563
564#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE)
565
566extern bfd_boolean bfd_cache_close
567  (bfd *abfd);
568/* NB: This declaration should match the autogenerated one in libbfd.h.  */
569
570extern bfd_boolean bfd_cache_close_all (void);
571
572extern bfd_boolean bfd_record_phdr
573  (bfd *, unsigned long, bfd_boolean, flagword, bfd_boolean, bfd_vma,
574   bfd_boolean, bfd_boolean, unsigned int, struct bfd_section **);
575
576/* Byte swapping routines.  */
577
578bfd_uint64_t bfd_getb64 (const void *);
579bfd_uint64_t bfd_getl64 (const void *);
580bfd_int64_t bfd_getb_signed_64 (const void *);
581bfd_int64_t bfd_getl_signed_64 (const void *);
582bfd_vma bfd_getb32 (const void *);
583bfd_vma bfd_getl32 (const void *);
584bfd_signed_vma bfd_getb_signed_32 (const void *);
585bfd_signed_vma bfd_getl_signed_32 (const void *);
586bfd_vma bfd_getb16 (const void *);
587bfd_vma bfd_getl16 (const void *);
588bfd_signed_vma bfd_getb_signed_16 (const void *);
589bfd_signed_vma bfd_getl_signed_16 (const void *);
590void bfd_putb64 (bfd_uint64_t, void *);
591void bfd_putl64 (bfd_uint64_t, void *);
592void bfd_putb32 (bfd_vma, void *);
593void bfd_putl32 (bfd_vma, void *);
594void bfd_putb16 (bfd_vma, void *);
595void bfd_putl16 (bfd_vma, void *);
596
597/* Byte swapping routines which take size and endiannes as arguments.  */
598
599bfd_uint64_t bfd_get_bits (const void *, int, bfd_boolean);
600void bfd_put_bits (bfd_uint64_t, void *, int, bfd_boolean);
601
602extern bfd_boolean bfd_section_already_linked_table_init (void);
603extern void bfd_section_already_linked_table_free (void);
604
605/* Externally visible ECOFF routines.  */
606
607#if defined(__STDC__) || defined(ALMOST_STDC)
608struct ecoff_debug_info;
609struct ecoff_debug_swap;
610struct ecoff_extr;
611struct bfd_symbol;
612struct bfd_link_info;
613struct bfd_link_hash_entry;
614struct bfd_elf_version_tree;
615#endif
616extern bfd_vma bfd_ecoff_get_gp_value
617  (bfd * abfd);
618extern bfd_boolean bfd_ecoff_set_gp_value
619  (bfd *abfd, bfd_vma gp_value);
620extern bfd_boolean bfd_ecoff_set_regmasks
621  (bfd *abfd, unsigned long gprmask, unsigned long fprmask,
622   unsigned long *cprmask);
623extern void *bfd_ecoff_debug_init
624  (bfd *output_bfd, struct ecoff_debug_info *output_debug,
625   const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);
626extern void bfd_ecoff_debug_free
627  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
628   const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);
629extern bfd_boolean bfd_ecoff_debug_accumulate
630  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
631   const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
632   struct ecoff_debug_info *input_debug,
633   const struct ecoff_debug_swap *input_swap, struct bfd_link_info *);
634extern bfd_boolean bfd_ecoff_debug_accumulate_other
635  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
636   const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
637   struct bfd_link_info *);
638extern bfd_boolean bfd_ecoff_debug_externals
639  (bfd *abfd, struct ecoff_debug_info *debug,
640   const struct ecoff_debug_swap *swap, bfd_boolean relocatable,
641   bfd_boolean (*get_extr) (struct bfd_symbol *, struct ecoff_extr *),
642   void (*set_index) (struct bfd_symbol *, bfd_size_type));
643extern bfd_boolean bfd_ecoff_debug_one_external
644  (bfd *abfd, struct ecoff_debug_info *debug,
645   const struct ecoff_debug_swap *swap, const char *name,
646   struct ecoff_extr *esym);
647extern bfd_size_type bfd_ecoff_debug_size
648  (bfd *abfd, struct ecoff_debug_info *debug,
649   const struct ecoff_debug_swap *swap);
650extern bfd_boolean bfd_ecoff_write_debug
651  (bfd *abfd, struct ecoff_debug_info *debug,
652   const struct ecoff_debug_swap *swap, file_ptr where);
653extern bfd_boolean bfd_ecoff_write_accumulated_debug
654  (void *handle, bfd *abfd, struct ecoff_debug_info *debug,
655   const struct ecoff_debug_swap *swap,
656   struct bfd_link_info *info, file_ptr where);
657
658/* Externally visible ELF routines.  */
659
660struct bfd_link_needed_list
661{
662  struct bfd_link_needed_list *next;
663  bfd *by;
664  const char *name;
665};
666
667enum dynamic_lib_link_class {
668  DYN_NORMAL = 0,
669  DYN_AS_NEEDED = 1,
670  DYN_DT_NEEDED = 2,
671  DYN_NO_ADD_NEEDED = 4,
672  DYN_NO_NEEDED = 8
673};
674
675enum notice_asneeded_action {
676  notice_as_needed,
677  notice_not_needed,
678  notice_needed
679};
680
681extern bfd_boolean bfd_elf_record_link_assignment
682  (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
683   bfd_boolean);
684extern struct bfd_link_needed_list *bfd_elf_get_needed_list
685  (bfd *, struct bfd_link_info *);
686extern bfd_boolean bfd_elf_get_bfd_needed_list
687  (bfd *, struct bfd_link_needed_list **);
688extern bfd_boolean bfd_elf_size_dynamic_sections
689  (bfd *, const char *, const char *, const char *, const char * const *,
690   struct bfd_link_info *, struct bfd_section **,
691   struct bfd_elf_version_tree *);
692extern bfd_boolean bfd_elf_size_dynsym_hash_dynstr
693  (bfd *, struct bfd_link_info *);
694extern void bfd_elf_set_dt_needed_name
695  (bfd *, const char *);
696extern const char *bfd_elf_get_dt_soname
697  (bfd *);
698extern void bfd_elf_set_dyn_lib_class
699  (bfd *, enum dynamic_lib_link_class);
700extern int bfd_elf_get_dyn_lib_class
701  (bfd *);
702extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
703  (bfd *, struct bfd_link_info *);
704extern bfd_boolean bfd_elf_discard_info
705  (bfd *, struct bfd_link_info *);
706extern unsigned int _bfd_elf_default_action_discarded
707  (struct bfd_section *);
708
709/* Return an upper bound on the number of bytes required to store a
710   copy of ABFD's program header table entries.  Return -1 if an error
711   occurs; bfd_get_error will return an appropriate code.  */
712extern long bfd_get_elf_phdr_upper_bound
713  (bfd *abfd);
714
715/* Copy ABFD's program header table entries to *PHDRS.  The entries
716   will be stored as an array of Elf_Internal_Phdr structures, as
717   defined in include/elf/internal.h.  To find out how large the
718   buffer needs to be, call bfd_get_elf_phdr_upper_bound.
719
720   Return the number of program header table entries read, or -1 if an
721   error occurs; bfd_get_error will return an appropriate code.  */
722extern int bfd_get_elf_phdrs
723  (bfd *abfd, void *phdrs);
724
725/* Create a new BFD as if by bfd_openr.  Rather than opening a file,
726   reconstruct an ELF file by reading the segments out of remote memory
727   based on the ELF file header at EHDR_VMA and the ELF program headers it
728   points to.  If not null, *LOADBASEP is filled in with the difference
729   between the VMAs from which the segments were read, and the VMAs the
730   file headers (and hence BFD's idea of each section's VMA) put them at.
731
732   The function TARGET_READ_MEMORY is called to copy LEN bytes from the
733   remote memory at target address VMA into the local buffer at MYADDR; it
734   should return zero on success or an `errno' code on failure.  TEMPL must
735   be a BFD for an ELF target with the word size and byte order found in
736   the remote memory.  */
737extern bfd *bfd_elf_bfd_from_remote_memory
738  (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
739   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, int len));
740
741/* Return the arch_size field of an elf bfd, or -1 if not elf.  */
742extern int bfd_get_arch_size
743  (bfd *);
744
745/* Return TRUE if address "naturally" sign extends, or -1 if not elf.  */
746extern int bfd_get_sign_extend_vma
747  (bfd *);
748
749extern struct bfd_section *_bfd_elf_tls_setup
750  (bfd *, struct bfd_link_info *);
751
752extern void _bfd_fix_excluded_sec_syms
753  (bfd *, struct bfd_link_info *);
754
755extern unsigned bfd_m68k_mach_to_features (int);
756
757extern int bfd_m68k_features_to_mach (unsigned);
758
759extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs
760  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
761   char **);
762
763extern bfd_boolean bfd_bfin_elf32_create_embedded_relocs
764  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
765   char **);
766
767/* SunOS shared library support routines for the linker.  */
768
769extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
770  (bfd *, struct bfd_link_info *);
771extern bfd_boolean bfd_sunos_record_link_assignment
772  (bfd *, struct bfd_link_info *, const char *);
773extern bfd_boolean bfd_sunos_size_dynamic_sections
774  (bfd *, struct bfd_link_info *, struct bfd_section **,
775   struct bfd_section **, struct bfd_section **);
776
777/* Linux shared library support routines for the linker.  */
778
779extern bfd_boolean bfd_i386linux_size_dynamic_sections
780  (bfd *, struct bfd_link_info *);
781extern bfd_boolean bfd_m68klinux_size_dynamic_sections
782  (bfd *, struct bfd_link_info *);
783extern bfd_boolean bfd_sparclinux_size_dynamic_sections
784  (bfd *, struct bfd_link_info *);
785
786/* mmap hacks */
787
788struct _bfd_window_internal;
789typedef struct _bfd_window_internal bfd_window_internal;
790
791typedef struct _bfd_window
792{
793  /* What the user asked for.  */
794  void *data;
795  bfd_size_type size;
796  /* The actual window used by BFD.  Small user-requested read-only
797     regions sharing a page may share a single window into the object
798     file.  Read-write versions shouldn't until I've fixed things to
799     keep track of which portions have been claimed by the
800     application; don't want to give the same region back when the
801     application wants two writable copies!  */
802  struct _bfd_window_internal *i;
803}
804bfd_window;
805
806extern void bfd_init_window
807  (bfd_window *);
808extern void bfd_free_window
809  (bfd_window *);
810extern bfd_boolean bfd_get_file_window
811  (bfd *, file_ptr, bfd_size_type, bfd_window *, bfd_boolean);
812
813/* XCOFF support routines for the linker.  */
814
815extern bfd_boolean bfd_xcoff_link_record_set
816  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type);
817extern bfd_boolean bfd_xcoff_import_symbol
818  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_vma,
819   const char *, const char *, const char *, unsigned int);
820extern bfd_boolean bfd_xcoff_export_symbol
821  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
822extern bfd_boolean bfd_xcoff_link_count_reloc
823  (bfd *, struct bfd_link_info *, const char *);
824extern bfd_boolean bfd_xcoff_record_link_assignment
825  (bfd *, struct bfd_link_info *, const char *);
826extern bfd_boolean bfd_xcoff_size_dynamic_sections
827  (bfd *, struct bfd_link_info *, const char *, const char *,
828   unsigned long, unsigned long, unsigned long, bfd_boolean,
829   int, bfd_boolean, bfd_boolean, struct bfd_section **, bfd_boolean);
830extern bfd_boolean bfd_xcoff_link_generate_rtinit
831  (bfd *, const char *, const char *, bfd_boolean);
832
833/* XCOFF support routines for ar.  */
834extern bfd_boolean bfd_xcoff_ar_archive_set_magic
835  (bfd *, char *);
836
837/* Externally visible COFF routines.  */
838
839#if defined(__STDC__) || defined(ALMOST_STDC)
840struct internal_syment;
841union internal_auxent;
842#endif
843
844extern bfd_boolean bfd_coff_get_syment
845  (bfd *, struct bfd_symbol *, struct internal_syment *);
846
847extern bfd_boolean bfd_coff_get_auxent
848  (bfd *, struct bfd_symbol *, int, union internal_auxent *);
849
850extern bfd_boolean bfd_coff_set_symbol_class
851  (bfd *, struct bfd_symbol *, unsigned int);
852
853extern bfd_boolean bfd_m68k_coff_create_embedded_relocs
854  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **);
855
856/* ARM VFP11 erratum workaround support.  */
857typedef enum
858{
859  BFD_ARM_VFP11_FIX_DEFAULT,
860  BFD_ARM_VFP11_FIX_NONE,
861  BFD_ARM_VFP11_FIX_SCALAR,
862  BFD_ARM_VFP11_FIX_VECTOR
863} bfd_arm_vfp11_fix;
864
865extern void bfd_elf32_arm_init_maps
866  (bfd *);
867
868extern void bfd_elf32_arm_set_vfp11_fix
869  (bfd *, struct bfd_link_info *);
870
871extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan
872  (bfd *, struct bfd_link_info *);
873
874extern void bfd_elf32_arm_vfp11_fix_veneer_locations
875  (bfd *, struct bfd_link_info *);
876
877/* ARM Interworking support.  Called from linker.  */
878extern bfd_boolean bfd_arm_allocate_interworking_sections
879  (struct bfd_link_info *);
880
881extern bfd_boolean bfd_arm_process_before_allocation
882  (bfd *, struct bfd_link_info *, int);
883
884extern bfd_boolean bfd_arm_get_bfd_for_interworking
885  (bfd *, struct bfd_link_info *);
886
887/* PE ARM Interworking support.  Called from linker.  */
888extern bfd_boolean bfd_arm_pe_allocate_interworking_sections
889  (struct bfd_link_info *);
890
891extern bfd_boolean bfd_arm_pe_process_before_allocation
892  (bfd *, struct bfd_link_info *, int);
893
894extern bfd_boolean bfd_arm_pe_get_bfd_for_interworking
895  (bfd *, struct bfd_link_info *);
896
897/* ELF ARM Interworking support.  Called from linker.  */
898extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
899  (struct bfd_link_info *);
900
901extern bfd_boolean bfd_elf32_arm_process_before_allocation
902  (bfd *, struct bfd_link_info *);
903
904void bfd_elf32_arm_set_target_relocs
905  (struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix);
906
907extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
908  (bfd *, struct bfd_link_info *);
909
910extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd
911  (bfd *, struct bfd_link_info *);
912
913/* ELF ARM mapping symbol support */
914#define BFD_ARM_SPECIAL_SYM_TYPE_MAP	(1 << 0)
915#define BFD_ARM_SPECIAL_SYM_TYPE_TAG	(1 << 1)
916#define BFD_ARM_SPECIAL_SYM_TYPE_OTHER  (1 << 2)
917#define BFD_ARM_SPECIAL_SYM_TYPE_ANY	(~0)
918extern bfd_boolean bfd_is_arm_special_symbol_name
919  (const char * name, int type);
920
921extern void bfd_elf32_arm_set_byteswap_code (struct bfd_link_info *, int);
922
923/* ARM Note section processing.  */
924extern bfd_boolean bfd_arm_merge_machines
925  (bfd *, bfd *);
926
927extern bfd_boolean bfd_arm_update_notes
928  (bfd *, const char *);
929
930extern unsigned int bfd_arm_get_mach_from_notes
931  (bfd *, const char *);
932
933/* TI COFF load page support.  */
934extern void bfd_ticoff_set_section_load_page
935  (struct bfd_section *, int);
936
937extern int bfd_ticoff_get_section_load_page
938  (struct bfd_section *);
939
940/* H8/300 functions.  */
941extern bfd_vma bfd_h8300_pad_address
942  (bfd *, bfd_vma);
943
944/* IA64 Itanium code generation.  Called from linker.  */
945extern void bfd_elf32_ia64_after_parse
946  (int);
947
948extern void bfd_elf64_ia64_after_parse
949  (int);
950
951/* This structure is used for a comdat section, as in PE.  A comdat
952   section is associated with a particular symbol.  When the linker
953   sees a comdat section, it keeps only one of the sections with a
954   given name and associated with a given symbol.  */
955
956struct coff_comdat_info
957{
958  /* The name of the symbol associated with a comdat section.  */
959  const char *name;
960
961  /* The local symbol table index of the symbol associated with a
962     comdat section.  This is only meaningful to the object file format
963     specific code; it is not an index into the list returned by
964     bfd_canonicalize_symtab.  */
965  long symbol;
966};
967
968extern struct coff_comdat_info *bfd_coff_get_comdat_section
969  (bfd *, struct bfd_section *);
970
971/* Extracted from init.c.  */
972void bfd_init (void);
973
974/* Extracted from opncls.c.  */
975bfd *bfd_fopen (const char *filename, const char *target,
976    const char *mode, int fd);
977
978bfd *bfd_openr (const char *filename, const char *target);
979
980bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
981
982bfd *bfd_openstreamr (const char *, const char *, void *);
983
984bfd *bfd_openr_iovec (const char *filename, const char *target,
985    void *(*open) (struct bfd *nbfd,
986    void *open_closure),
987    void *open_closure,
988    file_ptr (*pread) (struct bfd *nbfd,
989    void *stream,
990    void *buf,
991    file_ptr nbytes,
992    file_ptr offset),
993    int (*close) (struct bfd *nbfd,
994    void *stream),
995    int (*stat) (struct bfd *abfd,
996    void *stream,
997    struct stat *sb));
998
999bfd *bfd_openw (const char *filename, const char *target);
1000
1001bfd_boolean bfd_close (bfd *abfd);
1002
1003bfd_boolean bfd_close_all_done (bfd *);
1004
1005bfd *bfd_create (const char *filename, bfd *templ);
1006
1007bfd_boolean bfd_make_writable (bfd *abfd);
1008
1009bfd_boolean bfd_make_readable (bfd *abfd);
1010
1011unsigned long bfd_calc_gnu_debuglink_crc32
1012   (unsigned long crc, const unsigned char *buf, bfd_size_type len);
1013
1014char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
1015
1016struct bfd_section *bfd_create_gnu_debuglink_section
1017   (bfd *abfd, const char *filename);
1018
1019bfd_boolean bfd_fill_in_gnu_debuglink_section
1020   (bfd *abfd, struct bfd_section *sect, const char *filename);
1021
1022/* Extracted from libbfd.c.  */
1023
1024/* Byte swapping macros for user section data.  */
1025
1026#define bfd_put_8(abfd, val, ptr) \
1027  ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
1028#define bfd_put_signed_8 \
1029  bfd_put_8
1030#define bfd_get_8(abfd, ptr) \
1031  (*(unsigned char *) (ptr) & 0xff)
1032#define bfd_get_signed_8(abfd, ptr) \
1033  (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
1034
1035#define bfd_put_16(abfd, val, ptr) \
1036  BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
1037#define bfd_put_signed_16 \
1038  bfd_put_16
1039#define bfd_get_16(abfd, ptr) \
1040  BFD_SEND (abfd, bfd_getx16, (ptr))
1041#define bfd_get_signed_16(abfd, ptr) \
1042  BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
1043
1044#define bfd_put_32(abfd, val, ptr) \
1045  BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
1046#define bfd_put_signed_32 \
1047  bfd_put_32
1048#define bfd_get_32(abfd, ptr) \
1049  BFD_SEND (abfd, bfd_getx32, (ptr))
1050#define bfd_get_signed_32(abfd, ptr) \
1051  BFD_SEND (abfd, bfd_getx_signed_32, (ptr))
1052
1053#define bfd_put_64(abfd, val, ptr) \
1054  BFD_SEND (abfd, bfd_putx64, ((val), (ptr)))
1055#define bfd_put_signed_64 \
1056  bfd_put_64
1057#define bfd_get_64(abfd, ptr) \
1058  BFD_SEND (abfd, bfd_getx64, (ptr))
1059#define bfd_get_signed_64(abfd, ptr) \
1060  BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
1061
1062#define bfd_get(bits, abfd, ptr)                       \
1063  ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
1064   : (bits) == 16 ? bfd_get_16 (abfd, ptr)             \
1065   : (bits) == 32 ? bfd_get_32 (abfd, ptr)             \
1066   : (bits) == 64 ? bfd_get_64 (abfd, ptr)             \
1067   : (abort (), (bfd_vma) - 1))
1068
1069#define bfd_put(bits, abfd, val, ptr)                  \
1070  ((bits) == 8 ? bfd_put_8  (abfd, val, ptr)           \
1071   : (bits) == 16 ? bfd_put_16 (abfd, val, ptr)                \
1072   : (bits) == 32 ? bfd_put_32 (abfd, val, ptr)                \
1073   : (bits) == 64 ? bfd_put_64 (abfd, val, ptr)                \
1074   : (abort (), (void) 0))
1075
1076
1077/* Byte swapping macros for file header data.  */
1078
1079#define bfd_h_put_8(abfd, val, ptr) \
1080  bfd_put_8 (abfd, val, ptr)
1081#define bfd_h_put_signed_8(abfd, val, ptr) \
1082  bfd_put_8 (abfd, val, ptr)
1083#define bfd_h_get_8(abfd, ptr) \
1084  bfd_get_8 (abfd, ptr)
1085#define bfd_h_get_signed_8(abfd, ptr) \
1086  bfd_get_signed_8 (abfd, ptr)
1087
1088#define bfd_h_put_16(abfd, val, ptr) \
1089  BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
1090#define bfd_h_put_signed_16 \
1091  bfd_h_put_16
1092#define bfd_h_get_16(abfd, ptr) \
1093  BFD_SEND (abfd, bfd_h_getx16, (ptr))
1094#define bfd_h_get_signed_16(abfd, ptr) \
1095  BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))
1096
1097#define bfd_h_put_32(abfd, val, ptr) \
1098  BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
1099#define bfd_h_put_signed_32 \
1100  bfd_h_put_32
1101#define bfd_h_get_32(abfd, ptr) \
1102  BFD_SEND (abfd, bfd_h_getx32, (ptr))
1103#define bfd_h_get_signed_32(abfd, ptr) \
1104  BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))
1105
1106#define bfd_h_put_64(abfd, val, ptr) \
1107  BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
1108#define bfd_h_put_signed_64 \
1109  bfd_h_put_64
1110#define bfd_h_get_64(abfd, ptr) \
1111  BFD_SEND (abfd, bfd_h_getx64, (ptr))
1112#define bfd_h_get_signed_64(abfd, ptr) \
1113  BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))
1114
1115/* Aliases for the above, which should eventually go away.  */
1116
1117#define H_PUT_64  bfd_h_put_64
1118#define H_PUT_32  bfd_h_put_32
1119#define H_PUT_16  bfd_h_put_16
1120#define H_PUT_8   bfd_h_put_8
1121#define H_PUT_S64 bfd_h_put_signed_64
1122#define H_PUT_S32 bfd_h_put_signed_32
1123#define H_PUT_S16 bfd_h_put_signed_16
1124#define H_PUT_S8  bfd_h_put_signed_8
1125#define H_GET_64  bfd_h_get_64
1126#define H_GET_32  bfd_h_get_32
1127#define H_GET_16  bfd_h_get_16
1128#define H_GET_8   bfd_h_get_8
1129#define H_GET_S64 bfd_h_get_signed_64
1130#define H_GET_S32 bfd_h_get_signed_32
1131#define H_GET_S16 bfd_h_get_signed_16
1132#define H_GET_S8  bfd_h_get_signed_8
1133
1134
1135/* Extracted from bfdio.c.  */
1136long bfd_get_mtime (bfd *abfd);
1137
1138file_ptr bfd_get_size (bfd *abfd);
1139
1140/* Extracted from bfdwin.c.  */
1141/* Extracted from section.c.  */
1142typedef struct bfd_section
1143{
1144  /* The name of the section; the name isn't a copy, the pointer is
1145     the same as that passed to bfd_make_section.  */
1146  const char *name;
1147
1148  /* A unique sequence number.  */
1149  int id;
1150
1151  /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
1152  int index;
1153
1154  /* The next section in the list belonging to the BFD, or NULL.  */
1155  struct bfd_section *next;
1156
1157  /* The previous section in the list belonging to the BFD, or NULL.  */
1158  struct bfd_section *prev;
1159
1160  /* The field flags contains attributes of the section. Some
1161     flags are read in from the object file, and some are
1162     synthesized from other information.  */
1163  flagword flags;
1164
1165#define SEC_NO_FLAGS   0x000
1166
1167  /* Tells the OS to allocate space for this section when loading.
1168     This is clear for a section containing debug information only.  */
1169#define SEC_ALLOC      0x001
1170
1171  /* Tells the OS to load the section from the file when loading.
1172     This is clear for a .bss section.  */
1173#define SEC_LOAD       0x002
1174
1175  /* The section contains data still to be relocated, so there is
1176     some relocation information too.  */
1177#define SEC_RELOC      0x004
1178
1179  /* A signal to the OS that the section contains read only data.  */
1180#define SEC_READONLY   0x008
1181
1182  /* The section contains code only.  */
1183#define SEC_CODE       0x010
1184
1185  /* The section contains data only.  */
1186#define SEC_DATA       0x020
1187
1188  /* The section will reside in ROM.  */
1189#define SEC_ROM        0x040
1190
1191  /* The section contains constructor information. This section
1192     type is used by the linker to create lists of constructors and
1193     destructors used by <<g++>>. When a back end sees a symbol
1194     which should be used in a constructor list, it creates a new
1195     section for the type of name (e.g., <<__CTOR_LIST__>>), attaches
1196     the symbol to it, and builds a relocation. To build the lists
1197     of constructors, all the linker has to do is catenate all the
1198     sections called <<__CTOR_LIST__>> and relocate the data
1199     contained within - exactly the operations it would peform on
1200     standard data.  */
1201#define SEC_CONSTRUCTOR 0x080
1202
1203  /* The section has contents - a data section could be
1204     <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
1205     <<SEC_HAS_CONTENTS>>  */
1206#define SEC_HAS_CONTENTS 0x100
1207
1208  /* An instruction to the linker to not output the section
1209     even if it has information which would normally be written.  */
1210#define SEC_NEVER_LOAD 0x200
1211
1212  /* The section contains thread local data.  */
1213#define SEC_THREAD_LOCAL 0x400
1214
1215  /* The section has GOT references.  This flag is only for the
1216     linker, and is currently only used by the elf32-hppa back end.
1217     It will be set if global offset table references were detected
1218     in this section, which indicate to the linker that the section
1219     contains PIC code, and must be handled specially when doing a
1220     static link.  */
1221#define SEC_HAS_GOT_REF 0x800
1222
1223  /* The section contains common symbols (symbols may be defined
1224     multiple times, the value of a symbol is the amount of
1225     space it requires, and the largest symbol value is the one
1226     used).  Most targets have exactly one of these (which we
1227     translate to bfd_com_section_ptr), but ECOFF has two.  */
1228#define SEC_IS_COMMON 0x1000
1229
1230  /* The section contains only debugging information.  For
1231     example, this is set for ELF .debug and .stab sections.
1232     strip tests this flag to see if a section can be
1233     discarded.  */
1234#define SEC_DEBUGGING 0x2000
1235
1236  /* The contents of this section are held in memory pointed to
1237     by the contents field.  This is checked by bfd_get_section_contents,
1238     and the data is retrieved from memory if appropriate.  */
1239#define SEC_IN_MEMORY 0x4000
1240
1241  /* The contents of this section are to be excluded by the
1242     linker for executable and shared objects unless those
1243     objects are to be further relocated.  */
1244#define SEC_EXCLUDE 0x8000
1245
1246  /* The contents of this section are to be sorted based on the sum of
1247     the symbol and addend values specified by the associated relocation
1248     entries.  Entries without associated relocation entries will be
1249     appended to the end of the section in an unspecified order.  */
1250#define SEC_SORT_ENTRIES 0x10000
1251
1252  /* When linking, duplicate sections of the same name should be
1253     discarded, rather than being combined into a single section as
1254     is usually done.  This is similar to how common symbols are
1255     handled.  See SEC_LINK_DUPLICATES below.  */
1256#define SEC_LINK_ONCE 0x20000
1257
1258  /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
1259     should handle duplicate sections.  */
1260#define SEC_LINK_DUPLICATES 0x40000
1261
1262  /* This value for SEC_LINK_DUPLICATES means that duplicate
1263     sections with the same name should simply be discarded.  */
1264#define SEC_LINK_DUPLICATES_DISCARD 0x0
1265
1266  /* This value for SEC_LINK_DUPLICATES means that the linker
1267     should warn if there are any duplicate sections, although
1268     it should still only link one copy.  */
1269#define SEC_LINK_DUPLICATES_ONE_ONLY 0x80000
1270
1271  /* This value for SEC_LINK_DUPLICATES means that the linker
1272     should warn if any duplicate sections are a different size.  */
1273#define SEC_LINK_DUPLICATES_SAME_SIZE 0x100000
1274
1275  /* This value for SEC_LINK_DUPLICATES means that the linker
1276     should warn if any duplicate sections contain different
1277     contents.  */
1278#define SEC_LINK_DUPLICATES_SAME_CONTENTS \
1279  (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE)
1280
1281  /* This section was created by the linker as part of dynamic
1282     relocation or other arcane processing.  It is skipped when
1283     going through the first-pass output, trusting that someone
1284     else up the line will take care of it later.  */
1285#define SEC_LINKER_CREATED 0x200000
1286
1287  /* This section should not be subject to garbage collection.
1288     Also set to inform the linker that this section should not be
1289     listed in the link map as discarded.  */
1290#define SEC_KEEP 0x400000
1291
1292  /* This section contains "short" data, and should be placed
1293     "near" the GP.  */
1294#define SEC_SMALL_DATA 0x800000
1295
1296  /* Attempt to merge identical entities in the section.
1297     Entity size is given in the entsize field.  */
1298#define SEC_MERGE 0x1000000
1299
1300  /* If given with SEC_MERGE, entities to merge are zero terminated
1301     strings where entsize specifies character size instead of fixed
1302     size entries.  */
1303#define SEC_STRINGS 0x2000000
1304
1305  /* This section contains data about section groups.  */
1306#define SEC_GROUP 0x4000000
1307
1308  /* The section is a COFF shared library section.  This flag is
1309     only for the linker.  If this type of section appears in
1310     the input file, the linker must copy it to the output file
1311     without changing the vma or size.  FIXME: Although this
1312     was originally intended to be general, it really is COFF
1313     specific (and the flag was renamed to indicate this).  It
1314     might be cleaner to have some more general mechanism to
1315     allow the back end to control what the linker does with
1316     sections.  */
1317#define SEC_COFF_SHARED_LIBRARY 0x10000000
1318
1319  /* This section contains data which may be shared with other
1320     executables or shared objects. This is for COFF only.  */
1321#define SEC_COFF_SHARED 0x20000000
1322
1323  /* When a section with this flag is being linked, then if the size of
1324     the input section is less than a page, it should not cross a page
1325     boundary.  If the size of the input section is one page or more,
1326     it should be aligned on a page boundary.  This is for TI
1327     TMS320C54X only.  */
1328#define SEC_TIC54X_BLOCK 0x40000000
1329
1330  /* Conditionally link this section; do not link if there are no
1331     references found to any symbol in the section.  This is for TI
1332     TMS320C54X only.  */
1333#define SEC_TIC54X_CLINK 0x80000000
1334
1335  /*  End of section flags.  */
1336
1337  /* Some internal packed boolean fields.  */
1338
1339  /* See the vma field.  */
1340  unsigned int user_set_vma : 1;
1341
1342  /* A mark flag used by some of the linker backends.  */
1343  unsigned int linker_mark : 1;
1344
1345  /* Another mark flag used by some of the linker backends.  Set for
1346     output sections that have an input section.  */
1347  unsigned int linker_has_input : 1;
1348
1349  /* Mark flags used by some linker backends for garbage collection.  */
1350  unsigned int gc_mark : 1;
1351  unsigned int gc_mark_from_eh : 1;
1352
1353  /* The following flags are used by the ELF linker. */
1354
1355  /* Mark sections which have been allocated to segments.  */
1356  unsigned int segment_mark : 1;
1357
1358  /* Type of sec_info information.  */
1359  unsigned int sec_info_type:3;
1360#define ELF_INFO_TYPE_NONE      0
1361#define ELF_INFO_TYPE_STABS     1
1362#define ELF_INFO_TYPE_MERGE     2
1363#define ELF_INFO_TYPE_EH_FRAME  3
1364#define ELF_INFO_TYPE_JUST_SYMS 4
1365
1366  /* Nonzero if this section uses RELA relocations, rather than REL.  */
1367  unsigned int use_rela_p:1;
1368
1369  /* Bits used by various backends.  The generic code doesn't touch
1370     these fields.  */
1371
1372  /* Nonzero if this section has TLS related relocations.  */
1373  unsigned int has_tls_reloc:1;
1374
1375  /* Nonzero if this section has a gp reloc.  */
1376  unsigned int has_gp_reloc:1;
1377
1378  /* Nonzero if this section needs the relax finalize pass.  */
1379  unsigned int need_finalize_relax:1;
1380
1381  /* Whether relocations have been processed.  */
1382  unsigned int reloc_done : 1;
1383
1384  /* End of internal packed boolean fields.  */
1385
1386  /*  The virtual memory address of the section - where it will be
1387      at run time.  The symbols are relocated against this.  The
1388      user_set_vma flag is maintained by bfd; if it's not set, the
1389      backend can assign addresses (for example, in <<a.out>>, where
1390      the default address for <<.data>> is dependent on the specific
1391      target and various flags).  */
1392  bfd_vma vma;
1393
1394  /*  The load address of the section - where it would be in a
1395      rom image; really only used for writing section header
1396      information.  */
1397  bfd_vma lma;
1398
1399  /* The size of the section in octets, as it will be output.
1400     Contains a value even if the section has no contents (e.g., the
1401     size of <<.bss>>).  */
1402  bfd_size_type size;
1403
1404  /* For input sections, the original size on disk of the section, in
1405     octets.  This field is used by the linker relaxation code.  It is
1406     currently only set for sections where the linker relaxation scheme
1407     doesn't cache altered section and reloc contents (stabs, eh_frame,
1408     SEC_MERGE, some coff relaxing targets), and thus the original size
1409     needs to be kept to read the section multiple times.
1410     For output sections, rawsize holds the section size calculated on
1411     a previous linker relaxation pass.  */
1412  bfd_size_type rawsize;
1413
1414  /* If this section is going to be output, then this value is the
1415     offset in *bytes* into the output section of the first byte in the
1416     input section (byte ==> smallest addressable unit on the
1417     target).  In most cases, if this was going to start at the
1418     100th octet (8-bit quantity) in the output section, this value
1419     would be 100.  However, if the target byte size is 16 bits
1420     (bfd_octets_per_byte is "2"), this value would be 50.  */
1421  bfd_vma output_offset;
1422
1423  /* The output section through which to map on output.  */
1424  struct bfd_section *output_section;
1425
1426  /* The alignment requirement of the section, as an exponent of 2 -
1427     e.g., 3 aligns to 2^3 (or 8).  */
1428  unsigned int alignment_power;
1429
1430  /* If an input section, a pointer to a vector of relocation
1431     records for the data in this section.  */
1432  struct reloc_cache_entry *relocation;
1433
1434  /* If an output section, a pointer to a vector of pointers to
1435     relocation records for the data in this section.  */
1436  struct reloc_cache_entry **orelocation;
1437
1438  /* The number of relocation records in one of the above.  */
1439  unsigned reloc_count;
1440
1441  /* Information below is back end specific - and not always used
1442     or updated.  */
1443
1444  /* File position of section data.  */
1445  file_ptr filepos;
1446
1447  /* File position of relocation info.  */
1448  file_ptr rel_filepos;
1449
1450  /* File position of line data.  */
1451  file_ptr line_filepos;
1452
1453  /* Pointer to data for applications.  */
1454  void *userdata;
1455
1456  /* If the SEC_IN_MEMORY flag is set, this points to the actual
1457     contents.  */
1458  unsigned char *contents;
1459
1460  /* Attached line number information.  */
1461  alent *lineno;
1462
1463  /* Number of line number records.  */
1464  unsigned int lineno_count;
1465
1466  /* Entity size for merging purposes.  */
1467  unsigned int entsize;
1468
1469  /* Points to the kept section if this section is a link-once section,
1470     and is discarded.  */
1471  struct bfd_section *kept_section;
1472
1473  /* When a section is being output, this value changes as more
1474     linenumbers are written out.  */
1475  file_ptr moving_line_filepos;
1476
1477  /* What the section number is in the target world.  */
1478  int target_index;
1479
1480  void *used_by_bfd;
1481
1482  /* If this is a constructor section then here is a list of the
1483     relocations created to relocate items within it.  */
1484  struct relent_chain *constructor_chain;
1485
1486  /* The BFD which owns the section.  */
1487  bfd *owner;
1488
1489  /* A symbol which points at this section only.  */
1490  struct bfd_symbol *symbol;
1491  struct bfd_symbol **symbol_ptr_ptr;
1492
1493  /* Early in the link process, map_head and map_tail are used to build
1494     a list of input sections attached to an output section.  Later,
1495     output sections use these fields for a list of bfd_link_order
1496     structs.  */
1497  union {
1498    struct bfd_link_order *link_order;
1499    struct bfd_section *s;
1500  } map_head, map_tail;
1501} asection;
1502
1503/* These sections are global, and are managed by BFD.  The application
1504   and target back end are not permitted to change the values in
1505   these sections.  New code should use the section_ptr macros rather
1506   than referring directly to the const sections.  The const sections
1507   may eventually vanish.  */
1508#define BFD_ABS_SECTION_NAME "*ABS*"
1509#define BFD_UND_SECTION_NAME "*UND*"
1510#define BFD_COM_SECTION_NAME "*COM*"
1511#define BFD_IND_SECTION_NAME "*IND*"
1512
1513/* The absolute section.  */
1514extern asection bfd_abs_section;
1515#define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
1516#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
1517/* Pointer to the undefined section.  */
1518extern asection bfd_und_section;
1519#define bfd_und_section_ptr ((asection *) &bfd_und_section)
1520#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
1521/* Pointer to the common section.  */
1522extern asection bfd_com_section;
1523#define bfd_com_section_ptr ((asection *) &bfd_com_section)
1524/* Pointer to the indirect section.  */
1525extern asection bfd_ind_section;
1526#define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
1527#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
1528
1529#define bfd_is_const_section(SEC)              \
1530 (   ((SEC) == bfd_abs_section_ptr)            \
1531  || ((SEC) == bfd_und_section_ptr)            \
1532  || ((SEC) == bfd_com_section_ptr)            \
1533  || ((SEC) == bfd_ind_section_ptr))
1534
1535/* Macros to handle insertion and deletion of a bfd's sections.  These
1536   only handle the list pointers, ie. do not adjust section_count,
1537   target_index etc.  */
1538#define bfd_section_list_remove(ABFD, S) \
1539  do                                                   \
1540    {                                                  \
1541      asection *_s = S;                                \
1542      asection *_next = _s->next;                      \
1543      asection *_prev = _s->prev;                      \
1544      if (_prev)                                       \
1545        _prev->next = _next;                           \
1546      else                                             \
1547        (ABFD)->sections = _next;                      \
1548      if (_next)                                       \
1549        _next->prev = _prev;                           \
1550      else                                             \
1551        (ABFD)->section_last = _prev;                  \
1552    }                                                  \
1553  while (0)
1554#define bfd_section_list_append(ABFD, S) \
1555  do                                                   \
1556    {                                                  \
1557      asection *_s = S;                                \
1558      bfd *_abfd = ABFD;                               \
1559      _s->next = NULL;                                 \
1560      if (_abfd->section_last)                         \
1561        {                                              \
1562          _s->prev = _abfd->section_last;              \
1563          _abfd->section_last->next = _s;              \
1564        }                                              \
1565      else                                             \
1566        {                                              \
1567          _s->prev = NULL;                             \
1568          _abfd->sections = _s;                        \
1569        }                                              \
1570      _abfd->section_last = _s;                        \
1571    }                                                  \
1572  while (0)
1573#define bfd_section_list_prepend(ABFD, S) \
1574  do                                                   \
1575    {                                                  \
1576      asection *_s = S;                                \
1577      bfd *_abfd = ABFD;                               \
1578      _s->prev = NULL;                                 \
1579      if (_abfd->sections)                             \
1580        {                                              \
1581          _s->next = _abfd->sections;                  \
1582          _abfd->sections->prev = _s;                  \
1583        }                                              \
1584      else                                             \
1585        {                                              \
1586          _s->next = NULL;                             \
1587          _abfd->section_last = _s;                    \
1588        }                                              \
1589      _abfd->sections = _s;                            \
1590    }                                                  \
1591  while (0)
1592#define bfd_section_list_insert_after(ABFD, A, S) \
1593  do                                                   \
1594    {                                                  \
1595      asection *_a = A;                                \
1596      asection *_s = S;                                \
1597      asection *_next = _a->next;                      \
1598      _s->next = _next;                                \
1599      _s->prev = _a;                                   \
1600      _a->next = _s;                                   \
1601      if (_next)                                       \
1602        _next->prev = _s;                              \
1603      else                                             \
1604        (ABFD)->section_last = _s;                     \
1605    }                                                  \
1606  while (0)
1607#define bfd_section_list_insert_before(ABFD, B, S) \
1608  do                                                   \
1609    {                                                  \
1610      asection *_b = B;                                \
1611      asection *_s = S;                                \
1612      asection *_prev = _b->prev;                      \
1613      _s->prev = _prev;                                \
1614      _s->next = _b;                                   \
1615      _b->prev = _s;                                   \
1616      if (_prev)                                       \
1617        _prev->next = _s;                              \
1618      else                                             \
1619        (ABFD)->sections = _s;                         \
1620    }                                                  \
1621  while (0)
1622#define bfd_section_removed_from_list(ABFD, S) \
1623  ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
1624
1625#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX)                   \
1626  /* name, id,  index, next, prev, flags, user_set_vma,            */  \
1627  { NAME,  IDX, 0,     NULL, NULL, FLAGS, 0,                           \
1628                                                                       \
1629  /* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh,      */  \
1630     0,           0,                1,       0,                        \
1631                                                                       \
1632  /* segment_mark, sec_info_type, use_rela_p, has_tls_reloc,       */  \
1633     0,            0,             0,          0,                       \
1634                                                                       \
1635  /* has_gp_reloc, need_finalize_relax, reloc_done,                */  \
1636     0,            0,                   0,                             \
1637                                                                       \
1638  /* vma, lma, size, rawsize                                       */  \
1639     0,   0,   0,    0,                                                \
1640                                                                       \
1641  /* output_offset, output_section,              alignment_power,  */  \
1642     0,             (struct bfd_section *) &SEC, 0,                    \
1643                                                                       \
1644  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
1645     NULL,       NULL,        0,           0,       0,                 \
1646                                                                       \
1647  /* line_filepos, userdata, contents, lineno, lineno_count,       */  \
1648     0,            NULL,     NULL,     NULL,   0,                      \
1649                                                                       \
1650  /* entsize, kept_section, moving_line_filepos,                    */ \
1651     0,       NULL,          0,                                        \
1652                                                                       \
1653  /* target_index, used_by_bfd, constructor_chain, owner,          */  \
1654     0,            NULL,        NULL,              NULL,               \
1655                                                                       \
1656  /* symbol,                    symbol_ptr_ptr,                    */  \
1657     (struct bfd_symbol *) SYM, &SEC.symbol,                           \
1658                                                                       \
1659  /* map_head, map_tail                                            */  \
1660     { NULL }, { NULL }                                                \
1661    }
1662
1663void bfd_section_list_clear (bfd *);
1664
1665asection *bfd_get_section_by_name (bfd *abfd, const char *name);
1666
1667asection *bfd_get_section_by_name_if
1668   (bfd *abfd,
1669    const char *name,
1670    bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
1671    void *obj);
1672
1673char *bfd_get_unique_section_name
1674   (bfd *abfd, const char *templat, int *count);
1675
1676asection *bfd_make_section_old_way (bfd *abfd, const char *name);
1677
1678asection *bfd_make_section_anyway_with_flags
1679   (bfd *abfd, const char *name, flagword flags);
1680
1681asection *bfd_make_section_anyway (bfd *abfd, const char *name);
1682
1683asection *bfd_make_section_with_flags
1684   (bfd *, const char *name, flagword flags);
1685
1686asection *bfd_make_section (bfd *, const char *name);
1687
1688bfd_boolean bfd_set_section_flags
1689   (bfd *abfd, asection *sec, flagword flags);
1690
1691void bfd_map_over_sections
1692   (bfd *abfd,
1693    void (*func) (bfd *abfd, asection *sect, void *obj),
1694    void *obj);
1695
1696asection *bfd_sections_find_if
1697   (bfd *abfd,
1698    bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
1699    void *obj);
1700
1701bfd_boolean bfd_set_section_size
1702   (bfd *abfd, asection *sec, bfd_size_type val);
1703
1704bfd_boolean bfd_set_section_contents
1705   (bfd *abfd, asection *section, const void *data,
1706    file_ptr offset, bfd_size_type count);
1707
1708bfd_boolean bfd_get_section_contents
1709   (bfd *abfd, asection *section, void *location, file_ptr offset,
1710    bfd_size_type count);
1711
1712bfd_boolean bfd_malloc_and_get_section
1713   (bfd *abfd, asection *section, bfd_byte **buf);
1714
1715bfd_boolean bfd_copy_private_section_data
1716   (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
1717
1718#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
1719     BFD_SEND (obfd, _bfd_copy_private_section_data, \
1720               (ibfd, isection, obfd, osection))
1721bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
1722
1723bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
1724
1725/* Extracted from archures.c.  */
1726enum bfd_architecture
1727{
1728  bfd_arch_unknown,   /* File arch not known.  */
1729  bfd_arch_obscure,   /* Arch known, not one of these.  */
1730  bfd_arch_m68k,      /* Motorola 68xxx */
1731#define bfd_mach_m68000 1
1732#define bfd_mach_m68008 2
1733#define bfd_mach_m68010 3
1734#define bfd_mach_m68020 4
1735#define bfd_mach_m68030 5
1736#define bfd_mach_m68040 6
1737#define bfd_mach_m68060 7
1738#define bfd_mach_cpu32  8
1739#define bfd_mach_fido   9
1740#define bfd_mach_mcf_isa_a_nodiv 10
1741#define bfd_mach_mcf_isa_a 11
1742#define bfd_mach_mcf_isa_a_mac 12
1743#define bfd_mach_mcf_isa_a_emac 13
1744#define bfd_mach_mcf_isa_aplus 14
1745#define bfd_mach_mcf_isa_aplus_mac 15
1746#define bfd_mach_mcf_isa_aplus_emac 16
1747#define bfd_mach_mcf_isa_b_nousp 17
1748#define bfd_mach_mcf_isa_b_nousp_mac 18
1749#define bfd_mach_mcf_isa_b_nousp_emac 19
1750#define bfd_mach_mcf_isa_b 20
1751#define bfd_mach_mcf_isa_b_mac 21
1752#define bfd_mach_mcf_isa_b_emac 22
1753#define bfd_mach_mcf_isa_b_float 23
1754#define bfd_mach_mcf_isa_b_float_mac 24
1755#define bfd_mach_mcf_isa_b_float_emac 25
1756  bfd_arch_vax,       /* DEC Vax */
1757  bfd_arch_i960,      /* Intel 960 */
1758    /* The order of the following is important.
1759       lower number indicates a machine type that
1760       only accepts a subset of the instructions
1761       available to machines with higher numbers.
1762       The exception is the "ca", which is
1763       incompatible with all other machines except
1764       "core".  */
1765
1766#define bfd_mach_i960_core      1
1767#define bfd_mach_i960_ka_sa     2
1768#define bfd_mach_i960_kb_sb     3
1769#define bfd_mach_i960_mc        4
1770#define bfd_mach_i960_xa        5
1771#define bfd_mach_i960_ca        6
1772#define bfd_mach_i960_jx        7
1773#define bfd_mach_i960_hx        8
1774
1775  bfd_arch_or32,      /* OpenRISC 32 */
1776
1777  bfd_arch_sparc,     /* SPARC */
1778#define bfd_mach_sparc                 1
1779/* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
1780#define bfd_mach_sparc_sparclet        2
1781#define bfd_mach_sparc_sparclite       3
1782#define bfd_mach_sparc_v8plus          4
1783#define bfd_mach_sparc_v8plusa         5 /* with ultrasparc add'ns.  */
1784#define bfd_mach_sparc_sparclite_le    6
1785#define bfd_mach_sparc_v9              7
1786#define bfd_mach_sparc_v9a             8 /* with ultrasparc add'ns.  */
1787#define bfd_mach_sparc_v8plusb         9 /* with cheetah add'ns.  */
1788#define bfd_mach_sparc_v9b             10 /* with cheetah add'ns.  */
1789/* Nonzero if MACH has the v9 instruction set.  */
1790#define bfd_mach_sparc_v9_p(mach) \
1791  ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \
1792   && (mach) != bfd_mach_sparc_sparclite_le)
1793/* Nonzero if MACH is a 64 bit sparc architecture.  */
1794#define bfd_mach_sparc_64bit_p(mach) \
1795  ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
1796  bfd_arch_spu,       /* PowerPC SPU */
1797#define bfd_mach_spu           256
1798  bfd_arch_mips,      /* MIPS Rxxxx */
1799#define bfd_mach_mips3000              3000
1800#define bfd_mach_mips3900              3900
1801#define bfd_mach_mips4000              4000
1802#define bfd_mach_mips4010              4010
1803#define bfd_mach_mips4100              4100
1804#define bfd_mach_mips4111              4111
1805#define bfd_mach_mips4120              4120
1806#define bfd_mach_mips4300              4300
1807#define bfd_mach_mips4400              4400
1808#define bfd_mach_mips4600              4600
1809#define bfd_mach_mips4650              4650
1810#define bfd_mach_mips5000              5000
1811#define bfd_mach_mips5400              5400
1812#define bfd_mach_mips5500              5500
1813#define bfd_mach_mips6000              6000
1814#define bfd_mach_mips7000              7000
1815#define bfd_mach_mips8000              8000
1816#define bfd_mach_mips9000              9000
1817#define bfd_mach_mips10000             10000
1818#define bfd_mach_mips12000             12000
1819#define bfd_mach_mips16                16
1820#define bfd_mach_mips5                 5
1821#define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
1822#define bfd_mach_mipsisa32             32
1823#define bfd_mach_mipsisa32r2           33
1824#define bfd_mach_mipsisa64             64
1825#define bfd_mach_mipsisa64r2           65
1826  bfd_arch_i386,      /* Intel 386 */
1827#define bfd_mach_i386_i386 1
1828#define bfd_mach_i386_i8086 2
1829#define bfd_mach_i386_i386_intel_syntax 3
1830#define bfd_mach_x86_64 64
1831#define bfd_mach_x86_64_intel_syntax 65
1832  bfd_arch_we32k,     /* AT&T WE32xxx */
1833  bfd_arch_tahoe,     /* CCI/Harris Tahoe */
1834  bfd_arch_i860,      /* Intel 860 */
1835  bfd_arch_i370,      /* IBM 360/370 Mainframes */
1836  bfd_arch_romp,      /* IBM ROMP PC/RT */
1837  bfd_arch_convex,    /* Convex */
1838  bfd_arch_m88k,      /* Motorola 88xxx */
1839  bfd_arch_m98k,      /* Motorola 98xxx */
1840  bfd_arch_pyramid,   /* Pyramid Technology */
1841  bfd_arch_h8300,     /* Renesas H8/300 (formerly Hitachi H8/300) */
1842#define bfd_mach_h8300    1
1843#define bfd_mach_h8300h   2
1844#define bfd_mach_h8300s   3
1845#define bfd_mach_h8300hn  4
1846#define bfd_mach_h8300sn  5
1847#define bfd_mach_h8300sx  6
1848#define bfd_mach_h8300sxn 7
1849  bfd_arch_pdp11,     /* DEC PDP-11 */
1850  bfd_arch_powerpc,   /* PowerPC */
1851#define bfd_mach_ppc           32
1852#define bfd_mach_ppc64         64
1853#define bfd_mach_ppc_403       403
1854#define bfd_mach_ppc_403gc     4030
1855#define bfd_mach_ppc_505       505
1856#define bfd_mach_ppc_601       601
1857#define bfd_mach_ppc_602       602
1858#define bfd_mach_ppc_603       603
1859#define bfd_mach_ppc_ec603e    6031
1860#define bfd_mach_ppc_604       604
1861#define bfd_mach_ppc_620       620
1862#define bfd_mach_ppc_630       630
1863#define bfd_mach_ppc_750       750
1864#define bfd_mach_ppc_860       860
1865#define bfd_mach_ppc_a35       35
1866#define bfd_mach_ppc_rs64ii    642
1867#define bfd_mach_ppc_rs64iii   643
1868#define bfd_mach_ppc_7400      7400
1869#define bfd_mach_ppc_e500      500
1870  bfd_arch_rs6000,    /* IBM RS/6000 */
1871#define bfd_mach_rs6k          6000
1872#define bfd_mach_rs6k_rs1      6001
1873#define bfd_mach_rs6k_rsc      6003
1874#define bfd_mach_rs6k_rs2      6002
1875  bfd_arch_hppa,      /* HP PA RISC */
1876#define bfd_mach_hppa10        10
1877#define bfd_mach_hppa11        11
1878#define bfd_mach_hppa20        20
1879#define bfd_mach_hppa20w       25
1880  bfd_arch_d10v,      /* Mitsubishi D10V */
1881#define bfd_mach_d10v          1
1882#define bfd_mach_d10v_ts2      2
1883#define bfd_mach_d10v_ts3      3
1884  bfd_arch_d30v,      /* Mitsubishi D30V */
1885  bfd_arch_dlx,       /* DLX */
1886  bfd_arch_m68hc11,   /* Motorola 68HC11 */
1887  bfd_arch_m68hc12,   /* Motorola 68HC12 */
1888#define bfd_mach_m6812_default 0
1889#define bfd_mach_m6812         1
1890#define bfd_mach_m6812s        2
1891  bfd_arch_z8k,       /* Zilog Z8000 */
1892#define bfd_mach_z8001         1
1893#define bfd_mach_z8002         2
1894  bfd_arch_h8500,     /* Renesas H8/500 (formerly Hitachi H8/500) */
1895  bfd_arch_sh,        /* Renesas / SuperH SH (formerly Hitachi SH) */
1896#define bfd_mach_sh            1
1897#define bfd_mach_sh2        0x20
1898#define bfd_mach_sh_dsp     0x2d
1899#define bfd_mach_sh2a       0x2a
1900#define bfd_mach_sh2a_nofpu 0x2b
1901#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
1902#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
1903#define bfd_mach_sh2a_or_sh4  0x2a3
1904#define bfd_mach_sh2a_or_sh3e 0x2a4
1905#define bfd_mach_sh2e       0x2e
1906#define bfd_mach_sh3        0x30
1907#define bfd_mach_sh3_nommu  0x31
1908#define bfd_mach_sh3_dsp    0x3d
1909#define bfd_mach_sh3e       0x3e
1910#define bfd_mach_sh4        0x40
1911#define bfd_mach_sh4_nofpu  0x41
1912#define bfd_mach_sh4_nommu_nofpu  0x42
1913#define bfd_mach_sh4a       0x4a
1914#define bfd_mach_sh4a_nofpu 0x4b
1915#define bfd_mach_sh4al_dsp  0x4d
1916#define bfd_mach_sh5        0x50
1917  bfd_arch_alpha,     /* Dec Alpha */
1918#define bfd_mach_alpha_ev4  0x10
1919#define bfd_mach_alpha_ev5  0x20
1920#define bfd_mach_alpha_ev6  0x30
1921  bfd_arch_arm,       /* Advanced Risc Machines ARM.  */
1922#define bfd_mach_arm_unknown   0
1923#define bfd_mach_arm_2         1
1924#define bfd_mach_arm_2a        2
1925#define bfd_mach_arm_3         3
1926#define bfd_mach_arm_3M        4
1927#define bfd_mach_arm_4         5
1928#define bfd_mach_arm_4T        6
1929#define bfd_mach_arm_5         7
1930#define bfd_mach_arm_5T        8
1931#define bfd_mach_arm_5TE       9
1932#define bfd_mach_arm_XScale    10
1933#define bfd_mach_arm_ep9312    11
1934#define bfd_mach_arm_iWMMXt    12
1935#define bfd_mach_arm_iWMMXt2   13
1936  bfd_arch_ns32k,     /* National Semiconductors ns32000 */
1937  bfd_arch_w65,       /* WDC 65816 */
1938  bfd_arch_tic30,     /* Texas Instruments TMS320C30 */
1939  bfd_arch_tic4x,     /* Texas Instruments TMS320C3X/4X */
1940#define bfd_mach_tic3x         30
1941#define bfd_mach_tic4x         40
1942  bfd_arch_tic54x,    /* Texas Instruments TMS320C54X */
1943  bfd_arch_tic80,     /* TI TMS320c80 (MVP) */
1944  bfd_arch_v850,      /* NEC V850 */
1945#define bfd_mach_v850          1
1946#define bfd_mach_v850e         'E'
1947#define bfd_mach_v850e1        '1'
1948  bfd_arch_arc,       /* ARC Cores */
1949#define bfd_mach_arc_5         5
1950#define bfd_mach_arc_6         6
1951#define bfd_mach_arc_7         7
1952#define bfd_mach_arc_8         8
1953 bfd_arch_m32c,     /* Renesas M16C/M32C.  */
1954#define bfd_mach_m16c        0x75
1955#define bfd_mach_m32c        0x78
1956  bfd_arch_m32r,      /* Renesas M32R (formerly Mitsubishi M32R/D) */
1957#define bfd_mach_m32r          1 /* For backwards compatibility.  */
1958#define bfd_mach_m32rx         'x'
1959#define bfd_mach_m32r2         '2'
1960  bfd_arch_mn10200,   /* Matsushita MN10200 */
1961  bfd_arch_mn10300,   /* Matsushita MN10300 */
1962#define bfd_mach_mn10300               300
1963#define bfd_mach_am33          330
1964#define bfd_mach_am33_2        332
1965  bfd_arch_fr30,
1966#define bfd_mach_fr30          0x46523330
1967  bfd_arch_frv,
1968#define bfd_mach_frv           1
1969#define bfd_mach_frvsimple     2
1970#define bfd_mach_fr300         300
1971#define bfd_mach_fr400         400
1972#define bfd_mach_fr450         450
1973#define bfd_mach_frvtomcat     499     /* fr500 prototype */
1974#define bfd_mach_fr500         500
1975#define bfd_mach_fr550         550
1976  bfd_arch_mcore,
1977  bfd_arch_mep,
1978#define bfd_mach_mep           1
1979#define bfd_mach_mep_h1        0x6831
1980  bfd_arch_ia64,      /* HP/Intel ia64 */
1981#define bfd_mach_ia64_elf64    64
1982#define bfd_mach_ia64_elf32    32
1983  bfd_arch_ip2k,      /* Ubicom IP2K microcontrollers. */
1984#define bfd_mach_ip2022        1
1985#define bfd_mach_ip2022ext     2
1986 bfd_arch_iq2000,     /* Vitesse IQ2000.  */
1987#define bfd_mach_iq2000        1
1988#define bfd_mach_iq10          2
1989  bfd_arch_mt,
1990#define bfd_mach_ms1           1
1991#define bfd_mach_mrisc2        2
1992#define bfd_mach_ms2           3
1993  bfd_arch_pj,
1994  bfd_arch_avr,       /* Atmel AVR microcontrollers.  */
1995#define bfd_mach_avr1          1
1996#define bfd_mach_avr2          2
1997#define bfd_mach_avr3          3
1998#define bfd_mach_avr4          4
1999#define bfd_mach_avr5          5
2000#define bfd_mach_avr6          6
2001  bfd_arch_bfin,        /* ADI Blackfin */
2002#define bfd_mach_bfin          1
2003  bfd_arch_cr16c,       /* National Semiconductor CompactRISC. */
2004#define bfd_mach_cr16c         1
2005  bfd_arch_crx,       /*  National Semiconductor CRX.  */
2006#define bfd_mach_crx           1
2007  bfd_arch_cris,      /* Axis CRIS */
2008#define bfd_mach_cris_v0_v10   255
2009#define bfd_mach_cris_v32      32
2010#define bfd_mach_cris_v10_v32  1032
2011  bfd_arch_s390,      /* IBM s390 */
2012#define bfd_mach_s390_31       31
2013#define bfd_mach_s390_64       64
2014  bfd_arch_score,     /* Sunplus score */
2015  bfd_arch_openrisc,  /* OpenRISC */
2016  bfd_arch_mmix,      /* Donald Knuth's educational processor.  */
2017  bfd_arch_xstormy16,
2018#define bfd_mach_xstormy16     1
2019  bfd_arch_msp430,    /* Texas Instruments MSP430 architecture.  */
2020#define bfd_mach_msp11          11
2021#define bfd_mach_msp110         110
2022#define bfd_mach_msp12          12
2023#define bfd_mach_msp13          13
2024#define bfd_mach_msp14          14
2025#define bfd_mach_msp15          15
2026#define bfd_mach_msp16          16
2027#define bfd_mach_msp21          21
2028#define bfd_mach_msp31          31
2029#define bfd_mach_msp32          32
2030#define bfd_mach_msp33          33
2031#define bfd_mach_msp41          41
2032#define bfd_mach_msp42          42
2033#define bfd_mach_msp43          43
2034#define bfd_mach_msp44          44
2035  bfd_arch_xc16x,     /* Infineon's XC16X Series.               */
2036#define bfd_mach_xc16x         1
2037#define bfd_mach_xc16xl        2
2038#define bfd_mach_xc16xs         3
2039  bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
2040#define bfd_mach_xtensa        1
2041   bfd_arch_maxq,     /* Dallas MAXQ 10/20 */
2042#define bfd_mach_maxq10    10
2043#define bfd_mach_maxq20    20
2044  bfd_arch_z80,
2045#define bfd_mach_z80strict      1 /* No undocumented opcodes.  */
2046#define bfd_mach_z80            3 /* With ixl, ixh, iyl, and iyh.  */
2047#define bfd_mach_z80full        7 /* All undocumented instructions.  */
2048#define bfd_mach_r800           11 /* R800: successor with multiplication.  */
2049  bfd_arch_last
2050  };
2051
2052typedef struct bfd_arch_info
2053{
2054  int bits_per_word;
2055  int bits_per_address;
2056  int bits_per_byte;
2057  enum bfd_architecture arch;
2058  unsigned long mach;
2059  const char *arch_name;
2060  const char *printable_name;
2061  unsigned int section_align_power;
2062  /* TRUE if this is the default machine for the architecture.
2063     The default arch should be the first entry for an arch so that
2064     all the entries for that arch can be accessed via <<next>>.  */
2065  bfd_boolean the_default;
2066  const struct bfd_arch_info * (*compatible)
2067    (const struct bfd_arch_info *a, const struct bfd_arch_info *b);
2068
2069  bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
2070
2071  const struct bfd_arch_info *next;
2072}
2073bfd_arch_info_type;
2074
2075const char *bfd_printable_name (bfd *abfd);
2076
2077const bfd_arch_info_type *bfd_scan_arch (const char *string);
2078
2079const char **bfd_arch_list (void);
2080
2081const bfd_arch_info_type *bfd_arch_get_compatible
2082   (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
2083
2084void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
2085
2086enum bfd_architecture bfd_get_arch (bfd *abfd);
2087
2088unsigned long bfd_get_mach (bfd *abfd);
2089
2090unsigned int bfd_arch_bits_per_byte (bfd *abfd);
2091
2092unsigned int bfd_arch_bits_per_address (bfd *abfd);
2093
2094const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
2095
2096const bfd_arch_info_type *bfd_lookup_arch
2097   (enum bfd_architecture arch, unsigned long machine);
2098
2099const char *bfd_printable_arch_mach
2100   (enum bfd_architecture arch, unsigned long machine);
2101
2102unsigned int bfd_octets_per_byte (bfd *abfd);
2103
2104unsigned int bfd_arch_mach_octets_per_byte
2105   (enum bfd_architecture arch, unsigned long machine);
2106
2107/* Extracted from reloc.c.  */
2108typedef enum bfd_reloc_status
2109{
2110  /* No errors detected.  */
2111  bfd_reloc_ok,
2112
2113  /* The relocation was performed, but there was an overflow.  */
2114  bfd_reloc_overflow,
2115
2116  /* The address to relocate was not within the section supplied.  */
2117  bfd_reloc_outofrange,
2118
2119  /* Used by special functions.  */
2120  bfd_reloc_continue,
2121
2122  /* Unsupported relocation size requested.  */
2123  bfd_reloc_notsupported,
2124
2125  /* Unused.  */
2126  bfd_reloc_other,
2127
2128  /* The symbol to relocate against was undefined.  */
2129  bfd_reloc_undefined,
2130
2131  /* The relocation was performed, but may not be ok - presently
2132     generated only when linking i960 coff files with i960 b.out
2133     symbols.  If this type is returned, the error_message argument
2134     to bfd_perform_relocation will be set.  */
2135  bfd_reloc_dangerous
2136 }
2137 bfd_reloc_status_type;
2138
2139
2140typedef struct reloc_cache_entry
2141{
2142  /* A pointer into the canonical table of pointers.  */
2143  struct bfd_symbol **sym_ptr_ptr;
2144
2145  /* offset in section.  */
2146  bfd_size_type address;
2147
2148  /* addend for relocation value.  */
2149  bfd_vma addend;
2150
2151  /* Pointer to how to perform the required relocation.  */
2152  reloc_howto_type *howto;
2153
2154}
2155arelent;
2156
2157enum complain_overflow
2158{
2159  /* Do not complain on overflow.  */
2160  complain_overflow_dont,
2161
2162  /* Complain if the value overflows when considered as a signed
2163     number one bit larger than the field.  ie. A bitfield of N bits
2164     is allowed to represent -2**n to 2**n-1.  */
2165  complain_overflow_bitfield,
2166
2167  /* Complain if the value overflows when considered as a signed
2168     number.  */
2169  complain_overflow_signed,
2170
2171  /* Complain if the value overflows when considered as an
2172     unsigned number.  */
2173  complain_overflow_unsigned
2174};
2175
2176struct reloc_howto_struct
2177{
2178  /*  The type field has mainly a documentary use - the back end can
2179      do what it wants with it, though normally the back end's
2180      external idea of what a reloc number is stored
2181      in this field.  For example, a PC relative word relocation
2182      in a coff environment has the type 023 - because that's
2183      what the outside world calls a R_PCRWORD reloc.  */
2184  unsigned int type;
2185
2186  /*  The value the final relocation is shifted right by.  This drops
2187      unwanted data from the relocation.  */
2188  unsigned int rightshift;
2189
2190  /*  The size of the item to be relocated.  This is *not* a
2191      power-of-two measure.  To get the number of bytes operated
2192      on by a type of relocation, use bfd_get_reloc_size.  */
2193  int size;
2194
2195  /*  The number of bits in the item to be relocated.  This is used
2196      when doing overflow checking.  */
2197  unsigned int bitsize;
2198
2199  /*  Notes that the relocation is relative to the location in the
2200      data section of the addend.  The relocation function will
2201      subtract from the relocation value the address of the location
2202      being relocated.  */
2203  bfd_boolean pc_relative;
2204
2205  /*  The bit position of the reloc value in the destination.
2206      The relocated value is left shifted by this amount.  */
2207  unsigned int bitpos;
2208
2209  /* What type of overflow error should be checked for when
2210     relocating.  */
2211  enum complain_overflow complain_on_overflow;
2212
2213  /* If this field is non null, then the supplied function is
2214     called rather than the normal function.  This allows really
2215     strange relocation methods to be accommodated (e.g., i960 callj
2216     instructions).  */
2217  bfd_reloc_status_type (*special_function)
2218    (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
2219     bfd *, char **);
2220
2221  /* The textual name of the relocation type.  */
2222  char *name;
2223
2224  /* Some formats record a relocation addend in the section contents
2225     rather than with the relocation.  For ELF formats this is the
2226     distinction between USE_REL and USE_RELA (though the code checks
2227     for USE_REL == 1/0).  The value of this field is TRUE if the
2228     addend is recorded with the section contents; when performing a
2229     partial link (ld -r) the section contents (the data) will be
2230     modified.  The value of this field is FALSE if addends are
2231     recorded with the relocation (in arelent.addend); when performing
2232     a partial link the relocation will be modified.
2233     All relocations for all ELF USE_RELA targets should set this field
2234     to FALSE (values of TRUE should be looked on with suspicion).
2235     However, the converse is not true: not all relocations of all ELF
2236     USE_REL targets set this field to TRUE.  Why this is so is peculiar
2237     to each particular target.  For relocs that aren't used in partial
2238     links (e.g. GOT stuff) it doesn't matter what this is set to.  */
2239  bfd_boolean partial_inplace;
2240
2241  /* src_mask selects the part of the instruction (or data) to be used
2242     in the relocation sum.  If the target relocations don't have an
2243     addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
2244     dst_mask to extract the addend from the section contents.  If
2245     relocations do have an addend in the reloc, eg. ELF USE_RELA, this
2246     field should be zero.  Non-zero values for ELF USE_RELA targets are
2247     bogus as in those cases the value in the dst_mask part of the
2248     section contents should be treated as garbage.  */
2249  bfd_vma src_mask;
2250
2251  /* dst_mask selects which parts of the instruction (or data) are
2252     replaced with a relocated value.  */
2253  bfd_vma dst_mask;
2254
2255  /* When some formats create PC relative instructions, they leave
2256     the value of the pc of the place being relocated in the offset
2257     slot of the instruction, so that a PC relative relocation can
2258     be made just by adding in an ordinary offset (e.g., sun3 a.out).
2259     Some formats leave the displacement part of an instruction
2260     empty (e.g., m88k bcs); this flag signals the fact.  */
2261  bfd_boolean pcrel_offset;
2262};
2263
2264#define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
2265  { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC }
2266#define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
2267  HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
2268         NAME, FALSE, 0, 0, IN)
2269
2270#define EMPTY_HOWTO(C) \
2271  HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
2272         NULL, FALSE, 0, 0, FALSE)
2273
2274#define HOWTO_PREPARE(relocation, symbol)               \
2275  {                                                     \
2276    if (symbol != NULL)                                 \
2277      {                                                 \
2278        if (bfd_is_com_section (symbol->section))       \
2279          {                                             \
2280            relocation = 0;                             \
2281          }                                             \
2282        else                                            \
2283          {                                             \
2284            relocation = symbol->value;                 \
2285          }                                             \
2286      }                                                 \
2287  }
2288
2289unsigned int bfd_get_reloc_size (reloc_howto_type *);
2290
2291typedef struct relent_chain
2292{
2293  arelent relent;
2294  struct relent_chain *next;
2295}
2296arelent_chain;
2297
2298bfd_reloc_status_type bfd_check_overflow
2299   (enum complain_overflow how,
2300    unsigned int bitsize,
2301    unsigned int rightshift,
2302    unsigned int addrsize,
2303    bfd_vma relocation);
2304
2305bfd_reloc_status_type bfd_perform_relocation
2306   (bfd *abfd,
2307    arelent *reloc_entry,
2308    void *data,
2309    asection *input_section,
2310    bfd *output_bfd,
2311    char **error_message);
2312
2313bfd_reloc_status_type bfd_install_relocation
2314   (bfd *abfd,
2315    arelent *reloc_entry,
2316    void *data, bfd_vma data_start,
2317    asection *input_section,
2318    char **error_message);
2319
2320enum bfd_reloc_code_real {
2321  _dummy_first_bfd_reloc_code_real,
2322
2323
2324/* Basic absolute relocations of N bits.  */
2325  BFD_RELOC_64,
2326  BFD_RELOC_32,
2327  BFD_RELOC_26,
2328  BFD_RELOC_24,
2329  BFD_RELOC_16,
2330  BFD_RELOC_14,
2331  BFD_RELOC_8,
2332
2333/* PC-relative relocations.  Sometimes these are relative to the address
2334of the relocation itself; sometimes they are relative to the start of
2335the section containing the relocation.  It depends on the specific target.
2336
2337The 24-bit relocation is used in some Intel 960 configurations.  */
2338  BFD_RELOC_64_PCREL,
2339  BFD_RELOC_32_PCREL,
2340  BFD_RELOC_24_PCREL,
2341  BFD_RELOC_16_PCREL,
2342  BFD_RELOC_12_PCREL,
2343  BFD_RELOC_8_PCREL,
2344
2345/* Section relative relocations.  Some targets need this for DWARF2.  */
2346  BFD_RELOC_32_SECREL,
2347
2348/* For ELF.  */
2349  BFD_RELOC_32_GOT_PCREL,
2350  BFD_RELOC_16_GOT_PCREL,
2351  BFD_RELOC_8_GOT_PCREL,
2352  BFD_RELOC_32_GOTOFF,
2353  BFD_RELOC_16_GOTOFF,
2354  BFD_RELOC_LO16_GOTOFF,
2355  BFD_RELOC_HI16_GOTOFF,
2356  BFD_RELOC_HI16_S_GOTOFF,
2357  BFD_RELOC_8_GOTOFF,
2358  BFD_RELOC_64_PLT_PCREL,
2359  BFD_RELOC_32_PLT_PCREL,
2360  BFD_RELOC_24_PLT_PCREL,
2361  BFD_RELOC_16_PLT_PCREL,
2362  BFD_RELOC_8_PLT_PCREL,
2363  BFD_RELOC_64_PLTOFF,
2364  BFD_RELOC_32_PLTOFF,
2365  BFD_RELOC_16_PLTOFF,
2366  BFD_RELOC_LO16_PLTOFF,
2367  BFD_RELOC_HI16_PLTOFF,
2368  BFD_RELOC_HI16_S_PLTOFF,
2369  BFD_RELOC_8_PLTOFF,
2370
2371/* Relocations used by 68K ELF.  */
2372  BFD_RELOC_68K_GLOB_DAT,
2373  BFD_RELOC_68K_JMP_SLOT,
2374  BFD_RELOC_68K_RELATIVE,
2375
2376/* Linkage-table relative.  */
2377  BFD_RELOC_32_BASEREL,
2378  BFD_RELOC_16_BASEREL,
2379  BFD_RELOC_LO16_BASEREL,
2380  BFD_RELOC_HI16_BASEREL,
2381  BFD_RELOC_HI16_S_BASEREL,
2382  BFD_RELOC_8_BASEREL,
2383  BFD_RELOC_RVA,
2384
2385/* Absolute 8-bit relocation, but used to form an address like 0xFFnn.  */
2386  BFD_RELOC_8_FFnn,
2387
2388/* These PC-relative relocations are stored as word displacements --
2389i.e., byte displacements shifted right two bits.  The 30-bit word
2390displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
2391SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
2392signed 16-bit displacement is used on the MIPS, and the 23-bit
2393displacement is used on the Alpha.  */
2394  BFD_RELOC_32_PCREL_S2,
2395  BFD_RELOC_16_PCREL_S2,
2396  BFD_RELOC_23_PCREL_S2,
2397
2398/* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
2399the target word.  These are used on the SPARC.  */
2400  BFD_RELOC_HI22,
2401  BFD_RELOC_LO10,
2402
2403/* For systems that allocate a Global Pointer register, these are
2404displacements off that register.  These relocation types are
2405handled specially, because the value the register will have is
2406decided relatively late.  */
2407  BFD_RELOC_GPREL16,
2408  BFD_RELOC_GPREL32,
2409
2410/* Reloc types used for i960/b.out.  */
2411  BFD_RELOC_I960_CALLJ,
2412
2413/* SPARC ELF relocations.  There is probably some overlap with other
2414relocation types already defined.  */
2415  BFD_RELOC_NONE,
2416  BFD_RELOC_SPARC_WDISP22,
2417  BFD_RELOC_SPARC22,
2418  BFD_RELOC_SPARC13,
2419  BFD_RELOC_SPARC_GOT10,
2420  BFD_RELOC_SPARC_GOT13,
2421  BFD_RELOC_SPARC_GOT22,
2422  BFD_RELOC_SPARC_PC10,
2423  BFD_RELOC_SPARC_PC22,
2424  BFD_RELOC_SPARC_WPLT30,
2425  BFD_RELOC_SPARC_COPY,
2426  BFD_RELOC_SPARC_GLOB_DAT,
2427  BFD_RELOC_SPARC_JMP_SLOT,
2428  BFD_RELOC_SPARC_RELATIVE,
2429  BFD_RELOC_SPARC_UA16,
2430  BFD_RELOC_SPARC_UA32,
2431  BFD_RELOC_SPARC_UA64,
2432
2433/* I think these are specific to SPARC a.out (e.g., Sun 4).  */
2434  BFD_RELOC_SPARC_BASE13,
2435  BFD_RELOC_SPARC_BASE22,
2436
2437/* SPARC64 relocations  */
2438#define BFD_RELOC_SPARC_64 BFD_RELOC_64
2439  BFD_RELOC_SPARC_10,
2440  BFD_RELOC_SPARC_11,
2441  BFD_RELOC_SPARC_OLO10,
2442  BFD_RELOC_SPARC_HH22,
2443  BFD_RELOC_SPARC_HM10,
2444  BFD_RELOC_SPARC_LM22,
2445  BFD_RELOC_SPARC_PC_HH22,
2446  BFD_RELOC_SPARC_PC_HM10,
2447  BFD_RELOC_SPARC_PC_LM22,
2448  BFD_RELOC_SPARC_WDISP16,
2449  BFD_RELOC_SPARC_WDISP19,
2450  BFD_RELOC_SPARC_7,
2451  BFD_RELOC_SPARC_6,
2452  BFD_RELOC_SPARC_5,
2453#define BFD_RELOC_SPARC_DISP64 BFD_RELOC_64_PCREL
2454  BFD_RELOC_SPARC_PLT32,
2455  BFD_RELOC_SPARC_PLT64,
2456  BFD_RELOC_SPARC_HIX22,
2457  BFD_RELOC_SPARC_LOX10,
2458  BFD_RELOC_SPARC_H44,
2459  BFD_RELOC_SPARC_M44,
2460  BFD_RELOC_SPARC_L44,
2461  BFD_RELOC_SPARC_REGISTER,
2462
2463/* SPARC little endian relocation  */
2464  BFD_RELOC_SPARC_REV32,
2465
2466/* SPARC TLS relocations  */
2467  BFD_RELOC_SPARC_TLS_GD_HI22,
2468  BFD_RELOC_SPARC_TLS_GD_LO10,
2469  BFD_RELOC_SPARC_TLS_GD_ADD,
2470  BFD_RELOC_SPARC_TLS_GD_CALL,
2471  BFD_RELOC_SPARC_TLS_LDM_HI22,
2472  BFD_RELOC_SPARC_TLS_LDM_LO10,
2473  BFD_RELOC_SPARC_TLS_LDM_ADD,
2474  BFD_RELOC_SPARC_TLS_LDM_CALL,
2475  BFD_RELOC_SPARC_TLS_LDO_HIX22,
2476  BFD_RELOC_SPARC_TLS_LDO_LOX10,
2477  BFD_RELOC_SPARC_TLS_LDO_ADD,
2478  BFD_RELOC_SPARC_TLS_IE_HI22,
2479  BFD_RELOC_SPARC_TLS_IE_LO10,
2480  BFD_RELOC_SPARC_TLS_IE_LD,
2481  BFD_RELOC_SPARC_TLS_IE_LDX,
2482  BFD_RELOC_SPARC_TLS_IE_ADD,
2483  BFD_RELOC_SPARC_TLS_LE_HIX22,
2484  BFD_RELOC_SPARC_TLS_LE_LOX10,
2485  BFD_RELOC_SPARC_TLS_DTPMOD32,
2486  BFD_RELOC_SPARC_TLS_DTPMOD64,
2487  BFD_RELOC_SPARC_TLS_DTPOFF32,
2488  BFD_RELOC_SPARC_TLS_DTPOFF64,
2489  BFD_RELOC_SPARC_TLS_TPOFF32,
2490  BFD_RELOC_SPARC_TLS_TPOFF64,
2491
2492/* SPU Relocations.  */
2493  BFD_RELOC_SPU_IMM7,
2494  BFD_RELOC_SPU_IMM8,
2495  BFD_RELOC_SPU_IMM10,
2496  BFD_RELOC_SPU_IMM10W,
2497  BFD_RELOC_SPU_IMM16,
2498  BFD_RELOC_SPU_IMM16W,
2499  BFD_RELOC_SPU_IMM18,
2500  BFD_RELOC_SPU_PCREL9a,
2501  BFD_RELOC_SPU_PCREL9b,
2502  BFD_RELOC_SPU_PCREL16,
2503  BFD_RELOC_SPU_LO16,
2504  BFD_RELOC_SPU_HI16,
2505
2506/* Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
2507"addend" in some special way.
2508For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
2509writing; when reading, it will be the absolute section symbol.  The
2510addend is the displacement in bytes of the "lda" instruction from
2511the "ldah" instruction (which is at the address of this reloc).  */
2512  BFD_RELOC_ALPHA_GPDISP_HI16,
2513
2514/* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
2515with GPDISP_HI16 relocs.  The addend is ignored when writing the
2516relocations out, and is filled in with the file's GP value on
2517reading, for convenience.  */
2518  BFD_RELOC_ALPHA_GPDISP_LO16,
2519
2520/* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
2521relocation except that there is no accompanying GPDISP_LO16
2522relocation.  */
2523  BFD_RELOC_ALPHA_GPDISP,
2524
2525/* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
2526the assembler turns it into a LDQ instruction to load the address of
2527the symbol, and then fills in a register in the real instruction.
2528
2529The LITERAL reloc, at the LDQ instruction, refers to the .lita
2530section symbol.  The addend is ignored when writing, but is filled
2531in with the file's GP value on reading, for convenience, as with the
2532GPDISP_LO16 reloc.
2533
2534The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
2535It should refer to the symbol to be referenced, as with 16_GOTOFF,
2536but it generates output not based on the position within the .got
2537section, but relative to the GP value chosen for the file during the
2538final link stage.
2539
2540The LITUSE reloc, on the instruction using the loaded address, gives
2541information to the linker that it might be able to use to optimize
2542away some literal section references.  The symbol is ignored (read
2543as the absolute section symbol), and the "addend" indicates the type
2544of instruction using the register:
25451 - "memory" fmt insn
25462 - byte-manipulation (byte offset reg)
25473 - jsr (target of branch)  */
2548  BFD_RELOC_ALPHA_LITERAL,
2549  BFD_RELOC_ALPHA_ELF_LITERAL,
2550  BFD_RELOC_ALPHA_LITUSE,
2551
2552/* The HINT relocation indicates a value that should be filled into the
2553"hint" field of a jmp/jsr/ret instruction, for possible branch-
2554prediction logic which may be provided on some processors.  */
2555  BFD_RELOC_ALPHA_HINT,
2556
2557/* The LINKAGE relocation outputs a linkage pair in the object file,
2558which is filled by the linker.  */
2559  BFD_RELOC_ALPHA_LINKAGE,
2560
2561/* The CODEADDR relocation outputs a STO_CA in the object file,
2562which is filled by the linker.  */
2563  BFD_RELOC_ALPHA_CODEADDR,
2564
2565/* The GPREL_HI/LO relocations together form a 32-bit offset from the
2566GP register.  */
2567  BFD_RELOC_ALPHA_GPREL_HI16,
2568  BFD_RELOC_ALPHA_GPREL_LO16,
2569
2570/* Like BFD_RELOC_23_PCREL_S2, except that the source and target must
2571share a common GP, and the target address is adjusted for
2572STO_ALPHA_STD_GPLOAD.  */
2573  BFD_RELOC_ALPHA_BRSGP,
2574
2575/* Alpha thread-local storage relocations.  */
2576  BFD_RELOC_ALPHA_TLSGD,
2577  BFD_RELOC_ALPHA_TLSLDM,
2578  BFD_RELOC_ALPHA_DTPMOD64,
2579  BFD_RELOC_ALPHA_GOTDTPREL16,
2580  BFD_RELOC_ALPHA_DTPREL64,
2581  BFD_RELOC_ALPHA_DTPREL_HI16,
2582  BFD_RELOC_ALPHA_DTPREL_LO16,
2583  BFD_RELOC_ALPHA_DTPREL16,
2584  BFD_RELOC_ALPHA_GOTTPREL16,
2585  BFD_RELOC_ALPHA_TPREL64,
2586  BFD_RELOC_ALPHA_TPREL_HI16,
2587  BFD_RELOC_ALPHA_TPREL_LO16,
2588  BFD_RELOC_ALPHA_TPREL16,
2589
2590/* Bits 27..2 of the relocation address shifted right 2 bits;
2591simple reloc otherwise.  */
2592  BFD_RELOC_MIPS_JMP,
2593
2594/* The MIPS16 jump instruction.  */
2595  BFD_RELOC_MIPS16_JMP,
2596
2597/* MIPS16 GP relative reloc.  */
2598  BFD_RELOC_MIPS16_GPREL,
2599
2600/* High 16 bits of 32-bit value; simple reloc.  */
2601  BFD_RELOC_HI16,
2602
2603/* High 16 bits of 32-bit value but the low 16 bits will be sign
2604extended and added to form the final result.  If the low 16
2605bits form a negative number, we need to add one to the high value
2606to compensate for the borrow when the low bits are added.  */
2607  BFD_RELOC_HI16_S,
2608
2609/* Low 16 bits.  */
2610  BFD_RELOC_LO16,
2611
2612/* High 16 bits of 32-bit pc-relative value  */
2613  BFD_RELOC_HI16_PCREL,
2614
2615/* High 16 bits of 32-bit pc-relative value, adjusted  */
2616  BFD_RELOC_HI16_S_PCREL,
2617
2618/* Low 16 bits of pc-relative value  */
2619  BFD_RELOC_LO16_PCREL,
2620
2621/* MIPS16 high 16 bits of 32-bit value.  */
2622  BFD_RELOC_MIPS16_HI16,
2623
2624/* MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
2625extended and added to form the final result.  If the low 16
2626bits form a negative number, we need to add one to the high value
2627to compensate for the borrow when the low bits are added.  */
2628  BFD_RELOC_MIPS16_HI16_S,
2629
2630/* MIPS16 low 16 bits.  */
2631  BFD_RELOC_MIPS16_LO16,
2632
2633/* Relocation against a MIPS literal section.  */
2634  BFD_RELOC_MIPS_LITERAL,
2635
2636/* MIPS ELF relocations.  */
2637  BFD_RELOC_MIPS_GOT16,
2638  BFD_RELOC_MIPS_CALL16,
2639  BFD_RELOC_MIPS_GOT_HI16,
2640  BFD_RELOC_MIPS_GOT_LO16,
2641  BFD_RELOC_MIPS_CALL_HI16,
2642  BFD_RELOC_MIPS_CALL_LO16,
2643  BFD_RELOC_MIPS_SUB,
2644  BFD_RELOC_MIPS_GOT_PAGE,
2645  BFD_RELOC_MIPS_GOT_OFST,
2646  BFD_RELOC_MIPS_GOT_DISP,
2647  BFD_RELOC_MIPS_SHIFT5,
2648  BFD_RELOC_MIPS_SHIFT6,
2649  BFD_RELOC_MIPS_INSERT_A,
2650  BFD_RELOC_MIPS_INSERT_B,
2651  BFD_RELOC_MIPS_DELETE,
2652  BFD_RELOC_MIPS_HIGHEST,
2653  BFD_RELOC_MIPS_HIGHER,
2654  BFD_RELOC_MIPS_SCN_DISP,
2655  BFD_RELOC_MIPS_REL16,
2656  BFD_RELOC_MIPS_RELGOT,
2657  BFD_RELOC_MIPS_JALR,
2658  BFD_RELOC_MIPS_TLS_DTPMOD32,
2659  BFD_RELOC_MIPS_TLS_DTPREL32,
2660  BFD_RELOC_MIPS_TLS_DTPMOD64,
2661  BFD_RELOC_MIPS_TLS_DTPREL64,
2662  BFD_RELOC_MIPS_TLS_GD,
2663  BFD_RELOC_MIPS_TLS_LDM,
2664  BFD_RELOC_MIPS_TLS_DTPREL_HI16,
2665  BFD_RELOC_MIPS_TLS_DTPREL_LO16,
2666  BFD_RELOC_MIPS_TLS_GOTTPREL,
2667  BFD_RELOC_MIPS_TLS_TPREL32,
2668  BFD_RELOC_MIPS_TLS_TPREL64,
2669  BFD_RELOC_MIPS_TLS_TPREL_HI16,
2670  BFD_RELOC_MIPS_TLS_TPREL_LO16,
2671
2672
2673/* MIPS ELF relocations (VxWorks extensions).  */
2674  BFD_RELOC_MIPS_COPY,
2675  BFD_RELOC_MIPS_JUMP_SLOT,
2676
2677
2678/* Fujitsu Frv Relocations.  */
2679  BFD_RELOC_FRV_LABEL16,
2680  BFD_RELOC_FRV_LABEL24,
2681  BFD_RELOC_FRV_LO16,
2682  BFD_RELOC_FRV_HI16,
2683  BFD_RELOC_FRV_GPREL12,
2684  BFD_RELOC_FRV_GPRELU12,
2685  BFD_RELOC_FRV_GPREL32,
2686  BFD_RELOC_FRV_GPRELHI,
2687  BFD_RELOC_FRV_GPRELLO,
2688  BFD_RELOC_FRV_GOT12,
2689  BFD_RELOC_FRV_GOTHI,
2690  BFD_RELOC_FRV_GOTLO,
2691  BFD_RELOC_FRV_FUNCDESC,
2692  BFD_RELOC_FRV_FUNCDESC_GOT12,
2693  BFD_RELOC_FRV_FUNCDESC_GOTHI,
2694  BFD_RELOC_FRV_FUNCDESC_GOTLO,
2695  BFD_RELOC_FRV_FUNCDESC_VALUE,
2696  BFD_RELOC_FRV_FUNCDESC_GOTOFF12,
2697  BFD_RELOC_FRV_FUNCDESC_GOTOFFHI,
2698  BFD_RELOC_FRV_FUNCDESC_GOTOFFLO,
2699  BFD_RELOC_FRV_GOTOFF12,
2700  BFD_RELOC_FRV_GOTOFFHI,
2701  BFD_RELOC_FRV_GOTOFFLO,
2702  BFD_RELOC_FRV_GETTLSOFF,
2703  BFD_RELOC_FRV_TLSDESC_VALUE,
2704  BFD_RELOC_FRV_GOTTLSDESC12,
2705  BFD_RELOC_FRV_GOTTLSDESCHI,
2706  BFD_RELOC_FRV_GOTTLSDESCLO,
2707  BFD_RELOC_FRV_TLSMOFF12,
2708  BFD_RELOC_FRV_TLSMOFFHI,
2709  BFD_RELOC_FRV_TLSMOFFLO,
2710  BFD_RELOC_FRV_GOTTLSOFF12,
2711  BFD_RELOC_FRV_GOTTLSOFFHI,
2712  BFD_RELOC_FRV_GOTTLSOFFLO,
2713  BFD_RELOC_FRV_TLSOFF,
2714  BFD_RELOC_FRV_TLSDESC_RELAX,
2715  BFD_RELOC_FRV_GETTLSOFF_RELAX,
2716  BFD_RELOC_FRV_TLSOFF_RELAX,
2717  BFD_RELOC_FRV_TLSMOFF,
2718
2719
2720/* This is a 24bit GOT-relative reloc for the mn10300.  */
2721  BFD_RELOC_MN10300_GOTOFF24,
2722
2723/* This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
2724in the instruction.  */
2725  BFD_RELOC_MN10300_GOT32,
2726
2727/* This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
2728in the instruction.  */
2729  BFD_RELOC_MN10300_GOT24,
2730
2731/* This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
2732in the instruction.  */
2733  BFD_RELOC_MN10300_GOT16,
2734
2735/* Copy symbol at runtime.  */
2736  BFD_RELOC_MN10300_COPY,
2737
2738/* Create GOT entry.  */
2739  BFD_RELOC_MN10300_GLOB_DAT,
2740
2741/* Create PLT entry.  */
2742  BFD_RELOC_MN10300_JMP_SLOT,
2743
2744/* Adjust by program base.  */
2745  BFD_RELOC_MN10300_RELATIVE,
2746
2747
2748/* i386/elf relocations  */
2749  BFD_RELOC_386_GOT32,
2750  BFD_RELOC_386_PLT32,
2751  BFD_RELOC_386_COPY,
2752  BFD_RELOC_386_GLOB_DAT,
2753  BFD_RELOC_386_JUMP_SLOT,
2754  BFD_RELOC_386_RELATIVE,
2755  BFD_RELOC_386_GOTOFF,
2756  BFD_RELOC_386_GOTPC,
2757  BFD_RELOC_386_TLS_TPOFF,
2758  BFD_RELOC_386_TLS_IE,
2759  BFD_RELOC_386_TLS_GOTIE,
2760  BFD_RELOC_386_TLS_LE,
2761  BFD_RELOC_386_TLS_GD,
2762  BFD_RELOC_386_TLS_LDM,
2763  BFD_RELOC_386_TLS_LDO_32,
2764  BFD_RELOC_386_TLS_IE_32,
2765  BFD_RELOC_386_TLS_LE_32,
2766  BFD_RELOC_386_TLS_DTPMOD32,
2767  BFD_RELOC_386_TLS_DTPOFF32,
2768  BFD_RELOC_386_TLS_TPOFF32,
2769  BFD_RELOC_386_TLS_GOTDESC,
2770  BFD_RELOC_386_TLS_DESC_CALL,
2771  BFD_RELOC_386_TLS_DESC,
2772
2773/* x86-64/elf relocations  */
2774  BFD_RELOC_X86_64_GOT32,
2775  BFD_RELOC_X86_64_PLT32,
2776  BFD_RELOC_X86_64_COPY,
2777  BFD_RELOC_X86_64_GLOB_DAT,
2778  BFD_RELOC_X86_64_JUMP_SLOT,
2779  BFD_RELOC_X86_64_RELATIVE,
2780  BFD_RELOC_X86_64_GOTPCREL,
2781  BFD_RELOC_X86_64_32S,
2782  BFD_RELOC_X86_64_DTPMOD64,
2783  BFD_RELOC_X86_64_DTPOFF64,
2784  BFD_RELOC_X86_64_TPOFF64,
2785  BFD_RELOC_X86_64_TLSGD,
2786  BFD_RELOC_X86_64_TLSLD,
2787  BFD_RELOC_X86_64_DTPOFF32,
2788  BFD_RELOC_X86_64_GOTTPOFF,
2789  BFD_RELOC_X86_64_TPOFF32,
2790  BFD_RELOC_X86_64_GOTOFF64,
2791  BFD_RELOC_X86_64_GOTPC32,
2792  BFD_RELOC_X86_64_GOT64,
2793  BFD_RELOC_X86_64_GOTPCREL64,
2794  BFD_RELOC_X86_64_GOTPC64,
2795  BFD_RELOC_X86_64_GOTPLT64,
2796  BFD_RELOC_X86_64_PLTOFF64,
2797  BFD_RELOC_X86_64_GOTPC32_TLSDESC,
2798  BFD_RELOC_X86_64_TLSDESC_CALL,
2799  BFD_RELOC_X86_64_TLSDESC,
2800
2801/* ns32k relocations  */
2802  BFD_RELOC_NS32K_IMM_8,
2803  BFD_RELOC_NS32K_IMM_16,
2804  BFD_RELOC_NS32K_IMM_32,
2805  BFD_RELOC_NS32K_IMM_8_PCREL,
2806  BFD_RELOC_NS32K_IMM_16_PCREL,
2807  BFD_RELOC_NS32K_IMM_32_PCREL,
2808  BFD_RELOC_NS32K_DISP_8,
2809  BFD_RELOC_NS32K_DISP_16,
2810  BFD_RELOC_NS32K_DISP_32,
2811  BFD_RELOC_NS32K_DISP_8_PCREL,
2812  BFD_RELOC_NS32K_DISP_16_PCREL,
2813  BFD_RELOC_NS32K_DISP_32_PCREL,
2814
2815/* PDP11 relocations  */
2816  BFD_RELOC_PDP11_DISP_8_PCREL,
2817  BFD_RELOC_PDP11_DISP_6_PCREL,
2818
2819/* Picojava relocs.  Not all of these appear in object files.  */
2820  BFD_RELOC_PJ_CODE_HI16,
2821  BFD_RELOC_PJ_CODE_LO16,
2822  BFD_RELOC_PJ_CODE_DIR16,
2823  BFD_RELOC_PJ_CODE_DIR32,
2824  BFD_RELOC_PJ_CODE_REL16,
2825  BFD_RELOC_PJ_CODE_REL32,
2826
2827/* Power(rs6000) and PowerPC relocations.  */
2828  BFD_RELOC_PPC_B26,
2829  BFD_RELOC_PPC_BA26,
2830  BFD_RELOC_PPC_TOC16,
2831  BFD_RELOC_PPC_B16,
2832  BFD_RELOC_PPC_B16_BRTAKEN,
2833  BFD_RELOC_PPC_B16_BRNTAKEN,
2834  BFD_RELOC_PPC_BA16,
2835  BFD_RELOC_PPC_BA16_BRTAKEN,
2836  BFD_RELOC_PPC_BA16_BRNTAKEN,
2837  BFD_RELOC_PPC_COPY,
2838  BFD_RELOC_PPC_GLOB_DAT,
2839  BFD_RELOC_PPC_JMP_SLOT,
2840  BFD_RELOC_PPC_RELATIVE,
2841  BFD_RELOC_PPC_LOCAL24PC,
2842  BFD_RELOC_PPC_EMB_NADDR32,
2843  BFD_RELOC_PPC_EMB_NADDR16,
2844  BFD_RELOC_PPC_EMB_NADDR16_LO,
2845  BFD_RELOC_PPC_EMB_NADDR16_HI,
2846  BFD_RELOC_PPC_EMB_NADDR16_HA,
2847  BFD_RELOC_PPC_EMB_SDAI16,
2848  BFD_RELOC_PPC_EMB_SDA2I16,
2849  BFD_RELOC_PPC_EMB_SDA2REL,
2850  BFD_RELOC_PPC_EMB_SDA21,
2851  BFD_RELOC_PPC_EMB_MRKREF,
2852  BFD_RELOC_PPC_EMB_RELSEC16,
2853  BFD_RELOC_PPC_EMB_RELST_LO,
2854  BFD_RELOC_PPC_EMB_RELST_HI,
2855  BFD_RELOC_PPC_EMB_RELST_HA,
2856  BFD_RELOC_PPC_EMB_BIT_FLD,
2857  BFD_RELOC_PPC_EMB_RELSDA,
2858  BFD_RELOC_PPC64_HIGHER,
2859  BFD_RELOC_PPC64_HIGHER_S,
2860  BFD_RELOC_PPC64_HIGHEST,
2861  BFD_RELOC_PPC64_HIGHEST_S,
2862  BFD_RELOC_PPC64_TOC16_LO,
2863  BFD_RELOC_PPC64_TOC16_HI,
2864  BFD_RELOC_PPC64_TOC16_HA,
2865  BFD_RELOC_PPC64_TOC,
2866  BFD_RELOC_PPC64_PLTGOT16,
2867  BFD_RELOC_PPC64_PLTGOT16_LO,
2868  BFD_RELOC_PPC64_PLTGOT16_HI,
2869  BFD_RELOC_PPC64_PLTGOT16_HA,
2870  BFD_RELOC_PPC64_ADDR16_DS,
2871  BFD_RELOC_PPC64_ADDR16_LO_DS,
2872  BFD_RELOC_PPC64_GOT16_DS,
2873  BFD_RELOC_PPC64_GOT16_LO_DS,
2874  BFD_RELOC_PPC64_PLT16_LO_DS,
2875  BFD_RELOC_PPC64_SECTOFF_DS,
2876  BFD_RELOC_PPC64_SECTOFF_LO_DS,
2877  BFD_RELOC_PPC64_TOC16_DS,
2878  BFD_RELOC_PPC64_TOC16_LO_DS,
2879  BFD_RELOC_PPC64_PLTGOT16_DS,
2880  BFD_RELOC_PPC64_PLTGOT16_LO_DS,
2881
2882/* PowerPC and PowerPC64 thread-local storage relocations.  */
2883  BFD_RELOC_PPC_TLS,
2884  BFD_RELOC_PPC_DTPMOD,
2885  BFD_RELOC_PPC_TPREL16,
2886  BFD_RELOC_PPC_TPREL16_LO,
2887  BFD_RELOC_PPC_TPREL16_HI,
2888  BFD_RELOC_PPC_TPREL16_HA,
2889  BFD_RELOC_PPC_TPREL,
2890  BFD_RELOC_PPC_DTPREL16,
2891  BFD_RELOC_PPC_DTPREL16_LO,
2892  BFD_RELOC_PPC_DTPREL16_HI,
2893  BFD_RELOC_PPC_DTPREL16_HA,
2894  BFD_RELOC_PPC_DTPREL,
2895  BFD_RELOC_PPC_GOT_TLSGD16,
2896  BFD_RELOC_PPC_GOT_TLSGD16_LO,
2897  BFD_RELOC_PPC_GOT_TLSGD16_HI,
2898  BFD_RELOC_PPC_GOT_TLSGD16_HA,
2899  BFD_RELOC_PPC_GOT_TLSLD16,
2900  BFD_RELOC_PPC_GOT_TLSLD16_LO,
2901  BFD_RELOC_PPC_GOT_TLSLD16_HI,
2902  BFD_RELOC_PPC_GOT_TLSLD16_HA,
2903  BFD_RELOC_PPC_GOT_TPREL16,
2904  BFD_RELOC_PPC_GOT_TPREL16_LO,
2905  BFD_RELOC_PPC_GOT_TPREL16_HI,
2906  BFD_RELOC_PPC_GOT_TPREL16_HA,
2907  BFD_RELOC_PPC_GOT_DTPREL16,
2908  BFD_RELOC_PPC_GOT_DTPREL16_LO,
2909  BFD_RELOC_PPC_GOT_DTPREL16_HI,
2910  BFD_RELOC_PPC_GOT_DTPREL16_HA,
2911  BFD_RELOC_PPC64_TPREL16_DS,
2912  BFD_RELOC_PPC64_TPREL16_LO_DS,
2913  BFD_RELOC_PPC64_TPREL16_HIGHER,
2914  BFD_RELOC_PPC64_TPREL16_HIGHERA,
2915  BFD_RELOC_PPC64_TPREL16_HIGHEST,
2916  BFD_RELOC_PPC64_TPREL16_HIGHESTA,
2917  BFD_RELOC_PPC64_DTPREL16_DS,
2918  BFD_RELOC_PPC64_DTPREL16_LO_DS,
2919  BFD_RELOC_PPC64_DTPREL16_HIGHER,
2920  BFD_RELOC_PPC64_DTPREL16_HIGHERA,
2921  BFD_RELOC_PPC64_DTPREL16_HIGHEST,
2922  BFD_RELOC_PPC64_DTPREL16_HIGHESTA,
2923
2924/* IBM 370/390 relocations  */
2925  BFD_RELOC_I370_D12,
2926
2927/* The type of reloc used to build a constructor table - at the moment
2928probably a 32 bit wide absolute relocation, but the target can choose.
2929It generally does map to one of the other relocation types.  */
2930  BFD_RELOC_CTOR,
2931
2932/* ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
2933not stored in the instruction.  */
2934  BFD_RELOC_ARM_PCREL_BRANCH,
2935
2936/* ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
2937not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
2938field in the instruction.  */
2939  BFD_RELOC_ARM_PCREL_BLX,
2940
2941/* Thumb 22 bit pc-relative branch.  The lowest bit must be zero and is
2942not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
2943field in the instruction.  */
2944  BFD_RELOC_THUMB_PCREL_BLX,
2945
2946/* ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.  */
2947  BFD_RELOC_ARM_PCREL_CALL,
2948
2949/* ARM 26-bit pc-relative branch for B or conditional BL instruction.  */
2950  BFD_RELOC_ARM_PCREL_JUMP,
2951
2952/* Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
2953The lowest bit must be zero and is not stored in the instruction.
2954Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
2955"nn" one smaller in all cases.  Note further that BRANCH23
2956corresponds to R_ARM_THM_CALL.  */
2957  BFD_RELOC_THUMB_PCREL_BRANCH7,
2958  BFD_RELOC_THUMB_PCREL_BRANCH9,
2959  BFD_RELOC_THUMB_PCREL_BRANCH12,
2960  BFD_RELOC_THUMB_PCREL_BRANCH20,
2961  BFD_RELOC_THUMB_PCREL_BRANCH23,
2962  BFD_RELOC_THUMB_PCREL_BRANCH25,
2963
2964/* 12-bit immediate offset, used in ARM-format ldr and str instructions.  */
2965  BFD_RELOC_ARM_OFFSET_IMM,
2966
2967/* 5-bit immediate offset, used in Thumb-format ldr and str instructions.  */
2968  BFD_RELOC_ARM_THUMB_OFFSET,
2969
2970/* Pc-relative or absolute relocation depending on target.  Used for
2971entries in .init_array sections.  */
2972  BFD_RELOC_ARM_TARGET1,
2973
2974/* Read-only segment base relative address.  */
2975  BFD_RELOC_ARM_ROSEGREL32,
2976
2977/* Data segment base relative address.  */
2978  BFD_RELOC_ARM_SBREL32,
2979
2980/* This reloc is used for references to RTTI data from exception handling
2981tables.  The actual definition depends on the target.  It may be a
2982pc-relative or some form of GOT-indirect relocation.  */
2983  BFD_RELOC_ARM_TARGET2,
2984
2985/* 31-bit PC relative address.  */
2986  BFD_RELOC_ARM_PREL31,
2987
2988/* Low and High halfword relocations for MOVW and MOVT instructions.  */
2989  BFD_RELOC_ARM_MOVW,
2990  BFD_RELOC_ARM_MOVT,
2991  BFD_RELOC_ARM_MOVW_PCREL,
2992  BFD_RELOC_ARM_MOVT_PCREL,
2993  BFD_RELOC_ARM_THUMB_MOVW,
2994  BFD_RELOC_ARM_THUMB_MOVT,
2995  BFD_RELOC_ARM_THUMB_MOVW_PCREL,
2996  BFD_RELOC_ARM_THUMB_MOVT_PCREL,
2997
2998/* Relocations for setting up GOTs and PLTs for shared libraries.  */
2999  BFD_RELOC_ARM_JUMP_SLOT,
3000  BFD_RELOC_ARM_GLOB_DAT,
3001  BFD_RELOC_ARM_GOT32,
3002  BFD_RELOC_ARM_PLT32,
3003  BFD_RELOC_ARM_RELATIVE,
3004  BFD_RELOC_ARM_GOTOFF,
3005  BFD_RELOC_ARM_GOTPC,
3006
3007/* ARM thread-local storage relocations.  */
3008  BFD_RELOC_ARM_TLS_GD32,
3009  BFD_RELOC_ARM_TLS_LDO32,
3010  BFD_RELOC_ARM_TLS_LDM32,
3011  BFD_RELOC_ARM_TLS_DTPOFF32,
3012  BFD_RELOC_ARM_TLS_DTPMOD32,
3013  BFD_RELOC_ARM_TLS_TPOFF32,
3014  BFD_RELOC_ARM_TLS_IE32,
3015  BFD_RELOC_ARM_TLS_LE32,
3016
3017/* ARM group relocations.  */
3018  BFD_RELOC_ARM_ALU_PC_G0_NC,
3019  BFD_RELOC_ARM_ALU_PC_G0,
3020  BFD_RELOC_ARM_ALU_PC_G1_NC,
3021  BFD_RELOC_ARM_ALU_PC_G1,
3022  BFD_RELOC_ARM_ALU_PC_G2,
3023  BFD_RELOC_ARM_LDR_PC_G0,
3024  BFD_RELOC_ARM_LDR_PC_G1,
3025  BFD_RELOC_ARM_LDR_PC_G2,
3026  BFD_RELOC_ARM_LDRS_PC_G0,
3027  BFD_RELOC_ARM_LDRS_PC_G1,
3028  BFD_RELOC_ARM_LDRS_PC_G2,
3029  BFD_RELOC_ARM_LDC_PC_G0,
3030  BFD_RELOC_ARM_LDC_PC_G1,
3031  BFD_RELOC_ARM_LDC_PC_G2,
3032  BFD_RELOC_ARM_ALU_SB_G0_NC,
3033  BFD_RELOC_ARM_ALU_SB_G0,
3034  BFD_RELOC_ARM_ALU_SB_G1_NC,
3035  BFD_RELOC_ARM_ALU_SB_G1,
3036  BFD_RELOC_ARM_ALU_SB_G2,
3037  BFD_RELOC_ARM_LDR_SB_G0,
3038  BFD_RELOC_ARM_LDR_SB_G1,
3039  BFD_RELOC_ARM_LDR_SB_G2,
3040  BFD_RELOC_ARM_LDRS_SB_G0,
3041  BFD_RELOC_ARM_LDRS_SB_G1,
3042  BFD_RELOC_ARM_LDRS_SB_G2,
3043  BFD_RELOC_ARM_LDC_SB_G0,
3044  BFD_RELOC_ARM_LDC_SB_G1,
3045  BFD_RELOC_ARM_LDC_SB_G2,
3046
3047/* These relocs are only used within the ARM assembler.  They are not
3048(at present) written to any object files.  */
3049  BFD_RELOC_ARM_IMMEDIATE,
3050  BFD_RELOC_ARM_ADRL_IMMEDIATE,
3051  BFD_RELOC_ARM_T32_IMMEDIATE,
3052  BFD_RELOC_ARM_T32_ADD_IMM,
3053  BFD_RELOC_ARM_T32_IMM12,
3054  BFD_RELOC_ARM_T32_ADD_PC12,
3055  BFD_RELOC_ARM_SHIFT_IMM,
3056  BFD_RELOC_ARM_SMC,
3057  BFD_RELOC_ARM_SWI,
3058  BFD_RELOC_ARM_MULTI,
3059  BFD_RELOC_ARM_CP_OFF_IMM,
3060  BFD_RELOC_ARM_CP_OFF_IMM_S2,
3061  BFD_RELOC_ARM_T32_CP_OFF_IMM,
3062  BFD_RELOC_ARM_T32_CP_OFF_IMM_S2,
3063  BFD_RELOC_ARM_ADR_IMM,
3064  BFD_RELOC_ARM_LDR_IMM,
3065  BFD_RELOC_ARM_LITERAL,
3066  BFD_RELOC_ARM_IN_POOL,
3067  BFD_RELOC_ARM_OFFSET_IMM8,
3068  BFD_RELOC_ARM_T32_OFFSET_U8,
3069  BFD_RELOC_ARM_T32_OFFSET_IMM,
3070  BFD_RELOC_ARM_HWLITERAL,
3071  BFD_RELOC_ARM_THUMB_ADD,
3072  BFD_RELOC_ARM_THUMB_IMM,
3073  BFD_RELOC_ARM_THUMB_SHIFT,
3074
3075/* Renesas / SuperH SH relocs.  Not all of these appear in object files.  */
3076  BFD_RELOC_SH_PCDISP8BY2,
3077  BFD_RELOC_SH_PCDISP12BY2,
3078  BFD_RELOC_SH_IMM3,
3079  BFD_RELOC_SH_IMM3U,
3080  BFD_RELOC_SH_DISP12,
3081  BFD_RELOC_SH_DISP12BY2,
3082  BFD_RELOC_SH_DISP12BY4,
3083  BFD_RELOC_SH_DISP12BY8,
3084  BFD_RELOC_SH_DISP20,
3085  BFD_RELOC_SH_DISP20BY8,
3086  BFD_RELOC_SH_IMM4,
3087  BFD_RELOC_SH_IMM4BY2,
3088  BFD_RELOC_SH_IMM4BY4,
3089  BFD_RELOC_SH_IMM8,
3090  BFD_RELOC_SH_IMM8BY2,
3091  BFD_RELOC_SH_IMM8BY4,
3092  BFD_RELOC_SH_PCRELIMM8BY2,
3093  BFD_RELOC_SH_PCRELIMM8BY4,
3094  BFD_RELOC_SH_SWITCH16,
3095  BFD_RELOC_SH_SWITCH32,
3096  BFD_RELOC_SH_USES,
3097  BFD_RELOC_SH_COUNT,
3098  BFD_RELOC_SH_ALIGN,
3099  BFD_RELOC_SH_CODE,
3100  BFD_RELOC_SH_DATA,
3101  BFD_RELOC_SH_LABEL,
3102  BFD_RELOC_SH_LOOP_START,
3103  BFD_RELOC_SH_LOOP_END,
3104  BFD_RELOC_SH_COPY,
3105  BFD_RELOC_SH_GLOB_DAT,
3106  BFD_RELOC_SH_JMP_SLOT,
3107  BFD_RELOC_SH_RELATIVE,
3108  BFD_RELOC_SH_GOTPC,
3109  BFD_RELOC_SH_GOT_LOW16,
3110  BFD_RELOC_SH_GOT_MEDLOW16,
3111  BFD_RELOC_SH_GOT_MEDHI16,
3112  BFD_RELOC_SH_GOT_HI16,
3113  BFD_RELOC_SH_GOTPLT_LOW16,
3114  BFD_RELOC_SH_GOTPLT_MEDLOW16,
3115  BFD_RELOC_SH_GOTPLT_MEDHI16,
3116  BFD_RELOC_SH_GOTPLT_HI16,
3117  BFD_RELOC_SH_PLT_LOW16,
3118  BFD_RELOC_SH_PLT_MEDLOW16,
3119  BFD_RELOC_SH_PLT_MEDHI16,
3120  BFD_RELOC_SH_PLT_HI16,
3121  BFD_RELOC_SH_GOTOFF_LOW16,
3122  BFD_RELOC_SH_GOTOFF_MEDLOW16,
3123  BFD_RELOC_SH_GOTOFF_MEDHI16,
3124  BFD_RELOC_SH_GOTOFF_HI16,
3125  BFD_RELOC_SH_GOTPC_LOW16,
3126  BFD_RELOC_SH_GOTPC_MEDLOW16,
3127  BFD_RELOC_SH_GOTPC_MEDHI16,
3128  BFD_RELOC_SH_GOTPC_HI16,
3129  BFD_RELOC_SH_COPY64,
3130  BFD_RELOC_SH_GLOB_DAT64,
3131  BFD_RELOC_SH_JMP_SLOT64,
3132  BFD_RELOC_SH_RELATIVE64,
3133  BFD_RELOC_SH_GOT10BY4,
3134  BFD_RELOC_SH_GOT10BY8,
3135  BFD_RELOC_SH_GOTPLT10BY4,
3136  BFD_RELOC_SH_GOTPLT10BY8,
3137  BFD_RELOC_SH_GOTPLT32,
3138  BFD_RELOC_SH_SHMEDIA_CODE,
3139  BFD_RELOC_SH_IMMU5,
3140  BFD_RELOC_SH_IMMS6,
3141  BFD_RELOC_SH_IMMS6BY32,
3142  BFD_RELOC_SH_IMMU6,
3143  BFD_RELOC_SH_IMMS10,
3144  BFD_RELOC_SH_IMMS10BY2,
3145  BFD_RELOC_SH_IMMS10BY4,
3146  BFD_RELOC_SH_IMMS10BY8,
3147  BFD_RELOC_SH_IMMS16,
3148  BFD_RELOC_SH_IMMU16,
3149  BFD_RELOC_SH_IMM_LOW16,
3150  BFD_RELOC_SH_IMM_LOW16_PCREL,
3151  BFD_RELOC_SH_IMM_MEDLOW16,
3152  BFD_RELOC_SH_IMM_MEDLOW16_PCREL,
3153  BFD_RELOC_SH_IMM_MEDHI16,
3154  BFD_RELOC_SH_IMM_MEDHI16_PCREL,
3155  BFD_RELOC_SH_IMM_HI16,
3156  BFD_RELOC_SH_IMM_HI16_PCREL,
3157  BFD_RELOC_SH_PT_16,
3158  BFD_RELOC_SH_TLS_GD_32,
3159  BFD_RELOC_SH_TLS_LD_32,
3160  BFD_RELOC_SH_TLS_LDO_32,
3161  BFD_RELOC_SH_TLS_IE_32,
3162  BFD_RELOC_SH_TLS_LE_32,
3163  BFD_RELOC_SH_TLS_DTPMOD32,
3164  BFD_RELOC_SH_TLS_DTPOFF32,
3165  BFD_RELOC_SH_TLS_TPOFF32,
3166
3167/* ARC Cores relocs.
3168ARC 22 bit pc-relative branch.  The lowest two bits must be zero and are
3169not stored in the instruction.  The high 20 bits are installed in bits 26
3170through 7 of the instruction.  */
3171  BFD_RELOC_ARC_B22_PCREL,
3172
3173/* ARC 26 bit absolute branch.  The lowest two bits must be zero and are not
3174stored in the instruction.  The high 24 bits are installed in bits 23
3175through 0.  */
3176  BFD_RELOC_ARC_B26,
3177
3178/* ADI Blackfin 16 bit immediate absolute reloc.  */
3179  BFD_RELOC_BFIN_16_IMM,
3180
3181/* ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.  */
3182  BFD_RELOC_BFIN_16_HIGH,
3183
3184/* ADI Blackfin 'a' part of LSETUP.  */
3185  BFD_RELOC_BFIN_4_PCREL,
3186
3187/* ADI Blackfin.  */
3188  BFD_RELOC_BFIN_5_PCREL,
3189
3190/* ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.  */
3191  BFD_RELOC_BFIN_16_LOW,
3192
3193/* ADI Blackfin.  */
3194  BFD_RELOC_BFIN_10_PCREL,
3195
3196/* ADI Blackfin 'b' part of LSETUP.  */
3197  BFD_RELOC_BFIN_11_PCREL,
3198
3199/* ADI Blackfin.  */
3200  BFD_RELOC_BFIN_12_PCREL_JUMP,
3201
3202/* ADI Blackfin Short jump, pcrel.  */
3203  BFD_RELOC_BFIN_12_PCREL_JUMP_S,
3204
3205/* ADI Blackfin Call.x not implemented.  */
3206  BFD_RELOC_BFIN_24_PCREL_CALL_X,
3207
3208/* ADI Blackfin Long Jump pcrel.  */
3209  BFD_RELOC_BFIN_24_PCREL_JUMP_L,
3210
3211/* ADI Blackfin FD-PIC relocations.  */
3212  BFD_RELOC_BFIN_GOT17M4,
3213  BFD_RELOC_BFIN_GOTHI,
3214  BFD_RELOC_BFIN_GOTLO,
3215  BFD_RELOC_BFIN_FUNCDESC,
3216  BFD_RELOC_BFIN_FUNCDESC_GOT17M4,
3217  BFD_RELOC_BFIN_FUNCDESC_GOTHI,
3218  BFD_RELOC_BFIN_FUNCDESC_GOTLO,
3219  BFD_RELOC_BFIN_FUNCDESC_VALUE,
3220  BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4,
3221  BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI,
3222  BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO,
3223  BFD_RELOC_BFIN_GOTOFF17M4,
3224  BFD_RELOC_BFIN_GOTOFFHI,
3225  BFD_RELOC_BFIN_GOTOFFLO,
3226
3227/* ADI Blackfin GOT relocation.  */
3228  BFD_RELOC_BFIN_GOT,
3229
3230/* ADI Blackfin PLTPC relocation.  */
3231  BFD_RELOC_BFIN_PLTPC,
3232
3233/* ADI Blackfin arithmetic relocation.  */
3234  BFD_ARELOC_BFIN_PUSH,
3235
3236/* ADI Blackfin arithmetic relocation.  */
3237  BFD_ARELOC_BFIN_CONST,
3238
3239/* ADI Blackfin arithmetic relocation.  */
3240  BFD_ARELOC_BFIN_ADD,
3241
3242/* ADI Blackfin arithmetic relocation.  */
3243  BFD_ARELOC_BFIN_SUB,
3244
3245/* ADI Blackfin arithmetic relocation.  */
3246  BFD_ARELOC_BFIN_MULT,
3247
3248/* ADI Blackfin arithmetic relocation.  */
3249  BFD_ARELOC_BFIN_DIV,
3250
3251/* ADI Blackfin arithmetic relocation.  */
3252  BFD_ARELOC_BFIN_MOD,
3253
3254/* ADI Blackfin arithmetic relocation.  */
3255  BFD_ARELOC_BFIN_LSHIFT,
3256
3257/* ADI Blackfin arithmetic relocation.  */
3258  BFD_ARELOC_BFIN_RSHIFT,
3259
3260/* ADI Blackfin arithmetic relocation.  */
3261  BFD_ARELOC_BFIN_AND,
3262
3263/* ADI Blackfin arithmetic relocation.  */
3264  BFD_ARELOC_BFIN_OR,
3265
3266/* ADI Blackfin arithmetic relocation.  */
3267  BFD_ARELOC_BFIN_XOR,
3268
3269/* ADI Blackfin arithmetic relocation.  */
3270  BFD_ARELOC_BFIN_LAND,
3271
3272/* ADI Blackfin arithmetic relocation.  */
3273  BFD_ARELOC_BFIN_LOR,
3274
3275/* ADI Blackfin arithmetic relocation.  */
3276  BFD_ARELOC_BFIN_LEN,
3277
3278/* ADI Blackfin arithmetic relocation.  */
3279  BFD_ARELOC_BFIN_NEG,
3280
3281/* ADI Blackfin arithmetic relocation.  */
3282  BFD_ARELOC_BFIN_COMP,
3283
3284/* ADI Blackfin arithmetic relocation.  */
3285  BFD_ARELOC_BFIN_PAGE,
3286
3287/* ADI Blackfin arithmetic relocation.  */
3288  BFD_ARELOC_BFIN_HWPAGE,
3289
3290/* ADI Blackfin arithmetic relocation.  */
3291  BFD_ARELOC_BFIN_ADDR,
3292
3293/* Mitsubishi D10V relocs.
3294This is a 10-bit reloc with the right 2 bits
3295assumed to be 0.  */
3296  BFD_RELOC_D10V_10_PCREL_R,
3297
3298/* Mitsubishi D10V relocs.
3299This is a 10-bit reloc with the right 2 bits
3300assumed to be 0.  This is the same as the previous reloc
3301except it is in the left container, i.e.,
3302shifted left 15 bits.  */
3303  BFD_RELOC_D10V_10_PCREL_L,
3304
3305/* This is an 18-bit reloc with the right 2 bits
3306assumed to be 0.  */
3307  BFD_RELOC_D10V_18,
3308
3309/* This is an 18-bit reloc with the right 2 bits
3310assumed to be 0.  */
3311  BFD_RELOC_D10V_18_PCREL,
3312
3313/* Mitsubishi D30V relocs.
3314This is a 6-bit absolute reloc.  */
3315  BFD_RELOC_D30V_6,
3316
3317/* This is a 6-bit pc-relative reloc with
3318the right 3 bits assumed to be 0.  */
3319  BFD_RELOC_D30V_9_PCREL,
3320
3321/* This is a 6-bit pc-relative reloc with
3322the right 3 bits assumed to be 0. Same
3323as the previous reloc but on the right side
3324of the container.  */
3325  BFD_RELOC_D30V_9_PCREL_R,
3326
3327/* This is a 12-bit absolute reloc with the
3328right 3 bitsassumed to be 0.  */
3329  BFD_RELOC_D30V_15,
3330
3331/* This is a 12-bit pc-relative reloc with
3332the right 3 bits assumed to be 0.  */
3333  BFD_RELOC_D30V_15_PCREL,
3334
3335/* This is a 12-bit pc-relative reloc with
3336the right 3 bits assumed to be 0. Same
3337as the previous reloc but on the right side
3338of the container.  */
3339  BFD_RELOC_D30V_15_PCREL_R,
3340
3341/* This is an 18-bit absolute reloc with
3342the right 3 bits assumed to be 0.  */
3343  BFD_RELOC_D30V_21,
3344
3345/* This is an 18-bit pc-relative reloc with
3346the right 3 bits assumed to be 0.  */
3347  BFD_RELOC_D30V_21_PCREL,
3348
3349/* This is an 18-bit pc-relative reloc with
3350the right 3 bits assumed to be 0. Same
3351as the previous reloc but on the right side
3352of the container.  */
3353  BFD_RELOC_D30V_21_PCREL_R,
3354
3355/* This is a 32-bit absolute reloc.  */
3356  BFD_RELOC_D30V_32,
3357
3358/* This is a 32-bit pc-relative reloc.  */
3359  BFD_RELOC_D30V_32_PCREL,
3360
3361/* DLX relocs  */
3362  BFD_RELOC_DLX_HI16_S,
3363
3364/* DLX relocs  */
3365  BFD_RELOC_DLX_LO16,
3366
3367/* DLX relocs  */
3368  BFD_RELOC_DLX_JMP26,
3369
3370/* Renesas M16C/M32C Relocations.  */
3371  BFD_RELOC_M32C_HI8,
3372  BFD_RELOC_M32C_RL_JUMP,
3373  BFD_RELOC_M32C_RL_1ADDR,
3374  BFD_RELOC_M32C_RL_2ADDR,
3375
3376/* Renesas M32R (formerly Mitsubishi M32R) relocs.
3377This is a 24 bit absolute address.  */
3378  BFD_RELOC_M32R_24,
3379
3380/* This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.  */
3381  BFD_RELOC_M32R_10_PCREL,
3382
3383/* This is an 18-bit reloc with the right 2 bits assumed to be 0.  */
3384  BFD_RELOC_M32R_18_PCREL,
3385
3386/* This is a 26-bit reloc with the right 2 bits assumed to be 0.  */
3387  BFD_RELOC_M32R_26_PCREL,
3388
3389/* This is a 16-bit reloc containing the high 16 bits of an address
3390used when the lower 16 bits are treated as unsigned.  */
3391  BFD_RELOC_M32R_HI16_ULO,
3392
3393/* This is a 16-bit reloc containing the high 16 bits of an address
3394used when the lower 16 bits are treated as signed.  */
3395  BFD_RELOC_M32R_HI16_SLO,
3396
3397/* This is a 16-bit reloc containing the lower 16 bits of an address.  */
3398  BFD_RELOC_M32R_LO16,
3399
3400/* This is a 16-bit reloc containing the small data area offset for use in
3401add3, load, and store instructions.  */
3402  BFD_RELOC_M32R_SDA16,
3403
3404/* For PIC.  */
3405  BFD_RELOC_M32R_GOT24,
3406  BFD_RELOC_M32R_26_PLTREL,
3407  BFD_RELOC_M32R_COPY,
3408  BFD_RELOC_M32R_GLOB_DAT,
3409  BFD_RELOC_M32R_JMP_SLOT,
3410  BFD_RELOC_M32R_RELATIVE,
3411  BFD_RELOC_M32R_GOTOFF,
3412  BFD_RELOC_M32R_GOTOFF_HI_ULO,
3413  BFD_RELOC_M32R_GOTOFF_HI_SLO,
3414  BFD_RELOC_M32R_GOTOFF_LO,
3415  BFD_RELOC_M32R_GOTPC24,
3416  BFD_RELOC_M32R_GOT16_HI_ULO,
3417  BFD_RELOC_M32R_GOT16_HI_SLO,
3418  BFD_RELOC_M32R_GOT16_LO,
3419  BFD_RELOC_M32R_GOTPC_HI_ULO,
3420  BFD_RELOC_M32R_GOTPC_HI_SLO,
3421  BFD_RELOC_M32R_GOTPC_LO,
3422
3423/* This is a 9-bit reloc  */
3424  BFD_RELOC_V850_9_PCREL,
3425
3426/* This is a 22-bit reloc  */
3427  BFD_RELOC_V850_22_PCREL,
3428
3429/* This is a 16 bit offset from the short data area pointer.  */
3430  BFD_RELOC_V850_SDA_16_16_OFFSET,
3431
3432/* This is a 16 bit offset (of which only 15 bits are used) from the
3433short data area pointer.  */
3434  BFD_RELOC_V850_SDA_15_16_OFFSET,
3435
3436/* This is a 16 bit offset from the zero data area pointer.  */
3437  BFD_RELOC_V850_ZDA_16_16_OFFSET,
3438
3439/* This is a 16 bit offset (of which only 15 bits are used) from the
3440zero data area pointer.  */
3441  BFD_RELOC_V850_ZDA_15_16_OFFSET,
3442
3443/* This is an 8 bit offset (of which only 6 bits are used) from the
3444tiny data area pointer.  */
3445  BFD_RELOC_V850_TDA_6_8_OFFSET,
3446
3447/* This is an 8bit offset (of which only 7 bits are used) from the tiny
3448data area pointer.  */
3449  BFD_RELOC_V850_TDA_7_8_OFFSET,
3450
3451/* This is a 7 bit offset from the tiny data area pointer.  */
3452  BFD_RELOC_V850_TDA_7_7_OFFSET,
3453
3454/* This is a 16 bit offset from the tiny data area pointer.  */
3455  BFD_RELOC_V850_TDA_16_16_OFFSET,
3456
3457/* This is a 5 bit offset (of which only 4 bits are used) from the tiny
3458data area pointer.  */
3459  BFD_RELOC_V850_TDA_4_5_OFFSET,
3460
3461/* This is a 4 bit offset from the tiny data area pointer.  */
3462  BFD_RELOC_V850_TDA_4_4_OFFSET,
3463
3464/* This is a 16 bit offset from the short data area pointer, with the
3465bits placed non-contiguously in the instruction.  */
3466  BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET,
3467
3468/* This is a 16 bit offset from the zero data area pointer, with the
3469bits placed non-contiguously in the instruction.  */
3470  BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET,
3471
3472/* This is a 6 bit offset from the call table base pointer.  */
3473  BFD_RELOC_V850_CALLT_6_7_OFFSET,
3474
3475/* This is a 16 bit offset from the call table base pointer.  */
3476  BFD_RELOC_V850_CALLT_16_16_OFFSET,
3477
3478/* Used for relaxing indirect function calls.  */
3479  BFD_RELOC_V850_LONGCALL,
3480
3481/* Used for relaxing indirect jumps.  */
3482  BFD_RELOC_V850_LONGJUMP,
3483
3484/* Used to maintain alignment whilst relaxing.  */
3485  BFD_RELOC_V850_ALIGN,
3486
3487/* This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
3488instructions.  */
3489  BFD_RELOC_V850_LO16_SPLIT_OFFSET,
3490
3491/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
3492instruction.  */
3493  BFD_RELOC_MN10300_32_PCREL,
3494
3495/* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
3496instruction.  */
3497  BFD_RELOC_MN10300_16_PCREL,
3498
3499/* This is a 8bit DP reloc for the tms320c30, where the most
3500significant 8 bits of a 24 bit word are placed into the least
3501significant 8 bits of the opcode.  */
3502  BFD_RELOC_TIC30_LDP,
3503
3504/* This is a 7bit reloc for the tms320c54x, where the least
3505significant 7 bits of a 16 bit word are placed into the least
3506significant 7 bits of the opcode.  */
3507  BFD_RELOC_TIC54X_PARTLS7,
3508
3509/* This is a 9bit DP reloc for the tms320c54x, where the most
3510significant 9 bits of a 16 bit word are placed into the least
3511significant 9 bits of the opcode.  */
3512  BFD_RELOC_TIC54X_PARTMS9,
3513
3514/* This is an extended address 23-bit reloc for the tms320c54x.  */
3515  BFD_RELOC_TIC54X_23,
3516
3517/* This is a 16-bit reloc for the tms320c54x, where the least
3518significant 16 bits of a 23-bit extended address are placed into
3519the opcode.  */
3520  BFD_RELOC_TIC54X_16_OF_23,
3521
3522/* This is a reloc for the tms320c54x, where the most
3523significant 7 bits of a 23-bit extended address are placed into
3524the opcode.  */
3525  BFD_RELOC_TIC54X_MS7_OF_23,
3526
3527/* This is a 48 bit reloc for the FR30 that stores 32 bits.  */
3528  BFD_RELOC_FR30_48,
3529
3530/* This is a 32 bit reloc for the FR30 that stores 20 bits split up into
3531two sections.  */
3532  BFD_RELOC_FR30_20,
3533
3534/* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
35354 bits.  */
3536  BFD_RELOC_FR30_6_IN_4,
3537
3538/* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
3539into 8 bits.  */
3540  BFD_RELOC_FR30_8_IN_8,
3541
3542/* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
3543into 8 bits.  */
3544  BFD_RELOC_FR30_9_IN_8,
3545
3546/* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
3547into 8 bits.  */
3548  BFD_RELOC_FR30_10_IN_8,
3549
3550/* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
3551short offset into 8 bits.  */
3552  BFD_RELOC_FR30_9_PCREL,
3553
3554/* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
3555short offset into 11 bits.  */
3556  BFD_RELOC_FR30_12_PCREL,
3557
3558/* Motorola Mcore relocations.  */
3559  BFD_RELOC_MCORE_PCREL_IMM8BY4,
3560  BFD_RELOC_MCORE_PCREL_IMM11BY2,
3561  BFD_RELOC_MCORE_PCREL_IMM4BY2,
3562  BFD_RELOC_MCORE_PCREL_32,
3563  BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
3564  BFD_RELOC_MCORE_RVA,
3565
3566/* Toshiba Media Processor Relocations.  */
3567  BFD_RELOC_MEP_8,
3568  BFD_RELOC_MEP_16,
3569  BFD_RELOC_MEP_32,
3570  BFD_RELOC_MEP_PCREL8A2,
3571  BFD_RELOC_MEP_PCREL12A2,
3572  BFD_RELOC_MEP_PCREL17A2,
3573  BFD_RELOC_MEP_PCREL24A2,
3574  BFD_RELOC_MEP_PCABS24A2,
3575  BFD_RELOC_MEP_LOW16,
3576  BFD_RELOC_MEP_HI16U,
3577  BFD_RELOC_MEP_HI16S,
3578  BFD_RELOC_MEP_GPREL,
3579  BFD_RELOC_MEP_TPREL,
3580  BFD_RELOC_MEP_TPREL7,
3581  BFD_RELOC_MEP_TPREL7A2,
3582  BFD_RELOC_MEP_TPREL7A4,
3583  BFD_RELOC_MEP_UIMM24,
3584  BFD_RELOC_MEP_ADDR24A4,
3585  BFD_RELOC_MEP_GNU_VTINHERIT,
3586  BFD_RELOC_MEP_GNU_VTENTRY,
3587
3588
3589/* These are relocations for the GETA instruction.  */
3590  BFD_RELOC_MMIX_GETA,
3591  BFD_RELOC_MMIX_GETA_1,
3592  BFD_RELOC_MMIX_GETA_2,
3593  BFD_RELOC_MMIX_GETA_3,
3594
3595/* These are relocations for a conditional branch instruction.  */
3596  BFD_RELOC_MMIX_CBRANCH,
3597  BFD_RELOC_MMIX_CBRANCH_J,
3598  BFD_RELOC_MMIX_CBRANCH_1,
3599  BFD_RELOC_MMIX_CBRANCH_2,
3600  BFD_RELOC_MMIX_CBRANCH_3,
3601
3602/* These are relocations for the PUSHJ instruction.  */
3603  BFD_RELOC_MMIX_PUSHJ,
3604  BFD_RELOC_MMIX_PUSHJ_1,
3605  BFD_RELOC_MMIX_PUSHJ_2,
3606  BFD_RELOC_MMIX_PUSHJ_3,
3607  BFD_RELOC_MMIX_PUSHJ_STUBBABLE,
3608
3609/* These are relocations for the JMP instruction.  */
3610  BFD_RELOC_MMIX_JMP,
3611  BFD_RELOC_MMIX_JMP_1,
3612  BFD_RELOC_MMIX_JMP_2,
3613  BFD_RELOC_MMIX_JMP_3,
3614
3615/* This is a relocation for a relative address as in a GETA instruction or
3616a branch.  */
3617  BFD_RELOC_MMIX_ADDR19,
3618
3619/* This is a relocation for a relative address as in a JMP instruction.  */
3620  BFD_RELOC_MMIX_ADDR27,
3621
3622/* This is a relocation for an instruction field that may be a general
3623register or a value 0..255.  */
3624  BFD_RELOC_MMIX_REG_OR_BYTE,
3625
3626/* This is a relocation for an instruction field that may be a general
3627register.  */
3628  BFD_RELOC_MMIX_REG,
3629
3630/* This is a relocation for two instruction fields holding a register and
3631an offset, the equivalent of the relocation.  */
3632  BFD_RELOC_MMIX_BASE_PLUS_OFFSET,
3633
3634/* This relocation is an assertion that the expression is not allocated as
3635a global register.  It does not modify contents.  */
3636  BFD_RELOC_MMIX_LOCAL,
3637
3638/* This is a 16 bit reloc for the AVR that stores 8 bit pc relative
3639short offset into 7 bits.  */
3640  BFD_RELOC_AVR_7_PCREL,
3641
3642/* This is a 16 bit reloc for the AVR that stores 13 bit pc relative
3643short offset into 12 bits.  */
3644  BFD_RELOC_AVR_13_PCREL,
3645
3646/* This is a 16 bit reloc for the AVR that stores 17 bit value (usually
3647program memory address) into 16 bits.  */
3648  BFD_RELOC_AVR_16_PM,
3649
3650/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
3651data memory address) into 8 bit immediate value of LDI insn.  */
3652  BFD_RELOC_AVR_LO8_LDI,
3653
3654/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
3655of data memory address) into 8 bit immediate value of LDI insn.  */
3656  BFD_RELOC_AVR_HI8_LDI,
3657
3658/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
3659of program memory address) into 8 bit immediate value of LDI insn.  */
3660  BFD_RELOC_AVR_HH8_LDI,
3661
3662/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
3663of 32 bit value) into 8 bit immediate value of LDI insn.  */
3664  BFD_RELOC_AVR_MS8_LDI,
3665
3666/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
3667(usually data memory address) into 8 bit immediate value of SUBI insn.  */
3668  BFD_RELOC_AVR_LO8_LDI_NEG,
3669
3670/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
3671(high 8 bit of data memory address) into 8 bit immediate value of
3672SUBI insn.  */
3673  BFD_RELOC_AVR_HI8_LDI_NEG,
3674
3675/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
3676(most high 8 bit of program memory address) into 8 bit immediate value
3677of LDI or SUBI insn.  */
3678  BFD_RELOC_AVR_HH8_LDI_NEG,
3679
3680/* This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
3681of 32 bit value) into 8 bit immediate value of LDI insn.  */
3682  BFD_RELOC_AVR_MS8_LDI_NEG,
3683
3684/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
3685command address) into 8 bit immediate value of LDI insn.  */
3686  BFD_RELOC_AVR_LO8_LDI_PM,
3687
3688/* This is a 16 bit reloc for the AVR that stores 8 bit value
3689(command address) into 8 bit immediate value of LDI insn. If the address
3690is beyond the 128k boundary, the linker inserts a jump stub for this reloc
3691in the lower 128k.  */
3692  BFD_RELOC_AVR_LO8_LDI_GS,
3693
3694/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
3695of command address) into 8 bit immediate value of LDI insn.  */
3696  BFD_RELOC_AVR_HI8_LDI_PM,
3697
3698/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
3699of command address) into 8 bit immediate value of LDI insn.  If the address
3700is beyond the 128k boundary, the linker inserts a jump stub for this reloc
3701below 128k.  */
3702  BFD_RELOC_AVR_HI8_LDI_GS,
3703
3704/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
3705of command address) into 8 bit immediate value of LDI insn.  */
3706  BFD_RELOC_AVR_HH8_LDI_PM,
3707
3708/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
3709(usually command address) into 8 bit immediate value of SUBI insn.  */
3710  BFD_RELOC_AVR_LO8_LDI_PM_NEG,
3711
3712/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
3713(high 8 bit of 16 bit command address) into 8 bit immediate value
3714of SUBI insn.  */
3715  BFD_RELOC_AVR_HI8_LDI_PM_NEG,
3716
3717/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
3718(high 6 bit of 22 bit command address) into 8 bit immediate
3719value of SUBI insn.  */
3720  BFD_RELOC_AVR_HH8_LDI_PM_NEG,
3721
3722/* This is a 32 bit reloc for the AVR that stores 23 bit value
3723into 22 bits.  */
3724  BFD_RELOC_AVR_CALL,
3725
3726/* This is a 16 bit reloc for the AVR that stores all needed bits
3727for absolute addressing with ldi with overflow check to linktime  */
3728  BFD_RELOC_AVR_LDI,
3729
3730/* This is a 6 bit reloc for the AVR that stores offset for ldd/std
3731instructions  */
3732  BFD_RELOC_AVR_6,
3733
3734/* This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
3735instructions  */
3736  BFD_RELOC_AVR_6_ADIW,
3737
3738/* Direct 12 bit.  */
3739  BFD_RELOC_390_12,
3740
3741/* 12 bit GOT offset.  */
3742  BFD_RELOC_390_GOT12,
3743
3744/* 32 bit PC relative PLT address.  */
3745  BFD_RELOC_390_PLT32,
3746
3747/* Copy symbol at runtime.  */
3748  BFD_RELOC_390_COPY,
3749
3750/* Create GOT entry.  */
3751  BFD_RELOC_390_GLOB_DAT,
3752
3753/* Create PLT entry.  */
3754  BFD_RELOC_390_JMP_SLOT,
3755
3756/* Adjust by program base.  */
3757  BFD_RELOC_390_RELATIVE,
3758
3759/* 32 bit PC relative offset to GOT.  */
3760  BFD_RELOC_390_GOTPC,
3761
3762/* 16 bit GOT offset.  */
3763  BFD_RELOC_390_GOT16,
3764
3765/* PC relative 16 bit shifted by 1.  */
3766  BFD_RELOC_390_PC16DBL,
3767
3768/* 16 bit PC rel. PLT shifted by 1.  */
3769  BFD_RELOC_390_PLT16DBL,
3770
3771/* PC relative 32 bit shifted by 1.  */
3772  BFD_RELOC_390_PC32DBL,
3773
3774/* 32 bit PC rel. PLT shifted by 1.  */
3775  BFD_RELOC_390_PLT32DBL,
3776
3777/* 32 bit PC rel. GOT shifted by 1.  */
3778  BFD_RELOC_390_GOTPCDBL,
3779
3780/* 64 bit GOT offset.  */
3781  BFD_RELOC_390_GOT64,
3782
3783/* 64 bit PC relative PLT address.  */
3784  BFD_RELOC_390_PLT64,
3785
3786/* 32 bit rel. offset to GOT entry.  */
3787  BFD_RELOC_390_GOTENT,
3788
3789/* 64 bit offset to GOT.  */
3790  BFD_RELOC_390_GOTOFF64,
3791
3792/* 12-bit offset to symbol-entry within GOT, with PLT handling.  */
3793  BFD_RELOC_390_GOTPLT12,
3794
3795/* 16-bit offset to symbol-entry within GOT, with PLT handling.  */
3796  BFD_RELOC_390_GOTPLT16,
3797
3798/* 32-bit offset to symbol-entry within GOT, with PLT handling.  */
3799  BFD_RELOC_390_GOTPLT32,
3800
3801/* 64-bit offset to symbol-entry within GOT, with PLT handling.  */
3802  BFD_RELOC_390_GOTPLT64,
3803
3804/* 32-bit rel. offset to symbol-entry within GOT, with PLT handling.  */
3805  BFD_RELOC_390_GOTPLTENT,
3806
3807/* 16-bit rel. offset from the GOT to a PLT entry.  */
3808  BFD_RELOC_390_PLTOFF16,
3809
3810/* 32-bit rel. offset from the GOT to a PLT entry.  */
3811  BFD_RELOC_390_PLTOFF32,
3812
3813/* 64-bit rel. offset from the GOT to a PLT entry.  */
3814  BFD_RELOC_390_PLTOFF64,
3815
3816/* s390 tls relocations.  */
3817  BFD_RELOC_390_TLS_LOAD,
3818  BFD_RELOC_390_TLS_GDCALL,
3819  BFD_RELOC_390_TLS_LDCALL,
3820  BFD_RELOC_390_TLS_GD32,
3821  BFD_RELOC_390_TLS_GD64,
3822  BFD_RELOC_390_TLS_GOTIE12,
3823  BFD_RELOC_390_TLS_GOTIE32,
3824  BFD_RELOC_390_TLS_GOTIE64,
3825  BFD_RELOC_390_TLS_LDM32,
3826  BFD_RELOC_390_TLS_LDM64,
3827  BFD_RELOC_390_TLS_IE32,
3828  BFD_RELOC_390_TLS_IE64,
3829  BFD_RELOC_390_TLS_IEENT,
3830  BFD_RELOC_390_TLS_LE32,
3831  BFD_RELOC_390_TLS_LE64,
3832  BFD_RELOC_390_TLS_LDO32,
3833  BFD_RELOC_390_TLS_LDO64,
3834  BFD_RELOC_390_TLS_DTPMOD,
3835  BFD_RELOC_390_TLS_DTPOFF,
3836  BFD_RELOC_390_TLS_TPOFF,
3837
3838/* Long displacement extension.  */
3839  BFD_RELOC_390_20,
3840  BFD_RELOC_390_GOT20,
3841  BFD_RELOC_390_GOTPLT20,
3842  BFD_RELOC_390_TLS_GOTIE20,
3843
3844/* Score relocations  */
3845  BFD_RELOC_SCORE_DUMMY1,
3846
3847/* Low 16 bit for load/store  */
3848  BFD_RELOC_SCORE_GPREL15,
3849
3850/* This is a 24-bit reloc with the right 1 bit assumed to be 0  */
3851  BFD_RELOC_SCORE_DUMMY2,
3852  BFD_RELOC_SCORE_JMP,
3853
3854/* This is a 19-bit reloc with the right 1 bit assumed to be 0  */
3855  BFD_RELOC_SCORE_BRANCH,
3856
3857/* This is a 11-bit reloc with the right 1 bit assumed to be 0  */
3858  BFD_RELOC_SCORE16_JMP,
3859
3860/* This is a 8-bit reloc with the right 1 bit assumed to be 0  */
3861  BFD_RELOC_SCORE16_BRANCH,
3862
3863/* Undocumented Score relocs  */
3864  BFD_RELOC_SCORE_GOT15,
3865  BFD_RELOC_SCORE_GOT_LO16,
3866  BFD_RELOC_SCORE_CALL15,
3867  BFD_RELOC_SCORE_DUMMY_HI16,
3868
3869/* Scenix IP2K - 9-bit register number / data address  */
3870  BFD_RELOC_IP2K_FR9,
3871
3872/* Scenix IP2K - 4-bit register/data bank number  */
3873  BFD_RELOC_IP2K_BANK,
3874
3875/* Scenix IP2K - low 13 bits of instruction word address  */
3876  BFD_RELOC_IP2K_ADDR16CJP,
3877
3878/* Scenix IP2K - high 3 bits of instruction word address  */
3879  BFD_RELOC_IP2K_PAGE3,
3880
3881/* Scenix IP2K - ext/low/high 8 bits of data address  */
3882  BFD_RELOC_IP2K_LO8DATA,
3883  BFD_RELOC_IP2K_HI8DATA,
3884  BFD_RELOC_IP2K_EX8DATA,
3885
3886/* Scenix IP2K - low/high 8 bits of instruction word address  */
3887  BFD_RELOC_IP2K_LO8INSN,
3888  BFD_RELOC_IP2K_HI8INSN,
3889
3890/* Scenix IP2K - even/odd PC modifier to modify snb pcl.0  */
3891  BFD_RELOC_IP2K_PC_SKIP,
3892
3893/* Scenix IP2K - 16 bit word address in text section.  */
3894  BFD_RELOC_IP2K_TEXT,
3895
3896/* Scenix IP2K - 7-bit sp or dp offset  */
3897  BFD_RELOC_IP2K_FR_OFFSET,
3898
3899/* Scenix VPE4K coprocessor - data/insn-space addressing  */
3900  BFD_RELOC_VPE4KMATH_DATA,
3901  BFD_RELOC_VPE4KMATH_INSN,
3902
3903/* These two relocations are used by the linker to determine which of
3904the entries in a C++ virtual function table are actually used.  When
3905the --gc-sections option is given, the linker will zero out the entries
3906that are not used, so that the code for those functions need not be
3907included in the output.
3908
3909VTABLE_INHERIT is a zero-space relocation used to describe to the
3910linker the inheritance tree of a C++ virtual function table.  The
3911relocation's symbol should be the parent class' vtable, and the
3912relocation should be located at the child vtable.
3913
3914VTABLE_ENTRY is a zero-space relocation that describes the use of a
3915virtual function table entry.  The reloc's symbol should refer to the
3916table of the class mentioned in the code.  Off of that base, an offset
3917describes the entry that is being used.  For Rela hosts, this offset
3918is stored in the reloc's addend.  For Rel hosts, we are forced to put
3919this offset in the reloc's section offset.  */
3920  BFD_RELOC_VTABLE_INHERIT,
3921  BFD_RELOC_VTABLE_ENTRY,
3922
3923/* Intel IA64 Relocations.  */
3924  BFD_RELOC_IA64_IMM14,
3925  BFD_RELOC_IA64_IMM22,
3926  BFD_RELOC_IA64_IMM64,
3927  BFD_RELOC_IA64_DIR32MSB,
3928  BFD_RELOC_IA64_DIR32LSB,
3929  BFD_RELOC_IA64_DIR64MSB,
3930  BFD_RELOC_IA64_DIR64LSB,
3931  BFD_RELOC_IA64_GPREL22,
3932  BFD_RELOC_IA64_GPREL64I,
3933  BFD_RELOC_IA64_GPREL32MSB,
3934  BFD_RELOC_IA64_GPREL32LSB,
3935  BFD_RELOC_IA64_GPREL64MSB,
3936  BFD_RELOC_IA64_GPREL64LSB,
3937  BFD_RELOC_IA64_LTOFF22,
3938  BFD_RELOC_IA64_LTOFF64I,
3939  BFD_RELOC_IA64_PLTOFF22,
3940  BFD_RELOC_IA64_PLTOFF64I,
3941  BFD_RELOC_IA64_PLTOFF64MSB,
3942  BFD_RELOC_IA64_PLTOFF64LSB,
3943  BFD_RELOC_IA64_FPTR64I,
3944  BFD_RELOC_IA64_FPTR32MSB,
3945  BFD_RELOC_IA64_FPTR32LSB,
3946  BFD_RELOC_IA64_FPTR64MSB,
3947  BFD_RELOC_IA64_FPTR64LSB,
3948  BFD_RELOC_IA64_PCREL21B,
3949  BFD_RELOC_IA64_PCREL21BI,
3950  BFD_RELOC_IA64_PCREL21M,
3951  BFD_RELOC_IA64_PCREL21F,
3952  BFD_RELOC_IA64_PCREL22,
3953  BFD_RELOC_IA64_PCREL60B,
3954  BFD_RELOC_IA64_PCREL64I,
3955  BFD_RELOC_IA64_PCREL32MSB,
3956  BFD_RELOC_IA64_PCREL32LSB,
3957  BFD_RELOC_IA64_PCREL64MSB,
3958  BFD_RELOC_IA64_PCREL64LSB,
3959  BFD_RELOC_IA64_LTOFF_FPTR22,
3960  BFD_RELOC_IA64_LTOFF_FPTR64I,
3961  BFD_RELOC_IA64_LTOFF_FPTR32MSB,
3962  BFD_RELOC_IA64_LTOFF_FPTR32LSB,
3963  BFD_RELOC_IA64_LTOFF_FPTR64MSB,
3964  BFD_RELOC_IA64_LTOFF_FPTR64LSB,
3965  BFD_RELOC_IA64_SEGREL32MSB,
3966  BFD_RELOC_IA64_SEGREL32LSB,
3967  BFD_RELOC_IA64_SEGREL64MSB,
3968  BFD_RELOC_IA64_SEGREL64LSB,
3969  BFD_RELOC_IA64_SECREL32MSB,
3970  BFD_RELOC_IA64_SECREL32LSB,
3971  BFD_RELOC_IA64_SECREL64MSB,
3972  BFD_RELOC_IA64_SECREL64LSB,
3973  BFD_RELOC_IA64_REL32MSB,
3974  BFD_RELOC_IA64_REL32LSB,
3975  BFD_RELOC_IA64_REL64MSB,
3976  BFD_RELOC_IA64_REL64LSB,
3977  BFD_RELOC_IA64_LTV32MSB,
3978  BFD_RELOC_IA64_LTV32LSB,
3979  BFD_RELOC_IA64_LTV64MSB,
3980  BFD_RELOC_IA64_LTV64LSB,
3981  BFD_RELOC_IA64_IPLTMSB,
3982  BFD_RELOC_IA64_IPLTLSB,
3983  BFD_RELOC_IA64_COPY,
3984  BFD_RELOC_IA64_LTOFF22X,
3985  BFD_RELOC_IA64_LDXMOV,
3986  BFD_RELOC_IA64_TPREL14,
3987  BFD_RELOC_IA64_TPREL22,
3988  BFD_RELOC_IA64_TPREL64I,
3989  BFD_RELOC_IA64_TPREL64MSB,
3990  BFD_RELOC_IA64_TPREL64LSB,
3991  BFD_RELOC_IA64_LTOFF_TPREL22,
3992  BFD_RELOC_IA64_DTPMOD64MSB,
3993  BFD_RELOC_IA64_DTPMOD64LSB,
3994  BFD_RELOC_IA64_LTOFF_DTPMOD22,
3995  BFD_RELOC_IA64_DTPREL14,
3996  BFD_RELOC_IA64_DTPREL22,
3997  BFD_RELOC_IA64_DTPREL64I,
3998  BFD_RELOC_IA64_DTPREL32MSB,
3999  BFD_RELOC_IA64_DTPREL32LSB,
4000  BFD_RELOC_IA64_DTPREL64MSB,
4001  BFD_RELOC_IA64_DTPREL64LSB,
4002  BFD_RELOC_IA64_LTOFF_DTPREL22,
4003
4004/* Motorola 68HC11 reloc.
4005This is the 8 bit high part of an absolute address.  */
4006  BFD_RELOC_M68HC11_HI8,
4007
4008/* Motorola 68HC11 reloc.
4009This is the 8 bit low part of an absolute address.  */
4010  BFD_RELOC_M68HC11_LO8,
4011
4012/* Motorola 68HC11 reloc.
4013This is the 3 bit of a value.  */
4014  BFD_RELOC_M68HC11_3B,
4015
4016/* Motorola 68HC11 reloc.
4017This reloc marks the beginning of a jump/call instruction.
4018It is used for linker relaxation to correctly identify beginning
4019of instruction and change some branches to use PC-relative
4020addressing mode.  */
4021  BFD_RELOC_M68HC11_RL_JUMP,
4022
4023/* Motorola 68HC11 reloc.
4024This reloc marks a group of several instructions that gcc generates
4025and for which the linker relaxation pass can modify and/or remove
4026some of them.  */
4027  BFD_RELOC_M68HC11_RL_GROUP,
4028
4029/* Motorola 68HC11 reloc.
4030This is the 16-bit lower part of an address.  It is used for 'call'
4031instruction to specify the symbol address without any special
4032transformation (due to memory bank window).  */
4033  BFD_RELOC_M68HC11_LO16,
4034
4035/* Motorola 68HC11 reloc.
4036This is a 8-bit reloc that specifies the page number of an address.
4037It is used by 'call' instruction to specify the page number of
4038the symbol.  */
4039  BFD_RELOC_M68HC11_PAGE,
4040
4041/* Motorola 68HC11 reloc.
4042This is a 24-bit reloc that represents the address with a 16-bit
4043value and a 8-bit page number.  The symbol address is transformed
4044to follow the 16K memory bank of 68HC12 (seen as mapped in the window).  */
4045  BFD_RELOC_M68HC11_24,
4046
4047/* Motorola 68HC12 reloc.
4048This is the 5 bits of a value.  */
4049  BFD_RELOC_M68HC12_5B,
4050
4051/* NS CR16C Relocations.  */
4052  BFD_RELOC_16C_NUM08,
4053  BFD_RELOC_16C_NUM08_C,
4054  BFD_RELOC_16C_NUM16,
4055  BFD_RELOC_16C_NUM16_C,
4056  BFD_RELOC_16C_NUM32,
4057  BFD_RELOC_16C_NUM32_C,
4058  BFD_RELOC_16C_DISP04,
4059  BFD_RELOC_16C_DISP04_C,
4060  BFD_RELOC_16C_DISP08,
4061  BFD_RELOC_16C_DISP08_C,
4062  BFD_RELOC_16C_DISP16,
4063  BFD_RELOC_16C_DISP16_C,
4064  BFD_RELOC_16C_DISP24,
4065  BFD_RELOC_16C_DISP24_C,
4066  BFD_RELOC_16C_DISP24a,
4067  BFD_RELOC_16C_DISP24a_C,
4068  BFD_RELOC_16C_REG04,
4069  BFD_RELOC_16C_REG04_C,
4070  BFD_RELOC_16C_REG04a,
4071  BFD_RELOC_16C_REG04a_C,
4072  BFD_RELOC_16C_REG14,
4073  BFD_RELOC_16C_REG14_C,
4074  BFD_RELOC_16C_REG16,
4075  BFD_RELOC_16C_REG16_C,
4076  BFD_RELOC_16C_REG20,
4077  BFD_RELOC_16C_REG20_C,
4078  BFD_RELOC_16C_ABS20,
4079  BFD_RELOC_16C_ABS20_C,
4080  BFD_RELOC_16C_ABS24,
4081  BFD_RELOC_16C_ABS24_C,
4082  BFD_RELOC_16C_IMM04,
4083  BFD_RELOC_16C_IMM04_C,
4084  BFD_RELOC_16C_IMM16,
4085  BFD_RELOC_16C_IMM16_C,
4086  BFD_RELOC_16C_IMM20,
4087  BFD_RELOC_16C_IMM20_C,
4088  BFD_RELOC_16C_IMM24,
4089  BFD_RELOC_16C_IMM24_C,
4090  BFD_RELOC_16C_IMM32,
4091  BFD_RELOC_16C_IMM32_C,
4092
4093/* NS CRX Relocations.  */
4094  BFD_RELOC_CRX_REL4,
4095  BFD_RELOC_CRX_REL8,
4096  BFD_RELOC_CRX_REL8_CMP,
4097  BFD_RELOC_CRX_REL16,
4098  BFD_RELOC_CRX_REL24,
4099  BFD_RELOC_CRX_REL32,
4100  BFD_RELOC_CRX_REGREL12,
4101  BFD_RELOC_CRX_REGREL22,
4102  BFD_RELOC_CRX_REGREL28,
4103  BFD_RELOC_CRX_REGREL32,
4104  BFD_RELOC_CRX_ABS16,
4105  BFD_RELOC_CRX_ABS32,
4106  BFD_RELOC_CRX_NUM8,
4107  BFD_RELOC_CRX_NUM16,
4108  BFD_RELOC_CRX_NUM32,
4109  BFD_RELOC_CRX_IMM16,
4110  BFD_RELOC_CRX_IMM32,
4111  BFD_RELOC_CRX_SWITCH8,
4112  BFD_RELOC_CRX_SWITCH16,
4113  BFD_RELOC_CRX_SWITCH32,
4114
4115/* These relocs are only used within the CRIS assembler.  They are not
4116(at present) written to any object files.  */
4117  BFD_RELOC_CRIS_BDISP8,
4118  BFD_RELOC_CRIS_UNSIGNED_5,
4119  BFD_RELOC_CRIS_SIGNED_6,
4120  BFD_RELOC_CRIS_UNSIGNED_6,
4121  BFD_RELOC_CRIS_SIGNED_8,
4122  BFD_RELOC_CRIS_UNSIGNED_8,
4123  BFD_RELOC_CRIS_SIGNED_16,
4124  BFD_RELOC_CRIS_UNSIGNED_16,
4125  BFD_RELOC_CRIS_LAPCQ_OFFSET,
4126  BFD_RELOC_CRIS_UNSIGNED_4,
4127
4128/* Relocs used in ELF shared libraries for CRIS.  */
4129  BFD_RELOC_CRIS_COPY,
4130  BFD_RELOC_CRIS_GLOB_DAT,
4131  BFD_RELOC_CRIS_JUMP_SLOT,
4132  BFD_RELOC_CRIS_RELATIVE,
4133
4134/* 32-bit offset to symbol-entry within GOT.  */
4135  BFD_RELOC_CRIS_32_GOT,
4136
4137/* 16-bit offset to symbol-entry within GOT.  */
4138  BFD_RELOC_CRIS_16_GOT,
4139
4140/* 32-bit offset to symbol-entry within GOT, with PLT handling.  */
4141  BFD_RELOC_CRIS_32_GOTPLT,
4142
4143/* 16-bit offset to symbol-entry within GOT, with PLT handling.  */
4144  BFD_RELOC_CRIS_16_GOTPLT,
4145
4146/* 32-bit offset to symbol, relative to GOT.  */
4147  BFD_RELOC_CRIS_32_GOTREL,
4148
4149/* 32-bit offset to symbol with PLT entry, relative to GOT.  */
4150  BFD_RELOC_CRIS_32_PLT_GOTREL,
4151
4152/* 32-bit offset to symbol with PLT entry, relative to this relocation.  */
4153  BFD_RELOC_CRIS_32_PLT_PCREL,
4154
4155/* Intel i860 Relocations.  */
4156  BFD_RELOC_860_COPY,
4157  BFD_RELOC_860_GLOB_DAT,
4158  BFD_RELOC_860_JUMP_SLOT,
4159  BFD_RELOC_860_RELATIVE,
4160  BFD_RELOC_860_PC26,
4161  BFD_RELOC_860_PLT26,
4162  BFD_RELOC_860_PC16,
4163  BFD_RELOC_860_LOW0,
4164  BFD_RELOC_860_SPLIT0,
4165  BFD_RELOC_860_LOW1,
4166  BFD_RELOC_860_SPLIT1,
4167  BFD_RELOC_860_LOW2,
4168  BFD_RELOC_860_SPLIT2,
4169  BFD_RELOC_860_LOW3,
4170  BFD_RELOC_860_LOGOT0,
4171  BFD_RELOC_860_SPGOT0,
4172  BFD_RELOC_860_LOGOT1,
4173  BFD_RELOC_860_SPGOT1,
4174  BFD_RELOC_860_LOGOTOFF0,
4175  BFD_RELOC_860_SPGOTOFF0,
4176  BFD_RELOC_860_LOGOTOFF1,
4177  BFD_RELOC_860_SPGOTOFF1,
4178  BFD_RELOC_860_LOGOTOFF2,
4179  BFD_RELOC_860_LOGOTOFF3,
4180  BFD_RELOC_860_LOPC,
4181  BFD_RELOC_860_HIGHADJ,
4182  BFD_RELOC_860_HAGOT,
4183  BFD_RELOC_860_HAGOTOFF,
4184  BFD_RELOC_860_HAPC,
4185  BFD_RELOC_860_HIGH,
4186  BFD_RELOC_860_HIGOT,
4187  BFD_RELOC_860_HIGOTOFF,
4188
4189/* OpenRISC Relocations.  */
4190  BFD_RELOC_OPENRISC_ABS_26,
4191  BFD_RELOC_OPENRISC_REL_26,
4192
4193/* H8 elf Relocations.  */
4194  BFD_RELOC_H8_DIR16A8,
4195  BFD_RELOC_H8_DIR16R8,
4196  BFD_RELOC_H8_DIR24A8,
4197  BFD_RELOC_H8_DIR24R8,
4198  BFD_RELOC_H8_DIR32A16,
4199
4200/* Sony Xstormy16 Relocations.  */
4201  BFD_RELOC_XSTORMY16_REL_12,
4202  BFD_RELOC_XSTORMY16_12,
4203  BFD_RELOC_XSTORMY16_24,
4204  BFD_RELOC_XSTORMY16_FPTR16,
4205
4206/* Self-describing complex relocations.  */
4207  BFD_RELOC_RELC,
4208
4209
4210/* Infineon Relocations.  */
4211  BFD_RELOC_XC16X_PAG,
4212  BFD_RELOC_XC16X_POF,
4213  BFD_RELOC_XC16X_SEG,
4214  BFD_RELOC_XC16X_SOF,
4215
4216/* Relocations used by VAX ELF.  */
4217  BFD_RELOC_VAX_GLOB_DAT,
4218  BFD_RELOC_VAX_JMP_SLOT,
4219  BFD_RELOC_VAX_RELATIVE,
4220
4221/* Morpho MT - 16 bit immediate relocation.  */
4222  BFD_RELOC_MT_PC16,
4223
4224/* Morpho MT - Hi 16 bits of an address.  */
4225  BFD_RELOC_MT_HI16,
4226
4227/* Morpho MT - Low 16 bits of an address.  */
4228  BFD_RELOC_MT_LO16,
4229
4230/* Morpho MT - Used to tell the linker which vtable entries are used.  */
4231  BFD_RELOC_MT_GNU_VTINHERIT,
4232
4233/* Morpho MT - Used to tell the linker which vtable entries are used.  */
4234  BFD_RELOC_MT_GNU_VTENTRY,
4235
4236/* Morpho MT - 8 bit immediate relocation.  */
4237  BFD_RELOC_MT_PCINSN8,
4238
4239/* msp430 specific relocation codes  */
4240  BFD_RELOC_MSP430_10_PCREL,
4241  BFD_RELOC_MSP430_16_PCREL,
4242  BFD_RELOC_MSP430_16,
4243  BFD_RELOC_MSP430_16_PCREL_BYTE,
4244  BFD_RELOC_MSP430_16_BYTE,
4245  BFD_RELOC_MSP430_2X_PCREL,
4246  BFD_RELOC_MSP430_RL_PCREL,
4247
4248/* IQ2000 Relocations.  */
4249  BFD_RELOC_IQ2000_OFFSET_16,
4250  BFD_RELOC_IQ2000_OFFSET_21,
4251  BFD_RELOC_IQ2000_UHI16,
4252
4253/* Special Xtensa relocation used only by PLT entries in ELF shared
4254objects to indicate that the runtime linker should set the value
4255to one of its own internal functions or data structures.  */
4256  BFD_RELOC_XTENSA_RTLD,
4257
4258/* Xtensa relocations for ELF shared objects.  */
4259  BFD_RELOC_XTENSA_GLOB_DAT,
4260  BFD_RELOC_XTENSA_JMP_SLOT,
4261  BFD_RELOC_XTENSA_RELATIVE,
4262
4263/* Xtensa relocation used in ELF object files for symbols that may require
4264PLT entries.  Otherwise, this is just a generic 32-bit relocation.  */
4265  BFD_RELOC_XTENSA_PLT,
4266
4267/* Xtensa relocations to mark the difference of two local symbols.
4268These are only needed to support linker relaxation and can be ignored
4269when not relaxing.  The field is set to the value of the difference
4270assuming no relaxation.  The relocation encodes the position of the
4271first symbol so the linker can determine whether to adjust the field
4272value.  */
4273  BFD_RELOC_XTENSA_DIFF8,
4274  BFD_RELOC_XTENSA_DIFF16,
4275  BFD_RELOC_XTENSA_DIFF32,
4276
4277/* Generic Xtensa relocations for instruction operands.  Only the slot
4278number is encoded in the relocation.  The relocation applies to the
4279last PC-relative immediate operand, or if there are no PC-relative
4280immediates, to the last immediate operand.  */
4281  BFD_RELOC_XTENSA_SLOT0_OP,
4282  BFD_RELOC_XTENSA_SLOT1_OP,
4283  BFD_RELOC_XTENSA_SLOT2_OP,
4284  BFD_RELOC_XTENSA_SLOT3_OP,
4285  BFD_RELOC_XTENSA_SLOT4_OP,
4286  BFD_RELOC_XTENSA_SLOT5_OP,
4287  BFD_RELOC_XTENSA_SLOT6_OP,
4288  BFD_RELOC_XTENSA_SLOT7_OP,
4289  BFD_RELOC_XTENSA_SLOT8_OP,
4290  BFD_RELOC_XTENSA_SLOT9_OP,
4291  BFD_RELOC_XTENSA_SLOT10_OP,
4292  BFD_RELOC_XTENSA_SLOT11_OP,
4293  BFD_RELOC_XTENSA_SLOT12_OP,
4294  BFD_RELOC_XTENSA_SLOT13_OP,
4295  BFD_RELOC_XTENSA_SLOT14_OP,
4296
4297/* Alternate Xtensa relocations.  Only the slot is encoded in the
4298relocation.  The meaning of these relocations is opcode-specific.  */
4299  BFD_RELOC_XTENSA_SLOT0_ALT,
4300  BFD_RELOC_XTENSA_SLOT1_ALT,
4301  BFD_RELOC_XTENSA_SLOT2_ALT,
4302  BFD_RELOC_XTENSA_SLOT3_ALT,
4303  BFD_RELOC_XTENSA_SLOT4_ALT,
4304  BFD_RELOC_XTENSA_SLOT5_ALT,
4305  BFD_RELOC_XTENSA_SLOT6_ALT,
4306  BFD_RELOC_XTENSA_SLOT7_ALT,
4307  BFD_RELOC_XTENSA_SLOT8_ALT,
4308  BFD_RELOC_XTENSA_SLOT9_ALT,
4309  BFD_RELOC_XTENSA_SLOT10_ALT,
4310  BFD_RELOC_XTENSA_SLOT11_ALT,
4311  BFD_RELOC_XTENSA_SLOT12_ALT,
4312  BFD_RELOC_XTENSA_SLOT13_ALT,
4313  BFD_RELOC_XTENSA_SLOT14_ALT,
4314
4315/* Xtensa relocations for backward compatibility.  These have all been
4316replaced by BFD_RELOC_XTENSA_SLOT0_OP.  */
4317  BFD_RELOC_XTENSA_OP0,
4318  BFD_RELOC_XTENSA_OP1,
4319  BFD_RELOC_XTENSA_OP2,
4320
4321/* Xtensa relocation to mark that the assembler expanded the
4322instructions from an original target.  The expansion size is
4323encoded in the reloc size.  */
4324  BFD_RELOC_XTENSA_ASM_EXPAND,
4325
4326/* Xtensa relocation to mark that the linker should simplify
4327assembler-expanded instructions.  This is commonly used
4328internally by the linker after analysis of a
4329BFD_RELOC_XTENSA_ASM_EXPAND.  */
4330  BFD_RELOC_XTENSA_ASM_SIMPLIFY,
4331
4332/* 8 bit signed offset in (ix+d) or (iy+d).  */
4333  BFD_RELOC_Z80_DISP8,
4334
4335/* DJNZ offset.  */
4336  BFD_RELOC_Z8K_DISP7,
4337
4338/* CALR offset.  */
4339  BFD_RELOC_Z8K_CALLR,
4340
4341/* 4 bit value.  */
4342  BFD_RELOC_Z8K_IMM4L,
4343  BFD_RELOC_UNUSED };
4344typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
4345reloc_howto_type *bfd_reloc_type_lookup
4346   (bfd *abfd, bfd_reloc_code_real_type code);
4347
4348const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
4349
4350/* Extracted from syms.c.  */
4351
4352typedef struct bfd_symbol
4353{
4354  /* A pointer to the BFD which owns the symbol. This information
4355     is necessary so that a back end can work out what additional
4356     information (invisible to the application writer) is carried
4357     with the symbol.
4358
4359     This field is *almost* redundant, since you can use section->owner
4360     instead, except that some symbols point to the global sections
4361     bfd_{abs,com,und}_section.  This could be fixed by making
4362     these globals be per-bfd (or per-target-flavor).  FIXME.  */
4363  struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field.  */
4364
4365  /* The text of the symbol. The name is left alone, and not copied; the
4366     application may not alter it.  */
4367  const char *name;
4368
4369  /* The value of the symbol.  This really should be a union of a
4370     numeric value with a pointer, since some flags indicate that
4371     a pointer to another symbol is stored here.  */
4372  symvalue value;
4373
4374  /* Attributes of a symbol.  */
4375#define BSF_NO_FLAGS    0x00
4376
4377  /* The symbol has local scope; <<static>> in <<C>>. The value
4378     is the offset into the section of the data.  */
4379#define BSF_LOCAL      0x01
4380
4381  /* The symbol has global scope; initialized data in <<C>>. The
4382     value is the offset into the section of the data.  */
4383#define BSF_GLOBAL     0x02
4384
4385  /* The symbol has global scope and is exported. The value is
4386     the offset into the section of the data.  */
4387#define BSF_EXPORT     BSF_GLOBAL /* No real difference.  */
4388
4389  /* A normal C symbol would be one of:
4390     <<BSF_LOCAL>>, <<BSF_FORT_COMM>>,  <<BSF_UNDEFINED>> or
4391     <<BSF_GLOBAL>>.  */
4392
4393  /* The symbol is a debugging record. The value has an arbitrary
4394     meaning, unless BSF_DEBUGGING_RELOC is also set.  */
4395#define BSF_DEBUGGING  0x08
4396
4397  /* The symbol denotes a function entry point.  Used in ELF,
4398     perhaps others someday.  */
4399#define BSF_FUNCTION    0x10
4400
4401  /* Used by the linker.  */
4402#define BSF_KEEP        0x20
4403#define BSF_KEEP_G      0x40
4404
4405  /* A weak global symbol, overridable without warnings by
4406     a regular global symbol of the same name.  */
4407#define BSF_WEAK        0x80
4408
4409  /* This symbol was created to point to a section, e.g. ELF's
4410     STT_SECTION symbols.  */
4411#define BSF_SECTION_SYM 0x100
4412
4413  /* The symbol used to be a common symbol, but now it is
4414     allocated.  */
4415#define BSF_OLD_COMMON  0x200
4416
4417  /* The default value for common data.  */
4418#define BFD_FORT_COMM_DEFAULT_VALUE 0
4419
4420  /* In some files the type of a symbol sometimes alters its
4421     location in an output file - ie in coff a <<ISFCN>> symbol
4422     which is also <<C_EXT>> symbol appears where it was
4423     declared and not at the end of a section.  This bit is set
4424     by the target BFD part to convey this information.  */
4425#define BSF_NOT_AT_END    0x400
4426
4427  /* Signal that the symbol is the label of constructor section.  */
4428#define BSF_CONSTRUCTOR   0x800
4429
4430  /* Signal that the symbol is a warning symbol.  The name is a
4431     warning.  The name of the next symbol is the one to warn about;
4432     if a reference is made to a symbol with the same name as the next
4433     symbol, a warning is issued by the linker.  */
4434#define BSF_WARNING       0x1000
4435
4436  /* Signal that the symbol is indirect.  This symbol is an indirect
4437     pointer to the symbol with the same name as the next symbol.  */
4438#define BSF_INDIRECT      0x2000
4439
4440  /* BSF_FILE marks symbols that contain a file name.  This is used
4441     for ELF STT_FILE symbols.  */
4442#define BSF_FILE          0x4000
4443
4444  /* Symbol is from dynamic linking information.  */
4445#define BSF_DYNAMIC       0x8000
4446
4447  /* The symbol denotes a data object.  Used in ELF, and perhaps
4448     others someday.  */
4449#define BSF_OBJECT        0x10000
4450
4451  /* This symbol is a debugging symbol.  The value is the offset
4452     into the section of the data.  BSF_DEBUGGING should be set
4453     as well.  */
4454#define BSF_DEBUGGING_RELOC 0x20000
4455
4456  /* This symbol is thread local.  Used in ELF.  */
4457#define BSF_THREAD_LOCAL  0x40000
4458
4459  /* This symbol represents a complex relocation expression,
4460     with the expression tree serialized in the symbol name.  */
4461#define BSF_RELC 0x80000
4462
4463  /* This symbol represents a signed complex relocation expression,
4464     with the expression tree serialized in the symbol name.  */
4465#define BSF_SRELC 0x100000
4466
4467  flagword flags;
4468
4469  /* A pointer to the section to which this symbol is
4470     relative.  This will always be non NULL, there are special
4471     sections for undefined and absolute symbols.  */
4472  struct bfd_section *section;
4473
4474  /* Back end special data.  */
4475  union
4476    {
4477      void *p;
4478      bfd_vma i;
4479    }
4480  udata;
4481}
4482asymbol;
4483
4484#define bfd_get_symtab_upper_bound(abfd) \
4485     BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
4486
4487bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
4488
4489bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
4490
4491#define bfd_is_local_label_name(abfd, name) \
4492  BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
4493
4494bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
4495
4496#define bfd_is_target_special_symbol(abfd, sym) \
4497  BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
4498
4499#define bfd_canonicalize_symtab(abfd, location) \
4500  BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
4501
4502bfd_boolean bfd_set_symtab
4503   (bfd *abfd, asymbol **location, unsigned int count);
4504
4505void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
4506
4507#define bfd_make_empty_symbol(abfd) \
4508  BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
4509
4510asymbol *_bfd_generic_make_empty_symbol (bfd *);
4511
4512#define bfd_make_debug_symbol(abfd,ptr,size) \
4513  BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
4514
4515int bfd_decode_symclass (asymbol *symbol);
4516
4517bfd_boolean bfd_is_undefined_symclass (int symclass);
4518
4519void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
4520
4521bfd_boolean bfd_copy_private_symbol_data
4522   (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
4523
4524#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
4525  BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
4526            (ibfd, isymbol, obfd, osymbol))
4527
4528/* Extracted from bfd.c.  */
4529struct bfd
4530{
4531  /* A unique identifier of the BFD  */
4532  unsigned int id;
4533
4534  /* The filename the application opened the BFD with.  */
4535  const char *filename;
4536
4537  /* A pointer to the target jump table.  */
4538  const struct bfd_target *xvec;
4539
4540  /* The IOSTREAM, and corresponding IO vector that provide access
4541     to the file backing the BFD.  */
4542  void *iostream;
4543  const struct bfd_iovec *iovec;
4544
4545  /* Is the file descriptor being cached?  That is, can it be closed as
4546     needed, and re-opened when accessed later?  */
4547  bfd_boolean cacheable;
4548
4549  /* Marks whether there was a default target specified when the
4550     BFD was opened. This is used to select which matching algorithm
4551     to use to choose the back end.  */
4552  bfd_boolean target_defaulted;
4553
4554  /* The caching routines use these to maintain a
4555     least-recently-used list of BFDs.  */
4556  struct bfd *lru_prev, *lru_next;
4557
4558  /* When a file is closed by the caching routines, BFD retains
4559     state information on the file here...  */
4560  ufile_ptr where;
4561
4562  /* ... and here: (``once'' means at least once).  */
4563  bfd_boolean opened_once;
4564
4565  /* Set if we have a locally maintained mtime value, rather than
4566     getting it from the file each time.  */
4567  bfd_boolean mtime_set;
4568
4569  /* File modified time, if mtime_set is TRUE.  */
4570  long mtime;
4571
4572  /* Reserved for an unimplemented file locking extension.  */
4573  int ifd;
4574
4575  /* The format which belongs to the BFD. (object, core, etc.)  */
4576  bfd_format format;
4577
4578  /* The direction with which the BFD was opened.  */
4579  enum bfd_direction
4580    {
4581      no_direction = 0,
4582      read_direction = 1,
4583      write_direction = 2,
4584      both_direction = 3
4585    }
4586  direction;
4587
4588  /* Format_specific flags.  */
4589  flagword flags;
4590
4591  /* Currently my_archive is tested before adding origin to
4592     anything. I believe that this can become always an add of
4593     origin, with origin set to 0 for non archive files.  */
4594  ufile_ptr origin;
4595
4596  /* Remember when output has begun, to stop strange things
4597     from happening.  */
4598  bfd_boolean output_has_begun;
4599
4600  /* A hash table for section names.  */
4601  struct bfd_hash_table section_htab;
4602
4603  /* Pointer to linked list of sections.  */
4604  struct bfd_section *sections;
4605
4606  /* The last section on the section list.  */
4607  struct bfd_section *section_last;
4608
4609  /* The number of sections.  */
4610  unsigned int section_count;
4611
4612  /* Stuff only useful for object files:
4613     The start address.  */
4614  bfd_vma start_address;
4615
4616  /* Used for input and output.  */
4617  unsigned int symcount;
4618
4619  /* Symbol table for output BFD (with symcount entries).  */
4620  struct bfd_symbol  **outsymbols;
4621
4622  /* Used for slurped dynamic symbol tables.  */
4623  unsigned int dynsymcount;
4624
4625  /* Pointer to structure which contains architecture information.  */
4626  const struct bfd_arch_info *arch_info;
4627
4628  /* Flag set if symbols from this BFD should not be exported.  */
4629  bfd_boolean no_export;
4630
4631  /* Stuff only useful for archives.  */
4632  void *arelt_data;
4633  struct bfd *my_archive;      /* The containing archive BFD.  */
4634  struct bfd *next;            /* The next BFD in the archive.  */
4635  struct bfd *archive_head;    /* The first BFD in the archive.  */
4636  bfd_boolean has_armap;
4637
4638  /* A chain of BFD structures involved in a link.  */
4639  struct bfd *link_next;
4640
4641  /* A field used by _bfd_generic_link_add_archive_symbols.  This will
4642     be used only for archive elements.  */
4643  int archive_pass;
4644
4645  /* Used by the back end to hold private data.  */
4646  union
4647    {
4648      struct aout_data_struct *aout_data;
4649      struct artdata *aout_ar_data;
4650      struct _oasys_data *oasys_obj_data;
4651      struct _oasys_ar_data *oasys_ar_data;
4652      struct coff_tdata *coff_obj_data;
4653      struct pe_tdata *pe_obj_data;
4654      struct xcoff_tdata *xcoff_obj_data;
4655      struct ecoff_tdata *ecoff_obj_data;
4656      struct ieee_data_struct *ieee_data;
4657      struct ieee_ar_data_struct *ieee_ar_data;
4658      struct srec_data_struct *srec_data;
4659      struct ihex_data_struct *ihex_data;
4660      struct tekhex_data_struct *tekhex_data;
4661      struct elf_obj_tdata *elf_obj_data;
4662      struct nlm_obj_tdata *nlm_obj_data;
4663      struct bout_data_struct *bout_data;
4664      struct mmo_data_struct *mmo_data;
4665      struct sun_core_struct *sun_core_data;
4666      struct sco5_core_struct *sco5_core_data;
4667      struct trad_core_struct *trad_core_data;
4668      struct som_data_struct *som_data;
4669      struct hpux_core_struct *hpux_core_data;
4670      struct hppabsd_core_struct *hppabsd_core_data;
4671      struct sgi_core_struct *sgi_core_data;
4672      struct lynx_core_struct *lynx_core_data;
4673      struct osf_core_struct *osf_core_data;
4674      struct cisco_core_struct *cisco_core_data;
4675      struct versados_data_struct *versados_data;
4676      struct netbsd_core_struct *netbsd_core_data;
4677      struct mach_o_data_struct *mach_o_data;
4678      struct mach_o_fat_data_struct *mach_o_fat_data;
4679      struct bfd_pef_data_struct *pef_data;
4680      struct bfd_pef_xlib_data_struct *pef_xlib_data;
4681      struct bfd_sym_data_struct *sym_data;
4682      void *any;
4683    }
4684  tdata;
4685
4686  /* Used by the application to hold private data.  */
4687  void *usrdata;
4688
4689  /* Where all the allocated stuff under this BFD goes.  This is a
4690     struct objalloc *, but we use void * to avoid requiring the inclusion
4691     of objalloc.h.  */
4692  void *memory;
4693};
4694
4695typedef enum bfd_error
4696{
4697  bfd_error_no_error = 0,
4698  bfd_error_system_call,
4699  bfd_error_invalid_target,
4700  bfd_error_wrong_format,
4701  bfd_error_wrong_object_format,
4702  bfd_error_invalid_operation,
4703  bfd_error_no_memory,
4704  bfd_error_no_symbols,
4705  bfd_error_no_armap,
4706  bfd_error_no_more_archived_files,
4707  bfd_error_malformed_archive,
4708  bfd_error_file_not_recognized,
4709  bfd_error_file_ambiguously_recognized,
4710  bfd_error_no_contents,
4711  bfd_error_nonrepresentable_section,
4712  bfd_error_no_debug_section,
4713  bfd_error_bad_value,
4714  bfd_error_file_truncated,
4715  bfd_error_file_too_big,
4716  bfd_error_on_input,
4717  bfd_error_invalid_error_code
4718}
4719bfd_error_type;
4720
4721bfd_error_type bfd_get_error (void);
4722
4723void bfd_set_error (bfd_error_type error_tag, ...);
4724
4725const char *bfd_errmsg (bfd_error_type error_tag);
4726
4727void bfd_perror (const char *message);
4728
4729typedef void (*bfd_error_handler_type) (const char *, ...);
4730
4731bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
4732
4733void bfd_set_error_program_name (const char *);
4734
4735bfd_error_handler_type bfd_get_error_handler (void);
4736
4737long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
4738
4739long bfd_canonicalize_reloc
4740   (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
4741
4742void bfd_set_reloc
4743   (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
4744
4745bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
4746
4747int bfd_get_arch_size (bfd *abfd);
4748
4749int bfd_get_sign_extend_vma (bfd *abfd);
4750
4751bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
4752
4753unsigned int bfd_get_gp_size (bfd *abfd);
4754
4755void bfd_set_gp_size (bfd *abfd, unsigned int i);
4756
4757bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
4758
4759bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
4760
4761#define bfd_copy_private_header_data(ibfd, obfd) \
4762     BFD_SEND (obfd, _bfd_copy_private_header_data, \
4763               (ibfd, obfd))
4764bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
4765
4766#define bfd_copy_private_bfd_data(ibfd, obfd) \
4767     BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
4768               (ibfd, obfd))
4769bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
4770
4771#define bfd_merge_private_bfd_data(ibfd, obfd) \
4772     BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
4773               (ibfd, obfd))
4774bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
4775
4776#define bfd_set_private_flags(abfd, flags) \
4777     BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
4778#define bfd_sizeof_headers(abfd, info) \
4779       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
4780
4781#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
4782       BFD_SEND (abfd, _bfd_find_nearest_line, \
4783                 (abfd, sec, syms, off, file, func, line))
4784
4785#define bfd_find_line(abfd, syms, sym, file, line) \
4786       BFD_SEND (abfd, _bfd_find_line, \
4787                 (abfd, syms, sym, file, line))
4788
4789#define bfd_find_inliner_info(abfd, file, func, line) \
4790       BFD_SEND (abfd, _bfd_find_inliner_info, \
4791                 (abfd, file, func, line))
4792
4793#define bfd_debug_info_start(abfd) \
4794       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
4795
4796#define bfd_debug_info_end(abfd) \
4797       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
4798
4799#define bfd_debug_info_accumulate(abfd, section) \
4800       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
4801
4802#define bfd_stat_arch_elt(abfd, stat) \
4803       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
4804
4805#define bfd_update_armap_timestamp(abfd) \
4806       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
4807
4808#define bfd_set_arch_mach(abfd, arch, mach)\
4809       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
4810
4811#define bfd_relax_section(abfd, section, link_info, again) \
4812       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
4813
4814#define bfd_gc_sections(abfd, link_info) \
4815       BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
4816
4817#define bfd_merge_sections(abfd, link_info) \
4818       BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
4819
4820#define bfd_is_group_section(abfd, sec) \
4821       BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
4822
4823#define bfd_discard_group(abfd, sec) \
4824       BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
4825
4826#define bfd_link_hash_table_create(abfd) \
4827       BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
4828
4829#define bfd_link_hash_table_free(abfd, hash) \
4830       BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
4831
4832#define bfd_link_add_symbols(abfd, info) \
4833       BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
4834
4835#define bfd_link_just_syms(abfd, sec, info) \
4836       BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
4837
4838#define bfd_final_link(abfd, info) \
4839       BFD_SEND (abfd, _bfd_final_link, (abfd, info))
4840
4841#define bfd_free_cached_info(abfd) \
4842       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
4843
4844#define bfd_get_dynamic_symtab_upper_bound(abfd) \
4845       BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
4846
4847#define bfd_print_private_bfd_data(abfd, file)\
4848       BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
4849
4850#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
4851       BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
4852
4853#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
4854       BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
4855                                                   dyncount, dynsyms, ret))
4856
4857#define bfd_get_dynamic_reloc_upper_bound(abfd) \
4858       BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
4859
4860#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
4861       BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
4862
4863extern bfd_byte *bfd_get_relocated_section_contents
4864  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
4865   bfd_boolean, asymbol **);
4866
4867bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
4868
4869struct bfd_preserve
4870{
4871  void *marker;
4872  void *tdata;
4873  flagword flags;
4874  const struct bfd_arch_info *arch_info;
4875  struct bfd_section *sections;
4876  struct bfd_section *section_last;
4877  unsigned int section_count;
4878  struct bfd_hash_table section_htab;
4879};
4880
4881bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *);
4882
4883void bfd_preserve_restore (bfd *, struct bfd_preserve *);
4884
4885void bfd_preserve_finish (bfd *, struct bfd_preserve *);
4886
4887bfd_vma bfd_emul_get_maxpagesize (const char *);
4888
4889void bfd_emul_set_maxpagesize (const char *, bfd_vma);
4890
4891bfd_vma bfd_emul_get_commonpagesize (const char *);
4892
4893void bfd_emul_set_commonpagesize (const char *, bfd_vma);
4894
4895/* Extracted from archive.c.  */
4896symindex bfd_get_next_mapent
4897   (bfd *abfd, symindex previous, carsym **sym);
4898
4899bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
4900
4901bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
4902
4903/* Extracted from corefile.c.  */
4904const char *bfd_core_file_failing_command (bfd *abfd);
4905
4906int bfd_core_file_failing_signal (bfd *abfd);
4907
4908bfd_boolean core_file_matches_executable_p
4909   (bfd *core_bfd, bfd *exec_bfd);
4910
4911bfd_boolean generic_core_file_matches_executable_p
4912   (bfd *core_bfd, bfd *exec_bfd);
4913
4914/* Extracted from targets.c.  */
4915#define BFD_SEND(bfd, message, arglist) \
4916  ((*((bfd)->xvec->message)) arglist)
4917
4918#ifdef DEBUG_BFD_SEND
4919#undef BFD_SEND
4920#define BFD_SEND(bfd, message, arglist) \
4921  (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
4922    ((*((bfd)->xvec->message)) arglist) : \
4923    (bfd_assert (__FILE__,__LINE__), NULL))
4924#endif
4925#define BFD_SEND_FMT(bfd, message, arglist) \
4926  (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
4927
4928#ifdef DEBUG_BFD_SEND
4929#undef BFD_SEND_FMT
4930#define BFD_SEND_FMT(bfd, message, arglist) \
4931  (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
4932   (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
4933   (bfd_assert (__FILE__,__LINE__), NULL))
4934#endif
4935
4936enum bfd_flavour
4937{
4938  bfd_target_unknown_flavour,
4939  bfd_target_aout_flavour,
4940  bfd_target_coff_flavour,
4941  bfd_target_ecoff_flavour,
4942  bfd_target_xcoff_flavour,
4943  bfd_target_elf_flavour,
4944  bfd_target_ieee_flavour,
4945  bfd_target_nlm_flavour,
4946  bfd_target_oasys_flavour,
4947  bfd_target_tekhex_flavour,
4948  bfd_target_srec_flavour,
4949  bfd_target_ihex_flavour,
4950  bfd_target_som_flavour,
4951  bfd_target_os9k_flavour,
4952  bfd_target_versados_flavour,
4953  bfd_target_msdos_flavour,
4954  bfd_target_ovax_flavour,
4955  bfd_target_evax_flavour,
4956  bfd_target_mmo_flavour,
4957  bfd_target_mach_o_flavour,
4958  bfd_target_pef_flavour,
4959  bfd_target_pef_xlib_flavour,
4960  bfd_target_sym_flavour
4961};
4962
4963enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
4964
4965/* Forward declaration.  */
4966typedef struct bfd_link_info _bfd_link_info;
4967
4968typedef struct bfd_target
4969{
4970  /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
4971  char *name;
4972
4973 /* The "flavour" of a back end is a general indication about
4974    the contents of a file.  */
4975  enum bfd_flavour flavour;
4976
4977  /* The order of bytes within the data area of a file.  */
4978  enum bfd_endian byteorder;
4979
4980 /* The order of bytes within the header parts of a file.  */
4981  enum bfd_endian header_byteorder;
4982
4983  /* A mask of all the flags which an executable may have set -
4984     from the set <<BFD_NO_FLAGS>>, <<HAS_RELOC>>, ...<<D_PAGED>>.  */
4985  flagword object_flags;
4986
4987 /* A mask of all the flags which a section may have set - from
4988    the set <<SEC_NO_FLAGS>>, <<SEC_ALLOC>>, ...<<SET_NEVER_LOAD>>.  */
4989  flagword section_flags;
4990
4991 /* The character normally found at the front of a symbol.
4992    (if any), perhaps `_'.  */
4993  char symbol_leading_char;
4994
4995 /* The pad character for file names within an archive header.  */
4996  char ar_pad_char;
4997
4998  /* The maximum number of characters in an archive header.  */
4999  unsigned short ar_max_namelen;
5000
5001  /* Entries for byte swapping for data. These are different from the
5002     other entry points, since they don't take a BFD as the first argument.
5003     Certain other handlers could do the same.  */
5004  bfd_uint64_t   (*bfd_getx64) (const void *);
5005  bfd_int64_t    (*bfd_getx_signed_64) (const void *);
5006  void           (*bfd_putx64) (bfd_uint64_t, void *);
5007  bfd_vma        (*bfd_getx32) (const void *);
5008  bfd_signed_vma (*bfd_getx_signed_32) (const void *);
5009  void           (*bfd_putx32) (bfd_vma, void *);
5010  bfd_vma        (*bfd_getx16) (const void *);
5011  bfd_signed_vma (*bfd_getx_signed_16) (const void *);
5012  void           (*bfd_putx16) (bfd_vma, void *);
5013
5014  /* Byte swapping for the headers.  */
5015  bfd_uint64_t   (*bfd_h_getx64) (const void *);
5016  bfd_int64_t    (*bfd_h_getx_signed_64) (const void *);
5017  void           (*bfd_h_putx64) (bfd_uint64_t, void *);
5018  bfd_vma        (*bfd_h_getx32) (const void *);
5019  bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
5020  void           (*bfd_h_putx32) (bfd_vma, void *);
5021  bfd_vma        (*bfd_h_getx16) (const void *);
5022  bfd_signed_vma (*bfd_h_getx_signed_16) (const void *);
5023  void           (*bfd_h_putx16) (bfd_vma, void *);
5024
5025  /* Format dependent routines: these are vectors of entry points
5026     within the target vector structure, one for each format to check.  */
5027
5028  /* Check the format of a file being read.  Return a <<bfd_target *>> or zero.  */
5029  const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *);
5030
5031  /* Set the format of a file being written.  */
5032  bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
5033
5034  /* Write cached information into a file being written, at <<bfd_close>>.  */
5035  bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
5036
5037
5038  /* Generic entry points.  */
5039#define BFD_JUMP_TABLE_GENERIC(NAME) \
5040  NAME##_close_and_cleanup, \
5041  NAME##_bfd_free_cached_info, \
5042  NAME##_new_section_hook, \
5043  NAME##_get_section_contents, \
5044  NAME##_get_section_contents_in_window
5045
5046  /* Called when the BFD is being closed to do any necessary cleanup.  */
5047  bfd_boolean (*_close_and_cleanup) (bfd *);
5048  /* Ask the BFD to free all cached information.  */
5049  bfd_boolean (*_bfd_free_cached_info) (bfd *);
5050  /* Called when a new section is created.  */
5051  bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
5052  /* Read the contents of a section.  */
5053  bfd_boolean (*_bfd_get_section_contents)
5054    (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
5055  bfd_boolean (*_bfd_get_section_contents_in_window)
5056    (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type);
5057
5058  /* Entry points to copy private data.  */
5059#define BFD_JUMP_TABLE_COPY(NAME) \
5060  NAME##_bfd_copy_private_bfd_data, \
5061  NAME##_bfd_merge_private_bfd_data, \
5062  _bfd_generic_init_private_section_data, \
5063  NAME##_bfd_copy_private_section_data, \
5064  NAME##_bfd_copy_private_symbol_data, \
5065  NAME##_bfd_copy_private_header_data, \
5066  NAME##_bfd_set_private_flags, \
5067  NAME##_bfd_print_private_bfd_data
5068
5069  /* Called to copy BFD general private data from one object file
5070     to another.  */
5071  bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
5072  /* Called to merge BFD general private data from one object file
5073     to a common output file when linking.  */
5074  bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *);
5075  /* Called to initialize BFD private section data from one object file
5076     to another.  */
5077#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
5078  BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info))
5079  bfd_boolean (*_bfd_init_private_section_data)
5080    (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *);
5081  /* Called to copy BFD private section data from one object file
5082     to another.  */
5083  bfd_boolean (*_bfd_copy_private_section_data)
5084    (bfd *, sec_ptr, bfd *, sec_ptr);
5085  /* Called to copy BFD private symbol data from one symbol
5086     to another.  */
5087  bfd_boolean (*_bfd_copy_private_symbol_data)
5088    (bfd *, asymbol *, bfd *, asymbol *);
5089  /* Called to copy BFD private header data from one object file
5090     to another.  */
5091  bfd_boolean (*_bfd_copy_private_header_data)
5092    (bfd *, bfd *);
5093  /* Called to set private backend flags.  */
5094  bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
5095
5096  /* Called to print private BFD data.  */
5097  bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
5098
5099  /* Core file entry points.  */
5100#define BFD_JUMP_TABLE_CORE(NAME) \
5101  NAME##_core_file_failing_command, \
5102  NAME##_core_file_failing_signal, \
5103  NAME##_core_file_matches_executable_p
5104
5105  char *      (*_core_file_failing_command) (bfd *);
5106  int         (*_core_file_failing_signal) (bfd *);
5107  bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
5108
5109  /* Archive entry points.  */
5110#define BFD_JUMP_TABLE_ARCHIVE(NAME) \
5111  NAME##_slurp_armap, \
5112  NAME##_slurp_extended_name_table, \
5113  NAME##_construct_extended_name_table, \
5114  NAME##_truncate_arname, \
5115  NAME##_write_armap, \
5116  NAME##_read_ar_hdr, \
5117  NAME##_openr_next_archived_file, \
5118  NAME##_get_elt_at_index, \
5119  NAME##_generic_stat_arch_elt, \
5120  NAME##_update_armap_timestamp
5121
5122  bfd_boolean (*_bfd_slurp_armap) (bfd *);
5123  bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
5124  bfd_boolean (*_bfd_construct_extended_name_table)
5125    (bfd *, char **, bfd_size_type *, const char **);
5126  void        (*_bfd_truncate_arname) (bfd *, const char *, char *);
5127  bfd_boolean (*write_armap)
5128    (bfd *, unsigned int, struct orl *, unsigned int, int);
5129  void *      (*_bfd_read_ar_hdr_fn) (bfd *);
5130  bfd *       (*openr_next_archived_file) (bfd *, bfd *);
5131#define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
5132  bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
5133  int         (*_bfd_stat_arch_elt) (bfd *, struct stat *);
5134  bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
5135
5136  /* Entry points used for symbols.  */
5137#define BFD_JUMP_TABLE_SYMBOLS(NAME) \
5138  NAME##_get_symtab_upper_bound, \
5139  NAME##_canonicalize_symtab, \
5140  NAME##_make_empty_symbol, \
5141  NAME##_print_symbol, \
5142  NAME##_get_symbol_info, \
5143  NAME##_bfd_is_local_label_name, \
5144  NAME##_bfd_is_target_special_symbol, \
5145  NAME##_get_lineno, \
5146  NAME##_find_nearest_line, \
5147  _bfd_generic_find_line, \
5148  NAME##_find_inliner_info, \
5149  NAME##_bfd_make_debug_symbol, \
5150  NAME##_read_minisymbols, \
5151  NAME##_minisymbol_to_symbol
5152
5153  long        (*_bfd_get_symtab_upper_bound) (bfd *);
5154  long        (*_bfd_canonicalize_symtab)
5155    (bfd *, struct bfd_symbol **);
5156  struct bfd_symbol *
5157              (*_bfd_make_empty_symbol) (bfd *);
5158  void        (*_bfd_print_symbol)
5159    (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type);
5160#define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
5161  void        (*_bfd_get_symbol_info)
5162    (bfd *, struct bfd_symbol *, symbol_info *);
5163#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
5164  bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
5165  bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
5166  alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
5167  bfd_boolean (*_bfd_find_nearest_line)
5168    (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
5169     const char **, const char **, unsigned int *);
5170  bfd_boolean (*_bfd_find_line)
5171    (bfd *, struct bfd_symbol **, struct bfd_symbol *,
5172     const char **, unsigned int *);
5173  bfd_boolean (*_bfd_find_inliner_info)
5174    (bfd *, const char **, const char **, unsigned int *);
5175 /* Back-door to allow format-aware applications to create debug symbols
5176    while using BFD for everything else.  Currently used by the assembler
5177    when creating COFF files.  */
5178  asymbol *   (*_bfd_make_debug_symbol)
5179    (bfd *, void *, unsigned long size);
5180#define bfd_read_minisymbols(b, d, m, s) \
5181  BFD_SEND (b, _read_minisymbols, (b, d, m, s))
5182  long        (*_read_minisymbols)
5183    (bfd *, bfd_boolean, void **, unsigned int *);
5184#define bfd_minisymbol_to_symbol(b, d, m, f) \
5185  BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
5186  asymbol *   (*_minisymbol_to_symbol)
5187    (bfd *, bfd_boolean, const void *, asymbol *);
5188
5189  /* Routines for relocs.  */
5190#define BFD_JUMP_TABLE_RELOCS(NAME) \
5191  NAME##_get_reloc_upper_bound, \
5192  NAME##_canonicalize_reloc, \
5193  NAME##_bfd_reloc_type_lookup
5194
5195  long        (*_get_reloc_upper_bound) (bfd *, sec_ptr);
5196  long        (*_bfd_canonicalize_reloc)
5197    (bfd *, sec_ptr, arelent **, struct bfd_symbol **);
5198  /* See documentation on reloc types.  */
5199  reloc_howto_type *
5200              (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
5201
5202
5203  /* Routines used when writing an object file.  */
5204#define BFD_JUMP_TABLE_WRITE(NAME) \
5205  NAME##_set_arch_mach, \
5206  NAME##_set_section_contents
5207
5208  bfd_boolean (*_bfd_set_arch_mach)
5209    (bfd *, enum bfd_architecture, unsigned long);
5210  bfd_boolean (*_bfd_set_section_contents)
5211    (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
5212
5213  /* Routines used by the linker.  */
5214#define BFD_JUMP_TABLE_LINK(NAME) \
5215  NAME##_sizeof_headers, \
5216  NAME##_bfd_get_relocated_section_contents, \
5217  NAME##_bfd_relax_section, \
5218  NAME##_bfd_link_hash_table_create, \
5219  NAME##_bfd_link_hash_table_free, \
5220  NAME##_bfd_link_add_symbols, \
5221  NAME##_bfd_link_just_syms, \
5222  NAME##_bfd_final_link, \
5223  NAME##_bfd_link_split_section, \
5224  NAME##_bfd_gc_sections, \
5225  NAME##_bfd_merge_sections, \
5226  NAME##_bfd_is_group_section, \
5227  NAME##_bfd_discard_group, \
5228  NAME##_section_already_linked \
5229
5230  int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
5231  bfd_byte *  (*_bfd_get_relocated_section_contents)
5232    (bfd *, struct bfd_link_info *, struct bfd_link_order *,
5233     bfd_byte *, bfd_boolean, struct bfd_symbol **);
5234
5235  bfd_boolean (*_bfd_relax_section)
5236    (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);
5237
5238  /* Create a hash table for the linker.  Different backends store
5239     different information in this table.  */
5240  struct bfd_link_hash_table *
5241              (*_bfd_link_hash_table_create) (bfd *);
5242
5243  /* Release the memory associated with the linker hash table.  */
5244  void        (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *);
5245
5246  /* Add symbols from this object file into the hash table.  */
5247  bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
5248
5249  /* Indicate that we are only retrieving symbol values from this section.  */
5250  void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
5251
5252  /* Do a link based on the link_order structures attached to each
5253     section of the BFD.  */
5254  bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
5255
5256  /* Should this section be split up into smaller pieces during linking.  */
5257  bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
5258
5259  /* Remove sections that are not referenced from the output.  */
5260  bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
5261
5262  /* Attempt to merge SEC_MERGE sections.  */
5263  bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
5264
5265  /* Is this section a member of a group?  */
5266  bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
5267
5268  /* Discard members of a group.  */
5269  bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
5270
5271  /* Check if SEC has been already linked during a reloceatable or
5272     final link.  */
5273  void (*_section_already_linked) (bfd *, struct bfd_section *,
5274                                   struct bfd_link_info *);
5275
5276  /* Routines to handle dynamic symbols and relocs.  */
5277#define BFD_JUMP_TABLE_DYNAMIC(NAME) \
5278  NAME##_get_dynamic_symtab_upper_bound, \
5279  NAME##_canonicalize_dynamic_symtab, \
5280  NAME##_get_synthetic_symtab, \
5281  NAME##_get_dynamic_reloc_upper_bound, \
5282  NAME##_canonicalize_dynamic_reloc
5283
5284  /* Get the amount of memory required to hold the dynamic symbols.  */
5285  long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
5286  /* Read in the dynamic symbols.  */
5287  long        (*_bfd_canonicalize_dynamic_symtab)
5288    (bfd *, struct bfd_symbol **);
5289  /* Create synthetized symbols.  */
5290  long        (*_bfd_get_synthetic_symtab)
5291    (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **,
5292     struct bfd_symbol **);
5293  /* Get the amount of memory required to hold the dynamic relocs.  */
5294  long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
5295  /* Read in the dynamic relocs.  */
5296  long        (*_bfd_canonicalize_dynamic_reloc)
5297    (bfd *, arelent **, struct bfd_symbol **);
5298
5299  /* Opposite endian version of this target.  */
5300  const struct bfd_target * alternative_target;
5301
5302  /* Data for use by back-end routines, which isn't
5303     generic enough to belong in this structure.  */
5304  const void *backend_data;
5305
5306} bfd_target;
5307
5308bfd_boolean bfd_set_default_target (const char *name);
5309
5310const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
5311
5312const char ** bfd_target_list (void);
5313
5314const bfd_target *bfd_search_for_target
5315   (int (*search_func) (const bfd_target *, void *),
5316    void *);
5317
5318/* Extracted from format.c.  */
5319bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
5320
5321bfd_boolean bfd_check_format_matches
5322   (bfd *abfd, bfd_format format, char ***matching);
5323
5324bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
5325
5326const char *bfd_format_string (bfd_format format);
5327
5328/* Extracted from linker.c.  */
5329bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
5330
5331#define bfd_link_split_section(abfd, sec) \
5332       BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
5333
5334void bfd_section_already_linked (bfd *abfd, asection *sec,
5335    struct bfd_link_info *info);
5336
5337#define bfd_section_already_linked(abfd, sec, info) \
5338       BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
5339
5340/* Extracted from simple.c.  */
5341bfd_byte *bfd_simple_get_relocated_section_contents
5342   (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table);
5343
5344#ifdef __cplusplus
5345}
5346#endif
5347#endif
5348