OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [bfd/] [bfd-in2.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.