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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [include/] [bfdlink.h] - Blame information for rev 1777

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* bfdlink.h -- header file for BFD link routines
2
   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002
3
   Free Software Foundation, Inc.
4
   Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
5
 
6
   This file is part of BFD, the Binary File Descriptor library.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 2 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program; if not, write to the Free Software
20
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
 
22
#ifndef BFDLINK_H
23
#define BFDLINK_H
24
 
25
/* Which symbols to strip during a link.  */
26
enum bfd_link_strip
27
{
28
  strip_none,           /* Don't strip any symbols.  */
29
  strip_debugger,       /* Strip debugging symbols.  */
30
  strip_some,           /* keep_hash is the list of symbols to keep.  */
31
  strip_all             /* Strip all symbols.  */
32
};
33
 
34
/* Which local symbols to discard during a link.  This is irrelevant
35
   if strip_all is used.  */
36
enum bfd_link_discard
37
{
38
  discard_sec_merge,    /* Discard local temporary symbols in SEC_MERGE
39
                           sections.  */
40
  discard_none,         /* Don't discard any locals.  */
41
  discard_l,            /* Discard local temporary symbols.  */
42
  discard_all           /* Discard all locals.  */
43
};
44
 
45
/* Describes the type of hash table entry structure being used.
46
   Different hash table structure have different fields and so
47
   support different linking features.  */
48
enum bfd_link_hash_table_type
49
  {
50
    bfd_link_generic_hash_table,
51
    bfd_link_elf_hash_table
52
  };
53
 
54
/* These are the possible types of an entry in the BFD link hash
55
   table.  */
56
 
57
enum bfd_link_hash_type
58
{
59
  bfd_link_hash_new,            /* Symbol is new.  */
60
  bfd_link_hash_undefined,      /* Symbol seen before, but undefined.  */
61
  bfd_link_hash_undefweak,      /* Symbol is weak and undefined.  */
62
  bfd_link_hash_defined,        /* Symbol is defined.  */
63
  bfd_link_hash_defweak,        /* Symbol is weak and defined.  */
64
  bfd_link_hash_common,         /* Symbol is common.  */
65
  bfd_link_hash_indirect,       /* Symbol is an indirect link.  */
66
  bfd_link_hash_warning         /* Like indirect, but warn if referenced.  */
67
};
68
 
69
enum bfd_link_common_skip_ar_aymbols
70
{
71
  bfd_link_common_skip_none,
72
  bfd_link_common_skip_text,
73
  bfd_link_common_skip_data,
74
  bfd_link_common_skip_all
75
};
76
 
77
/* The linking routines use a hash table which uses this structure for
78
   its elements.  */
79
 
80
struct bfd_link_hash_entry
81
{
82
  /* Base hash table entry structure.  */
83
  struct bfd_hash_entry root;
84
  /* Type of this entry.  */
85
  enum bfd_link_hash_type type;
86
 
87
  /* Undefined and common symbols are kept in a linked list through
88
     this field.  This field is not in the union because that would
89
     force us to remove entries from the list when we changed their
90
     type, which would force the list to be doubly linked, which would
91
     waste more memory.  When an undefined or common symbol is
92
     created, it should be added to this list, the head of which is in
93
     the link hash table itself.  As symbols are defined, they need
94
     not be removed from the list; anything which reads the list must
95
     doublecheck the symbol type.
96
 
97
     Weak symbols are not kept on this list.
98
 
99
     Defined and defweak symbols use this field as a reference marker.
100
     If the field is not NULL, or this structure is the tail of the
101
     undefined symbol list, the symbol has been referenced.  If the
102
     symbol is undefined and becomes defined, this field will
103
     automatically be non-NULL since the symbol will have been on the
104
     undefined symbol list.  */
105
  struct bfd_link_hash_entry *next;
106
  /* A union of information depending upon the type.  */
107
  union
108
    {
109
      /* Nothing is kept for bfd_hash_new.  */
110
      /* bfd_link_hash_undefined, bfd_link_hash_undefweak.  */
111
      struct
112
        {
113
          bfd *abfd;            /* BFD symbol was found in.  */
114
        } undef;
115
      /* bfd_link_hash_defined, bfd_link_hash_defweak.  */
116
      struct
117
        {
118
          bfd_vma value;        /* Symbol value.  */
119
          asection *section;    /* Symbol section.  */
120
        } def;
121
      /* bfd_link_hash_indirect, bfd_link_hash_warning.  */
122
      struct
123
        {
124
          struct bfd_link_hash_entry *link;     /* Real symbol.  */
125
          const char *warning;  /* Warning (bfd_link_hash_warning only).  */
126
        } i;
127
      /* bfd_link_hash_common.  */
128
      struct
129
        {
130
          /* The linker needs to know three things about common
131
             symbols: the size, the alignment, and the section in
132
             which the symbol should be placed.  We store the size
133
             here, and we allocate a small structure to hold the
134
             section and the alignment.  The alignment is stored as a
135
             power of two.  We don't store all the information
136
             directly because we don't want to increase the size of
137
             the union; this structure is a major space user in the
138
             linker.  */
139
          bfd_size_type size;   /* Common symbol size.  */
140
          struct bfd_link_hash_common_entry
141
            {
142
              unsigned int alignment_power;     /* Alignment.  */
143
              asection *section;                /* Symbol section.  */
144
            } *p;
145
        } c;
146
    } u;
147
};
148
 
149
/* This is the link hash table.  It is a derived class of
150
   bfd_hash_table.  */
151
 
152
struct bfd_link_hash_table
153
{
154
  /* The hash table itself.  */
155
  struct bfd_hash_table table;
156
  /* The back end which created this hash table.  This indicates the
157
     type of the entries in the hash table, which is sometimes
158
     important information when linking object files of different
159
     types together.  */
160
  const bfd_target *creator;
161
  /* A linked list of undefined and common symbols, linked through the
162
     next field in the bfd_link_hash_entry structure.  */
163
  struct bfd_link_hash_entry *undefs;
164
  /* Entries are added to the tail of the undefs list.  */
165
  struct bfd_link_hash_entry *undefs_tail;
166
  /* The type of the ink hash table.  */
167
  enum bfd_link_hash_table_type type;
168
};
169
 
170
/* Look up an entry in a link hash table.  If FOLLOW is true, this
171
   follows bfd_link_hash_indirect and bfd_link_hash_warning links to
172
   the real symbol.  */
173
extern struct bfd_link_hash_entry *bfd_link_hash_lookup
174
  PARAMS ((struct bfd_link_hash_table *, const char *, boolean create,
175
           boolean copy, boolean follow));
176
 
177
/* Look up an entry in the main linker hash table if the symbol might
178
   be wrapped.  This should only be used for references to an
179
   undefined symbol, not for definitions of a symbol.  */
180
 
181
extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
182
  PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean, boolean,
183
           boolean));
184
 
185
/* Traverse a link hash table.  */
186
extern void bfd_link_hash_traverse
187
  PARAMS ((struct bfd_link_hash_table *,
188
           boolean (*) (struct bfd_link_hash_entry *, PTR),
189
           PTR));
190
 
191
/* Add an entry to the undefs list.  */
192
extern void bfd_link_add_undef
193
  PARAMS ((struct bfd_link_hash_table *, struct bfd_link_hash_entry *));
194
 
195
struct bfd_sym_chain
196
{
197
  struct bfd_sym_chain *next;
198
  const char *name;
199
};
200
 
201
/* This structure holds all the information needed to communicate
202
   between BFD and the linker when doing a link.  */
203
 
204
struct bfd_link_info
205
{
206
  /* Function callbacks.  */
207
  const struct bfd_link_callbacks *callbacks;
208
 
209
  /* true if BFD should generate a relocateable object file.  */
210
  boolean relocateable;
211
 
212
  /* true if BFD should generate relocation information in the final
213
     executable.  */
214
  boolean emitrelocations;
215
 
216
  /* true if BFD should generate a "task linked" object file,
217
     similar to relocatable but also with globals converted to
218
     statics.  */
219
  boolean task_link;
220
 
221
  /* true if BFD should generate a shared object.  */
222
  boolean shared;
223
 
224
  /* true if BFD should pre-bind symbols in a shared object.  */
225
  boolean symbolic;
226
 
227
  /* true if BFD should export all symbols in the dynamic symbol table
228
     of an executable, rather than only those used.  */
229
  boolean export_dynamic;
230
 
231
  /* true if shared objects should be linked directly, not shared.  */
232
  boolean static_link;
233
 
234
  /* true if the output file should be in a traditional format.  This
235
     is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
236
     on the output file, but may be checked when reading the input
237
     files.  */
238
  boolean traditional_format;
239
 
240
  /* true if we want to produced optimized output files.  This might
241
     need much more time and therefore must be explicitly selected.  */
242
  boolean optimize;
243
 
244
  /* true if BFD should generate errors for undefined symbols
245
     even if generating a shared object.  */
246
  boolean no_undefined;
247
 
248
  /* true if BFD should allow undefined symbols in shared objects even
249
     when no_undefined is set to disallow undefined symbols.  The net
250
     result will be that undefined symbols in regular objects will
251
     still trigger an error, but undefined symbols in shared objects
252
     will be ignored.  The implementation of no_undefined makes the
253
     assumption that the runtime linker will choke on undefined
254
     symbols.  However there is at least one system (BeOS) where
255
     undefined symbols in shared libraries is normal since the kernel
256
     patches them at load time to select which function is most
257
     appropriate for the current architecture.  I.E. dynamically
258
     select an appropriate memset function.  Apparently it is also
259
     normal for HPPA shared libraries to have undefined symbols.  */
260
  boolean allow_shlib_undefined;
261
 
262
  /* true if ok to have multiple definition.  */
263
  boolean allow_multiple_definition;
264
 
265
  /* true if ok to have version with no definition.  */
266
  boolean allow_undefined_version;
267
 
268
  /* Which symbols to strip.  */
269
  enum bfd_link_strip strip;
270
 
271
  /* Which local symbols to discard.  */
272
  enum bfd_link_discard discard;
273
 
274
  /* true if symbols should be retained in memory, false if they
275
     should be freed and reread.  */
276
  boolean keep_memory;
277
 
278
  /* The list of input BFD's involved in the link.  These are chained
279
     together via the link_next field.  */
280
  bfd *input_bfds;
281
 
282
  /* If a symbol should be created for each input BFD, this is section
283
     where those symbols should be placed.  It must be a section in
284
     the output BFD.  It may be NULL, in which case no such symbols
285
     will be created.  This is to support CREATE_OBJECT_SYMBOLS in the
286
     linker command language.  */
287
  asection *create_object_symbols_section;
288
 
289
  /* List of global symbol names that are starting points for marking
290
     sections against garbage collection.  */
291
  struct bfd_sym_chain *gc_sym_list;
292
 
293
  /* Hash table handled by BFD.  */
294
  struct bfd_link_hash_table *hash;
295
 
296
  /* Hash table of symbols to keep.  This is NULL unless strip is
297
     strip_some.  */
298
  struct bfd_hash_table *keep_hash;
299
 
300
  /* true if every symbol should be reported back via the notice
301
     callback.  */
302
  boolean notice_all;
303
 
304
  /* Hash table of symbols to report back via the notice callback.  If
305
     this is NULL, and notice_all is false, then no symbols are
306
     reported back.  */
307
  struct bfd_hash_table *notice_hash;
308
 
309
  /* Hash table of symbols which are being wrapped (the --wrap linker
310
     option).  If this is NULL, no symbols are being wrapped.  */
311
  struct bfd_hash_table *wrap_hash;
312
 
313
  /* If a base output file is wanted, then this points to it */
314
  PTR base_file;
315
 
316
  /* If non-zero, specifies that branches which are problematic for the
317
  MPC860 C0 (or earlier) should be checked for and modified.  It gives the
318
  number of bytes that should be checked at the end of each text page. */
319
  int mpc860c0;
320
 
321
  /* The function to call when the executable or shared object is
322
     loaded.  */
323
  const char *init_function;
324
 
325
  /* The function to call when the executable or shared object is
326
     unloaded.  */
327
  const char *fini_function;
328
 
329
  /* true if the new ELF dynamic tags are enabled. */
330
  boolean new_dtags;
331
 
332
  /* May be used to set DT_FLAGS for ELF. */
333
  bfd_vma flags;
334
 
335
  /* May be used to set DT_FLAGS_1 for ELF. */
336
  bfd_vma flags_1;
337
 
338
  /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
339
     should be generated/linked against.  Set to 1 if this feature
340
     is explicitly requested by the user, -1 if enabled by default.  */
341
  int pei386_auto_import;
342
 
343
  /* True if non-PLT relocs should be merged into one reloc section
344
     and sorted so that relocs against the same symbol come together.  */
345
  boolean combreloc;
346
 
347
  /* True if executable should not contain copy relocs.
348
     Setting this true may result in a non-sharable text segment.  */
349
  boolean nocopyreloc;
350
 
351
  /* True if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
352
     should be created.  */
353
  boolean eh_frame_hdr;
354
 
355
  /* How many spare .dynamic DT_NULL entries should be added?  */
356
  unsigned int spare_dynamic_tags;
357
 
358
  /* Criteria for skipping symbols when detemining
359
     whether to include an object from an archive. */
360
  enum bfd_link_common_skip_ar_aymbols common_skip_ar_aymbols;
361
};
362
 
363
/* This structures holds a set of callback functions.  These are
364
   called by the BFD linker routines.  The first argument to each
365
   callback function is the bfd_link_info structure being used.  Each
366
   function returns a boolean value.  If the function returns false,
367
   then the BFD function which called it will return with a failure
368
   indication.  */
369
 
370
struct bfd_link_callbacks
371
{
372
  /* A function which is called when an object is added from an
373
     archive.  ABFD is the archive element being added.  NAME is the
374
     name of the symbol which caused the archive element to be pulled
375
     in.  */
376
  boolean (*add_archive_element) PARAMS ((struct bfd_link_info *,
377
                                          bfd *abfd,
378
                                          const char *name));
379
  /* A function which is called when a symbol is found with multiple
380
     definitions.  NAME is the symbol which is defined multiple times.
381
     OBFD is the old BFD, OSEC is the old section, OVAL is the old
382
     value, NBFD is the new BFD, NSEC is the new section, and NVAL is
383
     the new value.  OBFD may be NULL.  OSEC and NSEC may be
384
     bfd_com_section or bfd_ind_section.  */
385
  boolean (*multiple_definition) PARAMS ((struct bfd_link_info *,
386
                                          const char *name,
387
                                          bfd *obfd,
388
                                          asection *osec,
389
                                          bfd_vma oval,
390
                                          bfd *nbfd,
391
                                          asection *nsec,
392
                                          bfd_vma nval));
393
  /* A function which is called when a common symbol is defined
394
     multiple times.  NAME is the symbol appearing multiple times.
395
     OBFD is the BFD of the existing symbol; it may be NULL if this is
396
     not known.  OTYPE is the type of the existing symbol, which may
397
     be bfd_link_hash_defined, bfd_link_hash_defweak,
398
     bfd_link_hash_common, or bfd_link_hash_indirect.  If OTYPE is
399
     bfd_link_hash_common, OSIZE is the size of the existing symbol.
400
     NBFD is the BFD of the new symbol.  NTYPE is the type of the new
401
     symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
402
     bfd_link_hash_indirect.  If NTYPE is bfd_link_hash_common, NSIZE
403
     is the size of the new symbol.  */
404
  boolean (*multiple_common) PARAMS ((struct bfd_link_info *,
405
                                      const char *name,
406
                                      bfd *obfd,
407
                                      enum bfd_link_hash_type otype,
408
                                      bfd_vma osize,
409
                                      bfd *nbfd,
410
                                      enum bfd_link_hash_type ntype,
411
                                      bfd_vma nsize));
412
  /* A function which is called to add a symbol to a set.  ENTRY is
413
     the link hash table entry for the set itself (e.g.,
414
     __CTOR_LIST__).  RELOC is the relocation to use for an entry in
415
     the set when generating a relocateable file, and is also used to
416
     get the size of the entry when generating an executable file.
417
     ABFD, SEC and VALUE identify the value to add to the set.  */
418
  boolean (*add_to_set) PARAMS ((struct bfd_link_info *,
419
                                 struct bfd_link_hash_entry *entry,
420
                                 bfd_reloc_code_real_type reloc,
421
                                 bfd *abfd, asection *sec, bfd_vma value));
422
  /* A function which is called when the name of a g++ constructor or
423
     destructor is found.  This is only called by some object file
424
     formats.  CONSTRUCTOR is true for a constructor, false for a
425
     destructor.  This will use BFD_RELOC_CTOR when generating a
426
     relocateable file.  NAME is the name of the symbol found.  ABFD,
427
     SECTION and VALUE are the value of the symbol.  */
428
  boolean (*constructor) PARAMS ((struct bfd_link_info *,
429
                                  boolean constructor,
430
                                  const char *name, bfd *abfd, asection *sec,
431
                                  bfd_vma value));
432
  /* A function which is called to issue a linker warning.  For
433
     example, this is called when there is a reference to a warning
434
     symbol.  WARNING is the warning to be issued.  SYMBOL is the name
435
     of the symbol which triggered the warning; it may be NULL if
436
     there is none.  ABFD, SECTION and ADDRESS identify the location
437
     which trigerred the warning; either ABFD or SECTION or both may
438
     be NULL if the location is not known.  */
439
  boolean (*warning) PARAMS ((struct bfd_link_info *,
440
                              const char *warning, const char *symbol,
441
                              bfd *abfd, asection *section,
442
                              bfd_vma address));
443
  /* A function which is called when a relocation is attempted against
444
     an undefined symbol.  NAME is the symbol which is undefined.
445
     ABFD, SECTION and ADDRESS identify the location from which the
446
     reference is made. FATAL indicates whether an undefined symbol is
447
     a fatal error or not. In some cases SECTION may be NULL.  */
448
  boolean (*undefined_symbol) PARAMS ((struct bfd_link_info *,
449
                                       const char *name, bfd *abfd,
450
                                       asection *section,
451
                                       bfd_vma address,
452
                                       boolean fatal));
453
  /* A function which is called when a reloc overflow occurs.  NAME is
454
     the name of the symbol or section the reloc is against,
455
     RELOC_NAME is the name of the relocation, and ADDEND is any
456
     addend that is used.  ABFD, SECTION and ADDRESS identify the
457
     location at which the overflow occurs; if this is the result of a
458
     bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
459
     ABFD will be NULL.  */
460
  boolean (*reloc_overflow) PARAMS ((struct bfd_link_info *,
461
                                     const char *name,
462
                                     const char *reloc_name, bfd_vma addend,
463
                                     bfd *abfd, asection *section,
464
                                     bfd_vma address));
465
  /* A function which is called when a dangerous reloc is performed.
466
     The canonical example is an a29k IHCONST reloc which does not
467
     follow an IHIHALF reloc.  MESSAGE is an appropriate message.
468
     ABFD, SECTION and ADDRESS identify the location at which the
469
     problem occurred; if this is the result of a
470
     bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
471
     ABFD will be NULL.  */
472
  boolean (*reloc_dangerous) PARAMS ((struct bfd_link_info *,
473
                                      const char *message,
474
                                      bfd *abfd, asection *section,
475
                                      bfd_vma address));
476
  /* A function which is called when a reloc is found to be attached
477
     to a symbol which is not being written out.  NAME is the name of
478
     the symbol.  ABFD, SECTION and ADDRESS identify the location of
479
     the reloc; if this is the result of a
480
     bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
481
     ABFD will be NULL.  */
482
  boolean (*unattached_reloc) PARAMS ((struct bfd_link_info *,
483
                                       const char *name,
484
                                       bfd *abfd, asection *section,
485
                                       bfd_vma address));
486
  /* A function which is called when a symbol in notice_hash is
487
     defined or referenced.  NAME is the symbol.  ABFD, SECTION and
488
     ADDRESS are the value of the symbol.  If SECTION is
489
     bfd_und_section, this is a reference.  */
490
  boolean (*notice) PARAMS ((struct bfd_link_info *, const char *name,
491
                             bfd *abfd, asection *section, bfd_vma address));
492
};
493
 
494
/* The linker builds link_order structures which tell the code how to
495
   include input data in the output file.  */
496
 
497
/* These are the types of link_order structures.  */
498
 
499
enum bfd_link_order_type
500
{
501
  bfd_undefined_link_order,     /* Undefined.  */
502
  bfd_indirect_link_order,      /* Built from a section.  */
503
  bfd_data_link_order,          /* Set to explicit data.  */
504
  bfd_section_reloc_link_order, /* Relocate against a section.  */
505
  bfd_symbol_reloc_link_order   /* Relocate against a symbol.  */
506
};
507
 
508
/* This is the link_order structure itself.  These form a chain
509
   attached to the section whose contents they are describing.  */
510
 
511
struct bfd_link_order
512
{
513
  /* Next link_order in chain.  */
514
  struct bfd_link_order *next;
515
  /* Type of link_order.  */
516
  enum bfd_link_order_type type;
517
  /* Offset within output section.  */
518
  bfd_vma offset;
519
  /* Size within output section.  */
520
  bfd_size_type size;
521
  /* Type specific information.  */
522
  union
523
    {
524
      struct
525
        {
526
          /* Section to include.  If this is used, then
527
             section->output_section must be the section the
528
             link_order is attached to, section->output_offset must
529
             equal the link_order offset field, and section->_raw_size
530
             must equal the link_order size field.  Maybe these
531
             restrictions should be relaxed someday.  */
532
          asection *section;
533
        } indirect;
534
      struct
535
        {
536
          /* Size of contents, or zero when contents size == size
537
             within output section.
538
             A non-zero value allows filling of the output section
539
             with an arbitrary repeated pattern.  */
540
          unsigned int size;
541
          /* Data to put into file.  */
542
          bfd_byte *contents;
543
        } data;
544
      struct
545
        {
546
          /* Description of reloc to generate.  Used for
547
             bfd_section_reloc_link_order and
548
             bfd_symbol_reloc_link_order.  */
549
          struct bfd_link_order_reloc *p;
550
        } reloc;
551
    } u;
552
};
553
 
554
/* A linker order of type bfd_section_reloc_link_order or
555
   bfd_symbol_reloc_link_order means to create a reloc against a
556
   section or symbol, respectively.  This is used to implement -Ur to
557
   generate relocs for the constructor tables.  The
558
   bfd_link_order_reloc structure describes the reloc that BFD should
559
   create.  It is similar to a arelent, but I didn't use arelent
560
   because the linker does not know anything about most symbols, and
561
   any asymbol structure it creates will be partially meaningless.
562
   This information could logically be in the bfd_link_order struct,
563
   but I didn't want to waste the space since these types of relocs
564
   are relatively rare.  */
565
 
566
struct bfd_link_order_reloc
567
{
568
  /* Reloc type.  */
569
  bfd_reloc_code_real_type reloc;
570
 
571
  union
572
    {
573
      /* For type bfd_section_reloc_link_order, this is the section
574
         the reloc should be against.  This must be a section in the
575
         output BFD, not any of the input BFDs.  */
576
      asection *section;
577
      /* For type bfd_symbol_reloc_link_order, this is the name of the
578
         symbol the reloc should be against.  */
579
      const char *name;
580
    } u;
581
 
582
  /* Addend to use.  The object file should contain zero.  The BFD
583
     backend is responsible for filling in the contents of the object
584
     file correctly.  For some object file formats (e.g., COFF) the
585
     addend must be stored into in the object file, and for some
586
     (e.g., SPARC a.out) it is kept in the reloc.  */
587
  bfd_vma addend;
588
};
589
 
590
/* Allocate a new link_order for a section.  */
591
extern struct bfd_link_order *bfd_new_link_order PARAMS ((bfd *, asection *));
592
 
593
/* These structures are used to describe version information for the
594
   ELF linker.  These structures could be manipulated entirely inside
595
   BFD, but it would be a pain.  Instead, the regular linker sets up
596
   these structures, and then passes them into BFD.  */
597
 
598
/* Regular expressions for a version.  */
599
 
600
struct bfd_elf_version_expr
601
{
602
  /* Next regular expression for this version.  */
603
  struct bfd_elf_version_expr *next;
604
  /* Regular expression.  */
605
  const char *pattern;
606
  /* Matching function.  */
607
  int (*match) PARAMS((struct bfd_elf_version_expr *, const char *));
608
  /* Defined by ".symver".  */
609
  unsigned int symver: 1;
610
  /* Defined by version script.  */
611
  unsigned int script : 1;
612
};
613
 
614
/* Version dependencies.  */
615
 
616
struct bfd_elf_version_deps
617
{
618
  /* Next dependency for this version.  */
619
  struct bfd_elf_version_deps *next;
620
  /* The version which this version depends upon.  */
621
  struct bfd_elf_version_tree *version_needed;
622
};
623
 
624
/* A node in the version tree.  */
625
 
626
struct bfd_elf_version_tree
627
{
628
  /* Next version.  */
629
  struct bfd_elf_version_tree *next;
630
  /* Name of this version.  */
631
  const char *name;
632
  /* Version number.  */
633
  unsigned int vernum;
634
  /* Regular expressions for global symbols in this version.  */
635
  struct bfd_elf_version_expr *globals;
636
  /* Regular expressions for local symbols in this version.  */
637
  struct bfd_elf_version_expr *locals;
638
  /* List of versions which this version depends upon.  */
639
  struct bfd_elf_version_deps *deps;
640
  /* Index of the version name.  This is used within BFD.  */
641
  unsigned int name_indx;
642
  /* Whether this version tree was used.  This is used within BFD.  */
643
  int used;
644
};
645
 
646
#endif

powered by: WebSVN 2.1.0

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