* bfd-in.h: Add extern "C" if __cplusplus.
[binutils-gdb.git] / bfd / bfd-in2.h
1 /* Main header file for the bfd library -- portable access to object files.
2 Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3 Contributed by Cygnus Support.
4
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
9 This file is part of BFD, the Binary File Descriptor library.
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
24
25 /* bfd.h -- The only header file required by users of the bfd library
26
27 The bfd.h file is generated from bfd-in.h and various .c files; if you
28 change it, your changes will probably be lost.
29
30 All the prototypes and definitions following the comment "THE FOLLOWING
31 IS EXTRACTED FROM THE SOURCE" are extracted from the source files for
32 BFD. If you change it, someone oneday will extract it from the source
33 again, and your changes will be lost. To save yourself from this bind,
34 change the definitions in the source in the bfd directory. Type "make
35 docs" and then "make headers" in that directory, and magically this file
36 will change to reflect your changes.
37
38 If you don't have the tools to perform the extraction, then you are
39 safe from someone on your system trampling over your header files.
40 You should still maintain the equivalence between the source and this
41 file though; every change you make to the .c file should be reflected
42 here. */
43
44 #ifndef __BFD_H_SEEN__
45 #define __BFD_H_SEEN__
46
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50
51 #include "ansidecl.h"
52 #include "obstack.h"
53
54 /* These two lines get substitutions done by commands in Makefile.in. */
55 #define BFD_VERSION "@VERSION@"
56 #define BFD_ARCH_SIZE @WORDSIZE@
57
58 #if BFD_ARCH_SIZE >= 64
59 #define BFD64
60 #endif
61
62 #ifndef INLINE
63 #if __GNUC__ >= 2
64 #define INLINE __inline__
65 #else
66 #define INLINE
67 #endif
68 #endif
69
70 /* 64-bit type definition (if any) from bfd's sysdep.h goes here */
71
72
73 /* forward declaration */
74 typedef 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 */
88 /* It gets worse if the host also defines a true/false enum... -sts */
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
93 #ifndef TRUE_FALSE_ALREADY_DEFINED
94 typedef enum bfd_boolean {false, true} boolean;
95 #define BFD_TRUE_FALSE
96 #else
97 /* Use enum names that will appear nowhere else. */
98 typedef enum bfd_boolean {bfd_fffalse, bfd_tttrue} boolean;
99 #endif
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; */
109 typedef long int file_ptr;
110
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.
117
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. */
121
122 #ifdef BFD64
123
124 #if defined (__GNUC__) && !defined (BFD_HOST_64_BIT)
125 #define BFD_HOST_64_BIT long long
126 typedef BFD_HOST_64_BIT int64_type;
127 typedef unsigned BFD_HOST_64_BIT uint64_type;
128 #endif
129
130 #if !defined (uint64_type) && defined (__GNUC__)
131 #define uint64_type unsigned long long
132 #define int64_type long long
133 #endif
134 #ifndef uint64_typeLOW
135 #define uint64_typeLOW(x) ((unsigned long)(((x) & 0xffffffff)))
136 #define uint64_typeHIGH(x) ((unsigned long)(((x) >> 32) & 0xffffffff))
137 #endif
138
139 typedef unsigned BFD_HOST_64_BIT bfd_vma;
140 typedef BFD_HOST_64_BIT bfd_signed_vma;
141 typedef unsigned BFD_HOST_64_BIT bfd_size_type;
142 typedef unsigned BFD_HOST_64_BIT symvalue;
143 #ifndef fprintf_vma
144 #define fprintf_vma(s,x) \
145 fprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x))
146 #define sprintf_vma(s,x) \
147 sprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x))
148 #endif
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. */
154 typedef 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). */
160 typedef long bfd_signed_vma;
161
162 typedef unsigned long symvalue;
163 typedef unsigned long bfd_size_type;
164
165 /* Print a bfd_vma x on stream s. */
166 #define fprintf_vma(s,x) fprintf(s, "%08lx", x)
167 #define sprintf_vma(s,x) sprintf(s, "%08lx", x)
168 #endif /* not BFD64 */
169 #define printf_vma(x) fprintf_vma(stdout,x)
170
171 typedef unsigned int flagword; /* 32 bits of flags */
172 typedef unsigned char bfd_byte;
173 \f
174 /** File formats */
175
176 typedef 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
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. */
192 #define NO_FLAGS 0x00
193
194 /* BFD contains relocation entries. */
195 #define HAS_RELOC 0x01
196
197 /* BFD is directly executable. */
198 #define EXEC_P 0x02
199
200 /* BFD has line number information (basically used for F_LNNO in a
201 COFF header). */
202 #define HAS_LINENO 0x04
203
204 /* BFD has debugging information. */
205 #define HAS_DEBUG 0x08
206
207 /* BFD has symbols. */
208 #define HAS_SYMS 0x10
209
210 /* BFD has local symbols (basically used for F_LSYMS in a COFF
211 header). */
212 #define HAS_LOCALS 0x20
213
214 /* BFD is a dynamic object. */
215 #define DYNAMIC 0x40
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). */
220 #define WP_TEXT 0x80
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). */
224 #define D_PAGED 0x100
225
226 /* BFD is relaxable (this means that bfd_relax_section may be able to
227 do something) (sometimes bfd_relax_section can do something even if
228 this is not set). */
229 #define BFD_IS_RELAXABLE 0x200
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
236 \f
237 /* symbols and relocation */
238
239 /* A count of carsyms (canonical archive symbols). */
240 typedef unsigned long symindex;
241
242 /* How to perform a relocation. */
243 typedef const struct reloc_howto_struct reloc_howto_type;
244
245 #define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
246
247 /* General purpose part of a symbol X;
248 target specific parts are in libcoff.h, libaout.h, etc. */
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
260 /* A canonical archive symbol. */
261 /* This is a type pun with struct ranlib on purpose! */
262 typedef 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
268 /* Used in generating armaps (archive tables of contents).
269 Perhaps just a forward definition would do? */
270 struct orl { /* output ranlib */
271 char **name; /* symbol name */
272 file_ptr pos; /* bfd* or file position */
273 int namidx; /* index into string table */
274 };
275 \f
276
277 /* Linenumber stuff */
278 typedef struct lineno_cache_entry {
279 unsigned int line_number; /* Linenumber from start of function*/
280 union {
281 struct symbol_cache_entry *sym; /* Function name */
282 unsigned long offset; /* Offset into section */
283 } u;
284 } alent;
285 \f
286 /* object and core file sections */
287
288 #define align_power(addr, align) \
289 ( ((addr) + ((1<<(align))-1)) & (-1 << (align)))
290
291 typedef 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
305 #define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma= (val)), ((ptr)->user_set_vma = (boolean)true), true)
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)
308
309 typedef struct stat stat_type;
310 \f
311 typedef 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
318 /* Information about a symbol that nm needs. */
319
320 typedef struct _symbol_info
321 {
322 symvalue value;
323 char type;
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
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
335 struct 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
348 struct 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. */
369 extern 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. */
376 extern 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. */
384 extern 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. */
390 extern 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. */
395 extern 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. */
400 extern PTR bfd_hash_allocate PARAMS ((struct bfd_hash_table *,
401 unsigned int));
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. */
406 extern void bfd_hash_traverse PARAMS ((struct bfd_hash_table *,
407 boolean (*) (struct bfd_hash_entry *,
408 PTR),
409 PTR info));
410 \f
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.) */
417 #ifndef CAT
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
423 #if defined(__STDC__) || defined(ALMOST_STDC)
424 #define CAT(a,b) a##b
425 #define CAT3(a,b,c) a##b##c
426 #define XCAT2(a,b) CAT(a,b)
427 #define CAT4(a,b,c,d) XCAT2(CAT(a,b),CAT(c,d))
428 #else
429 #define CAT(a,b) a/**/b
430 #define CAT3(a,b,c) a/**/b/**/c
431 #define CAT4(a,b,c,d) a/**/b/**/c/**/d
432 #endif
433 #endif
434 #endif
435
436 #define COFF_SWAP_TABLE (PTR) &bfd_coff_std_swap_table
437 \f
438 /* User program access to BFD facilities */
439
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
443 extern bfd_size_type bfd_read
444 PARAMS ((PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
445 extern bfd_size_type bfd_write
446 PARAMS ((const PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
447 extern int bfd_seek PARAMS ((bfd *abfd, file_ptr fp, int direction));
448 extern long bfd_tell PARAMS ((bfd *abfd));
449 extern int bfd_flush PARAMS ((bfd *abfd));
450 extern int bfd_stat PARAMS ((bfd *abfd, struct stat *));
451
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 */
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
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. */
475
476 typedef struct
477 {
478 boolean defined;
479 bfd_vma value;
480 } bfd_link_pe_info_dval ;
481
482 typedef 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;
500
501 /* END OF PE STUFF */
502
503
504
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)
508 #define bfd_get_cacheable(abfd) ((abfd)->cacheable)
509 #define bfd_get_format(abfd) ((abfd)->format)
510 #define bfd_get_target(abfd) ((abfd)->xvec->name)
511 #define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
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)
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)
525
526 #define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
527
528 #define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean)(bool)), true)
529
530 /* Byte swapping routines. */
531
532 bfd_vma bfd_getb64 PARAMS ((const unsigned char *));
533 bfd_vma bfd_getl64 PARAMS ((const unsigned char *));
534 bfd_signed_vma bfd_getb_signed_64 PARAMS ((const unsigned char *));
535 bfd_signed_vma bfd_getl_signed_64 PARAMS ((const unsigned char *));
536 bfd_vma bfd_getb32 PARAMS ((const unsigned char *));
537 bfd_vma bfd_getl32 PARAMS ((const unsigned char *));
538 bfd_signed_vma bfd_getb_signed_32 PARAMS ((const unsigned char *));
539 bfd_signed_vma bfd_getl_signed_32 PARAMS ((const unsigned char *));
540 bfd_vma bfd_getb16 PARAMS ((const unsigned char *));
541 bfd_vma bfd_getl16 PARAMS ((const unsigned char *));
542 bfd_signed_vma bfd_getb_signed_16 PARAMS ((const unsigned char *));
543 bfd_signed_vma bfd_getl_signed_16 PARAMS ((const unsigned char *));
544 void bfd_putb64 PARAMS ((bfd_vma, unsigned char *));
545 void bfd_putl64 PARAMS ((bfd_vma, unsigned char *));
546 void bfd_putb32 PARAMS ((bfd_vma, unsigned char *));
547 void bfd_putl32 PARAMS ((bfd_vma, unsigned char *));
548 void bfd_putb16 PARAMS ((bfd_vma, unsigned char *));
549 void bfd_putl16 PARAMS ((bfd_vma, unsigned char *));
550 \f
551 /* Externally visible ECOFF routines. */
552
553 #if defined(__STDC__) || defined(ALMOST_STDC)
554 struct ecoff_debug_info;
555 struct ecoff_debug_swap;
556 struct ecoff_extr;
557 struct symbol_cache_entry;
558 struct bfd_link_info;
559 #endif
560 extern bfd_vma bfd_ecoff_get_gp_value PARAMS ((bfd * abfd));
561 extern boolean bfd_ecoff_set_gp_value PARAMS ((bfd *abfd, bfd_vma gp_value));
562 extern boolean bfd_ecoff_set_regmasks
563 PARAMS ((bfd *abfd, unsigned long gprmask, unsigned long fprmask,
564 unsigned long *cprmask));
565 extern PTR bfd_ecoff_debug_init
566 PARAMS ((bfd *output_bfd, struct ecoff_debug_info *output_debug,
567 const struct ecoff_debug_swap *output_swap,
568 struct bfd_link_info *));
569 extern 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 *));
573 extern boolean bfd_ecoff_debug_accumulate
574 PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
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,
578 struct bfd_link_info *));
579 extern 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 *));
583 extern 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)));
591 extern 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));
595 extern bfd_size_type bfd_ecoff_debug_size
596 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
597 const struct ecoff_debug_swap *swap));
598 extern boolean bfd_ecoff_write_debug
599 PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
600 const struct ecoff_debug_swap *swap, file_ptr where));
601 extern 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));
605 extern boolean bfd_mips_ecoff_create_embedded_relocs
606 PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
607 char **));
608
609 /* Externally visible ELF routines. */
610
611 extern boolean bfd_elf32_record_link_assignment
612 PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean));
613 extern boolean bfd_elf64_record_link_assignment
614 PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean));
615 struct bfd_elf_link_needed_list
616 {
617 struct bfd_elf_link_needed_list *next;
618 bfd *by;
619 const char *name;
620 };
621 extern struct bfd_elf_link_needed_list *bfd_elf_get_needed_list
622 PARAMS ((bfd *, struct bfd_link_info *));
623 extern boolean bfd_elf32_size_dynamic_sections
624 PARAMS ((bfd *, const char *, const char *, boolean,
625 struct bfd_link_info *, struct sec **));
626 extern boolean bfd_elf64_size_dynamic_sections
627 PARAMS ((bfd *, const char *, const char *, boolean,
628 struct bfd_link_info *, struct sec **));
629 extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
630
631 /* SunOS shared library support routines for the linker. */
632
633 extern boolean bfd_sunos_record_link_assignment
634 PARAMS ((bfd *, struct bfd_link_info *, const char *));
635 extern boolean bfd_sunos_size_dynamic_sections
636 PARAMS ((bfd *, struct bfd_link_info *, struct sec **, struct sec **,
637 struct sec **));
638
639 /* Linux shared library support routines for the linker. */
640
641 extern boolean bfd_linux_size_dynamic_sections
642 PARAMS ((bfd *, struct bfd_link_info *));
643
644 /* And more from the source. */
645 void
646 bfd_init PARAMS ((void));
647
648 bfd *
649 bfd_openr PARAMS ((CONST char *filename, CONST char *target));
650
651 bfd *
652 bfd_fdopenr PARAMS ((CONST char *filename, CONST char *target, int fd));
653
654 bfd *
655 bfd_openstreamr PARAMS (());
656
657 bfd *
658 bfd_openw PARAMS ((CONST char *filename, CONST char *target));
659
660 boolean
661 bfd_close PARAMS ((bfd *abfd));
662
663 boolean
664 bfd_close_all_done PARAMS ((bfd *));
665
666 bfd_size_type
667 bfd_alloc_size PARAMS ((bfd *abfd));
668
669 bfd *
670 bfd_create PARAMS ((CONST char *filename, bfd *templ));
671
672
673 /* Byte swapping macros for user section data. */
674
675 #define bfd_put_8(abfd, val, ptr) \
676 (*((unsigned char *)(ptr)) = (unsigned char)(val))
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
750 typedef struct sec
751 {
752 /* The name of the section; the name isn't a copy, the pointer is
753 the same as that passed to bfd_make_section. */
754
755 CONST char *name;
756
757 /* Which section is it; 0..nth. */
758
759 int index;
760
761 /* The next section in the list belonging to the BFD, or NULL. */
762
763 struct sec *next;
764
765 /* The field flags contains attributes of the section. Some
766 flags are read in from the object file, and some are
767 synthesized from other information. */
768
769 flagword flags;
770
771 #define SEC_NO_FLAGS 0x000
772
773 /* Tells the OS to allocate space for this section when loading.
774 This is clear for a section containing debug information
775 only. */
776 #define SEC_ALLOC 0x001
777
778 /* Tells the OS to load the section from the file when loading.
779 This is clear for a .bss section. */
780 #define SEC_LOAD 0x002
781
782 /* The section contains data still to be relocated, so there is
783 some relocation information too. */
784 #define SEC_RELOC 0x004
785
786 #if 0 /* Obsolete ? */
787 #define SEC_BALIGN 0x008
788 #endif
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. */
795 #define SEC_CODE 0x020
796
797 /* The section contains data only. */
798 #define SEC_DATA 0x040
799
800 /* The section will reside in ROM. */
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
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
809 of constructors, all the linker has to do is catenate all the
810 sections called <<__CTOR_LIST__>> and relocate the data
811 contained within - exactly the operations it would peform on
812 standard data. */
813 #define SEC_CONSTRUCTOR 0x100
814
815 /* The section is a constuctor, and should be placed at the
816 end of the text, data, or bss section(?). */
817 #define SEC_CONSTRUCTOR_TEXT 0x1100
818 #define SEC_CONSTRUCTOR_DATA 0x2100
819 #define SEC_CONSTRUCTOR_BSS 0x3100
820
821 /* The section has contents - a data section could be
822 <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
823 <<SEC_HAS_CONTENTS>> */
824 #define SEC_HAS_CONTENTS 0x200
825
826 /* An instruction to the linker to not output the section
827 even if it has information which would normally be written. */
828 #define SEC_NEVER_LOAD 0x400
829
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
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
844 used). Most targets have exactly one of these (which we
845 translate to bfd_com_section_ptr), but ECOFF has two. */
846 #define SEC_IS_COMMON 0x8000
847
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
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
860 /* End of section flags. */
861
862 /* The virtual memory address of the section - where it will be
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). */
868
869 bfd_vma vma;
870 boolean user_set_vma;
871
872 /* The load address of the section - where it would be in a
873 rom image; really only used for writing section header
874 information. */
875
876 bfd_vma lma;
877
878 /* The size of the section in bytes, as it will be output.
879 contains a value even if the section has no contents (e.g., the
880 size of <<.bss>>). This will be filled in after relocation */
881
882 bfd_size_type _cooked_size;
883
884 /* The original size on disk of the section, in bytes. Normally this
885 value is the same as the size, but if some relaxing has
886 been done, then this value will be bigger. */
887
888 bfd_size_type _raw_size;
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
892 section. E.g., if this was going to start at the 100th byte in
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
901 /* The alignment requirement of the section, as an exponent of 2 -
902 e.g., 3 aligns to 2^3 (or 8). */
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
921 or updated. */
922
923 /* File position of section data */
924
925 file_ptr filepos;
926
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
939 /* If the SEC_IN_MEMORY flag is set, this points to the actual
940 contents. */
941 unsigned char *contents;
942
943 /* Attached line number information */
944
945 alent *lineno;
946
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
956 /* What the section number is in the target world */
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 */
973 struct symbol_cache_entry *symbol;
974 struct symbol_cache_entry **symbol_ptr_ptr;
975
976 struct bfd_link_order *link_order_head;
977 struct bfd_link_order *link_order_tail;
978 } asection ;
979
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
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. */
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 */
991 extern 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)
994 /* Pointer to the undefined section */
995 extern 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)
998 /* Pointer to the common section */
999 extern const asection bfd_com_section;
1000 #define bfd_com_section_ptr ((asection *) &bfd_com_section)
1001 /* Pointer to the indirect section */
1002 extern 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
1006 extern const struct symbol_cache_entry * const bfd_abs_symbol;
1007 extern const struct symbol_cache_entry * const bfd_com_symbol;
1008 extern const struct symbol_cache_entry * const bfd_und_symbol;
1009 extern const struct symbol_cache_entry * const bfd_ind_symbol;
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))
1014 asection *
1015 bfd_get_section_by_name PARAMS ((bfd *abfd, CONST char *name));
1016
1017 asection *
1018 bfd_make_section_old_way PARAMS ((bfd *abfd, CONST char *name));
1019
1020 asection *
1021 bfd_make_section_anyway PARAMS ((bfd *abfd, CONST char *name));
1022
1023 asection *
1024 bfd_make_section PARAMS ((bfd *, CONST char *name));
1025
1026 boolean
1027 bfd_set_section_flags PARAMS ((bfd *abfd, asection *sec, flagword flags));
1028
1029 void
1030 bfd_map_over_sections PARAMS ((bfd *abfd,
1031 void (*func)(bfd *abfd,
1032 asection *sect,
1033 PTR obj),
1034 PTR obj));
1035
1036 boolean
1037 bfd_set_section_size PARAMS ((bfd *abfd, asection *sec, bfd_size_type val));
1038
1039 boolean
1040 bfd_set_section_contents
1041 PARAMS ((bfd *abfd,
1042 asection *section,
1043 PTR data,
1044 file_ptr offset,
1045 bfd_size_type count));
1046
1047 boolean
1048 bfd_get_section_contents
1049 PARAMS ((bfd *abfd, asection *section, PTR location,
1050 file_ptr offset, bfd_size_type count));
1051
1052 boolean
1053 bfd_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))
1058 enum 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
1079 /* start-sanitize-i960xl */
1080 #define bfd_mach_i960_xl 7
1081 /* end-sanitize-i960xl */
1082
1083 bfd_arch_a29k, /* AMD 29000 */
1084 bfd_arch_sparc, /* SPARC */
1085 #define bfd_mach_sparc 1
1086 #define bfd_mach_sparc64 2
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
1100 bfd_arch_powerpc, /* PowerPC */
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 */
1109 bfd_arch_arm, /* Advanced Risc Machines ARM */
1110 bfd_arch_ns32k, /* National Semiconductors ns32000 */
1111 bfd_arch_w65, /* WDC 65816 */
1112 /* start-sanitize-rce */
1113 bfd_arch_rce, /* Motorola RCE */
1114 /* end-sanitize-rce */
1115 /* start-sanitize-arc */
1116 bfd_arch_arc, /* Argonaut RISC Core */
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
1121 /* end-sanitize-arc */
1122 bfd_arch_last
1123 };
1124
1125 typedef 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;
1152 CONST char *
1153 bfd_printable_name PARAMS ((bfd *abfd));
1154
1155 bfd_arch_info_type *
1156 bfd_scan_arch PARAMS ((CONST char *string));
1157
1158 CONST bfd_arch_info_type *
1159 bfd_arch_get_compatible PARAMS ((
1160 CONST bfd *abfd,
1161 CONST bfd *bbfd));
1162
1163 void
1164 bfd_set_arch_info PARAMS ((bfd *abfd, bfd_arch_info_type *arg));
1165
1166 enum bfd_architecture
1167 bfd_get_arch PARAMS ((bfd *abfd));
1168
1169 unsigned long
1170 bfd_get_mach PARAMS ((bfd *abfd));
1171
1172 unsigned int
1173 bfd_arch_bits_per_byte PARAMS ((bfd *abfd));
1174
1175 unsigned int
1176 bfd_arch_bits_per_address PARAMS ((bfd *abfd));
1177
1178 bfd_arch_info_type *
1179 bfd_get_arch_info PARAMS ((bfd *abfd));
1180
1181 bfd_arch_info_type *
1182 bfd_lookup_arch
1183 PARAMS ((enum bfd_architecture
1184 arch,
1185 long machine));
1186
1187 CONST char *
1188 bfd_printable_arch_mach
1189 PARAMS ((enum bfd_architecture arch, unsigned long machine));
1190
1191 typedef enum bfd_reloc_status
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
1205 /* Unsupported relocation size requested. */
1206 bfd_reloc_notsupported,
1207
1208 /* Unused */
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
1216 symbols. If this type is returned, the error_message argument
1217 to bfd_perform_relocation will be set. */
1218 bfd_reloc_dangerous
1219 }
1220 bfd_reloc_status_type;
1221
1222
1223 typedef struct reloc_cache_entry
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 */
1232 bfd_vma addend;
1233
1234 /* Pointer to how to perform the required relocation */
1235 reloc_howto_type *howto;
1236
1237 } arelent;
1238 enum 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 };
1255
1256 struct reloc_howto_struct
1257 {
1258 /* The type field has mainly a documetary use - the back end can
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
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
1270 /* The size of the item to be relocated. This is *not* a
1271 power-of-two measure. To get the number of bytes operated
1272 on by a type of relocation, use bfd_get_reloc_size. */
1273 int size;
1274
1275 /* The number of bits in the item to be relocated. This is used
1276 when doing overflow checking. */
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
1285 /* The bit position of the reloc value in the destination.
1286 The relocated value is left shifted by this amount. */
1287 unsigned int bitpos;
1288
1289 /* What type of overflow error should be checked for when
1290 relocating. */
1291 enum complain_overflow complain_on_overflow;
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). */
1297 bfd_reloc_status_type (*special_function)
1298 PARAMS ((bfd *abfd,
1299 arelent *reloc_entry,
1300 struct symbol_cache_entry *symbol,
1301 PTR data,
1302 asection *input_section,
1303 bfd *output_bfd,
1304 char **error_message));
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
1313 /* The src_mask selects which parts of the read in data
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
1322 /* The dst_mask selects which parts of the instruction are replaced
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. */
1326 bfd_vma dst_mask;
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
1333 empty (e.g., m88k bcs); this flag signals the fact.*/
1334 boolean pcrel_offset;
1335
1336 };
1337 #define HOWTO(C, R,S,B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
1338 {(unsigned)C,R,S,B, P, BI, O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
1339 #define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,complain_overflow_dont,FUNCTION, NAME,false,0,0,IN)
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 } \
1351 }
1352 int
1353 bfd_get_reloc_size PARAMS ((reloc_howto_type *));
1354
1355 typedef struct relent_chain {
1356 arelent relent;
1357 struct relent_chain *next;
1358 } arelent_chain;
1359 bfd_reloc_status_type
1360
1361 bfd_perform_relocation
1362 PARAMS ((bfd *abfd,
1363 arelent *reloc_entry,
1364 PTR data,
1365 asection *input_section,
1366 bfd *output_bfd,
1367 char **error_message));
1368
1369 bfd_reloc_status_type
1370
1371 bfd_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
1378 enum bfd_reloc_code_real {
1379 _dummy_first_bfd_reloc_code_real,
1380
1381
1382 /* Basic absolute relocations of N bits. */
1383 BFD_RELOC_64,
1384 BFD_RELOC_32,
1385 BFD_RELOC_26,
1386 BFD_RELOC_16,
1387 BFD_RELOC_14,
1388 BFD_RELOC_8,
1389
1390 /* PC-relative relocations. Sometimes these are relative to the address
1391 of the relocation itself; sometimes they are relative to the start of
1392 the section containing the relocation. It depends on the specific target.
1393
1394 The 24-bit relocation is used in some Intel 960 configurations. */
1395 BFD_RELOC_64_PCREL,
1396 BFD_RELOC_32_PCREL,
1397 BFD_RELOC_24_PCREL,
1398 BFD_RELOC_16_PCREL,
1399 BFD_RELOC_12_PCREL,
1400 BFD_RELOC_8_PCREL,
1401
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
1421 /* Linkage-table relative. */
1422 BFD_RELOC_32_BASEREL,
1423 BFD_RELOC_16_BASEREL,
1424 BFD_RELOC_8_BASEREL,
1425 BFD_RELOC_RVA,
1426
1427 /* Absolute 8-bit relocation, but used to form an address like 0xFFnn. */
1428 BFD_RELOC_8_FFnn,
1429
1430 /* These PC-relative relocations are stored as word displacements --
1431 i.e., byte displacements shifted right two bits. The 30-bit word
1432 displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
1433 SPARC. (SPARC tools generally refer to this as <<WDISP30>>.) The
1434 signed 16-bit displacement is used on the MIPS, and the 23-bit
1435 displacement is used on the Alpha. */
1436 BFD_RELOC_32_PCREL_S2,
1437 BFD_RELOC_16_PCREL_S2,
1438 BFD_RELOC_23_PCREL_S2,
1439
1440 /* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
1441 the target word. These are used on the SPARC. */
1442 BFD_RELOC_HI22,
1443 BFD_RELOC_LO10,
1444
1445 /* For systems that allocate a Global Pointer register, these are
1446 displacements off that register. These relocation types are
1447 handled specially, because the value the register will have is
1448 decided relatively late. */
1449 BFD_RELOC_GPREL16,
1450 BFD_RELOC_GPREL32,
1451
1452 /* Reloc types used for i960/b.out. */
1453 BFD_RELOC_I960_CALLJ,
1454
1455 /* SPARC ELF relocations. There is probably some overlap with other
1456 relocation types already defined. */
1457 BFD_RELOC_NONE,
1458 BFD_RELOC_SPARC_WDISP22,
1459 BFD_RELOC_SPARC22,
1460 BFD_RELOC_SPARC13,
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
1473 /* I think these are specific to SPARC a.out (e.g., Sun 4). */
1474 BFD_RELOC_SPARC_BASE13,
1475 BFD_RELOC_SPARC_BASE22,
1476
1477 /* Some relocations we're using for SPARC V9 -- subject to change. */
1478 #define BFD_RELOC_SPARC_64 BFD_RELOC_64
1479 BFD_RELOC_SPARC_10,
1480 BFD_RELOC_SPARC_11,
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,
1489 BFD_RELOC_SPARC_WDISP19,
1490 BFD_RELOC_SPARC_GLOB_JMP,
1491 BFD_RELOC_SPARC_LO7,
1492
1493 /* Alpha ECOFF relocations. Some of these treat the symbol or "addend"
1494 in some special way.
1495 For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
1496 writing; when reading, it will be the absolute section symbol. The
1497 addend is the displacement in bytes of the "lda" instruction from
1498 the "ldah" instruction (which is at the address of this reloc). */
1499 BFD_RELOC_ALPHA_GPDISP_HI16,
1500
1501 /* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
1502 with GPDISP_HI16 relocs. The addend is ignored when writing the
1503 relocations out, and is filled in with the file's GP value on
1504 reading, for convenience. */
1505 BFD_RELOC_ALPHA_GPDISP_LO16,
1506
1507 /* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
1508 the assembler turns it into a LDQ instruction to load the address of
1509 the symbol, and then fills in a register in the real instruction.
1510
1511 The LITERAL reloc, at the LDQ instruction, refers to the .lita
1512 section symbol. The addend is ignored when writing, but is filled
1513 in with the file's GP value on reading, for convenience, as with the
1514 GPDISP_LO16 reloc.
1515
1516 The LITUSE reloc, on the instruction using the loaded address, gives
1517 information to the linker that it might be able to use to optimize
1518 away some literal section references. The symbol is ignored (read
1519 as the absolute section symbol), and the "addend" indicates the type
1520 of instruction using the register:
1521 1 - "memory" fmt insn
1522 2 - byte-manipulation (byte offset reg)
1523 3 - jsr (target of branch)
1524
1525 The GNU linker currently doesn't do any of this optimizing. */
1526 BFD_RELOC_ALPHA_LITERAL,
1527 BFD_RELOC_ALPHA_LITUSE,
1528
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-
1531 prediction logic which may be provided on some processors. */
1532 BFD_RELOC_ALPHA_HINT,
1533
1534 /* Bits 27..2 of the relocation address shifted right 2 bits;
1535 simple reloc otherwise. */
1536 BFD_RELOC_MIPS_JMP,
1537
1538 /* High 16 bits of 32-bit value; simple reloc. */
1539 BFD_RELOC_HI16,
1540
1541 /* High 16 bits of 32-bit value but the low 16 bits will be sign
1542 extended and added to form the final result. If the low 16
1543 bits form a negative number, we need to add one to the high value
1544 to compensate for the borrow when the low bits are added. */
1545 BFD_RELOC_HI16_S,
1546
1547 /* Low 16 bits. */
1548 BFD_RELOC_LO16,
1549
1550 /* Like BFD_RELOC_HI16_S, but PC relative. */
1551 BFD_RELOC_PCREL_HI16_S,
1552
1553 /* Like BFD_RELOC_LO16, but PC relative. */
1554 BFD_RELOC_PCREL_LO16,
1555
1556 /* Relocation relative to the global pointer. */
1557 #define BFD_RELOC_MIPS_GPREL BFD_RELOC_GPREL16
1558
1559 /* Relocation against a MIPS literal section. */
1560 BFD_RELOC_MIPS_LITERAL,
1561
1562 /* MIPS ELF relocations. */
1563 BFD_RELOC_MIPS_GOT16,
1564 BFD_RELOC_MIPS_CALL16,
1565 #define BFD_RELOC_MIPS_GPREL32 BFD_RELOC_GPREL32
1566
1567 /* i386/elf relocations */
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
1577 /* ns32k relocations */
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
1591 /* PowerPC/POWER (RS/6000) relocs.
1592 26 bit relative branch. Low two bits must be zero. High 24
1593 bits installed in bits 6 through 29 of instruction. */
1594 BFD_RELOC_PPC_B26,
1595
1596 /* 26 bit absolute branch, like BFD_RELOC_PPC_B26 but absolute. */
1597 BFD_RELOC_PPC_BA26,
1598
1599 /* 16 bit TOC relative reference. */
1600 BFD_RELOC_PPC_TOC16,
1601
1602 /* The type of reloc used to build a contructor table - at the moment
1603 probably a 32 bit wide absolute relocation, but the target can choose.
1604 It generally does map to one of the other relocation types. */
1605 BFD_RELOC_CTOR,
1606
1607 /* ARM 26 bit pc-relative branch. The lowest two bits must be zero and are
1608 not 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,
1619 BFD_RELOC_ARM_ADR_IMM,
1620 BFD_RELOC_ARM_LDR_IMM,
1621 BFD_RELOC_ARM_LITERAL,
1622 BFD_RELOC_ARM_IN_POOL,
1623 /* start-sanitize-arc */
1624
1625 /* Argonaut RISC Core (ARC) relocs.
1626 ARC 22 bit pc-relative branch. The lowest two bits must be zero and are
1627 not stored in the instruction. The high 20 bits are installed in bits 26
1628 through 7 of the instruction. */
1629 BFD_RELOC_ARC_B22_PCREL,
1630
1631 /* ARC 26 bit absolute branch. The lowest two bits must be zero and are not
1632 stored in the instruction. The high 24 bits are installed in bits 23
1633 through 0. */
1634 BFD_RELOC_ARC_B26,
1635 /* end-sanitize-arc */
1636 BFD_RELOC_UNUSED };
1637 typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
1638 reloc_howto_type *
1639
1640 bfd_reloc_type_lookup PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
1641
1642 const char *
1643 bfd_get_reloc_code_name PARAMS ((bfd_reloc_code_real_type code));
1644
1645
1646 typedef struct symbol_cache_entry
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
1660 /* The text of the symbol. The name is left alone, and not copied; the
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
1681 /* The symbol has global scope and is exported. The value is
1682 the offset into the section of the data. */
1683 #define BSF_EXPORT BSF_GLOBAL /* no real difference */
1684
1685 /* A normal C symbol would be one of:
1686 <<BSF_LOCAL>>, <<BSF_FORT_COMM>>, <<BSF_UNDEFINED>> or
1687 <<BSF_GLOBAL>> */
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
1701 /* A weak global symbol, overridable without warnings by
1702 a regular global symbol of the same name. */
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
1742 /* Symbol is from dynamic linking information. */
1743 #define BSF_DYNAMIC 0x8000
1744
1745 flagword flags;
1746
1747 /* A pointer to the section to which this symbol is
1748 relative. This will always be non NULL, there are special
1749 sections for undefined and absolute symbols. */
1750 struct sec *section;
1751
1752 /* Back end special data. */
1753 union
1754 {
1755 PTR p;
1756 bfd_vma i;
1757 } udata;
1758
1759 } asymbol;
1760 #define bfd_get_symtab_upper_bound(abfd) \
1761 BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
1762 boolean
1763 bfd_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))
1767 #define bfd_canonicalize_symtab(abfd, location) \
1768 BFD_SEND (abfd, _bfd_canonicalize_symtab,\
1769 (abfd, location))
1770 boolean
1771 bfd_set_symtab PARAMS ((bfd *abfd, asymbol **location, unsigned int count));
1772
1773 void
1774 bfd_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))
1780 int
1781 bfd_decode_symclass PARAMS ((asymbol *symbol));
1782
1783 void
1784 bfd_symbol_info PARAMS ((asymbol *symbol, symbol_info *ret));
1785
1786 boolean
1787 bfd_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))
1792 struct _bfd
1793 {
1794 /* The filename the application opened the BFD with. */
1795 CONST char *filename;
1796
1797 /* A pointer to the target jump table. */
1798 const struct bfd_target *xvec;
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
1807 /* Is the file descriptor being cached? That is, can it be closed as
1808 needed, and re-opened when accessed later? */
1809
1810 boolean cacheable;
1811
1812 /* Marks whether there was a default target specified when the
1813 BFD was opened. This is used to select which matching algorithm
1814 to use to choose the back end. */
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
1824 state information on the file here: */
1825
1826 file_ptr where;
1827
1828 /* and here: (``once'' means at least once) */
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
1845 /* The format which belongs to the BFD. (object, core, etc.) */
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
1867 from happening. */
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
1883 /* Symbol table for output BFD (with symcount entries) */
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;
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. */
1894 boolean has_armap;
1895
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
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;
1918 struct nlm_obj_tdata *nlm_obj_data;
1919 struct bout_data_struct *bout_data;
1920 struct sun_core_struct *sun_core_data;
1921 struct trad_core_struct *trad_core_data;
1922 struct som_data_struct *som_data;
1923 struct hpux_core_struct *hpux_core_data;
1924 struct hppabsd_core_struct *hppabsd_core_data;
1925 struct sgi_core_struct *sgi_core_data;
1926 struct lynx_core_struct *lynx_core_data;
1927 struct osf_core_struct *osf_core_data;
1928 struct cisco_core_struct *cisco_core_data;
1929 struct versados_data_struct *versados_data;
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;
1938 };
1939
1940 typedef enum bfd_error
1941 {
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,
1949 bfd_error_no_armap,
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,
1959 bfd_error_file_too_big,
1960 bfd_error_invalid_error_code
1961 } bfd_error_type;
1962
1963 bfd_error_type
1964 bfd_get_error PARAMS ((void));
1965
1966 void
1967 bfd_set_error PARAMS ((bfd_error_type error_tag));
1968
1969 CONST char *
1970 bfd_errmsg PARAMS ((bfd_error_type error_tag));
1971
1972 void
1973 bfd_perror PARAMS ((CONST char *message));
1974
1975 typedef void (*bfd_error_handler_type) PARAMS ((const char *, ...));
1976
1977 bfd_error_handler_type
1978 bfd_set_error_handler PARAMS ((bfd_error_handler_type));
1979
1980 void
1981 bfd_set_error_program_name PARAMS ((const char *));
1982
1983 long
1984 bfd_get_reloc_upper_bound PARAMS ((bfd *abfd, asection *sect));
1985
1986 long
1987 bfd_canonicalize_reloc
1988 PARAMS ((bfd *abfd,
1989 asection *sec,
1990 arelent **loc,
1991 asymbol **syms));
1992
1993 void
1994 bfd_set_reloc
1995 PARAMS ((bfd *abfd, asection *sec, arelent **rel, unsigned int count)
1996
1997 );
1998
1999 boolean
2000 bfd_set_file_flags PARAMS ((bfd *abfd, flagword flags));
2001
2002 boolean
2003 bfd_set_start_address PARAMS ((bfd *abfd, bfd_vma vma));
2004
2005 long
2006 bfd_get_mtime PARAMS ((bfd *abfd));
2007
2008 long
2009 bfd_get_size PARAMS ((bfd *abfd));
2010
2011 int
2012 bfd_get_gp_size PARAMS ((bfd *abfd));
2013
2014 void
2015 bfd_set_gp_size PARAMS ((bfd *abfd, int i));
2016
2017 bfd_vma
2018 bfd_scan_vma PARAMS ((CONST char *string, CONST char **end, int base));
2019
2020 boolean
2021 bfd_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))
2026 boolean
2027 bfd_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))
2032 boolean
2033 bfd_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))
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
2058 #define bfd_update_armap_timestamp(abfd) \
2059 BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
2060
2061 #define bfd_set_arch_mach(abfd, arch, mach)\
2062 BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
2063
2064 #define bfd_relax_section(abfd, section, link_info, again) \
2065 BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
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))
2075
2076 #define bfd_free_cached_info(abfd) \
2077 BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
2078
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
2091 extern 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
2096 symindex
2097 bfd_get_next_mapent PARAMS ((bfd *abfd, symindex previous, carsym **sym));
2098
2099 boolean
2100 bfd_set_archive_head PARAMS ((bfd *output, bfd *new_head));
2101
2102 bfd *
2103 bfd_get_elt_at_index PARAMS ((bfd *archive, int index));
2104
2105 bfd *
2106 bfd_openr_next_archived_file PARAMS ((bfd *archive, bfd *previous));
2107
2108 CONST char *
2109 bfd_core_file_failing_command PARAMS ((bfd *abfd));
2110
2111 int
2112 bfd_core_file_failing_signal PARAMS ((bfd *abfd));
2113
2114 boolean
2115 core_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)
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
2128 #define BFD_SEND_FMT(bfd, message, arglist) \
2129 (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
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
2138 enum 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,
2149 bfd_target_som_flavour,
2150 bfd_target_os9k_flavour,
2151 bfd_target_versados_flavour,
2152 bfd_target_msdos_flavour
2153 };
2154
2155 /* Forward declaration. */
2156 typedef struct bfd_link_info _bfd_link_info;
2157
2158 typedef struct bfd_target
2159 {
2160 char *name;
2161 enum bfd_flavour flavour;
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;
2170 bfd_vma (*bfd_getx64) PARAMS ((const bfd_byte *));
2171 bfd_signed_vma (*bfd_getx_signed_64) PARAMS ((const bfd_byte *));
2172 void (*bfd_putx64) PARAMS ((bfd_vma, bfd_byte *));
2173 bfd_vma (*bfd_getx32) PARAMS ((const bfd_byte *));
2174 bfd_signed_vma (*bfd_getx_signed_32) PARAMS ((const bfd_byte *));
2175 void (*bfd_putx32) PARAMS ((bfd_vma, bfd_byte *));
2176 bfd_vma (*bfd_getx16) PARAMS ((const bfd_byte *));
2177 bfd_signed_vma (*bfd_getx_signed_16) PARAMS ((const bfd_byte *));
2178 void (*bfd_putx16) PARAMS ((bfd_vma, bfd_byte *));
2179 bfd_vma (*bfd_h_getx64) PARAMS ((const bfd_byte *));
2180 bfd_signed_vma (*bfd_h_getx_signed_64) PARAMS ((const bfd_byte *));
2181 void (*bfd_h_putx64) PARAMS ((bfd_vma, bfd_byte *));
2182 bfd_vma (*bfd_h_getx32) PARAMS ((const bfd_byte *));
2183 bfd_signed_vma (*bfd_h_getx_signed_32) PARAMS ((const bfd_byte *));
2184 void (*bfd_h_putx32) PARAMS ((bfd_vma, bfd_byte *));
2185 bfd_vma (*bfd_h_getx16) PARAMS ((const bfd_byte *));
2186 bfd_signed_vma (*bfd_h_getx_signed_16) PARAMS ((const bfd_byte *));
2187 void (*bfd_h_putx16) PARAMS ((bfd_vma, bfd_byte *));
2188 const struct bfd_target *(*_bfd_check_format[bfd_type_end]) PARAMS ((bfd *));
2189 boolean (*_bfd_set_format[bfd_type_end]) PARAMS ((bfd *));
2190 boolean (*_bfd_write_contents[bfd_type_end]) PARAMS ((bfd *));
2191
2192 /* Generic entry points. */
2193 #define BFD_JUMP_TABLE_GENERIC(NAME)\
2194 CAT(NAME,_close_and_cleanup),\
2195 CAT(NAME,_bfd_free_cached_info),\
2196 CAT(NAME,_new_section_hook),\
2197 CAT(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)\
2210 CAT(NAME,_bfd_copy_private_bfd_data),\
2211 CAT(NAME,_bfd_merge_private_bfd_data),\
2212 CAT(NAME,_bfd_copy_private_section_data),\
2213 CAT(NAME,_bfd_copy_private_symbol_data),\
2214 CAT(NAME,_bfd_set_private_flags)
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 *));
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 *));
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));
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 *));
2229 /* Called to set private backend flags */
2230 boolean (*_bfd_set_private_flags) PARAMS ((bfd *, flagword));
2231
2232 /* Core file entry points. */
2233 #define BFD_JUMP_TABLE_CORE(NAME)\
2234 CAT(NAME,_core_file_failing_command),\
2235 CAT(NAME,_core_file_failing_signal),\
2236 CAT(NAME,_core_file_matches_executable_p)
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 *));
2240
2241 /* Archive entry points. */
2242 #define BFD_JUMP_TABLE_ARCHIVE(NAME)\
2243 CAT(NAME,_slurp_armap),\
2244 CAT(NAME,_slurp_extended_name_table),\
2245 CAT(NAME,_construct_extended_name_table),\
2246 CAT(NAME,_truncate_arname),\
2247 CAT(NAME,_write_armap),\
2248 CAT(NAME,_openr_next_archived_file),\
2249 CAT(NAME,_generic_stat_arch_elt),\
2250 CAT(NAME,_update_armap_timestamp)
2251 boolean (*_bfd_slurp_armap) PARAMS ((bfd *));
2252 boolean (*_bfd_slurp_extended_name_table) PARAMS ((bfd *));
2253 boolean (*_bfd_construct_extended_name_table)
2254 PARAMS ((bfd *, char **, bfd_size_type *, const char **));
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));
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
2265 /* Entry points used for symbols. */
2266 #define BFD_JUMP_TABLE_SYMBOLS(NAME)\
2267 CAT(NAME,_get_symtab_upper_bound),\
2268 CAT(NAME,_get_symtab),\
2269 CAT(NAME,_make_empty_symbol),\
2270 CAT(NAME,_print_symbol),\
2271 CAT(NAME,_get_symbol_info),\
2272 CAT(NAME,_bfd_is_local_label),\
2273 CAT(NAME,_get_lineno),\
2274 CAT(NAME,_find_nearest_line),\
2275 CAT(NAME,_bfd_make_debug_symbol),\
2276 CAT(NAME,_read_minisymbols),\
2277 CAT(NAME,_minisymbol_to_symbol)
2278 long (*_bfd_get_symtab_upper_bound) PARAMS ((bfd *));
2279 long (*_bfd_canonicalize_symtab) PARAMS ((bfd *,
2280 struct symbol_cache_entry **));
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))
2291 boolean (*_bfd_is_local_label) PARAMS ((bfd *, asymbol *));
2292
2293 alent * (*_get_lineno) PARAMS ((bfd *, struct symbol_cache_entry *));
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));
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. */
2301 asymbol * (*_bfd_make_debug_symbol) PARAMS ((
2302 bfd *abfd,
2303 void *ptr,
2304 unsigned long size));
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 *));
2313
2314 /* Routines for relocs. */
2315 #define BFD_JUMP_TABLE_RELOCS(NAME)\
2316 CAT(NAME,_get_reloc_upper_bound),\
2317 CAT(NAME,_canonicalize_reloc),\
2318 CAT(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. */
2323 reloc_howto_type *
2324 (*reloc_type_lookup) PARAMS ((bfd *abfd,
2325 bfd_reloc_code_real_type code));
2326
2327 /* Routines used when writing an object file. */
2328 #define BFD_JUMP_TABLE_WRITE(NAME)\
2329 CAT(NAME,_set_arch_mach),\
2330 CAT(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));
2335
2336 /* Routines used by the linker. */
2337 #define BFD_JUMP_TABLE_LINK(NAME)\
2338 CAT(NAME,_sizeof_headers),\
2339 CAT(NAME,_bfd_get_relocated_section_contents),\
2340 CAT(NAME,_bfd_relax_section),\
2341 CAT(NAME,_bfd_link_hash_table_create),\
2342 CAT(NAME,_bfd_link_add_symbols),\
2343 CAT(NAME,_bfd_final_link),\
2344 CAT(NAME,_bfd_link_split_section)
2345 int (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean));
2346 bfd_byte * (*_bfd_get_relocated_section_contents) PARAMS ((bfd *,
2347 struct bfd_link_info *, struct bfd_link_order *,
2348 bfd_byte *data, boolean relocateable,
2349 struct symbol_cache_entry **));
2350
2351 boolean (*_bfd_relax_section) PARAMS ((bfd *, struct sec *,
2352 struct bfd_link_info *, boolean *again));
2353
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
2365 /* Should this section be split up into smaller pieces during linking. */
2366 boolean (*_bfd_link_split_section) PARAMS ((bfd *, struct sec *));
2367
2368 /* Routines to handle dynamic symbols and relocs. */
2369 #define BFD_JUMP_TABLE_DYNAMIC(NAME)\
2370 CAT(NAME,_get_dynamic_symtab_upper_bound),\
2371 CAT(NAME,_canonicalize_dynamic_symtab),\
2372 CAT(NAME,_get_dynamic_reloc_upper_bound),\
2373 CAT(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 **));
2384
2385 PTR backend_data;
2386 } bfd_target;
2387 const bfd_target *
2388 bfd_find_target PARAMS ((CONST char *target_name, bfd *abfd));
2389
2390 const char **
2391 bfd_target_list PARAMS ((void));
2392
2393 boolean
2394 bfd_check_format PARAMS ((bfd *abfd, bfd_format format));
2395
2396 boolean
2397 bfd_check_format_matches PARAMS ((bfd *abfd, bfd_format format, char ***matching));
2398
2399 boolean
2400 bfd_set_format PARAMS ((bfd *abfd, bfd_format format));
2401
2402 CONST char *
2403 bfd_format_string PARAMS ((bfd_format format));
2404
2405 #ifdef __cplusplus
2406 }
2407 #endif
2408 #endif