* ldlang.c (lang_memory_region_lookup): Don't use the first region
[deliverable/binutils-gdb.git] / bfd / bfd-in2.h
CommitLineData
fdcb0453 1/* Main header file for the bfd library -- portable access to object files.
5dc8db48 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
fdcb0453
KR
3 Contributed by Cygnus Support.
4
b66b07a2
KR
5** NOTE: bfd.h and bfd-in2.h are GENERATED files. Don't change them;
6** instead, change bfd-in.h or the other BFD source files processed to
7** generate these files.
8
fdcb0453
KR
9This file is part of BFD, the Binary File Descriptor library.
10
11This program is free software; you can redistribute it and/or modify
12it under the terms of the GNU General Public License as published by
13the Free Software Foundation; either version 2 of the License, or
14(at your option) any later version.
15
16This program is distributed in the hope that it will be useful,
17but WITHOUT ANY WARRANTY; without even the implied warranty of
18MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19GNU General Public License for more details.
20
21You should have received a copy of the GNU General Public License
22along with this program; if not, write to the Free Software
e9614321 23Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
fdcb0453
KR
24
25/* bfd.h -- The only header file required by users of the bfd library
26
27The bfd.h file is generated from bfd-in.h and various .c files; if you
28change it, your changes will probably be lost.
29
30All the prototypes and definitions following the comment "THE FOLLOWING
31IS EXTRACTED FROM THE SOURCE" are extracted from the source files for
32BFD. If you change it, someone oneday will extract it from the source
33again, and your changes will be lost. To save yourself from this bind,
34change the definitions in the source in the bfd directory. Type "make
35docs" and then "make headers" in that directory, and magically this file
36will change to reflect your changes.
37
38If you don't have the tools to perform the extraction, then you are
39safe from someone on your system trampling over your header files.
40You should still maintain the equivalence between the source and this
41file though; every change you make to the .c file should be reflected
42here. */
43
44#ifndef __BFD_H_SEEN__
45#define __BFD_H_SEEN__
46
815179af
ILT
47#ifdef __cplusplus
48extern "C" {
49#endif
50
fdcb0453
KR
51#include "ansidecl.h"
52#include "obstack.h"
53
5a66538b
KR
54/* These two lines get substitutions done by commands in Makefile.in. */
55#define BFD_VERSION "@VERSION@"
fdcb0453
KR
56#define BFD_ARCH_SIZE @WORDSIZE@
57
58#if BFD_ARCH_SIZE >= 64
59#define BFD64
60#endif
61
c3e964b9
FF
62#ifndef INLINE
63#if __GNUC__ >= 2
64#define INLINE __inline__
65#else
66#define INLINE
67#endif
68#endif
69
87cc59ce
KR
70/* 64-bit type definition (if any) from bfd's sysdep.h goes here */
71
fdcb0453
KR
72
73/* forward declaration */
74typedef struct _bfd bfd;
75
76/* To squelch erroneous compiler warnings ("illegal pointer
77 combination") from the SVR3 compiler, we would like to typedef
78 boolean to int (it doesn't like functions which return boolean.
79 Making sure they are never implicitly declared to return int
80 doesn't seem to help). But this file is not configured based on
81 the host. */
82/* General rules: functions which are boolean return true on success
83 and false on failure (unless they're a predicate). -- bfd.doc */
84/* I'm sure this is going to break something and someone is going to
85 force me to change it. */
86/* typedef enum boolean {false, true} boolean; */
87/* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h> -fnf */
442da995 88/* It gets worse if the host also defines a true/false enum... -sts */
3b1f83ad
JL
89/* And even worse if your compiler has built-in boolean types... -law */
90#if defined (__GNUG__) && (__GNUC_MINOR__ > 5)
91#define TRUE_FALSE_ALREADY_DEFINED
92#endif
442da995 93#ifndef TRUE_FALSE_ALREADY_DEFINED
fdcb0453 94typedef enum bfd_boolean {false, true} boolean;
442da995
SS
95#define BFD_TRUE_FALSE
96#else
e0151f38
SS
97/* Use enum names that will appear nowhere else. */
98typedef enum bfd_boolean {bfd_fffalse, bfd_tttrue} boolean;
442da995 99#endif
fdcb0453
KR
100
101/* A pointer to a position in a file. */
102/* FIXME: This should be using off_t from <sys/types.h>.
103 For now, try to avoid breaking stuff by not including <sys/types.h> here.
104 This will break on systems with 64-bit file offsets (e.g. 4.4BSD).
105 Probably the best long-term answer is to avoid using file_ptr AND off_t
106 in this header file, and to handle this in the BFD implementation
107 rather than in its interface. */
108/* typedef off_t file_ptr; */
109typedef long int file_ptr;
110
0822b56d
ILT
111/* Support for different sizes of target format ints and addresses.
112 If the host implements 64-bit values, it defines BFD_HOST_64_BIT to
113 be the appropriate type. Otherwise, this code will fall back on
114 gcc's "long long" type if gcc is being used. BFD_HOST_64_BIT must
115 be defined in such a way as to be a valid type name by itself or
116 with "unsigned" prefixed. It should be a signed type by itself.
fdcb0453 117
0822b56d
ILT
118 If neither is the case, then compilation will fail if 64-bit
119 targets are requested. If you don't request any 64-bit targets,
120 you should be safe. */
fdcb0453
KR
121
122#ifdef BFD64
123
78c3dc5c
JK
124#if defined (__GNUC__) && !defined (BFD_HOST_64_BIT)
125#define BFD_HOST_64_BIT long long
126typedef BFD_HOST_64_BIT int64_type;
127typedef unsigned BFD_HOST_64_BIT uint64_type;
fdcb0453
KR
128#endif
129
fa5ba217
KR
130#if !defined (uint64_type) && defined (__GNUC__)
131#define uint64_type unsigned long long
132#define int64_type long long
7e7fb4a8
KR
133#endif
134#ifndef uint64_typeLOW
4aed7f24
ILT
135#define uint64_typeLOW(x) ((unsigned long)(((x) & 0xffffffff)))
136#define uint64_typeHIGH(x) ((unsigned long)(((x) >> 32) & 0xffffffff))
fa5ba217
KR
137#endif
138
78c3dc5c
JK
139typedef unsigned BFD_HOST_64_BIT bfd_vma;
140typedef BFD_HOST_64_BIT bfd_signed_vma;
141typedef unsigned BFD_HOST_64_BIT bfd_size_type;
142typedef unsigned BFD_HOST_64_BIT symvalue;
7e7fb4a8 143#ifndef fprintf_vma
fdcb0453 144#define fprintf_vma(s,x) \
4aed7f24 145 fprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x))
fa5ba217 146#define sprintf_vma(s,x) \
4aed7f24 147 sprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x))
7e7fb4a8 148#endif
fdcb0453
KR
149#else /* not BFD64 */
150
151/* Represent a target address. Also used as a generic unsigned type
152 which is guaranteed to be big enough to hold any arithmetic types
153 we need to deal with. */
154typedef unsigned long bfd_vma;
155
156/* A generic signed type which is guaranteed to be big enough to hold any
157 arithmetic types we need to deal with. Can be assumed to be compatible
158 with bfd_vma in the same way that signed and unsigned ints are compatible
159 (as parameters, in assignment, etc). */
160typedef long bfd_signed_vma;
161
162typedef unsigned long symvalue;
163typedef unsigned long bfd_size_type;
164
165/* Print a bfd_vma x on stream s. */
166#define fprintf_vma(s,x) fprintf(s, "%08lx", x)
fa5ba217 167#define sprintf_vma(s,x) sprintf(s, "%08lx", x)
fdcb0453
KR
168#endif /* not BFD64 */
169#define printf_vma(x) fprintf_vma(stdout,x)
170
171typedef unsigned int flagword; /* 32 bits of flags */
5dc8db48 172typedef unsigned char bfd_byte;
fdcb0453
KR
173\f
174/** File formats */
175
176typedef enum bfd_format {
177 bfd_unknown = 0, /* file format is unknown */
178 bfd_object, /* linker/assember/compiler output */
179 bfd_archive, /* object archive file */
180 bfd_core, /* core dump */
181 bfd_type_end} /* marks the end; don't use it! */
182 bfd_format;
183
9e461dac
JK
184/* Values that may appear in the flags field of a BFD. These also
185 appear in the object_flags field of the bfd_target structure, where
186 they indicate the set of flags used by that backend (not all flags
187 are meaningful for all object file formats) (FIXME: at the moment,
188 the object_flags values have mostly just been copied from backend
189 to another, and are not necessarily correct). */
190
191/* No flags. */
fdcb0453 192#define NO_FLAGS 0x00
9e461dac
JK
193
194/* BFD contains relocation entries. */
fdcb0453 195#define HAS_RELOC 0x01
9e461dac
JK
196
197/* BFD is directly executable. */
fdcb0453 198#define EXEC_P 0x02
9e461dac
JK
199
200/* BFD has line number information (basically used for F_LNNO in a
201 COFF header). */
fdcb0453 202#define HAS_LINENO 0x04
9e461dac
JK
203
204/* BFD has debugging information. */
fdcb0453 205#define HAS_DEBUG 0x08
9e461dac
JK
206
207/* BFD has symbols. */
fdcb0453 208#define HAS_SYMS 0x10
9e461dac
JK
209
210/* BFD has local symbols (basically used for F_LSYMS in a COFF
211 header). */
fdcb0453 212#define HAS_LOCALS 0x20
9e461dac
JK
213
214/* BFD is a dynamic object. */
fdcb0453 215#define DYNAMIC 0x40
9e461dac
JK
216
217/* Text section is write protected (if D_PAGED is not set, this is
218 like an a.out NMAGIC file) (the linker sets this by default, but
219 clears it for -r or -N). */
fdcb0453 220#define WP_TEXT 0x80
9e461dac
JK
221
222/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
223 linker sets this by default, but clears it for -r or -n or -N). */
fdcb0453 224#define D_PAGED 0x100
9e461dac
JK
225
226/* BFD is relaxable (this means that bfd_relax_section may be able to
0822b56d
ILT
227 do something) (sometimes bfd_relax_section can do something even if
228 this is not set). */
fdcb0453 229#define BFD_IS_RELAXABLE 0x200
a7ff9b80
ILT
230
231/* This may be set before writing out a BFD to request using a
232 traditional format. For example, this is used to request that when
233 writing out an a.out object the symbols not be hashed to eliminate
234 duplicates. */
235#define BFD_TRADITIONAL_FORMAT 0x400
fdcb0453
KR
236\f
237/* symbols and relocation */
238
0f8f509c 239/* A count of carsyms (canonical archive symbols). */
fdcb0453
KR
240typedef unsigned long symindex;
241
5dc8db48
KR
242/* How to perform a relocation. */
243typedef const struct reloc_howto_struct reloc_howto_type;
244
fdcb0453
KR
245#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
246
0f8f509c
DM
247/* General purpose part of a symbol X;
248 target specific parts are in libcoff.h, libaout.h, etc. */
fdcb0453
KR
249
250#define bfd_get_section(x) ((x)->section)
251#define bfd_get_output_section(x) ((x)->section->output_section)
252#define bfd_set_section(x,y) ((x)->section) = (y)
253#define bfd_asymbol_base(x) ((x)->section->vma)
254#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value)
255#define bfd_asymbol_name(x) ((x)->name)
256/*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/
257#define bfd_asymbol_bfd(x) ((x)->the_bfd)
258#define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour)
259
0f8f509c 260/* A canonical archive symbol. */
fdcb0453
KR
261/* This is a type pun with struct ranlib on purpose! */
262typedef struct carsym {
263 char *name;
264 file_ptr file_offset; /* look here to find the file */
265} carsym; /* to make these you call a carsymogen */
266
267
0f8f509c
DM
268/* Used in generating armaps (archive tables of contents).
269 Perhaps just a forward definition would do? */
fdcb0453
KR
270struct orl { /* output ranlib */
271 char **name; /* symbol name */
272 file_ptr pos; /* bfd* or file position */
273 int namidx; /* index into string table */
274};
fdcb0453
KR
275\f
276
277/* Linenumber stuff */
278typedef struct lineno_cache_entry {
279 unsigned int line_number; /* Linenumber from start of function*/
280 union {
0f8f509c 281 struct symbol_cache_entry *sym; /* Function name */
fdcb0453
KR
282 unsigned long offset; /* Offset into section */
283 } u;
284} alent;
285\f
286/* object and core file sections */
287
fdcb0453
KR
288#define align_power(addr, align) \
289 ( ((addr) + ((1<<(align))-1)) & (-1 << (align)))
290
291typedef struct sec *sec_ptr;
292
293#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0)
294#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0)
295#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0)
296#define bfd_section_name(bfd, ptr) ((ptr)->name)
297#define bfd_section_size(bfd, ptr) (bfd_get_section_size_before_reloc(ptr))
298#define bfd_section_vma(bfd, ptr) ((ptr)->vma)
299#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
300#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0)
301#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata)
302
303#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
304
e0151f38 305#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma= (val)), ((ptr)->user_set_vma = (boolean)true), true)
6167a840
JL
306#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),true)
307#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),true)
fdcb0453
KR
308
309typedef struct stat stat_type;
310\f
fdcb0453
KR
311typedef enum bfd_print_symbol
312{
313 bfd_print_symbol_name,
314 bfd_print_symbol_more,
315 bfd_print_symbol_all
316} bfd_print_symbol_type;
317
fdcb0453
KR
318/* Information about a symbol that nm needs. */
319
320typedef struct _symbol_info
321{
322 symvalue value;
0f8f509c 323 char type;
fdcb0453
KR
324 CONST char *name; /* Symbol name. */
325 char stab_other; /* Unused. */
326 short stab_desc; /* Info for N_TYPE. */
327 CONST char *stab_name;
328} symbol_info;
329\f
4c3721d5
ILT
330/* Hash table routines. There is no way to free up a hash table. */
331
332/* An element in the hash table. Most uses will actually use a larger
333 structure, and an instance of this will be the first field. */
334
335struct bfd_hash_entry
336{
337 /* Next entry for this hash code. */
338 struct bfd_hash_entry *next;
339 /* String being hashed. */
340 const char *string;
341 /* Hash code. This is the full hash code, not the index into the
342 table. */
343 unsigned long hash;
344};
345
346/* A hash table. */
347
348struct bfd_hash_table
349{
350 /* The hash array. */
351 struct bfd_hash_entry **table;
352 /* The number of slots in the hash table. */
353 unsigned int size;
354 /* A function used to create new elements in the hash table. The
355 first entry is itself a pointer to an element. When this
356 function is first invoked, this pointer will be NULL. However,
357 having the pointer permits a hierarchy of method functions to be
358 built each of which calls the function in the superclass. Thus
359 each function should be written to allocate a new block of memory
360 only if the argument is NULL. */
361 struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
362 struct bfd_hash_table *,
363 const char *));
364 /* An obstack for this hash table. */
365 struct obstack memory;
366};
367
368/* Initialize a hash table. */
369extern boolean bfd_hash_table_init
370 PARAMS ((struct bfd_hash_table *,
371 struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
372 struct bfd_hash_table *,
373 const char *)));
374
375/* Initialize a hash table specifying a size. */
376extern boolean bfd_hash_table_init_n
377 PARAMS ((struct bfd_hash_table *,
378 struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
379 struct bfd_hash_table *,
380 const char *),
381 unsigned int size));
382
383/* Free up a hash table. */
384extern void bfd_hash_table_free PARAMS ((struct bfd_hash_table *));
385
386/* Look up a string in a hash table. If CREATE is true, a new entry
387 will be created for this string if one does not already exist. The
388 COPY argument must be true if this routine should copy the string
389 into newly allocated memory when adding an entry. */
390extern struct bfd_hash_entry *bfd_hash_lookup
391 PARAMS ((struct bfd_hash_table *, const char *, boolean create,
392 boolean copy));
393
394/* Base method for creating a hash table entry. */
395extern struct bfd_hash_entry *bfd_hash_newfunc
396 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
397 const char *));
398
399/* Grab some space for a hash table entry. */
966e0a16
ILT
400extern PTR bfd_hash_allocate PARAMS ((struct bfd_hash_table *,
401 unsigned int));
4c3721d5
ILT
402
403/* Traverse a hash table in a random order, calling a function on each
404 element. If the function returns false, the traversal stops. The
405 INFO argument is passed to the function. */
406extern void bfd_hash_traverse PARAMS ((struct bfd_hash_table *,
407 boolean (*) (struct bfd_hash_entry *,
408 PTR),
409 PTR info));
410\f
c3e964b9
FF
411/* Semi-portable string concatenation in cpp.
412 The CAT4 hack is to avoid a problem with some strict ANSI C preprocessors.
413 The problem is, "32_" is not a valid preprocessing token, and we don't
414 want extra underscores (e.g., "nlm_32_"). The XCAT2 macro will cause the
415 inner CAT macros to be evaluated first, producing still-valid pp-tokens.
416 Then the final concatenation can be done. (Sigh.) */
fdcb0453 417#ifndef CAT
c3e964b9
FF
418#ifdef SABER
419#define CAT(a,b) a##b
420#define CAT3(a,b,c) a##b##c
421#define CAT4(a,b,c,d) a##b##c##d
422#else
442da995 423#if defined(__STDC__) || defined(ALMOST_STDC)
fdcb0453
KR
424#define CAT(a,b) a##b
425#define CAT3(a,b,c) a##b##c
c3e964b9
FF
426#define XCAT2(a,b) CAT(a,b)
427#define CAT4(a,b,c,d) XCAT2(CAT(a,b),CAT(c,d))
fdcb0453
KR
428#else
429#define CAT(a,b) a/**/b
430#define CAT3(a,b,c) a/**/b/**/c
c3e964b9
FF
431#define CAT4(a,b,c,d) a/**/b/**/c/**/d
432#endif
fdcb0453
KR
433#endif
434#endif
435
fdcb0453 436#define COFF_SWAP_TABLE (PTR) &bfd_coff_std_swap_table
fdcb0453
KR
437\f
438/* User program access to BFD facilities */
439
0822b56d
ILT
440/* Direct I/O routines, for programs which know more about the object
441 file than BFD does. Use higher level routines if possible. */
442
443extern bfd_size_type bfd_read
444 PARAMS ((PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
445extern bfd_size_type bfd_write
446 PARAMS ((const PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
d80ebaac 447extern int bfd_seek PARAMS ((bfd *abfd, file_ptr fp, int direction));
0822b56d
ILT
448extern long bfd_tell PARAMS ((bfd *abfd));
449extern int bfd_flush PARAMS ((bfd *abfd));
450extern int bfd_stat PARAMS ((bfd *abfd, struct stat *));
451
3b1f83ad
JL
452/* PE STUFF */
453/* Also define some types which are used within bfdlink.h for the
454 bfd_link_info struct. These are not defined in bfdlink.h for a reason.
455 When the link_info data is passed to bfd from ld, it is copied into
456 extern variables defined in internal.h. The type class for these must
457 be available to any thing that includes internal.h. When internal.h is
458 included, it is always preceeded by an include on this file. If I leave the
459 type definitions in bfdlink.h, then I must include that file when ever
460 I include internal.h, and this is not always a good thing */
461
462/* These are the different types of subsystems to be used when linking for
463 Windows NT. This information is passed in as an input parameter (default
464 is console) and ultimately ends up in the optional header data */
e9614321
SC
465
466#define BFD_PE_NATIVE 1 /* image doesn't require a subsystem */
467#define BFD_PE_WINDOWS 2 /* image runs in the Windows GUI subsystem */
468#define BFD_PE_CONSOLE 3 /* image runs in the Windows CUI subsystem */
469#define BFD_PE_OS2 5 /* image runs in the OS/2 character subsystem */
470#define BFD_PE_POSIX 7 /* image runs in the posix character subsystem */
471
3b1f83ad
JL
472/* The NT optional header file allows input of the stack and heap reserve
473 and commit size. This data may be input on the command line and will
474 end up in the optional header. Default sizes are provided. */
e9614321
SC
475
476typedef struct
3b1f83ad 477{
e9614321
SC
478 boolean defined;
479 bfd_vma value;
480} bfd_link_pe_info_dval ;
481
482typedef struct _bfd_link_pe_info
483{
484 bfd_link_pe_info_dval dll;
485 bfd_link_pe_info_dval file_alignment;
486 bfd_link_pe_info_dval heap_commit;
487 bfd_link_pe_info_dval heap_reserve;
488 bfd_link_pe_info_dval image_base;
489 bfd_link_pe_info_dval major_image_version;
490 bfd_link_pe_info_dval major_os_version;
491 bfd_link_pe_info_dval major_subsystem_version;
492 bfd_link_pe_info_dval minor_image_version;
493 bfd_link_pe_info_dval minor_os_version;
494 bfd_link_pe_info_dval minor_subsystem_version;
495 bfd_link_pe_info_dval section_alignment;
496 bfd_link_pe_info_dval stack_commit;
497 bfd_link_pe_info_dval stack_reserve;
498 bfd_link_pe_info_dval subsystem;
499} bfd_link_pe_info;
3b1f83ad
JL
500
501/* END OF PE STUFF */
502
e9614321 503
018dafca 504
fdcb0453
KR
505/* Cast from const char * to char * so that caller can assign to
506 a char * without a warning. */
507#define bfd_get_filename(abfd) ((char *) (abfd)->filename)
0a197a96 508#define bfd_get_cacheable(abfd) ((abfd)->cacheable)
fdcb0453
KR
509#define bfd_get_format(abfd) ((abfd)->format)
510#define bfd_get_target(abfd) ((abfd)->xvec->name)
9e461dac 511#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
fdcb0453
KR
512#define bfd_get_file_flags(abfd) ((abfd)->flags)
513#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
514#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
515#define bfd_my_archive(abfd) ((abfd)->my_archive)
516#define bfd_has_map(abfd) ((abfd)->has_armap)
fdcb0453
KR
517
518#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
519#define bfd_usrdata(abfd) ((abfd)->usrdata)
520
521#define bfd_get_start_address(abfd) ((abfd)->start_address)
522#define bfd_get_symcount(abfd) ((abfd)->symcount)
523#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
524#define bfd_count_sections(abfd) ((abfd)->section_count)
fdcb0453
KR
525
526#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
527
e0151f38 528#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean)(bool)), true)
0a197a96 529
2b91cc45
SG
530/* Byte swapping routines. */
531
1a973af1
ILT
532bfd_vma bfd_getb64 PARAMS ((const unsigned char *));
533bfd_vma bfd_getl64 PARAMS ((const unsigned char *));
534bfd_signed_vma bfd_getb_signed_64 PARAMS ((const unsigned char *));
535bfd_signed_vma bfd_getl_signed_64 PARAMS ((const unsigned char *));
536bfd_vma bfd_getb32 PARAMS ((const unsigned char *));
537bfd_vma bfd_getl32 PARAMS ((const unsigned char *));
538bfd_signed_vma bfd_getb_signed_32 PARAMS ((const unsigned char *));
539bfd_signed_vma bfd_getl_signed_32 PARAMS ((const unsigned char *));
540bfd_vma bfd_getb16 PARAMS ((const unsigned char *));
541bfd_vma bfd_getl16 PARAMS ((const unsigned char *));
542bfd_signed_vma bfd_getb_signed_16 PARAMS ((const unsigned char *));
543bfd_signed_vma bfd_getl_signed_16 PARAMS ((const unsigned char *));
2b91cc45
SG
544void bfd_putb64 PARAMS ((bfd_vma, unsigned char *));
545void bfd_putl64 PARAMS ((bfd_vma, unsigned char *));
546void bfd_putb32 PARAMS ((bfd_vma, unsigned char *));
547void bfd_putl32 PARAMS ((bfd_vma, unsigned char *));
548void bfd_putb16 PARAMS ((bfd_vma, unsigned char *));
549void bfd_putl16 PARAMS ((bfd_vma, unsigned char *));
c16313f0
ILT
550\f
551/* Externally visible ECOFF routines. */
2b91cc45 552
442da995 553#if defined(__STDC__) || defined(ALMOST_STDC)
8d12f138
ILT
554struct ecoff_debug_info;
555struct ecoff_debug_swap;
556struct ecoff_extr;
557struct symbol_cache_entry;
7e7fb4a8 558struct bfd_link_info;
8d12f138 559#endif
c16313f0
ILT
560extern bfd_vma bfd_ecoff_get_gp_value PARAMS ((bfd * abfd));
561extern boolean bfd_ecoff_set_gp_value PARAMS ((bfd *abfd, bfd_vma gp_value));
562extern boolean bfd_ecoff_set_regmasks
563 PARAMS ((bfd *abfd, unsigned long gprmask, unsigned long fprmask,
564 unsigned long *cprmask));
7e7fb4a8 565extern PTR bfd_ecoff_debug_init
8d12f138 566 PARAMS ((bfd *output_bfd, struct ecoff_debug_info *output_debug,
7e7fb4a8
KR
567 const struct ecoff_debug_swap *output_swap,
568 struct bfd_link_info *));
569extern void bfd_ecoff_debug_free
570 PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
571 const struct ecoff_debug_swap *output_swap,
572 struct bfd_link_info *));
573extern boolean bfd_ecoff_debug_accumulate
574 PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
8d12f138
ILT
575 const struct ecoff_debug_swap *output_swap,
576 bfd *input_bfd, struct ecoff_debug_info *input_debug,
577 const struct ecoff_debug_swap *input_swap,
7e7fb4a8
KR
578 struct bfd_link_info *));
579extern boolean bfd_ecoff_debug_accumulate_other
580 PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
581 const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
582 struct bfd_link_info *));
8d12f138
ILT
583extern boolean bfd_ecoff_debug_externals
584 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
585 const struct ecoff_debug_swap *swap,
586 boolean relocateable,
587 boolean (*get_extr) (struct symbol_cache_entry *,
588 struct ecoff_extr *),
589 void (*set_index) (struct symbol_cache_entry *,
590 bfd_size_type)));
966e0a16
ILT
591extern boolean bfd_ecoff_debug_one_external
592 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
593 const struct ecoff_debug_swap *swap,
594 const char *name, struct ecoff_extr *esym));
8d12f138
ILT
595extern bfd_size_type bfd_ecoff_debug_size
596 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
597 const struct ecoff_debug_swap *swap));
598extern boolean bfd_ecoff_write_debug
599 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
600 const struct ecoff_debug_swap *swap, file_ptr where));
7e7fb4a8
KR
601extern boolean bfd_ecoff_write_accumulated_debug
602 PARAMS ((PTR handle, bfd *abfd, struct ecoff_debug_info *debug,
603 const struct ecoff_debug_swap *swap,
604 struct bfd_link_info *info, file_ptr where));
82b1edf7
KR
605extern boolean bfd_mips_ecoff_create_embedded_relocs
606 PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
607 char **));
8d12f138 608
013dec1a
ILT
609/* Externally visible ELF routines. */
610
611extern boolean bfd_elf32_record_link_assignment
b5279eb6 612 PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean));
013dec1a 613extern boolean bfd_elf64_record_link_assignment
b5279eb6 614 PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean));
b176e1e9
ILT
615struct bfd_elf_link_needed_list
616{
617 struct bfd_elf_link_needed_list *next;
618 bfd *by;
619 const char *name;
620};
621extern struct bfd_elf_link_needed_list *bfd_elf_get_needed_list
622 PARAMS ((bfd *, struct bfd_link_info *));
013dec1a 623extern boolean bfd_elf32_size_dynamic_sections
fca2b81b
KR
624 PARAMS ((bfd *, const char *, const char *, boolean,
625 struct bfd_link_info *, struct sec **));
013dec1a 626extern boolean bfd_elf64_size_dynamic_sections
fca2b81b
KR
627 PARAMS ((bfd *, const char *, const char *, boolean,
628 struct bfd_link_info *, struct sec **));
c1f84521 629extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
013dec1a 630
a7ff9b80
ILT
631/* SunOS shared library support routines for the linker. */
632
633extern boolean bfd_sunos_record_link_assignment
634 PARAMS ((bfd *, struct bfd_link_info *, const char *));
635extern boolean bfd_sunos_size_dynamic_sections
636 PARAMS ((bfd *, struct bfd_link_info *, struct sec **, struct sec **,
637 struct sec **));
638
04003b57
ILT
639/* Linux shared library support routines for the linker. */
640
641extern boolean bfd_linux_size_dynamic_sections
642 PARAMS ((bfd *, struct bfd_link_info *));
643
fdcb0453
KR
644/* And more from the source. */
645void
646bfd_init PARAMS ((void));
647
648bfd *
c188b0be 649bfd_openr PARAMS ((CONST char *filename, CONST char *target));
fdcb0453
KR
650
651bfd *
652bfd_fdopenr PARAMS ((CONST char *filename, CONST char *target, int fd));
653
8a51b06c
ILT
654bfd *
655bfd_openstreamr PARAMS (());
656
fdcb0453
KR
657bfd *
658bfd_openw PARAMS ((CONST char *filename, CONST char *target));
659
660boolean
c188b0be 661bfd_close PARAMS ((bfd *abfd));
fdcb0453
KR
662
663boolean
664bfd_close_all_done PARAMS ((bfd *));
665
666bfd_size_type
667bfd_alloc_size PARAMS ((bfd *abfd));
668
669bfd *
10bd43a8 670bfd_create PARAMS ((CONST char *filename, bfd *templ));
fdcb0453
KR
671
672
673 /* Byte swapping macros for user section data. */
674
675#define bfd_put_8(abfd, val, ptr) \
e2756048 676 (*((unsigned char *)(ptr)) = (unsigned char)(val))
fdcb0453
KR
677#define bfd_put_signed_8 \
678 bfd_put_8
679#define bfd_get_8(abfd, ptr) \
680 (*(unsigned char *)(ptr))
681#define bfd_get_signed_8(abfd, ptr) \
682 ((*(unsigned char *)(ptr) ^ 0x80) - 0x80)
683
684#define bfd_put_16(abfd, val, ptr) \
685 BFD_SEND(abfd, bfd_putx16, ((val),(ptr)))
686#define bfd_put_signed_16 \
687 bfd_put_16
688#define bfd_get_16(abfd, ptr) \
689 BFD_SEND(abfd, bfd_getx16, (ptr))
690#define bfd_get_signed_16(abfd, ptr) \
691 BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
692
693#define bfd_put_32(abfd, val, ptr) \
694 BFD_SEND(abfd, bfd_putx32, ((val),(ptr)))
695#define bfd_put_signed_32 \
696 bfd_put_32
697#define bfd_get_32(abfd, ptr) \
698 BFD_SEND(abfd, bfd_getx32, (ptr))
699#define bfd_get_signed_32(abfd, ptr) \
700 BFD_SEND(abfd, bfd_getx_signed_32, (ptr))
701
702#define bfd_put_64(abfd, val, ptr) \
703 BFD_SEND(abfd, bfd_putx64, ((val), (ptr)))
704#define bfd_put_signed_64 \
705 bfd_put_64
706#define bfd_get_64(abfd, ptr) \
707 BFD_SEND(abfd, bfd_getx64, (ptr))
708#define bfd_get_signed_64(abfd, ptr) \
709 BFD_SEND(abfd, bfd_getx_signed_64, (ptr))
710
711
712 /* Byte swapping macros for file header data. */
713
714#define bfd_h_put_8(abfd, val, ptr) \
715 bfd_put_8 (abfd, val, ptr)
716#define bfd_h_put_signed_8(abfd, val, ptr) \
717 bfd_put_8 (abfd, val, ptr)
718#define bfd_h_get_8(abfd, ptr) \
719 bfd_get_8 (abfd, ptr)
720#define bfd_h_get_signed_8(abfd, ptr) \
721 bfd_get_signed_8 (abfd, ptr)
722
723#define bfd_h_put_16(abfd, val, ptr) \
724 BFD_SEND(abfd, bfd_h_putx16,(val,ptr))
725#define bfd_h_put_signed_16 \
726 bfd_h_put_16
727#define bfd_h_get_16(abfd, ptr) \
728 BFD_SEND(abfd, bfd_h_getx16,(ptr))
729#define bfd_h_get_signed_16(abfd, ptr) \
730 BFD_SEND(abfd, bfd_h_getx_signed_16, (ptr))
731
732#define bfd_h_put_32(abfd, val, ptr) \
733 BFD_SEND(abfd, bfd_h_putx32,(val,ptr))
734#define bfd_h_put_signed_32 \
735 bfd_h_put_32
736#define bfd_h_get_32(abfd, ptr) \
737 BFD_SEND(abfd, bfd_h_getx32,(ptr))
738#define bfd_h_get_signed_32(abfd, ptr) \
739 BFD_SEND(abfd, bfd_h_getx_signed_32, (ptr))
740
741#define bfd_h_put_64(abfd, val, ptr) \
742 BFD_SEND(abfd, bfd_h_putx64,(val, ptr))
743#define bfd_h_put_signed_64 \
744 bfd_h_put_64
745#define bfd_h_get_64(abfd, ptr) \
746 BFD_SEND(abfd, bfd_h_getx64,(ptr))
747#define bfd_h_get_signed_64(abfd, ptr) \
748 BFD_SEND(abfd, bfd_h_getx_signed_64, (ptr))
749
57a1867e 750typedef struct sec
fdcb0453 751{
c188b0be 752 /* The name of the section; the name isn't a copy, the pointer is
fdcb0453
KR
753 the same as that passed to bfd_make_section. */
754
755 CONST char *name;
756
c188b0be 757 /* Which section is it; 0..nth. */
fdcb0453 758
57a1867e 759 int index;
fdcb0453
KR
760
761 /* The next section in the list belonging to the BFD, or NULL. */
762
763 struct sec *next;
764
c188b0be 765 /* The field flags contains attributes of the section. Some
fdcb0453 766 flags are read in from the object file, and some are
57a1867e 767 synthesized from other information. */
fdcb0453
KR
768
769 flagword flags;
770
771#define SEC_NO_FLAGS 0x000
772
c188b0be
DM
773 /* Tells the OS to allocate space for this section when loading.
774 This is clear for a section containing debug information
fdcb0453 775 only. */
fdcb0453 776#define SEC_ALLOC 0x001
57a1867e 777
fdcb0453 778 /* Tells the OS to load the section from the file when loading.
c188b0be 779 This is clear for a .bss section. */
fdcb0453 780#define SEC_LOAD 0x002
ef758f3e 781
c188b0be
DM
782 /* The section contains data still to be relocated, so there is
783 some relocation information too. */
fdcb0453
KR
784#define SEC_RELOC 0x004
785
b2ae9efb 786#if 0 /* Obsolete ? */
fdcb0453 787#define SEC_BALIGN 0x008
b2ae9efb 788#endif
fdcb0453
KR
789
790 /* A signal to the OS that the section contains read only
791 data. */
792#define SEC_READONLY 0x010
793
794 /* The section contains code only. */
fdcb0453
KR
795#define SEC_CODE 0x020
796
797 /* The section contains data only. */
b2ae9efb 798#define SEC_DATA 0x040
fdcb0453
KR
799
800 /* The section will reside in ROM. */
fdcb0453
KR
801#define SEC_ROM 0x080
802
803 /* The section contains constructor information. This section
804 type is used by the linker to create lists of constructors and
805 destructors used by <<g++>>. When a back end sees a symbol
806 which should be used in a constructor list, it creates a new
c188b0be
DM
807 section for the type of name (e.g., <<__CTOR_LIST__>>), attaches
808 the symbol to it, and builds a relocation. To build the lists
bc750ff1 809 of constructors, all the linker has to do is catenate all the
c188b0be 810 sections called <<__CTOR_LIST__>> and relocate the data
fdcb0453
KR
811 contained within - exactly the operations it would peform on
812 standard data. */
fdcb0453
KR
813#define SEC_CONSTRUCTOR 0x100
814
815 /* The section is a constuctor, and should be placed at the
b2ae9efb 816 end of the text, data, or bss section(?). */
fdcb0453 817#define SEC_CONSTRUCTOR_TEXT 0x1100
fdcb0453 818#define SEC_CONSTRUCTOR_DATA 0x2100
fdcb0453
KR
819#define SEC_CONSTRUCTOR_BSS 0x3100
820
821 /* The section has contents - a data section could be
c188b0be 822 <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
fdcb0453 823 <<SEC_HAS_CONTENTS>> */
fdcb0453
KR
824#define SEC_HAS_CONTENTS 0x200
825
c188b0be 826 /* An instruction to the linker to not output the section
c16313f0 827 even if it has information which would normally be written. */
fdcb0453
KR
828#define SEC_NEVER_LOAD 0x400
829
c16313f0
ILT
830 /* The section is a COFF shared library section. This flag is
831 only for the linker. If this type of section appears in
832 the input file, the linker must copy it to the output file
833 without changing the vma or size. FIXME: Although this
834 was originally intended to be general, it really is COFF
835 specific (and the flag was renamed to indicate this). It
836 might be cleaner to have some more general mechanism to
837 allow the back end to control what the linker does with
838 sections. */
839#define SEC_COFF_SHARED_LIBRARY 0x800
fdcb0453
KR
840
841 /* The section is a common section (symbols may be defined
842 multiple times, the value of a symbol is the amount of
843 space it requires, and the largest symbol value is the one
b2ae9efb 844 used). Most targets have exactly one of these (which we
1fb83be6 845 translate to bfd_com_section_ptr), but ECOFF has two. */
fdcb0453
KR
846#define SEC_IS_COMMON 0x8000
847
9b3fa589
JK
848 /* The section contains only debugging information. For
849 example, this is set for ELF .debug and .stab sections.
850 strip tests this flag to see if a section can be
851 discarded. */
852#define SEC_DEBUGGING 0x10000
853
fdfe2d14
SS
854 /* The contents of this section are held in memory pointed to
855 by the contents field. This is checked by
856 bfd_get_section_contents, and the data is retrieved from
857 memory if appropriate. */
858#define SEC_IN_MEMORY 0x20000
859
b2ae9efb
KR
860 /* End of section flags. */
861
fdcb0453 862 /* The virtual memory address of the section - where it will be
b2ae9efb
KR
863 at run time. The symbols are relocated against this. The
864 user_set_vma flag is maintained by bfd; if it's not set, the
865 backend can assign addresses (for example, in <<a.out>>, where
866 the default address for <<.data>> is dependent on the specific
867 target and various flags). */
ef758f3e 868
fdcb0453 869 bfd_vma vma;
b2ae9efb 870 boolean user_set_vma;
fdcb0453
KR
871
872 /* The load address of the section - where it would be in a
c188b0be 873 rom image; really only used for writing section header
b2ae9efb 874 information. */
ef758f3e 875
fdcb0453
KR
876 bfd_vma lma;
877
fdcb0453 878 /* The size of the section in bytes, as it will be output.
c188b0be 879 contains a value even if the section has no contents (e.g., the
fdcb0453
KR
880 size of <<.bss>>). This will be filled in after relocation */
881
57a1867e 882 bfd_size_type _cooked_size;
fdcb0453 883
c188b0be 884 /* The original size on disk of the section, in bytes. Normally this
fdcb0453
KR
885 value is the same as the size, but if some relaxing has
886 been done, then this value will be bigger. */
887
57a1867e 888 bfd_size_type _raw_size;
fdcb0453
KR
889
890 /* If this section is going to be output, then this value is the
891 offset into the output section of the first byte in the input
c188b0be 892 section. E.g., if this was going to start at the 100th byte in
fdcb0453
KR
893 the output section, this value would be 100. */
894
895 bfd_vma output_offset;
896
897 /* The output section through which to map on output. */
898
899 struct sec *output_section;
900
c188b0be
DM
901 /* The alignment requirement of the section, as an exponent of 2 -
902 e.g., 3 aligns to 2^3 (or 8). */
fdcb0453
KR
903
904 unsigned int alignment_power;
905
906 /* If an input section, a pointer to a vector of relocation
907 records for the data in this section. */
908
909 struct reloc_cache_entry *relocation;
910
911 /* If an output section, a pointer to a vector of pointers to
912 relocation records for the data in this section. */
913
914 struct reloc_cache_entry **orelocation;
915
916 /* The number of relocation records in one of the above */
917
918 unsigned reloc_count;
919
920 /* Information below is back end specific - and not always used
ef758f3e 921 or updated. */
fdcb0453 922
ef758f3e 923 /* File position of section data */
fdcb0453 924
57a1867e
DM
925 file_ptr filepos;
926
fdcb0453
KR
927 /* File position of relocation info */
928
929 file_ptr rel_filepos;
930
931 /* File position of line data */
932
933 file_ptr line_filepos;
934
935 /* Pointer to data for applications */
936
937 PTR userdata;
938
fdfe2d14
SS
939 /* If the SEC_IN_MEMORY flag is set, this points to the actual
940 contents. */
941 unsigned char *contents;
fdcb0453
KR
942
943 /* Attached line number information */
944
945 alent *lineno;
57a1867e 946
fdcb0453
KR
947 /* Number of line number records */
948
949 unsigned int lineno_count;
950
951 /* When a section is being output, this value changes as more
952 linenumbers are written out */
953
954 file_ptr moving_line_filepos;
955
c188b0be 956 /* What the section number is in the target world */
fdcb0453
KR
957
958 int target_index;
959
960 PTR used_by_bfd;
961
962 /* If this is a constructor section then here is a list of the
963 relocations created to relocate items within it. */
964
965 struct relent_chain *constructor_chain;
966
967 /* The BFD which owns the section. */
968
969 bfd *owner;
970
971 boolean reloc_done;
972 /* A symbol which points at this section only */
57a1867e 973 struct symbol_cache_entry *symbol;
fdcb0453 974 struct symbol_cache_entry **symbol_ptr_ptr;
ef758f3e 975
4c3721d5
ILT
976 struct bfd_link_order *link_order_head;
977 struct bfd_link_order *link_order_tail;
fdcb0453
KR
978} asection ;
979
b2ae9efb
KR
980 /* These sections are global, and are managed by BFD. The application
981 and target back end are not permitted to change the values in
1fb83be6
KR
982 these sections. New code should use the section_ptr macros rather
983 than referring directly to the const sections. The const sections
984 may eventually vanish. */
fdcb0453
KR
985#define BFD_ABS_SECTION_NAME "*ABS*"
986#define BFD_UND_SECTION_NAME "*UND*"
987#define BFD_COM_SECTION_NAME "*COM*"
988#define BFD_IND_SECTION_NAME "*IND*"
989
990 /* the absolute section */
1fb83be6
KR
991extern const asection bfd_abs_section;
992#define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
993#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
fdcb0453 994 /* Pointer to the undefined section */
1fb83be6
KR
995extern const asection bfd_und_section;
996#define bfd_und_section_ptr ((asection *) &bfd_und_section)
997#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
fdcb0453 998 /* Pointer to the common section */
1fb83be6
KR
999extern const asection bfd_com_section;
1000#define bfd_com_section_ptr ((asection *) &bfd_com_section)
fdcb0453 1001 /* Pointer to the indirect section */
1fb83be6
KR
1002extern const asection bfd_ind_section;
1003#define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
1004#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
1005
1006extern const struct symbol_cache_entry * const bfd_abs_symbol;
1007extern const struct symbol_cache_entry * const bfd_com_symbol;
1008extern const struct symbol_cache_entry * const bfd_und_symbol;
1009extern const struct symbol_cache_entry * const bfd_ind_symbol;
fdcb0453
KR
1010#define bfd_get_section_size_before_reloc(section) \
1011 (section->reloc_done ? (abort(),1): (section)->_raw_size)
1012#define bfd_get_section_size_after_reloc(section) \
1013 ((section->reloc_done) ? (section)->_cooked_size: (abort(),1))
1014asection *
1015bfd_get_section_by_name PARAMS ((bfd *abfd, CONST char *name));
1016
1017asection *
c188b0be 1018bfd_make_section_old_way PARAMS ((bfd *abfd, CONST char *name));
fdcb0453 1019
9b3fa589 1020asection *
c188b0be 1021bfd_make_section_anyway PARAMS ((bfd *abfd, CONST char *name));
9b3fa589
JK
1022
1023asection *
fdcb0453
KR
1024bfd_make_section PARAMS ((bfd *, CONST char *name));
1025
1026boolean
c188b0be 1027bfd_set_section_flags PARAMS ((bfd *abfd, asection *sec, flagword flags));
fdcb0453
KR
1028
1029void
1030bfd_map_over_sections PARAMS ((bfd *abfd,
1031 void (*func)(bfd *abfd,
1032 asection *sect,
1033 PTR obj),
1034 PTR obj));
1035
1036boolean
c188b0be 1037bfd_set_section_size PARAMS ((bfd *abfd, asection *sec, bfd_size_type val));
fdcb0453
KR
1038
1039boolean
1040bfd_set_section_contents
57a1867e 1041 PARAMS ((bfd *abfd,
fdcb0453
KR
1042 asection *section,
1043 PTR data,
1044 file_ptr offset,
1045 bfd_size_type count));
1046
1047boolean
57a1867e 1048bfd_get_section_contents
fdcb0453
KR
1049 PARAMS ((bfd *abfd, asection *section, PTR location,
1050 file_ptr offset, bfd_size_type count));
1051
5a66538b
KR
1052boolean
1053bfd_copy_private_section_data PARAMS ((bfd *ibfd, asection *isec, bfd *obfd, asection *osec));
1054
1055#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
1056 BFD_SEND (ibfd, _bfd_copy_private_section_data, \
1057 (ibfd, isection, obfd, osection))
fdcb0453
KR
1058enum bfd_architecture
1059{
1060 bfd_arch_unknown, /* File arch not known */
1061 bfd_arch_obscure, /* Arch known, not one of these */
1062 bfd_arch_m68k, /* Motorola 68xxx */
1063 bfd_arch_vax, /* DEC Vax */
1064 bfd_arch_i960, /* Intel 960 */
1065 /* The order of the following is important.
1066 lower number indicates a machine type that
1067 only accepts a subset of the instructions
1068 available to machines with higher numbers.
1069 The exception is the "ca", which is
1070 incompatible with all other machines except
1071 "core". */
1072
1073#define bfd_mach_i960_core 1
1074#define bfd_mach_i960_ka_sa 2
1075#define bfd_mach_i960_kb_sb 3
1076#define bfd_mach_i960_mc 4
1077#define bfd_mach_i960_xa 5
1078#define bfd_mach_i960_ca 6
b5b056fc
KR
1079 /* start-sanitize-i960xl */
1080#define bfd_mach_i960_xl 7
1081 /* end-sanitize-i960xl */
fdcb0453
KR
1082
1083 bfd_arch_a29k, /* AMD 29000 */
1084 bfd_arch_sparc, /* SPARC */
e9614321
SC
1085#define bfd_mach_sparc 1
1086#define bfd_mach_sparc64 2
fdcb0453
KR
1087 bfd_arch_mips, /* MIPS Rxxxx */
1088 bfd_arch_i386, /* Intel 386 */
1089 bfd_arch_we32k, /* AT&T WE32xxx */
1090 bfd_arch_tahoe, /* CCI/Harris Tahoe */
1091 bfd_arch_i860, /* Intel 860 */
1092 bfd_arch_romp, /* IBM ROMP PC/RT */
1093 bfd_arch_alliant, /* Alliant */
1094 bfd_arch_convex, /* Convex */
1095 bfd_arch_m88k, /* Motorola 88xxx */
1096 bfd_arch_pyramid, /* Pyramid Technology */
1097 bfd_arch_h8300, /* Hitachi H8/300 */
1098#define bfd_mach_h8300 1
1099#define bfd_mach_h8300h 2
d1ad85a6 1100 bfd_arch_powerpc, /* PowerPC */
fdcb0453
KR
1101 bfd_arch_rs6000, /* IBM RS/6000 */
1102 bfd_arch_hppa, /* HP PA RISC */
1103 bfd_arch_z8k, /* Zilog Z8000 */
1104#define bfd_mach_z8001 1
1105#define bfd_mach_z8002 2
1106 bfd_arch_h8500, /* Hitachi H8/500 */
1107 bfd_arch_sh, /* Hitachi SH */
1108 bfd_arch_alpha, /* Dec Alpha */
d80ebaac 1109 bfd_arch_arm, /* Advanced Risc Machines ARM */
1fb83be6 1110 bfd_arch_ns32k, /* National Semiconductors ns32000 */
d468a149 1111 bfd_arch_w65, /* WDC 65816 */
ca43dedd 1112 /* start-sanitize-rce */
05cedcf6 1113 bfd_arch_rce, /* Motorola RCE */
ca43dedd 1114 /* end-sanitize-rce */
05cedcf6
DE
1115 /* start-sanitize-arc */
1116 bfd_arch_arc, /* Argonaut RISC Core */
c932fd96
DE
1117#define bfd_mach_arc_base 0
1118#define bfd_mach_arc_host 1
1119#define bfd_mach_arc_graphics 2
1120#define bfd_mach_arc_audio 3
05cedcf6 1121 /* end-sanitize-arc */
fdcb0453
KR
1122 bfd_arch_last
1123 };
1124
1125typedef struct bfd_arch_info
1126{
1127 int bits_per_word;
1128 int bits_per_address;
1129 int bits_per_byte;
1130 enum bfd_architecture arch;
1131 long mach;
1132 char *arch_name;
1133 CONST char *printable_name;
1134 unsigned int section_align_power;
1135 /* true if this is the default machine for the architecture */
1136 boolean the_default;
1137 CONST struct bfd_arch_info * (*compatible)
1138 PARAMS ((CONST struct bfd_arch_info *a,
1139 CONST struct bfd_arch_info *b));
1140
1141 boolean (*scan) PARAMS ((CONST struct bfd_arch_info *, CONST char *));
1142 /* How to disassemble an instruction, producing a printable
1143 representation on a specified stdio stream. This isn't
1144 defined for most processors at present, because of the size
1145 of the additional tables it would drag in, and because gdb
1146 wants to use a different interface. */
1147 unsigned int (*disassemble) PARAMS ((bfd_vma addr, CONST char *data,
1148 PTR stream));
1149
1150 struct bfd_arch_info *next;
1151} bfd_arch_info_type;
1152CONST char *
1153bfd_printable_name PARAMS ((bfd *abfd));
1154
1155bfd_arch_info_type *
c188b0be 1156bfd_scan_arch PARAMS ((CONST char *string));
fdcb0453
KR
1157
1158CONST bfd_arch_info_type *
1159bfd_arch_get_compatible PARAMS ((
1160 CONST bfd *abfd,
1161 CONST bfd *bbfd));
1162
1163void
c188b0be 1164bfd_set_arch_info PARAMS ((bfd *abfd, bfd_arch_info_type *arg));
fdcb0453
KR
1165
1166enum bfd_architecture
1167bfd_get_arch PARAMS ((bfd *abfd));
1168
1169unsigned long
1170bfd_get_mach PARAMS ((bfd *abfd));
1171
1172unsigned int
1173bfd_arch_bits_per_byte PARAMS ((bfd *abfd));
1174
1175unsigned int
1176bfd_arch_bits_per_address PARAMS ((bfd *abfd));
1177
1178bfd_arch_info_type *
c188b0be 1179bfd_get_arch_info PARAMS ((bfd *abfd));
fdcb0453
KR
1180
1181bfd_arch_info_type *
1182bfd_lookup_arch
1183 PARAMS ((enum bfd_architecture
1184 arch,
1185 long machine));
1186
c188b0be 1187CONST char *
fdcb0453
KR
1188bfd_printable_arch_mach
1189 PARAMS ((enum bfd_architecture arch, unsigned long machine));
1190
57a1867e 1191typedef enum bfd_reloc_status
fdcb0453
KR
1192{
1193 /* No errors detected */
1194 bfd_reloc_ok,
1195
1196 /* The relocation was performed, but there was an overflow. */
1197 bfd_reloc_overflow,
1198
1199 /* The address to relocate was not within the section supplied. */
1200 bfd_reloc_outofrange,
1201
1202 /* Used by special functions */
1203 bfd_reloc_continue,
1204
c188b0be 1205 /* Unsupported relocation size requested. */
fdcb0453
KR
1206 bfd_reloc_notsupported,
1207
c188b0be 1208 /* Unused */
fdcb0453
KR
1209 bfd_reloc_other,
1210
1211 /* The symbol to relocate against was undefined. */
1212 bfd_reloc_undefined,
1213
1214 /* The relocation was performed, but may not be ok - presently
1215 generated only when linking i960 coff files with i960 b.out
4c3721d5
ILT
1216 symbols. If this type is returned, the error_message argument
1217 to bfd_perform_relocation will be set. */
fdcb0453
KR
1218 bfd_reloc_dangerous
1219 }
1220 bfd_reloc_status_type;
1221
1222
57a1867e 1223typedef struct reloc_cache_entry
fdcb0453
KR
1224{
1225 /* A pointer into the canonical table of pointers */
1226 struct symbol_cache_entry **sym_ptr_ptr;
1227
1228 /* offset in section */
1229 bfd_size_type address;
1230
1231 /* addend for relocation value */
57a1867e 1232 bfd_vma addend;
fdcb0453
KR
1233
1234 /* Pointer to how to perform the required relocation */
5dc8db48 1235 reloc_howto_type *howto;
fdcb0453
KR
1236
1237} arelent;
66a277ab
ILT
1238enum complain_overflow
1239{
1240 /* Do not complain on overflow. */
1241 complain_overflow_dont,
1242
1243 /* Complain if the bitfield overflows, whether it is considered
1244 as signed or unsigned. */
1245 complain_overflow_bitfield,
1246
1247 /* Complain if the value overflows when considered as signed
1248 number. */
1249 complain_overflow_signed,
1250
1251 /* Complain if the value overflows when considered as an
1252 unsigned number. */
1253 complain_overflow_unsigned
1254};
fdcb0453 1255
1fb83be6 1256struct reloc_howto_struct
57a1867e 1257{
fdcb0453 1258 /* The type field has mainly a documetary use - the back end can
c188b0be
DM
1259 do what it wants with it, though normally the back end's
1260 external idea of what a reloc number is stored
1261 in this field. For example, a PC relative word relocation
1262 in a coff environment has the type 023 - because that's
fdcb0453
KR
1263 what the outside world calls a R_PCRWORD reloc. */
1264 unsigned int type;
1265
1266 /* The value the final relocation is shifted right by. This drops
1267 unwanted data from the relocation. */
1268 unsigned int rightshift;
1269
9e461dac 1270 /* The size of the item to be relocated. This is *not* a
4c3721d5
ILT
1271 power-of-two measure. To get the number of bytes operated
1272 on by a type of relocation, use bfd_get_reloc_size. */
fdcb0453
KR
1273 int size;
1274
66a277ab
ILT
1275 /* The number of bits in the item to be relocated. This is used
1276 when doing overflow checking. */
fdcb0453
KR
1277 unsigned int bitsize;
1278
1279 /* Notes that the relocation is relative to the location in the
1280 data section of the addend. The relocation function will
1281 subtract from the relocation value the address of the location
1282 being relocated. */
1283 boolean pc_relative;
1284
66a277ab
ILT
1285 /* The bit position of the reloc value in the destination.
1286 The relocated value is left shifted by this amount. */
fdcb0453
KR
1287 unsigned int bitpos;
1288
66a277ab
ILT
1289 /* What type of overflow error should be checked for when
1290 relocating. */
1291 enum complain_overflow complain_on_overflow;
fdcb0453
KR
1292
1293 /* If this field is non null, then the supplied function is
1294 called rather than the normal function. This allows really
1295 strange relocation methods to be accomodated (e.g., i960 callj
1296 instructions). */
57a1867e 1297 bfd_reloc_status_type (*special_function)
fdcb0453
KR
1298 PARAMS ((bfd *abfd,
1299 arelent *reloc_entry,
1300 struct symbol_cache_entry *symbol,
1301 PTR data,
57a1867e 1302 asection *input_section,
4c3721d5
ILT
1303 bfd *output_bfd,
1304 char **error_message));
fdcb0453
KR
1305
1306 /* The textual name of the relocation type. */
1307 char *name;
1308
1309 /* When performing a partial link, some formats must modify the
1310 relocations rather than the data - this flag signals this.*/
1311 boolean partial_inplace;
1312
c188b0be 1313 /* The src_mask selects which parts of the read in data
fdcb0453
KR
1314 are to be used in the relocation sum. E.g., if this was an 8 bit
1315 bit of data which we read and relocated, this would be
1316 0x000000ff. When we have relocs which have an addend, such as
1317 sun4 extended relocs, the value in the offset part of a
1318 relocating field is garbage so we never use it. In this case
1319 the mask would be 0x00000000. */
1320 bfd_vma src_mask;
1321
c188b0be 1322 /* The dst_mask selects which parts of the instruction are replaced
fdcb0453
KR
1323 into the instruction. In most cases src_mask == dst_mask,
1324 except in the above special case, where dst_mask would be
1325 0x000000ff, and src_mask would be 0x00000000. */
57a1867e 1326 bfd_vma dst_mask;
fdcb0453
KR
1327
1328 /* When some formats create PC relative instructions, they leave
1329 the value of the pc of the place being relocated in the offset
1330 slot of the instruction, so that a PC relative relocation can
1331 be made just by adding in an ordinary offset (e.g., sun3 a.out).
1332 Some formats leave the displacement part of an instruction
c188b0be 1333 empty (e.g., m88k bcs); this flag signals the fact.*/
fdcb0453
KR
1334 boolean pcrel_offset;
1335
1fb83be6 1336};
66a277ab 1337#define HOWTO(C, R,S,B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
b5b056fc 1338 {(unsigned)C,R,S,B, P, BI, O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
66a277ab 1339#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,complain_overflow_dont,FUNCTION, NAME,false,0,0,IN)
fdcb0453
KR
1340
1341#define HOWTO_PREPARE(relocation, symbol) \
1342 { \
1343 if (symbol != (asymbol *)NULL) { \
1344 if (bfd_is_com_section (symbol->section)) { \
1345 relocation = 0; \
1346 } \
1347 else { \
1348 relocation = symbol->value; \
1349 } \
1350 } \
57a1867e 1351}
4c3721d5 1352int
82b1edf7 1353bfd_get_reloc_size PARAMS ((reloc_howto_type *));
4c3721d5 1354
fdcb0453
KR
1355typedef struct relent_chain {
1356 arelent relent;
1357 struct relent_chain *next;
1358} arelent_chain;
1359bfd_reloc_status_type
1360
1361bfd_perform_relocation
c188b0be 1362 PARAMS ((bfd *abfd,
fdcb0453
KR
1363 arelent *reloc_entry,
1364 PTR data,
1365 asection *input_section,
4c3721d5
ILT
1366 bfd *output_bfd,
1367 char **error_message));
fdcb0453 1368
fca2b81b
KR
1369bfd_reloc_status_type
1370
1371bfd_install_relocation
1372 PARAMS ((bfd *abfd,
1373 arelent *reloc_entry,
1374 PTR data, bfd_vma data_start,
1375 asection *input_section,
1376 char **error_message));
1377
0443af31
KR
1378enum bfd_reloc_code_real {
1379 _dummy_first_bfd_reloc_code_real,
1380
1381
1382/* Basic absolute relocations of N bits. */
fa5ba217 1383 BFD_RELOC_64,
fa5ba217 1384 BFD_RELOC_32,
e9c6595d 1385 BFD_RELOC_26,
57a1867e 1386 BFD_RELOC_16,
7e7fb4a8 1387 BFD_RELOC_14,
fdcb0453 1388 BFD_RELOC_8,
9e461dac 1389
0443af31
KR
1390/* PC-relative relocations. Sometimes these are relative to the address
1391of the relocation itself; sometimes they are relative to the start of
1392the section containing the relocation. It depends on the specific target.
1393
1394The 24-bit relocation is used in some Intel 960 configurations. */
9e461dac
JK
1395 BFD_RELOC_64_PCREL,
1396 BFD_RELOC_32_PCREL,
0443af31 1397 BFD_RELOC_24_PCREL,
9e461dac 1398 BFD_RELOC_16_PCREL,
fca2b81b 1399 BFD_RELOC_12_PCREL,
fdcb0453 1400 BFD_RELOC_8_PCREL,
9e461dac 1401
3b1f83ad
JL
1402/* For ELF. */
1403 BFD_RELOC_32_GOT_PCREL,
1404 BFD_RELOC_16_GOT_PCREL,
1405 BFD_RELOC_8_GOT_PCREL,
1406 BFD_RELOC_32_GOTOFF,
1407 BFD_RELOC_16_GOTOFF,
1408 BFD_RELOC_8_GOTOFF,
1409 BFD_RELOC_32_PLT_PCREL,
1410 BFD_RELOC_16_PLT_PCREL,
1411 BFD_RELOC_8_PLT_PCREL,
1412 BFD_RELOC_32_PLTOFF,
1413 BFD_RELOC_16_PLTOFF,
1414 BFD_RELOC_8_PLTOFF,
1415
1416/* Relocations used by 68K ELF. */
1417 BFD_RELOC_68K_GLOB_DAT,
1418 BFD_RELOC_68K_JMP_SLOT,
1419 BFD_RELOC_68K_RELATIVE,
1420
0443af31 1421/* Linkage-table relative. */
9e461dac
JK
1422 BFD_RELOC_32_BASEREL,
1423 BFD_RELOC_16_BASEREL,
1424 BFD_RELOC_8_BASEREL,
815179af 1425 BFD_RELOC_RVA,
fdcb0453 1426
0443af31 1427/* Absolute 8-bit relocation, but used to form an address like 0xFFnn. */
9e461dac
JK
1428 BFD_RELOC_8_FFnn,
1429
fca2b81b
KR
1430/* These PC-relative relocations are stored as word displacements --
1431i.e., byte displacements shifted right two bits. The 30-bit word
1432displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
1433SPARC. (SPARC tools generally refer to this as <<WDISP30>>.) The
1434signed 16-bit displacement is used on the MIPS, and the 23-bit
1435displacement is used on the Alpha. */
9e461dac 1436 BFD_RELOC_32_PCREL_S2,
7e7fb4a8 1437 BFD_RELOC_16_PCREL_S2,
7e7fb4a8 1438 BFD_RELOC_23_PCREL_S2,
9e461dac 1439
0443af31
KR
1440/* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
1441the target word. These are used on the SPARC. */
fdcb0453 1442 BFD_RELOC_HI22,
fdcb0453
KR
1443 BFD_RELOC_LO10,
1444
0443af31
KR
1445/* For systems that allocate a Global Pointer register, these are
1446displacements off that register. These relocation types are
1447handled specially, because the value the register will have is
1448decided relatively late. */
7e7fb4a8
KR
1449 BFD_RELOC_GPREL16,
1450 BFD_RELOC_GPREL32,
1451
0443af31 1452/* Reloc types used for i960/b.out. */
fdcb0453
KR
1453 BFD_RELOC_I960_CALLJ,
1454
0443af31
KR
1455/* SPARC ELF relocations. There is probably some overlap with other
1456relocation types already defined. */
1457 BFD_RELOC_NONE,
fdcb0453
KR
1458 BFD_RELOC_SPARC_WDISP22,
1459 BFD_RELOC_SPARC22,
1460 BFD_RELOC_SPARC13,
fdcb0453
KR
1461 BFD_RELOC_SPARC_GOT10,
1462 BFD_RELOC_SPARC_GOT13,
1463 BFD_RELOC_SPARC_GOT22,
1464 BFD_RELOC_SPARC_PC10,
1465 BFD_RELOC_SPARC_PC22,
1466 BFD_RELOC_SPARC_WPLT30,
1467 BFD_RELOC_SPARC_COPY,
1468 BFD_RELOC_SPARC_GLOB_DAT,
1469 BFD_RELOC_SPARC_JMP_SLOT,
1470 BFD_RELOC_SPARC_RELATIVE,
1471 BFD_RELOC_SPARC_UA32,
1472
0443af31 1473/* I think these are specific to SPARC a.out (e.g., Sun 4). */
5284a822 1474 BFD_RELOC_SPARC_BASE13,
fdcb0453
KR
1475 BFD_RELOC_SPARC_BASE22,
1476
0443af31
KR
1477/* Some relocations we're using for SPARC V9 -- subject to change. */
1478#define BFD_RELOC_SPARC_64 BFD_RELOC_64
fa5ba217
KR
1479 BFD_RELOC_SPARC_10,
1480 BFD_RELOC_SPARC_11,
fa5ba217
KR
1481 BFD_RELOC_SPARC_OLO10,
1482 BFD_RELOC_SPARC_HH22,
1483 BFD_RELOC_SPARC_HM10,
1484 BFD_RELOC_SPARC_LM22,
1485 BFD_RELOC_SPARC_PC_HH22,
1486 BFD_RELOC_SPARC_PC_HM10,
1487 BFD_RELOC_SPARC_PC_LM22,
1488 BFD_RELOC_SPARC_WDISP16,
5284a822 1489 BFD_RELOC_SPARC_WDISP19,
fa5ba217
KR
1490 BFD_RELOC_SPARC_GLOB_JMP,
1491 BFD_RELOC_SPARC_LO7,
5284a822 1492
0443af31
KR
1493/* Alpha ECOFF relocations. Some of these treat the symbol or "addend"
1494in some special way.
1495For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
1496writing; when reading, it will be the absolute section symbol. The
1497addend is the displacement in bytes of the "lda" instruction from
1498the "ldah" instruction (which is at the address of this reloc). */
7e7fb4a8 1499 BFD_RELOC_ALPHA_GPDISP_HI16,
0443af31
KR
1500
1501/* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
1502with GPDISP_HI16 relocs. The addend is ignored when writing the
1503relocations out, and is filled in with the file's GP value on
1504reading, for convenience. */
7e7fb4a8
KR
1505 BFD_RELOC_ALPHA_GPDISP_LO16,
1506
0443af31
KR
1507/* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
1508the assembler turns it into a LDQ instruction to load the address of
1509the symbol, and then fills in a register in the real instruction.
1510
1511The LITERAL reloc, at the LDQ instruction, refers to the .lita
1512section symbol. The addend is ignored when writing, but is filled
1513in with the file's GP value on reading, for convenience, as with the
1514GPDISP_LO16 reloc.
1515
1516The LITUSE reloc, on the instruction using the loaded address, gives
1517information to the linker that it might be able to use to optimize
1518away some literal section references. The symbol is ignored (read
1519as the absolute section symbol), and the "addend" indicates the type
1520of instruction using the register:
15211 - "memory" fmt insn
15222 - byte-manipulation (byte offset reg)
15233 - jsr (target of branch)
1524
1525The GNU linker currently doesn't do any of this optimizing. */
7e7fb4a8
KR
1526 BFD_RELOC_ALPHA_LITERAL,
1527 BFD_RELOC_ALPHA_LITUSE,
1528
0443af31
KR
1529/* The HINT relocation indicates a value that should be filled into the
1530"hint" field of a jmp/jsr/ret instruction, for possible branch-
1531prediction logic which may be provided on some processors. */
7e7fb4a8
KR
1532 BFD_RELOC_ALPHA_HINT,
1533
0443af31
KR
1534/* Bits 27..2 of the relocation address shifted right 2 bits;
1535simple reloc otherwise. */
fdcb0453
KR
1536 BFD_RELOC_MIPS_JMP,
1537
0443af31 1538/* High 16 bits of 32-bit value; simple reloc. */
fdcb0453 1539 BFD_RELOC_HI16,
0443af31
KR
1540
1541/* High 16 bits of 32-bit value but the low 16 bits will be sign
1542extended and added to form the final result. If the low 16
1543bits form a negative number, we need to add one to the high value
1544to compensate for the borrow when the low bits are added. */
fdcb0453 1545 BFD_RELOC_HI16_S,
0443af31
KR
1546
1547/* Low 16 bits. */
fdcb0453 1548 BFD_RELOC_LO16,
0443af31
KR
1549
1550/* Like BFD_RELOC_HI16_S, but PC relative. */
7efb1850 1551 BFD_RELOC_PCREL_HI16_S,
0443af31
KR
1552
1553/* Like BFD_RELOC_LO16, but PC relative. */
7efb1850 1554 BFD_RELOC_PCREL_LO16,
fdcb0453 1555
0443af31 1556/* Relocation relative to the global pointer. */
7e7fb4a8 1557#define BFD_RELOC_MIPS_GPREL BFD_RELOC_GPREL16
fdcb0453 1558
0443af31 1559/* Relocation against a MIPS literal section. */
0a197a96
JG
1560 BFD_RELOC_MIPS_LITERAL,
1561
0443af31 1562/* MIPS ELF relocations. */
0a197a96
JG
1563 BFD_RELOC_MIPS_GOT16,
1564 BFD_RELOC_MIPS_CALL16,
7e7fb4a8 1565#define BFD_RELOC_MIPS_GPREL32 BFD_RELOC_GPREL32
0a197a96 1566
0443af31 1567/* i386/elf relocations */
b66b07a2
KR
1568 BFD_RELOC_386_GOT32,
1569 BFD_RELOC_386_PLT32,
1570 BFD_RELOC_386_COPY,
1571 BFD_RELOC_386_GLOB_DAT,
1572 BFD_RELOC_386_JUMP_SLOT,
1573 BFD_RELOC_386_RELATIVE,
1574 BFD_RELOC_386_GOTOFF,
1575 BFD_RELOC_386_GOTPC,
1576
0443af31 1577/* ns32k relocations */
1fb83be6
KR
1578 BFD_RELOC_NS32K_IMM_8,
1579 BFD_RELOC_NS32K_IMM_16,
1580 BFD_RELOC_NS32K_IMM_32,
1581 BFD_RELOC_NS32K_IMM_8_PCREL,
1582 BFD_RELOC_NS32K_IMM_16_PCREL,
1583 BFD_RELOC_NS32K_IMM_32_PCREL,
1584 BFD_RELOC_NS32K_DISP_8,
1585 BFD_RELOC_NS32K_DISP_16,
1586 BFD_RELOC_NS32K_DISP_32,
1587 BFD_RELOC_NS32K_DISP_8_PCREL,
1588 BFD_RELOC_NS32K_DISP_16_PCREL,
1589 BFD_RELOC_NS32K_DISP_32_PCREL,
1590
0443af31
KR
1591/* PowerPC/POWER (RS/6000) relocs.
159226 bit relative branch. Low two bits must be zero. High 24
1593bits installed in bits 6 through 29 of instruction. */
d1ad85a6 1594 BFD_RELOC_PPC_B26,
0443af31
KR
1595
1596/* 26 bit absolute branch, like BFD_RELOC_PPC_B26 but absolute. */
d1ad85a6 1597 BFD_RELOC_PPC_BA26,
0443af31
KR
1598
1599/* 16 bit TOC relative reference. */
d1ad85a6
DM
1600 BFD_RELOC_PPC_TOC16,
1601
0443af31
KR
1602/* The type of reloc used to build a contructor table - at the moment
1603probably a 32 bit wide absolute relocation, but the target can choose.
1604It generally does map to one of the other relocation types. */
1605 BFD_RELOC_CTOR,
d80ebaac
ILT
1606
1607/* ARM 26 bit pc-relative branch. The lowest two bits must be zero and are
1608not stored in the instruction. */
1609 BFD_RELOC_ARM_PCREL_BRANCH,
1610
1611/* These relocs are only used within the ARM assembler. They are not
1612(at present) written to any object files. */
1613 BFD_RELOC_ARM_IMMEDIATE,
1614 BFD_RELOC_ARM_OFFSET_IMM,
1615 BFD_RELOC_ARM_SHIFT_IMM,
1616 BFD_RELOC_ARM_SWI,
1617 BFD_RELOC_ARM_MULTI,
1618 BFD_RELOC_ARM_CP_OFF_IMM,
3b1f83ad
JL
1619 BFD_RELOC_ARM_ADR_IMM,
1620 BFD_RELOC_ARM_LDR_IMM,
1621 BFD_RELOC_ARM_LITERAL,
1622 BFD_RELOC_ARM_IN_POOL,
05cedcf6
DE
1623/* start-sanitize-arc */
1624
1625/* Argonaut RISC Core (ARC) relocs.
1626ARC 22 bit pc-relative branch. The lowest two bits must be zero and are
3b1f83ad
JL
1627not stored in the instruction. The high 20 bits are installed in bits 26
1628through 7 of the instruction. */
05cedcf6 1629 BFD_RELOC_ARC_B22_PCREL,
3b1f83ad
JL
1630
1631/* ARC 26 bit absolute branch. The lowest two bits must be zero and are not
1632stored in the instruction. The high 24 bits are installed in bits 23
1633through 0. */
1634 BFD_RELOC_ARC_B26,
05cedcf6 1635/* end-sanitize-arc */
0443af31
KR
1636 BFD_RELOC_UNUSED };
1637typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
5dc8db48 1638reloc_howto_type *
fdcb0453
KR
1639
1640bfd_reloc_type_lookup PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
1641
0443af31
KR
1642const char *
1643bfd_get_reloc_code_name PARAMS ((bfd_reloc_code_real_type code));
1644
ef758f3e 1645
57a1867e 1646typedef struct symbol_cache_entry
fdcb0453
KR
1647{
1648 /* A pointer to the BFD which owns the symbol. This information
1649 is necessary so that a back end can work out what additional
1650 information (invisible to the application writer) is carried
1651 with the symbol.
1652
1653 This field is *almost* redundant, since you can use section->owner
1654 instead, except that some symbols point to the global sections
1655 bfd_{abs,com,und}_section. This could be fixed by making
1656 these globals be per-bfd (or per-target-flavor). FIXME. */
1657
1658 struct _bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */
1659
c188b0be 1660 /* The text of the symbol. The name is left alone, and not copied; the
fdcb0453
KR
1661 application may not alter it. */
1662 CONST char *name;
1663
1664 /* The value of the symbol. This really should be a union of a
1665 numeric value with a pointer, since some flags indicate that
1666 a pointer to another symbol is stored here. */
1667 symvalue value;
1668
1669 /* Attributes of a symbol: */
1670
1671#define BSF_NO_FLAGS 0x00
1672
1673 /* The symbol has local scope; <<static>> in <<C>>. The value
1674 is the offset into the section of the data. */
1675#define BSF_LOCAL 0x01
1676
1677 /* The symbol has global scope; initialized data in <<C>>. The
1678 value is the offset into the section of the data. */
1679#define BSF_GLOBAL 0x02
1680
c188b0be 1681 /* The symbol has global scope and is exported. The value is
fdcb0453 1682 the offset into the section of the data. */
ef758f3e 1683#define BSF_EXPORT BSF_GLOBAL /* no real difference */
fdcb0453
KR
1684
1685 /* A normal C symbol would be one of:
1686 <<BSF_LOCAL>>, <<BSF_FORT_COMM>>, <<BSF_UNDEFINED>> or
ef758f3e 1687 <<BSF_GLOBAL>> */
fdcb0453
KR
1688
1689 /* The symbol is a debugging record. The value has an arbitary
1690 meaning. */
1691#define BSF_DEBUGGING 0x08
1692
1693 /* The symbol denotes a function entry point. Used in ELF,
1694 perhaps others someday. */
1695#define BSF_FUNCTION 0x10
1696
1697 /* Used by the linker. */
1698#define BSF_KEEP 0x20
1699#define BSF_KEEP_G 0x40
1700
b66b07a2
KR
1701 /* A weak global symbol, overridable without warnings by
1702 a regular global symbol of the same name. */
fdcb0453
KR
1703#define BSF_WEAK 0x80
1704
1705 /* This symbol was created to point to a section, e.g. ELF's
1706 STT_SECTION symbols. */
1707#define BSF_SECTION_SYM 0x100
1708
1709 /* The symbol used to be a common symbol, but now it is
1710 allocated. */
1711#define BSF_OLD_COMMON 0x200
1712
1713 /* The default value for common data. */
1714#define BFD_FORT_COMM_DEFAULT_VALUE 0
1715
1716 /* In some files the type of a symbol sometimes alters its
1717 location in an output file - ie in coff a <<ISFCN>> symbol
1718 which is also <<C_EXT>> symbol appears where it was
1719 declared and not at the end of a section. This bit is set
1720 by the target BFD part to convey this information. */
1721
1722#define BSF_NOT_AT_END 0x400
1723
1724 /* Signal that the symbol is the label of constructor section. */
1725#define BSF_CONSTRUCTOR 0x800
1726
1727 /* Signal that the symbol is a warning symbol. If the symbol
1728 is a warning symbol, then the value field (I know this is
1729 tacky) will point to the asymbol which when referenced will
1730 cause the warning. */
1731#define BSF_WARNING 0x1000
1732
1733 /* Signal that the symbol is indirect. The value of the symbol
1734 is a pointer to an undefined asymbol which contains the
1735 name to use instead. */
1736#define BSF_INDIRECT 0x2000
1737
1738 /* BSF_FILE marks symbols that contain a file name. This is used
1739 for ELF STT_FILE symbols. */
1740#define BSF_FILE 0x4000
1741
0ee75d02
ILT
1742 /* Symbol is from dynamic linking information. */
1743#define BSF_DYNAMIC 0x8000
1744
fdcb0453
KR
1745 flagword flags;
1746
57a1867e 1747 /* A pointer to the section to which this symbol is
fdcb0453 1748 relative. This will always be non NULL, there are special
fca2b81b 1749 sections for undefined and absolute symbols. */
fdcb0453
KR
1750 struct sec *section;
1751
fca2b81b
KR
1752 /* Back end special data. */
1753 union
1754 {
1755 PTR p;
1756 bfd_vma i;
1757 } udata;
fdcb0453
KR
1758
1759} asymbol;
326e32d7
ILT
1760#define bfd_get_symtab_upper_bound(abfd) \
1761 BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
5a66538b
KR
1762boolean
1763bfd_is_local_label PARAMS ((bfd *abfd, asymbol *sym));
1764
1765#define bfd_is_local_label(abfd, sym) \
1766 BFD_SEND (abfd, _bfd_is_local_label,(abfd, sym))
fdcb0453
KR
1767#define bfd_canonicalize_symtab(abfd, location) \
1768 BFD_SEND (abfd, _bfd_canonicalize_symtab,\
1769 (abfd, location))
1770boolean
c188b0be 1771bfd_set_symtab PARAMS ((bfd *abfd, asymbol **location, unsigned int count));
fdcb0453
KR
1772
1773void
1774bfd_print_symbol_vandf PARAMS ((PTR file, asymbol *symbol));
1775
1776#define bfd_make_empty_symbol(abfd) \
1777 BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
1778#define bfd_make_debug_symbol(abfd,ptr,size) \
1779 BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
1780int
1781bfd_decode_symclass PARAMS ((asymbol *symbol));
1782
1783void
1784bfd_symbol_info PARAMS ((asymbol *symbol, symbol_info *ret));
1785
6167a840
JL
1786boolean
1787bfd_copy_private_symbol_data PARAMS ((bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym));
1788
1789#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
1790 BFD_SEND (ibfd, _bfd_copy_private_symbol_data, \
1791 (ibfd, isymbol, obfd, osymbol))
fdcb0453
KR
1792struct _bfd
1793{
1794 /* The filename the application opened the BFD with. */
1795 CONST char *filename;
1796
1797 /* A pointer to the target jump table. */
2f3508ad 1798 const struct bfd_target *xvec;
fdcb0453
KR
1799
1800 /* To avoid dragging too many header files into every file that
1801 includes `<<bfd.h>>', IOSTREAM has been declared as a "char
1802 *", and MTIME as a "long". Their correct types, to which they
1803 are cast when used, are "FILE *" and "time_t". The iostream
1804 is the result of an fopen on the filename. */
1805 char *iostream;
1806
0a197a96
JG
1807 /* Is the file descriptor being cached? That is, can it be closed as
1808 needed, and re-opened when accessed later? */
fdcb0453
KR
1809
1810 boolean cacheable;
1811
1812 /* Marks whether there was a default target specified when the
c188b0be
DM
1813 BFD was opened. This is used to select which matching algorithm
1814 to use to choose the back end. */
fdcb0453
KR
1815
1816 boolean target_defaulted;
1817
1818 /* The caching routines use these to maintain a
1819 least-recently-used list of BFDs */
1820
1821 struct _bfd *lru_prev, *lru_next;
1822
1823 /* When a file is closed by the caching routines, BFD retains
c188b0be 1824 state information on the file here: */
fdcb0453
KR
1825
1826 file_ptr where;
1827
c188b0be 1828 /* and here: (``once'' means at least once) */
fdcb0453
KR
1829
1830 boolean opened_once;
1831
1832 /* Set if we have a locally maintained mtime value, rather than
1833 getting it from the file each time: */
1834
1835 boolean mtime_set;
1836
1837 /* File modified time, if mtime_set is true: */
1838
1839 long mtime;
1840
1841 /* Reserved for an unimplemented file locking extension.*/
1842
1843 int ifd;
1844
c188b0be 1845 /* The format which belongs to the BFD. (object, core, etc.) */
fdcb0453
KR
1846
1847 bfd_format format;
1848
1849 /* The direction the BFD was opened with*/
1850
1851 enum bfd_direction {no_direction = 0,
1852 read_direction = 1,
1853 write_direction = 2,
1854 both_direction = 3} direction;
1855
1856 /* Format_specific flags*/
1857
1858 flagword flags;
1859
1860 /* Currently my_archive is tested before adding origin to
1861 anything. I believe that this can become always an add of
1862 origin, with origin set to 0 for non archive files. */
1863
1864 file_ptr origin;
1865
1866 /* Remember when output has begun, to stop strange things
c188b0be 1867 from happening. */
fdcb0453
KR
1868 boolean output_has_begun;
1869
1870 /* Pointer to linked list of sections*/
1871 struct sec *sections;
1872
1873 /* The number of sections */
1874 unsigned int section_count;
1875
1876 /* Stuff only useful for object files:
1877 The start address. */
1878 bfd_vma start_address;
1879
1880 /* Used for input and output*/
1881 unsigned int symcount;
1882
c188b0be 1883 /* Symbol table for output BFD (with symcount entries) */
fdcb0453
KR
1884 struct symbol_cache_entry **outsymbols;
1885
1886 /* Pointer to structure which contains architecture information*/
1887 struct bfd_arch_info *arch_info;
1888
1889 /* Stuff only useful for archives:*/
1890 PTR arelt_data;
c188b0be
DM
1891 struct _bfd *my_archive; /* The containing archive BFD. */
1892 struct _bfd *next; /* The next BFD in the archive. */
1893 struct _bfd *archive_head; /* The first BFD in the archive. */
fdcb0453
KR
1894 boolean has_armap;
1895
4c3721d5
ILT
1896 /* A chain of BFD structures involved in a link. */
1897 struct _bfd *link_next;
1898
1899 /* A field used by _bfd_generic_link_add_archive_symbols. This will
1900 be used only for archive elements. */
1901 int archive_pass;
1902
fdcb0453
KR
1903 /* Used by the back end to hold private data. */
1904
1905 union
1906 {
1907 struct aout_data_struct *aout_data;
1908 struct artdata *aout_ar_data;
1909 struct _oasys_data *oasys_obj_data;
1910 struct _oasys_ar_data *oasys_ar_data;
1911 struct coff_tdata *coff_obj_data;
1912 struct ecoff_tdata *ecoff_obj_data;
1913 struct ieee_data_struct *ieee_data;
1914 struct ieee_ar_data_struct *ieee_ar_data;
1915 struct srec_data_struct *srec_data;
1916 struct tekhex_data_struct *tekhex_data;
1917 struct elf_obj_tdata *elf_obj_data;
c3e964b9 1918 struct nlm_obj_tdata *nlm_obj_data;
fdcb0453
KR
1919 struct bout_data_struct *bout_data;
1920 struct sun_core_struct *sun_core_data;
1921 struct trad_core_struct *trad_core_data;
9e461dac 1922 struct som_data_struct *som_data;
b66b07a2 1923 struct hpux_core_struct *hpux_core_data;
8d12f138 1924 struct hppabsd_core_struct *hppabsd_core_data;
fdcb0453 1925 struct sgi_core_struct *sgi_core_data;
2b91cc45 1926 struct lynx_core_struct *lynx_core_data;
9b3fa589 1927 struct osf_core_struct *osf_core_data;
326e32d7 1928 struct cisco_core_struct *cisco_core_data;
3b1f83ad 1929 struct versados_data_struct *versados_data;
fdcb0453
KR
1930 PTR any;
1931 } tdata;
1932
1933 /* Used by the application to hold private data*/
1934 PTR usrdata;
1935
1936 /* Where all the allocated stuff under this BFD goes */
1937 struct obstack memory;
fdcb0453
KR
1938};
1939
0f8f509c
DM
1940typedef enum bfd_error
1941{
d1ad85a6
DM
1942 bfd_error_no_error = 0,
1943 bfd_error_system_call,
1944 bfd_error_invalid_target,
1945 bfd_error_wrong_format,
1946 bfd_error_invalid_operation,
1947 bfd_error_no_memory,
1948 bfd_error_no_symbols,
9675c281 1949 bfd_error_no_armap,
d1ad85a6
DM
1950 bfd_error_no_more_archived_files,
1951 bfd_error_malformed_archive,
1952 bfd_error_file_not_recognized,
1953 bfd_error_file_ambiguously_recognized,
1954 bfd_error_no_contents,
1955 bfd_error_nonrepresentable_section,
1956 bfd_error_no_debug_section,
1957 bfd_error_bad_value,
1958 bfd_error_file_truncated,
5dc8db48 1959 bfd_error_file_too_big,
d1ad85a6
DM
1960 bfd_error_invalid_error_code
1961} bfd_error_type;
1962
1963bfd_error_type
1964bfd_get_error PARAMS ((void));
1965
1966void
1967bfd_set_error PARAMS ((bfd_error_type error_tag));
0f8f509c
DM
1968
1969CONST char *
d1ad85a6 1970bfd_errmsg PARAMS ((bfd_error_type error_tag));
0f8f509c
DM
1971
1972void
1973bfd_perror PARAMS ((CONST char *message));
1974
3b1f83ad
JL
1975typedef void (*bfd_error_handler_type) PARAMS ((const char *, ...));
1976
1977bfd_error_handler_type
1978bfd_set_error_handler PARAMS ((bfd_error_handler_type));
1979
1980void
1981bfd_set_error_program_name PARAMS ((const char *));
1982
326e32d7 1983long
e2756048
ILT
1984bfd_get_reloc_upper_bound PARAMS ((bfd *abfd, asection *sect));
1985
326e32d7 1986long
e2756048
ILT
1987bfd_canonicalize_reloc
1988 PARAMS ((bfd *abfd,
1989 asection *sec,
1990 arelent **loc,
1991 asymbol **syms));
1992
1993void
1994bfd_set_reloc
1995 PARAMS ((bfd *abfd, asection *sec, arelent **rel, unsigned int count)
1996
1997 );
1998
fdcb0453
KR
1999boolean
2000bfd_set_file_flags PARAMS ((bfd *abfd, flagword flags));
2001
fdcb0453 2002boolean
c188b0be 2003bfd_set_start_address PARAMS ((bfd *abfd, bfd_vma vma));
fdcb0453
KR
2004
2005long
c188b0be 2006bfd_get_mtime PARAMS ((bfd *abfd));
fdcb0453
KR
2007
2008long
c188b0be 2009bfd_get_size PARAMS ((bfd *abfd));
fdcb0453
KR
2010
2011int
c188b0be 2012bfd_get_gp_size PARAMS ((bfd *abfd));
fdcb0453
KR
2013
2014void
c188b0be 2015bfd_set_gp_size PARAMS ((bfd *abfd, int i));
fdcb0453 2016
ef758f3e
KR
2017bfd_vma
2018bfd_scan_vma PARAMS ((CONST char *string, CONST char **end, int base));
2019
5a66538b
KR
2020boolean
2021bfd_copy_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd));
2022
2023#define bfd_copy_private_bfd_data(ibfd, obfd) \
2024 BFD_SEND (ibfd, _bfd_copy_private_bfd_data, \
2025 (ibfd, obfd))
3b1f83ad
JL
2026boolean
2027bfd_merge_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd));
2028
2029#define bfd_merge_private_bfd_data(ibfd, obfd) \
2030 BFD_SEND (ibfd, _bfd_merge_private_bfd_data, \
2031 (ibfd, obfd))
2032boolean
2033bfd_set_private_flags PARAMS ((bfd *abfd, flagword flags));
2034
2035#define bfd_set_private_flags(abfd, flags) \
2036 BFD_SEND (abfd, _bfd_set_private_flags, \
2037 (abfd, flags))
fdcb0453
KR
2038#define bfd_sizeof_headers(abfd, reloc) \
2039 BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
2040
2041#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
2042 BFD_SEND (abfd, _bfd_find_nearest_line, (abfd, sec, syms, off, file, func, line))
2043
2044 /* Do these three do anything useful at all, for any back end? */
2045#define bfd_debug_info_start(abfd) \
2046 BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
2047
2048#define bfd_debug_info_end(abfd) \
2049 BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
2050
2051#define bfd_debug_info_accumulate(abfd, section) \
2052 BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
2053
2054
2055#define bfd_stat_arch_elt(abfd, stat) \
2056 BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
2057
0822b56d
ILT
2058#define bfd_update_armap_timestamp(abfd) \
2059 BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
2060
fdcb0453
KR
2061#define bfd_set_arch_mach(abfd, arch, mach)\
2062 BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
2063
326e32d7
ILT
2064#define bfd_relax_section(abfd, section, link_info, again) \
2065 BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
4c3721d5
ILT
2066
2067#define bfd_link_hash_table_create(abfd) \
2068 BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
2069
2070#define bfd_link_add_symbols(abfd, info) \
2071 BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
2072
2073#define bfd_final_link(abfd, info) \
2074 BFD_SEND (abfd, _bfd_final_link, (abfd, info))
fdcb0453 2075
9deaaaf1
ILT
2076#define bfd_free_cached_info(abfd) \
2077 BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
2078
ad46bd1d
ILT
2079#define bfd_get_dynamic_symtab_upper_bound(abfd) \
2080 BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
2081
2082#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
2083 BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
2084
2085#define bfd_get_dynamic_reloc_upper_bound(abfd) \
2086 BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
2087
2088#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
2089 BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
2090
3b1f83ad
JL
2091extern bfd_byte *bfd_get_relocated_section_contents
2092 PARAMS ((bfd *, struct bfd_link_info *,
2093 struct bfd_link_order *, bfd_byte *,
2094 boolean, asymbol **));
2095
fdcb0453 2096symindex
c188b0be 2097bfd_get_next_mapent PARAMS ((bfd *abfd, symindex previous, carsym **sym));
fdcb0453
KR
2098
2099boolean
2100bfd_set_archive_head PARAMS ((bfd *output, bfd *new_head));
2101
2102bfd *
c188b0be 2103bfd_get_elt_at_index PARAMS ((bfd *archive, int index));
fdcb0453 2104
c188b0be 2105bfd *
fdcb0453
KR
2106bfd_openr_next_archived_file PARAMS ((bfd *archive, bfd *previous));
2107
2108CONST char *
c188b0be 2109bfd_core_file_failing_command PARAMS ((bfd *abfd));
fdcb0453
KR
2110
2111int
c188b0be 2112bfd_core_file_failing_signal PARAMS ((bfd *abfd));
fdcb0453
KR
2113
2114boolean
2115core_file_matches_executable_p
2116 PARAMS ((bfd *core_bfd, bfd *exec_bfd));
2117
2118#define BFD_SEND(bfd, message, arglist) \
2119 ((*((bfd)->xvec->message)) arglist)
fdfe2d14
SS
2120
2121#ifdef DEBUG_BFD_SEND
2122#undef BFD_SEND
2123#define BFD_SEND(bfd, message, arglist) \
2124 (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
2125 ((*((bfd)->xvec->message)) arglist) : \
2126 (bfd_assert (__FILE__,__LINE__), NULL))
2127#endif
fdcb0453
KR
2128#define BFD_SEND_FMT(bfd, message, arglist) \
2129 (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
fdfe2d14
SS
2130
2131#ifdef DEBUG_BFD_SEND
2132#undef BFD_SEND_FMT
2133#define BFD_SEND_FMT(bfd, message, arglist) \
2134 (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
2135 (((bfd)->xvec->message[(int)((bfd)->format)]) arglist) : \
2136 (bfd_assert (__FILE__,__LINE__), NULL))
2137#endif
9e461dac
JK
2138enum bfd_flavour {
2139 bfd_target_unknown_flavour,
2140 bfd_target_aout_flavour,
2141 bfd_target_coff_flavour,
2142 bfd_target_ecoff_flavour,
2143 bfd_target_elf_flavour,
2144 bfd_target_ieee_flavour,
2145 bfd_target_nlm_flavour,
2146 bfd_target_oasys_flavour,
2147 bfd_target_tekhex_flavour,
2148 bfd_target_srec_flavour,
d1f8b181 2149 bfd_target_som_flavour,
5dc8db48 2150 bfd_target_os9k_flavour,
9675c281
ILT
2151 bfd_target_versados_flavour,
2152 bfd_target_msdos_flavour
5dc8db48 2153};
4c3721d5
ILT
2154
2155 /* Forward declaration. */
2156typedef struct bfd_link_info _bfd_link_info;
2157
fdcb0453
KR
2158typedef struct bfd_target
2159{
2160 char *name;
9e461dac 2161 enum bfd_flavour flavour;
fdcb0453
KR
2162 boolean byteorder_big_p;
2163 boolean header_byteorder_big_p;
2164 flagword object_flags;
2165 flagword section_flags;
2166 char symbol_leading_char;
2167 char ar_pad_char;
2168 unsigned short ar_max_namelen;
2169 unsigned int align_power_min;
1a973af1
ILT
2170 bfd_vma (*bfd_getx64) PARAMS ((const bfd_byte *));
2171 bfd_signed_vma (*bfd_getx_signed_64) PARAMS ((const bfd_byte *));
fdcb0453 2172 void (*bfd_putx64) PARAMS ((bfd_vma, bfd_byte *));
1a973af1
ILT
2173 bfd_vma (*bfd_getx32) PARAMS ((const bfd_byte *));
2174 bfd_signed_vma (*bfd_getx_signed_32) PARAMS ((const bfd_byte *));
fdcb0453 2175 void (*bfd_putx32) PARAMS ((bfd_vma, bfd_byte *));
1a973af1
ILT
2176 bfd_vma (*bfd_getx16) PARAMS ((const bfd_byte *));
2177 bfd_signed_vma (*bfd_getx_signed_16) PARAMS ((const bfd_byte *));
fdcb0453 2178 void (*bfd_putx16) PARAMS ((bfd_vma, bfd_byte *));
1a973af1
ILT
2179 bfd_vma (*bfd_h_getx64) PARAMS ((const bfd_byte *));
2180 bfd_signed_vma (*bfd_h_getx_signed_64) PARAMS ((const bfd_byte *));
fdcb0453 2181 void (*bfd_h_putx64) PARAMS ((bfd_vma, bfd_byte *));
1a973af1
ILT
2182 bfd_vma (*bfd_h_getx32) PARAMS ((const bfd_byte *));
2183 bfd_signed_vma (*bfd_h_getx_signed_32) PARAMS ((const bfd_byte *));
fdcb0453 2184 void (*bfd_h_putx32) PARAMS ((bfd_vma, bfd_byte *));
1a973af1
ILT
2185 bfd_vma (*bfd_h_getx16) PARAMS ((const bfd_byte *));
2186 bfd_signed_vma (*bfd_h_getx_signed_16) PARAMS ((const bfd_byte *));
fdcb0453 2187 void (*bfd_h_putx16) PARAMS ((bfd_vma, bfd_byte *));
2f3508ad 2188 const struct bfd_target *(*_bfd_check_format[bfd_type_end]) PARAMS ((bfd *));
fdcb0453
KR
2189 boolean (*_bfd_set_format[bfd_type_end]) PARAMS ((bfd *));
2190 boolean (*_bfd_write_contents[bfd_type_end]) PARAMS ((bfd *));
6812b607
ILT
2191
2192 /* Generic entry points. */
2193#define BFD_JUMP_TABLE_GENERIC(NAME)\
2194CAT(NAME,_close_and_cleanup),\
2195CAT(NAME,_bfd_free_cached_info),\
2196CAT(NAME,_new_section_hook),\
2197CAT(NAME,_get_section_contents)
2198 /* Called when the BFD is being closed to do any necessary cleanup. */
2199 boolean (*_close_and_cleanup) PARAMS ((bfd *));
2200 /* Ask the BFD to free all cached information. */
2201 boolean (*_bfd_free_cached_info) PARAMS ((bfd *));
2202 /* Called when a new section is created. */
2203 boolean (*_new_section_hook) PARAMS ((bfd *, sec_ptr));
2204 /* Read the contents of a section. */
2205 boolean (*_bfd_get_section_contents) PARAMS ((bfd *, sec_ptr, PTR,
2206 file_ptr, bfd_size_type));
2207
2208 /* Entry points to copy private data. */
2209#define BFD_JUMP_TABLE_COPY(NAME)\
2210CAT(NAME,_bfd_copy_private_bfd_data),\
3b1f83ad
JL
2211CAT(NAME,_bfd_merge_private_bfd_data),\
2212CAT(NAME,_bfd_copy_private_section_data),\
6167a840 2213CAT(NAME,_bfd_copy_private_symbol_data),\
3b1f83ad 2214CAT(NAME,_bfd_set_private_flags)
6812b607
ILT
2215 /* Called to copy BFD general private data from one object file
2216 to another. */
2217 boolean (*_bfd_copy_private_bfd_data) PARAMS ((bfd *, bfd *));
3b1f83ad
JL
2218 /* Called to merge BFD general private data from one object file
2219 to a common output file when linking. */
2220 boolean (*_bfd_merge_private_bfd_data) PARAMS ((bfd *, bfd *));
6812b607
ILT
2221 /* Called to copy BFD private section data from one object file
2222 to another. */
2223 boolean (*_bfd_copy_private_section_data) PARAMS ((bfd *, sec_ptr,
2224 bfd *, sec_ptr));
6167a840
JL
2225 /* Called to copy BFD private symbol data from one symbol
2226 to another. */
2227 boolean (*_bfd_copy_private_symbol_data) PARAMS ((bfd *, asymbol *,
2228 bfd *, asymbol *));
3b1f83ad
JL
2229 /* Called to set private backend flags */
2230 boolean (*_bfd_set_private_flags) PARAMS ((bfd *, flagword));
6812b607
ILT
2231
2232 /* Core file entry points. */
2233#define BFD_JUMP_TABLE_CORE(NAME)\
2234CAT(NAME,_core_file_failing_command),\
2235CAT(NAME,_core_file_failing_signal),\
2236CAT(NAME,_core_file_matches_executable_p)
fdcb0453
KR
2237 char * (*_core_file_failing_command) PARAMS ((bfd *));
2238 int (*_core_file_failing_signal) PARAMS ((bfd *));
2239 boolean (*_core_file_matches_executable_p) PARAMS ((bfd *, bfd *));
6812b607
ILT
2240
2241 /* Archive entry points. */
2242#define BFD_JUMP_TABLE_ARCHIVE(NAME)\
2243CAT(NAME,_slurp_armap),\
2244CAT(NAME,_slurp_extended_name_table),\
fca2b81b 2245CAT(NAME,_construct_extended_name_table),\
6812b607
ILT
2246CAT(NAME,_truncate_arname),\
2247CAT(NAME,_write_armap),\
2248CAT(NAME,_openr_next_archived_file),\
0822b56d
ILT
2249CAT(NAME,_generic_stat_arch_elt),\
2250CAT(NAME,_update_armap_timestamp)
fdcb0453
KR
2251 boolean (*_bfd_slurp_armap) PARAMS ((bfd *));
2252 boolean (*_bfd_slurp_extended_name_table) PARAMS ((bfd *));
fca2b81b
KR
2253 boolean (*_bfd_construct_extended_name_table)
2254 PARAMS ((bfd *, char **, bfd_size_type *, const char **));
fdcb0453
KR
2255 void (*_bfd_truncate_arname) PARAMS ((bfd *, CONST char *, char *));
2256 boolean (*write_armap) PARAMS ((bfd *arch,
2257 unsigned int elength,
2258 struct orl *map,
2259 unsigned int orl_count,
2260 int stridx));
0822b56d
ILT
2261 bfd * (*openr_next_archived_file) PARAMS ((bfd *arch, bfd *prev));
2262 int (*_bfd_stat_arch_elt) PARAMS ((bfd *, struct stat *));
2263 boolean (*_bfd_update_armap_timestamp) PARAMS ((bfd *));
2264
6812b607
ILT
2265 /* Entry points used for symbols. */
2266#define BFD_JUMP_TABLE_SYMBOLS(NAME)\
2267CAT(NAME,_get_symtab_upper_bound),\
2268CAT(NAME,_get_symtab),\
2269CAT(NAME,_make_empty_symbol),\
2270CAT(NAME,_print_symbol),\
2271CAT(NAME,_get_symbol_info),\
2272CAT(NAME,_bfd_is_local_label),\
2273CAT(NAME,_get_lineno),\
2274CAT(NAME,_find_nearest_line),\
e9614321
SC
2275CAT(NAME,_bfd_make_debug_symbol),\
2276CAT(NAME,_read_minisymbols),\
2277CAT(NAME,_minisymbol_to_symbol)
326e32d7
ILT
2278 long (*_bfd_get_symtab_upper_bound) PARAMS ((bfd *));
2279 long (*_bfd_canonicalize_symtab) PARAMS ((bfd *,
2280 struct symbol_cache_entry **));
fdcb0453
KR
2281 struct symbol_cache_entry *
2282 (*_bfd_make_empty_symbol) PARAMS ((bfd *));
2283 void (*_bfd_print_symbol) PARAMS ((bfd *, PTR,
2284 struct symbol_cache_entry *,
2285 bfd_print_symbol_type));
2286#define bfd_print_symbol(b,p,s,e) BFD_SEND(b, _bfd_print_symbol, (b,p,s,e))
2287 void (*_bfd_get_symbol_info) PARAMS ((bfd *,
2288 struct symbol_cache_entry *,
2289 symbol_info *));
2290#define bfd_get_symbol_info(b,p,e) BFD_SEND(b, _bfd_get_symbol_info, (b,p,e))
5a66538b 2291 boolean (*_bfd_is_local_label) PARAMS ((bfd *, asymbol *));
fdcb0453 2292
6812b607 2293 alent * (*_get_lineno) PARAMS ((bfd *, struct symbol_cache_entry *));
fdcb0453
KR
2294 boolean (*_bfd_find_nearest_line) PARAMS ((bfd *abfd,
2295 struct sec *section, struct symbol_cache_entry **symbols,
2296 bfd_vma offset, CONST char **file, CONST char **func,
2297 unsigned int *line));
6812b607
ILT
2298 /* Back-door to allow format-aware applications to create debug symbols
2299 while using BFD for everything else. Currently used by the assembler
2300 when creating COFF files. */
e9614321 2301 asymbol * (*_bfd_make_debug_symbol) PARAMS ((
6812b607
ILT
2302 bfd *abfd,
2303 void *ptr,
2304 unsigned long size));
e9614321
SC
2305#define bfd_read_minisymbols(b, d, m, s) \
2306 BFD_SEND (b, _read_minisymbols, (b, d, m, s))
2307 long (*_read_minisymbols) PARAMS ((bfd *, boolean, PTR *,
2308 unsigned int *));
2309#define bfd_minisymbol_to_symbol(b, d, m, f) \
2310 BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
2311 asymbol *(*_minisymbol_to_symbol) PARAMS ((bfd *, boolean, const PTR,
2312 asymbol *));
fdcb0453 2313
6812b607
ILT
2314 /* Routines for relocs. */
2315#define BFD_JUMP_TABLE_RELOCS(NAME)\
2316CAT(NAME,_get_reloc_upper_bound),\
2317CAT(NAME,_canonicalize_reloc),\
2318CAT(NAME,_bfd_reloc_type_lookup)
2319 long (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr));
2320 long (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **,
2321 struct symbol_cache_entry **));
2322 /* See documentation on reloc types. */
5dc8db48 2323 reloc_howto_type *
6812b607
ILT
2324 (*reloc_type_lookup) PARAMS ((bfd *abfd,
2325 bfd_reloc_code_real_type code));
fdcb0453 2326
6812b607
ILT
2327 /* Routines used when writing an object file. */
2328#define BFD_JUMP_TABLE_WRITE(NAME)\
2329CAT(NAME,_set_arch_mach),\
2330CAT(NAME,_set_section_contents)
2331 boolean (*_bfd_set_arch_mach) PARAMS ((bfd *, enum bfd_architecture,
2332 unsigned long));
2333 boolean (*_bfd_set_section_contents) PARAMS ((bfd *, sec_ptr, PTR,
2334 file_ptr, bfd_size_type));
fdcb0453 2335
6812b607
ILT
2336 /* Routines used by the linker. */
2337#define BFD_JUMP_TABLE_LINK(NAME)\
2338CAT(NAME,_sizeof_headers),\
2339CAT(NAME,_bfd_get_relocated_section_contents),\
2340CAT(NAME,_bfd_relax_section),\
2341CAT(NAME,_bfd_link_hash_table_create),\
2342CAT(NAME,_bfd_link_add_symbols),\
6167a840
JL
2343CAT(NAME,_bfd_final_link),\
2344CAT(NAME,_bfd_link_split_section)
6812b607 2345 int (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean));
fdcb0453 2346 bfd_byte * (*_bfd_get_relocated_section_contents) PARAMS ((bfd *,
4c3721d5
ILT
2347 struct bfd_link_info *, struct bfd_link_order *,
2348 bfd_byte *data, boolean relocateable,
2349 struct symbol_cache_entry **));
fdcb0453
KR
2350
2351 boolean (*_bfd_relax_section) PARAMS ((bfd *, struct sec *,
326e32d7 2352 struct bfd_link_info *, boolean *again));
fdcb0453 2353
ad46bd1d
ILT
2354 /* Create a hash table for the linker. Different backends store
2355 different information in this table. */
2356 struct bfd_link_hash_table *(*_bfd_link_hash_table_create) PARAMS ((bfd *));
2357
2358 /* Add symbols from this object file into the hash table. */
2359 boolean (*_bfd_link_add_symbols) PARAMS ((bfd *, struct bfd_link_info *));
2360
2361 /* Do a link based on the link_order structures attached to each
2362 section of the BFD. */
2363 boolean (*_bfd_final_link) PARAMS ((bfd *, struct bfd_link_info *));
2364
6167a840
JL
2365 /* Should this section be split up into smaller pieces during linking. */
2366 boolean (*_bfd_link_split_section) PARAMS ((bfd *, struct sec *));
2367
ad46bd1d
ILT
2368 /* Routines to handle dynamic symbols and relocs. */
2369#define BFD_JUMP_TABLE_DYNAMIC(NAME)\
2370CAT(NAME,_get_dynamic_symtab_upper_bound),\
2371CAT(NAME,_canonicalize_dynamic_symtab),\
2372CAT(NAME,_get_dynamic_reloc_upper_bound),\
2373CAT(NAME,_canonicalize_dynamic_reloc)
2374 /* Get the amount of memory required to hold the dynamic symbols. */
2375 long (*_bfd_get_dynamic_symtab_upper_bound) PARAMS ((bfd *));
2376 /* Read in the dynamic symbols. */
2377 long (*_bfd_canonicalize_dynamic_symtab)
2378 PARAMS ((bfd *, struct symbol_cache_entry **));
2379 /* Get the amount of memory required to hold the dynamic relocs. */
2380 long (*_bfd_get_dynamic_reloc_upper_bound) PARAMS ((bfd *));
2381 /* Read in the dynamic relocs. */
2382 long (*_bfd_canonicalize_dynamic_reloc)
2383 PARAMS ((bfd *, arelent **, struct symbol_cache_entry **));
4c3721d5 2384
fdcb0453
KR
2385 PTR backend_data;
2386} bfd_target;
2f3508ad 2387const bfd_target *
c188b0be 2388bfd_find_target PARAMS ((CONST char *target_name, bfd *abfd));
fdcb0453 2389
2f3508ad 2390const char **
fdcb0453
KR
2391bfd_target_list PARAMS ((void));
2392
2393boolean
2394bfd_check_format PARAMS ((bfd *abfd, bfd_format format));
2395
aabda2da
DM
2396boolean
2397bfd_check_format_matches PARAMS ((bfd *abfd, bfd_format format, char ***matching));
3b31740c 2398
fdcb0453 2399boolean
c188b0be 2400bfd_set_format PARAMS ((bfd *abfd, bfd_format format));
fdcb0453
KR
2401
2402CONST char *
c188b0be 2403bfd_format_string PARAMS ((bfd_format format));
fdcb0453 2404
815179af
ILT
2405#ifdef __cplusplus
2406}
2407#endif
fdcb0453 2408#endif
This page took 0.432678 seconds and 4 git commands to generate.