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