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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [bfd/] [bfd-in.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* Main header file for the bfd library -- portable access to object files.
2
   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3
   2000, 2001, 2002
4
   Free Software Foundation, Inc.
5
   Contributed by Cygnus Support.
6
 
7
   This file is part of BFD, the Binary File Descriptor library.
8
 
9
   This program is free software; you can redistribute it and/or modify
10
   it under the terms of the GNU General Public License as published by
11
   the Free Software Foundation; either version 2 of the License, or
12
   (at your option) any later version.
13
 
14
   This program is distributed in the hope that it will be useful,
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   You should have received a copy of the GNU General Public License
20
   along with this program; if not, write to the Free Software
21
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22
 
23
#ifndef __BFD_H_SEEN__
24
#define __BFD_H_SEEN__
25
 
26
#ifdef __cplusplus
27
extern "C" {
28
#endif
29
 
30
#include "ansidecl.h"
31
#include "symcat.h"
32
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
33
#ifndef SABER
34
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
35
   The problem is, "32_" is not a valid preprocessing token, and we don't
36
   want extra underscores (e.g., "nlm_32_").  The XCONCAT2 macro will
37
   cause the inner CONCAT2 macros to be evaluated first, producing
38
   still-valid pp-tokens.  Then the final concatenation can be done.  */
39
#undef CONCAT4
40
#define CONCAT4(a,b,c,d) XCONCAT2(CONCAT2(a,b),CONCAT2(c,d))
41
#endif
42
#endif
43
 
44
#define BFD_VERSION @bfd_version@
45
#define BFD_VERSION_DATE @bfd_version_date@
46
#define BFD_VERSION_STRING @bfd_version_string@
47
 
48
/* The word size used by BFD on the host.  This may be 64 with a 32
49
   bit target if the host is 64 bit, or if other 64 bit targets have
50
   been selected with --enable-targets, or if --enable-64-bit-bfd.  */
51
#define BFD_ARCH_SIZE @wordsize@
52
 
53
/* The word size of the default bfd target.  */
54
#define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@
55
 
56
#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@
57
#if @BFD_HOST_64_BIT_DEFINED@
58
#define BFD_HOST_64_BIT @BFD_HOST_64_BIT@
59
#define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@
60
#endif
61
 
62
#if BFD_ARCH_SIZE >= 64
63
#define BFD64
64
#endif
65
 
66
#ifndef INLINE
67
#if __GNUC__ >= 2
68
#define INLINE __inline__
69
#else
70
#define INLINE
71
#endif
72
#endif
73
 
74
/* Forward declaration.  */
75
typedef struct _bfd bfd;
76
 
77
/* To squelch erroneous compiler warnings ("illegal pointer
78
   combination") from the SVR3 compiler, we would like to typedef
79
   boolean to int (it doesn't like functions which return boolean.
80
   Making sure they are never implicitly declared to return int
81
   doesn't seem to help).  But this file is not configured based on
82
   the host.  */
83
/* General rules: functions which are boolean return true on success
84
   and false on failure (unless they're a predicate).   -- bfd.doc */
85
/* I'm sure this is going to break something and someone is going to
86
   force me to change it.  */
87
/* typedef enum boolean {false, true} boolean; */
88
/* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h>  -fnf */
89
/* It gets worse if the host also defines a true/false enum... -sts */
90
/* And even worse if your compiler has built-in boolean types... -law */
91
/* And even worse if your compiler provides a stdbool.h that conflicts
92
   with these definitions... gcc 2.95 and later do.  If so, it must
93
   be included first.  -drow */
94
#if defined (__GNUG__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6))
95
#define TRUE_FALSE_ALREADY_DEFINED
96
#else
97
#if defined (__bool_true_false_are_defined)
98
/* We have <stdbool.h>.  */
99
#define TRUE_FALSE_ALREADY_DEFINED
100
#endif
101
#endif
102
#ifdef MPW
103
/* Pre-emptive strike - get the file with the enum.  */
104
#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
/* Support for different sizes of target format ints and addresses.
116
   If the type `long' is at least 64 bits, BFD_HOST_64BIT_LONG will be
117
   set to 1 above.  Otherwise, if gcc is being used, this code will
118
   use gcc's "long long" type.  Otherwise, BFD_HOST_64_BIT must be
119
   defined above.  */
120
 
121
#ifndef BFD_HOST_64_BIT
122
# if BFD_HOST_64BIT_LONG
123
#  define BFD_HOST_64_BIT long
124
#  define BFD_HOST_U_64_BIT unsigned long
125
# else
126
#  ifdef __GNUC__
127
#   if __GNUC__ >= 2
128
#    define BFD_HOST_64_BIT long long
129
#    define BFD_HOST_U_64_BIT unsigned long long
130
#   endif /* __GNUC__ >= 2 */
131
#  endif /* ! defined (__GNUC__) */
132
# endif /* ! BFD_HOST_64BIT_LONG */
133
#endif /* ! defined (BFD_HOST_64_BIT) */
134
 
135
#ifdef BFD64
136
 
137
#ifndef BFD_HOST_64_BIT
138
 #error No 64 bit integer type available
139
#endif /* ! defined (BFD_HOST_64_BIT) */
140
 
141
typedef BFD_HOST_U_64_BIT bfd_vma;
142
typedef BFD_HOST_64_BIT bfd_signed_vma;
143
typedef BFD_HOST_U_64_BIT bfd_size_type;
144
typedef BFD_HOST_U_64_BIT symvalue;
145
 
146
#ifndef fprintf_vma
147
#if BFD_HOST_64BIT_LONG
148
#define sprintf_vma(s,x) sprintf (s, "%016lx", x)
149
#define fprintf_vma(f,x) fprintf (f, "%016lx", x)
150
#else
151
#define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff)))
152
#define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff))
153
#define fprintf_vma(s,x) \
154
  fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x))
155
#define sprintf_vma(s,x) \
156
  sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x))
157
#endif
158
#endif
159
 
160
#else /* not BFD64  */
161
 
162
/* Represent a target address.  Also used as a generic unsigned type
163
   which is guaranteed to be big enough to hold any arithmetic types
164
   we need to deal with.  */
165
typedef unsigned long bfd_vma;
166
 
167
/* A generic signed type which is guaranteed to be big enough to hold any
168
   arithmetic types we need to deal with.  Can be assumed to be compatible
169
   with bfd_vma in the same way that signed and unsigned ints are compatible
170
   (as parameters, in assignment, etc).  */
171
typedef long bfd_signed_vma;
172
 
173
typedef unsigned long symvalue;
174
typedef unsigned long bfd_size_type;
175
 
176
/* Print a bfd_vma x on stream s.  */
177
#define fprintf_vma(s,x) fprintf (s, "%08lx", x)
178
#define sprintf_vma(s,x) sprintf (s, "%08lx", x)
179
 
180
#endif /* not BFD64  */
181
 
182
/* A pointer to a position in a file.  */
183
/* FIXME:  This should be using off_t from <sys/types.h>.
184
   For now, try to avoid breaking stuff by not including <sys/types.h> here.
185
   This will break on systems with 64-bit file offsets (e.g. 4.4BSD).
186
   Probably the best long-term answer is to avoid using file_ptr AND off_t
187
   in this header file, and to handle this in the BFD implementation
188
   rather than in its interface.  */
189
/* typedef off_t        file_ptr; */
190
typedef bfd_signed_vma file_ptr;
191
typedef bfd_vma ufile_ptr;
192
 
193
extern void bfd_sprintf_vma PARAMS ((bfd *, char *, bfd_vma));
194
extern void bfd_fprintf_vma PARAMS ((bfd *, PTR, bfd_vma));
195
 
196
#define printf_vma(x) fprintf_vma(stdout,x)
197
#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x)
198
 
199
typedef unsigned int flagword;  /* 32 bits of flags */
200
typedef unsigned char bfd_byte;
201
 
202
/* File formats.  */
203
 
204
typedef enum bfd_format
205
{
206
  bfd_unknown = 0,       /* File format is unknown.  */
207
  bfd_object,           /* Linker/assember/compiler output.  */
208
  bfd_archive,          /* Object archive file.  */
209
  bfd_core,             /* Core dump.  */
210
  bfd_type_end          /* Marks the end; don't use it!  */
211
}
212
bfd_format;
213
 
214
/* Values that may appear in the flags field of a BFD.  These also
215
   appear in the object_flags field of the bfd_target structure, where
216
   they indicate the set of flags used by that backend (not all flags
217
   are meaningful for all object file formats) (FIXME: at the moment,
218
   the object_flags values have mostly just been copied from backend
219
   to another, and are not necessarily correct).  */
220
 
221
/* No flags.  */
222
#define BFD_NO_FLAGS    0x00
223
 
224
/* BFD contains relocation entries.  */
225
#define HAS_RELOC       0x01
226
 
227
/* BFD is directly executable.  */
228
#define EXEC_P          0x02
229
 
230
/* BFD has line number information (basically used for F_LNNO in a
231
   COFF header).  */
232
#define HAS_LINENO      0x04
233
 
234
/* BFD has debugging information.  */
235
#define HAS_DEBUG       0x08
236
 
237
/* BFD has symbols.  */
238
#define HAS_SYMS        0x10
239
 
240
/* BFD has local symbols (basically used for F_LSYMS in a COFF
241
   header).  */
242
#define HAS_LOCALS      0x20
243
 
244
/* BFD is a dynamic object.  */
245
#define DYNAMIC         0x40
246
 
247
/* Text section is write protected (if D_PAGED is not set, this is
248
   like an a.out NMAGIC file) (the linker sets this by default, but
249
   clears it for -r or -N).  */
250
#define WP_TEXT         0x80
251
 
252
/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
253
   linker sets this by default, but clears it for -r or -n or -N).  */
254
#define D_PAGED         0x100
255
 
256
/* BFD is relaxable (this means that bfd_relax_section may be able to
257
   do something) (sometimes bfd_relax_section can do something even if
258
   this is not set).  */
259
#define BFD_IS_RELAXABLE 0x200
260
 
261
/* This may be set before writing out a BFD to request using a
262
   traditional format.  For example, this is used to request that when
263
   writing out an a.out object the symbols not be hashed to eliminate
264
   duplicates.  */
265
#define BFD_TRADITIONAL_FORMAT 0x400
266
 
267
/* This flag indicates that the BFD contents are actually cached in
268
   memory.  If this is set, iostream points to a bfd_in_memory struct.  */
269
#define BFD_IN_MEMORY 0x800
270
 
271
/* The sections in this BFD specify a memory page.  */
272
#define HAS_LOAD_PAGE 0x1000
273
 
274
/* Symbols and relocation.  */
275
 
276
/* A count of carsyms (canonical archive symbols).  */
277
typedef unsigned long symindex;
278
 
279
/* How to perform a relocation.  */
280
typedef const struct reloc_howto_struct reloc_howto_type;
281
 
282
#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
283
 
284
/* General purpose part of a symbol X;
285
   target specific parts are in libcoff.h, libaout.h, etc.  */
286
 
287
#define bfd_get_section(x) ((x)->section)
288
#define bfd_get_output_section(x) ((x)->section->output_section)
289
#define bfd_set_section(x,y) ((x)->section) = (y)
290
#define bfd_asymbol_base(x) ((x)->section->vma)
291
#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value)
292
#define bfd_asymbol_name(x) ((x)->name)
293
/*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/
294
#define bfd_asymbol_bfd(x) ((x)->the_bfd)
295
#define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour)
296
 
297
/* A canonical archive symbol.  */
298
/* This is a type pun with struct ranlib on purpose!  */
299
typedef struct carsym
300
{
301
  char *name;
302
  file_ptr file_offset; /* Look here to find the file.  */
303
}
304
carsym;                 /* To make these you call a carsymogen.  */
305
 
306
/* Used in generating armaps (archive tables of contents).
307
   Perhaps just a forward definition would do?  */
308
struct orl                      /* Output ranlib.  */
309
{
310
  char **name;          /* Symbol name.  */
311
  union
312
  {
313
    file_ptr pos;
314
    bfd *abfd;
315
  } u;                  /* bfd* or file position.  */
316
  int namidx;           /* Index into string table.  */
317
};
318
 
319
/* Linenumber stuff.  */
320
typedef struct lineno_cache_entry
321
{
322
  unsigned int line_number;     /* Linenumber from start of function.  */
323
  union
324
  {
325
    struct symbol_cache_entry *sym;     /* Function name.  */
326
    bfd_vma offset;                     /* Offset into section.  */
327
  } u;
328
}
329
alent;
330
 
331
/* Object and core file sections.  */
332
 
333
#define align_power(addr, align)        \
334
  (((addr) + ((bfd_vma) 1 << (align)) - 1) & ((bfd_vma) -1 << (align)))
335
 
336
typedef struct sec *sec_ptr;
337
 
338
#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0)
339
#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0)
340
#define bfd_get_section_lma(bfd, ptr) ((ptr)->lma + 0)
341
#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0)
342
#define bfd_section_name(bfd, ptr) ((ptr)->name)
343
#define bfd_section_size(bfd, ptr) (bfd_get_section_size_before_reloc(ptr))
344
#define bfd_section_vma(bfd, ptr) ((ptr)->vma)
345
#define bfd_section_lma(bfd, ptr) ((ptr)->lma)
346
#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
347
#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0)
348
#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata)
349
 
350
#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
351
 
352
#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma = (val)), ((ptr)->user_set_vma = (boolean)true), true)
353
#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),true)
354
#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),true)
355
 
356
typedef struct stat stat_type;
357
 
358
typedef enum bfd_print_symbol
359
{
360
  bfd_print_symbol_name,
361
  bfd_print_symbol_more,
362
  bfd_print_symbol_all
363
} bfd_print_symbol_type;
364
 
365
/* Information about a symbol that nm needs.  */
366
 
367
typedef struct _symbol_info
368
{
369
  symvalue value;
370
  char type;
371
  const char *name;            /* Symbol name.  */
372
  unsigned char stab_type;     /* Stab type.  */
373
  char stab_other;             /* Stab other.  */
374
  short stab_desc;             /* Stab desc.  */
375
  const char *stab_name;       /* String for stab type.  */
376
} symbol_info;
377
 
378
/* Get the name of a stabs type code.  */
379
 
380
extern const char *bfd_get_stab_name PARAMS ((int));
381
 
382
/* Hash table routines.  There is no way to free up a hash table.  */
383
 
384
/* An element in the hash table.  Most uses will actually use a larger
385
   structure, and an instance of this will be the first field.  */
386
 
387
struct bfd_hash_entry
388
{
389
  /* Next entry for this hash code.  */
390
  struct bfd_hash_entry *next;
391
  /* String being hashed.  */
392
  const char *string;
393
  /* Hash code.  This is the full hash code, not the index into the
394
     table.  */
395
  unsigned long hash;
396
};
397
 
398
/* A hash table.  */
399
 
400
struct bfd_hash_table
401
{
402
  /* The hash array.  */
403
  struct bfd_hash_entry **table;
404
  /* The number of slots in the hash table.  */
405
  unsigned int size;
406
  /* A function used to create new elements in the hash table.  The
407
     first entry is itself a pointer to an element.  When this
408
     function is first invoked, this pointer will be NULL.  However,
409
     having the pointer permits a hierarchy of method functions to be
410
     built each of which calls the function in the superclass.  Thus
411
     each function should be written to allocate a new block of memory
412
     only if the argument is NULL.  */
413
  struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
414
                                             struct bfd_hash_table *,
415
                                             const char *));
416
   /* An objalloc for this hash table.  This is a struct objalloc *,
417
     but we use PTR to avoid requiring the inclusion of objalloc.h.  */
418
  PTR memory;
419
};
420
 
421
/* Initialize a hash table.  */
422
extern boolean bfd_hash_table_init
423
  PARAMS ((struct bfd_hash_table *,
424
           struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
425
                                       struct bfd_hash_table *,
426
                                       const char *)));
427
 
428
/* Initialize a hash table specifying a size.  */
429
extern boolean bfd_hash_table_init_n
430
  PARAMS ((struct bfd_hash_table *,
431
           struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
432
                                       struct bfd_hash_table *,
433
                                       const char *),
434
           unsigned int size));
435
 
436
/* Free up a hash table.  */
437
extern void bfd_hash_table_free PARAMS ((struct bfd_hash_table *));
438
 
439
/* Look up a string in a hash table.  If CREATE is true, a new entry
440
   will be created for this string if one does not already exist.  The
441
   COPY argument must be true if this routine should copy the string
442
   into newly allocated memory when adding an entry.  */
443
extern struct bfd_hash_entry *bfd_hash_lookup
444
  PARAMS ((struct bfd_hash_table *, const char *, boolean create,
445
           boolean copy));
446
 
447
/* Replace an entry in a hash table.  */
448
extern void bfd_hash_replace
449
  PARAMS ((struct bfd_hash_table *, struct bfd_hash_entry *old,
450
           struct bfd_hash_entry *nw));
451
 
452
/* Base method for creating a hash table entry.  */
453
extern struct bfd_hash_entry *bfd_hash_newfunc
454
  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
455
           const char *));
456
 
457
/* Grab some space for a hash table entry.  */
458
extern PTR bfd_hash_allocate PARAMS ((struct bfd_hash_table *,
459
                                      unsigned int));
460
 
461
/* Traverse a hash table in a random order, calling a function on each
462
   element.  If the function returns false, the traversal stops.  The
463
   INFO argument is passed to the function.  */
464
extern void bfd_hash_traverse PARAMS ((struct bfd_hash_table *,
465
                                       boolean (*) (struct bfd_hash_entry *,
466
                                                    PTR),
467
                                       PTR info));
468
 
469
#define COFF_SWAP_TABLE (PTR) &bfd_coff_std_swap_table
470
 
471
/* User program access to BFD facilities.  */
472
 
473
/* Direct I/O routines, for programs which know more about the object
474
   file than BFD does.  Use higher level routines if possible.  */
475
 
476
extern bfd_size_type bfd_bread PARAMS ((PTR, bfd_size_type, bfd *));
477
extern bfd_size_type bfd_bwrite PARAMS ((const PTR, bfd_size_type, bfd *));
478
extern int bfd_seek PARAMS ((bfd *, file_ptr, int));
479
extern ufile_ptr bfd_tell PARAMS ((bfd *));
480
extern int bfd_flush PARAMS ((bfd *));
481
extern int bfd_stat PARAMS ((bfd *, struct stat *));
482
 
483
/* Deprecated old routines.  */
484
#if __GNUC__
485
#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)                            \
486
  (warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__),      \
487
   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
488
#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)                           \
489
  (warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__),     \
490
   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
491
#else
492
#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)                            \
493
  (warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \
494
   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
495
#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)                           \
496
  (warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\
497
   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
498
#endif
499
extern void warn_deprecated
500
  PARAMS ((const char *, const char *, int, const char *));
501
 
502
/* Cast from const char * to char * so that caller can assign to
503
   a char * without a warning.  */
504
#define bfd_get_filename(abfd) ((char *) (abfd)->filename)
505
#define bfd_get_cacheable(abfd) ((abfd)->cacheable)
506
#define bfd_get_format(abfd) ((abfd)->format)
507
#define bfd_get_target(abfd) ((abfd)->xvec->name)
508
#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
509
#define bfd_family_coff(abfd) \
510
  (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \
511
   bfd_get_flavour (abfd) == bfd_target_xcoff_flavour)
512
#define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG)
513
#define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE)
514
#define bfd_header_big_endian(abfd) \
515
  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG)
516
#define bfd_header_little_endian(abfd) \
517
  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
518
#define bfd_get_file_flags(abfd) ((abfd)->flags)
519
#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
520
#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
521
#define bfd_my_archive(abfd) ((abfd)->my_archive)
522
#define bfd_has_map(abfd) ((abfd)->has_armap)
523
 
524
#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
525
#define bfd_usrdata(abfd) ((abfd)->usrdata)
526
 
527
#define bfd_get_start_address(abfd) ((abfd)->start_address)
528
#define bfd_get_symcount(abfd) ((abfd)->symcount)
529
#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
530
#define bfd_count_sections(abfd) ((abfd)->section_count)
531
 
532
#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
533
 
534
#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean) (bool)), true)
535
 
536
extern boolean bfd_cache_close PARAMS ((bfd *abfd));
537
/* NB: This declaration should match the autogenerated one in libbfd.h.  */
538
 
539
extern boolean bfd_record_phdr
540
  PARAMS ((bfd *, unsigned long, boolean, flagword, boolean, bfd_vma,
541
           boolean, boolean, unsigned int, struct sec **));
542
 
543
/* Byte swapping routines.  */
544
 
545
bfd_vma         bfd_getb64         PARAMS ((const unsigned char *));
546
bfd_vma         bfd_getl64         PARAMS ((const unsigned char *));
547
bfd_signed_vma  bfd_getb_signed_64 PARAMS ((const unsigned char *));
548
bfd_signed_vma  bfd_getl_signed_64 PARAMS ((const unsigned char *));
549
bfd_vma         bfd_getb32         PARAMS ((const unsigned char *));
550
bfd_vma         bfd_getl32         PARAMS ((const unsigned char *));
551
bfd_signed_vma  bfd_getb_signed_32 PARAMS ((const unsigned char *));
552
bfd_signed_vma  bfd_getl_signed_32 PARAMS ((const unsigned char *));
553
bfd_vma         bfd_getb16         PARAMS ((const unsigned char *));
554
bfd_vma         bfd_getl16         PARAMS ((const unsigned char *));
555
bfd_signed_vma  bfd_getb_signed_16 PARAMS ((const unsigned char *));
556
bfd_signed_vma  bfd_getl_signed_16 PARAMS ((const unsigned char *));
557
void            bfd_putb64         PARAMS ((bfd_vma, unsigned char *));
558
void            bfd_putl64         PARAMS ((bfd_vma, unsigned char *));
559
void            bfd_putb32         PARAMS ((bfd_vma, unsigned char *));
560
void            bfd_putl32         PARAMS ((bfd_vma, unsigned char *));
561
void            bfd_putb16         PARAMS ((bfd_vma, unsigned char *));
562
void            bfd_putl16         PARAMS ((bfd_vma, unsigned char *));
563
 
564
/* Byte swapping routines which take size and endiannes as arguments.  */
565
 
566
bfd_vma         bfd_get_bits       PARAMS ((bfd_byte *, int, boolean));
567
void            bfd_put_bits       PARAMS ((bfd_vma, bfd_byte *, int, boolean));
568
 
569
/* Externally visible ECOFF routines.  */
570
 
571
#if defined(__STDC__) || defined(ALMOST_STDC)
572
struct ecoff_debug_info;
573
struct ecoff_debug_swap;
574
struct ecoff_extr;
575
struct symbol_cache_entry;
576
struct bfd_link_info;
577
struct bfd_link_hash_entry;
578
struct bfd_elf_version_tree;
579
#endif
580
extern bfd_vma bfd_ecoff_get_gp_value PARAMS ((bfd * abfd));
581
extern boolean bfd_ecoff_set_gp_value PARAMS ((bfd *abfd, bfd_vma gp_value));
582
extern boolean bfd_ecoff_set_regmasks
583
  PARAMS ((bfd *abfd, unsigned long gprmask, unsigned long fprmask,
584
           unsigned long *cprmask));
585
extern PTR bfd_ecoff_debug_init
586
  PARAMS ((bfd *output_bfd, struct ecoff_debug_info *output_debug,
587
           const struct ecoff_debug_swap *output_swap,
588
           struct bfd_link_info *));
589
extern void bfd_ecoff_debug_free
590
  PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
591
           const struct ecoff_debug_swap *output_swap,
592
           struct bfd_link_info *));
593
extern boolean bfd_ecoff_debug_accumulate
594
  PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
595
           const struct ecoff_debug_swap *output_swap,
596
           bfd *input_bfd, struct ecoff_debug_info *input_debug,
597
           const struct ecoff_debug_swap *input_swap,
598
           struct bfd_link_info *));
599
extern boolean bfd_ecoff_debug_accumulate_other
600
  PARAMS ((PTR handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
601
           const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
602
           struct bfd_link_info *));
603
extern boolean bfd_ecoff_debug_externals
604
  PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
605
           const struct ecoff_debug_swap *swap,
606
           boolean relocateable,
607
           boolean (*get_extr) (struct symbol_cache_entry *,
608
                                struct ecoff_extr *),
609
           void (*set_index) (struct symbol_cache_entry *,
610
                              bfd_size_type)));
611
extern boolean bfd_ecoff_debug_one_external
612
  PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
613
           const struct ecoff_debug_swap *swap,
614
           const char *name, struct ecoff_extr *esym));
615
extern bfd_size_type bfd_ecoff_debug_size
616
  PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
617
           const struct ecoff_debug_swap *swap));
618
extern boolean bfd_ecoff_write_debug
619
  PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
620
           const struct ecoff_debug_swap *swap, file_ptr where));
621
extern boolean bfd_ecoff_write_accumulated_debug
622
  PARAMS ((PTR handle, bfd *abfd, struct ecoff_debug_info *debug,
623
           const struct ecoff_debug_swap *swap,
624
           struct bfd_link_info *info, file_ptr where));
625
extern boolean bfd_mips_ecoff_create_embedded_relocs
626
  PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
627
           char **));
628
 
629
/* Externally visible ELF routines.  */
630
 
631
struct bfd_link_needed_list
632
{
633
  struct bfd_link_needed_list *next;
634
  bfd *by;
635
  const char *name;
636
};
637
 
638
extern boolean bfd_elf32_record_link_assignment
639
  PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean));
640
extern boolean bfd_elf64_record_link_assignment
641
  PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean));
642
extern struct bfd_link_needed_list *bfd_elf_get_needed_list
643
  PARAMS ((bfd *, struct bfd_link_info *));
644
extern boolean bfd_elf_get_bfd_needed_list
645
  PARAMS ((bfd *, struct bfd_link_needed_list **));
646
extern boolean bfd_elf32_size_dynamic_sections
647
  PARAMS ((bfd *, const char *, const char *, const char *,
648
           const char * const *, struct bfd_link_info *, struct sec **,
649
           struct bfd_elf_version_tree *));
650
extern boolean bfd_elf64_size_dynamic_sections
651
  PARAMS ((bfd *, const char *, const char *, const char *,
652
           const char * const *, struct bfd_link_info *, struct sec **,
653
           struct bfd_elf_version_tree *));
654
extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
655
extern void bfd_elf_set_dt_needed_soname PARAMS ((bfd *, const char *));
656
extern const char *bfd_elf_get_dt_soname PARAMS ((bfd *));
657
extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
658
  PARAMS ((bfd *, struct bfd_link_info *));
659
extern boolean bfd_elf32_discard_info
660
  PARAMS ((bfd *, struct bfd_link_info *));
661
extern boolean bfd_elf64_discard_info
662
  PARAMS ((bfd *, struct bfd_link_info *));
663
 
664
/* Return an upper bound on the number of bytes required to store a
665
   copy of ABFD's program header table entries.  Return -1 if an error
666
   occurs; bfd_get_error will return an appropriate code.  */
667
extern long bfd_get_elf_phdr_upper_bound PARAMS ((bfd *abfd));
668
 
669
/* Copy ABFD's program header table entries to *PHDRS.  The entries
670
   will be stored as an array of Elf_Internal_Phdr structures, as
671
   defined in include/elf/internal.h.  To find out how large the
672
   buffer needs to be, call bfd_get_elf_phdr_upper_bound.
673
 
674
   Return the number of program header table entries read, or -1 if an
675
   error occurs; bfd_get_error will return an appropriate code.  */
676
extern int bfd_get_elf_phdrs PARAMS ((bfd *abfd, void *phdrs));
677
 
678
/* Return the arch_size field of an elf bfd, or -1 if not elf.  */
679
extern int bfd_get_arch_size PARAMS ((bfd *));
680
 
681
/* Return true if address "naturally" sign extends, or -1 if not elf.  */
682
extern int bfd_get_sign_extend_vma PARAMS ((bfd *));
683
 
684
extern boolean bfd_m68k_elf32_create_embedded_relocs
685
  PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
686
           char **));
687
extern boolean bfd_mips_elf32_create_embedded_relocs
688
  PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
689
           char **));
690
 
691
/* SunOS shared library support routines for the linker.  */
692
 
693
extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
694
  PARAMS ((bfd *, struct bfd_link_info *));
695
extern boolean bfd_sunos_record_link_assignment
696
  PARAMS ((bfd *, struct bfd_link_info *, const char *));
697
extern boolean bfd_sunos_size_dynamic_sections
698
  PARAMS ((bfd *, struct bfd_link_info *, struct sec **, struct sec **,
699
           struct sec **));
700
 
701
/* Linux shared library support routines for the linker.  */
702
 
703
extern boolean bfd_i386linux_size_dynamic_sections
704
  PARAMS ((bfd *, struct bfd_link_info *));
705
extern boolean bfd_m68klinux_size_dynamic_sections
706
  PARAMS ((bfd *, struct bfd_link_info *));
707
extern boolean bfd_sparclinux_size_dynamic_sections
708
  PARAMS ((bfd *, struct bfd_link_info *));
709
 
710
/* mmap hacks */
711
 
712
struct _bfd_window_internal;
713
typedef struct _bfd_window_internal bfd_window_internal;
714
 
715
typedef struct _bfd_window
716
{
717
  /* What the user asked for.  */
718
  PTR data;
719
  bfd_size_type size;
720
  /* The actual window used by BFD.  Small user-requested read-only
721
     regions sharing a page may share a single window into the object
722
     file.  Read-write versions shouldn't until I've fixed things to
723
     keep track of which portions have been claimed by the
724
     application; don't want to give the same region back when the
725
     application wants two writable copies!  */
726
  struct _bfd_window_internal *i;
727
}
728
bfd_window;
729
 
730
extern void bfd_init_window PARAMS ((bfd_window *));
731
extern void bfd_free_window PARAMS ((bfd_window *));
732
extern boolean bfd_get_file_window
733
  PARAMS ((bfd *, file_ptr, bfd_size_type, bfd_window *, boolean));
734
 
735
/* XCOFF support routines for the linker.  */
736
 
737
extern boolean bfd_xcoff_link_record_set
738
  PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *,
739
           bfd_size_type));
740
extern boolean bfd_xcoff_import_symbol
741
  PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *,
742
           bfd_vma, const char *, const char *, const char *, unsigned int));
743
extern boolean bfd_xcoff_export_symbol
744
  PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *));
745
extern boolean bfd_xcoff_link_count_reloc
746
  PARAMS ((bfd *, struct bfd_link_info *, const char *));
747
extern boolean bfd_xcoff_record_link_assignment
748
  PARAMS ((bfd *, struct bfd_link_info *, const char *));
749
extern boolean bfd_xcoff_size_dynamic_sections
750
  PARAMS ((bfd *, struct bfd_link_info *, const char *, const char *,
751
           unsigned long, unsigned long, unsigned long, boolean,
752
           int, boolean, boolean, struct sec **, boolean));
753
extern boolean bfd_xcoff_link_generate_rtinit
754
  PARAMS ((bfd *, const char *, const char *, boolean));
755
 
756
/* XCOFF support routines for ar.  */
757
extern boolean bfd_xcoff_ar_archive_set_magic PARAMS ((bfd *, char *));
758
 
759
/* Externally visible COFF routines.  */
760
 
761
#if defined(__STDC__) || defined(ALMOST_STDC)
762
struct internal_syment;
763
union internal_auxent;
764
#endif
765
 
766
extern boolean bfd_coff_get_syment
767
  PARAMS ((bfd *, struct symbol_cache_entry *, struct internal_syment *));
768
 
769
extern boolean bfd_coff_get_auxent
770
  PARAMS ((bfd *, struct symbol_cache_entry *, int, union internal_auxent *));
771
 
772
extern boolean bfd_coff_set_symbol_class
773
  PARAMS ((bfd *, struct symbol_cache_entry *, unsigned int));
774
 
775
extern boolean bfd_m68k_coff_create_embedded_relocs
776
  PARAMS ((bfd *, struct bfd_link_info *, struct sec *, struct sec *,
777
           char **));
778
 
779
/* ARM Interworking support.  Called from linker.  */
780
extern boolean bfd_arm_allocate_interworking_sections
781
  PARAMS ((struct bfd_link_info *));
782
 
783
extern boolean bfd_arm_process_before_allocation
784
  PARAMS ((bfd *, struct bfd_link_info *, int));
785
 
786
extern boolean bfd_arm_get_bfd_for_interworking
787
  PARAMS ((bfd *, struct bfd_link_info *));
788
 
789
/* PE ARM Interworking support.  Called from linker.  */
790
extern boolean bfd_arm_pe_allocate_interworking_sections
791
  PARAMS ((struct bfd_link_info *));
792
 
793
extern boolean bfd_arm_pe_process_before_allocation
794
  PARAMS ((bfd *, struct bfd_link_info *, int));
795
 
796
extern boolean bfd_arm_pe_get_bfd_for_interworking
797
  PARAMS ((bfd *, struct bfd_link_info *));
798
 
799
/* ELF ARM Interworking support.  Called from linker.  */
800
extern boolean bfd_elf32_arm_allocate_interworking_sections
801
  PARAMS ((struct bfd_link_info *));
802
 
803
extern boolean bfd_elf32_arm_process_before_allocation
804
  PARAMS ((bfd *, struct bfd_link_info *, int));
805
 
806
extern boolean bfd_elf32_arm_get_bfd_for_interworking
807
  PARAMS ((bfd *, struct bfd_link_info *));
808
 
809
extern boolean bfd_elf32_arm_add_glue_sections_to_bfd
810
  PARAMS ((bfd *, struct bfd_link_info *));
811
 
812
/* TI COFF load page support.  */
813
extern void bfd_ticoff_set_section_load_page
814
  PARAMS ((struct sec *, int));
815
 
816
extern int bfd_ticoff_get_section_load_page
817
  PARAMS ((struct sec *));
818
 

powered by: WebSVN 2.1.0

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