1/* bfdlink.h -- header file for BFD link routines
2   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003,
3   2004 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.  */
26enum 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.  */
36enum 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.  */
48enum 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
57enum 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
69enum 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
80struct bfd_link_hash_entry
81{
82  /* Base hash table entry structure.  */
83  struct bfd_hash_entry root;
84
85  /* Type of this entry.  */
86  enum bfd_link_hash_type type;
87
88  /* A union of information depending upon the type.  */
89  union
90    {
91      /* Nothing is kept for bfd_hash_new.  */
92      /* bfd_link_hash_undefined, bfd_link_hash_undefweak.  */
93      struct
94	{
95	  /* Undefined and common symbols are kept in a linked list through
96	     this field.  This field is present in all of the union element
97	     so that we don't need to remove entries from the list when we
98	     change their type.  Removing entries would either require the
99	     list to be doubly linked, which would waste more memory, or
100	     require a traversal.  When an undefined or common symbol is
101	     created, it should be added to this list, the head of which is in
102	     the link hash table itself.  As symbols are defined, they need
103	     not be removed from the list; anything which reads the list must
104	     doublecheck the symbol type.
105
106	     Weak symbols are not kept on this list.
107
108	     Defined and defweak symbols use this field as a reference marker.
109	     If the field is not NULL, or this structure is the tail of the
110	     undefined symbol list, the symbol has been referenced.  If the
111	     symbol is undefined and becomes defined, this field will
112	     automatically be non-NULL since the symbol will have been on the
113	     undefined symbol list.  */
114	  struct bfd_link_hash_entry *next;
115	  bfd *abfd;		/* BFD symbol was found in.  */
116	} undef;
117      /* bfd_link_hash_defined, bfd_link_hash_defweak.  */
118      struct
119	{
120	  struct bfd_link_hash_entry *next;
121	  asection *section;	/* Symbol section.  */
122	  bfd_vma value;	/* Symbol value.  */
123	} def;
124      /* bfd_link_hash_indirect, bfd_link_hash_warning.  */
125      struct
126	{
127	  struct bfd_link_hash_entry *next;
128	  struct bfd_link_hash_entry *link;	/* Real symbol.  */
129	  const char *warning;	/* Warning (bfd_link_hash_warning only).  */
130	} i;
131      /* bfd_link_hash_common.  */
132      struct
133	{
134	  struct bfd_link_hash_entry *next;
135	  /* The linker needs to know three things about common
136	     symbols: the size, the alignment, and the section in
137	     which the symbol should be placed.  We store the size
138	     here, and we allocate a small structure to hold the
139	     section and the alignment.  The alignment is stored as a
140	     power of two.  We don't store all the information
141	     directly because we don't want to increase the size of
142	     the union; this structure is a major space user in the
143	     linker.  */
144	  struct bfd_link_hash_common_entry
145	    {
146	      unsigned int alignment_power;	/* Alignment.  */
147	      asection *section;		/* Symbol section.  */
148	    } *p;
149	  bfd_size_type size;	/* Common symbol size.  */
150	} c;
151    } u;
152};
153
154/* This is the link hash table.  It is a derived class of
155   bfd_hash_table.  */
156
157struct bfd_link_hash_table
158{
159  /* The hash table itself.  */
160  struct bfd_hash_table table;
161  /* The back end which created this hash table.  This indicates the
162     type of the entries in the hash table, which is sometimes
163     important information when linking object files of different
164     types together.  */
165  const bfd_target *creator;
166  /* A linked list of undefined and common symbols, linked through the
167     next field in the bfd_link_hash_entry structure.  */
168  struct bfd_link_hash_entry *undefs;
169  /* Entries are added to the tail of the undefs list.  */
170  struct bfd_link_hash_entry *undefs_tail;
171  /* The type of the link hash table.  */
172  enum bfd_link_hash_table_type type;
173};
174
175/* Look up an entry in a link hash table.  If FOLLOW is TRUE, this
176   follows bfd_link_hash_indirect and bfd_link_hash_warning links to
177   the real symbol.  */
178extern struct bfd_link_hash_entry *bfd_link_hash_lookup
179  (struct bfd_link_hash_table *, const char *, bfd_boolean create,
180   bfd_boolean copy, bfd_boolean follow);
181
182/* Look up an entry in the main linker hash table if the symbol might
183   be wrapped.  This should only be used for references to an
184   undefined symbol, not for definitions of a symbol.  */
185
186extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
187  (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
188   bfd_boolean, bfd_boolean);
189
190/* Traverse a link hash table.  */
191extern void bfd_link_hash_traverse
192  (struct bfd_link_hash_table *,
193    bfd_boolean (*) (struct bfd_link_hash_entry *, void *),
194    void *);
195
196/* Add an entry to the undefs list.  */
197extern void bfd_link_add_undef
198  (struct bfd_link_hash_table *, struct bfd_link_hash_entry *);
199
200struct bfd_sym_chain
201{
202  struct bfd_sym_chain *next;
203  const char *name;
204};
205
206/* How to handle unresolved symbols.
207   There are four possibilities which are enumerated below:  */
208enum report_method
209{
210  /* This is the initial value when then link_info structure is created.
211     It allows the various stages of the linker to determine whether they
212     allowed to set the value.  */
213  RM_NOT_YET_SET = 0,
214  RM_IGNORE,
215  RM_GENERATE_WARNING,
216  RM_GENERATE_ERROR
217};
218
219/* This structure holds all the information needed to communicate
220   between BFD and the linker when doing a link.  */
221
222struct bfd_link_info
223{
224  /* TRUE if BFD should generate a relocatable object file.  */
225  unsigned int relocatable: 1;
226
227  /* TRUE if BFD should generate relocation information in the final
228     executable.  */
229  unsigned int emitrelocations: 1;
230
231  /* TRUE if BFD should generate a "task linked" object file,
232     similar to relocatable but also with globals converted to
233     statics.  */
234  unsigned int task_link: 1;
235
236  /* TRUE if BFD should generate a shared object.  */
237  unsigned int shared: 1;
238
239  /* TRUE if BFD should pre-bind symbols in a shared object.  */
240  unsigned int symbolic: 1;
241
242  /* TRUE if BFD should export all symbols in the dynamic symbol table
243     of an executable, rather than only those used.  */
244  unsigned int export_dynamic: 1;
245
246  /* TRUE if shared objects should be linked directly, not shared.  */
247  unsigned int static_link: 1;
248
249  /* TRUE if the output file should be in a traditional format.  This
250     is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
251     on the output file, but may be checked when reading the input
252     files.  */
253  unsigned int traditional_format: 1;
254
255  /* TRUE if we want to produced optimized output files.  This might
256     need much more time and therefore must be explicitly selected.  */
257  unsigned int optimize: 1;
258
259  /* TRUE if ok to have multiple definition.  */
260  unsigned int allow_multiple_definition: 1;
261
262  /* TRUE if ok to have version with no definition.  */
263  unsigned int allow_undefined_version: 1;
264
265  /* TRUE if symbols should be retained in memory, FALSE if they
266     should be freed and reread.  */
267  unsigned int keep_memory: 1;
268
269  /* TRUE if every symbol should be reported back via the notice
270     callback.  */
271  unsigned int notice_all: 1;
272
273  /* TRUE if executable should not contain copy relocs.
274     Setting this true may result in a non-sharable text segment.  */
275  unsigned int nocopyreloc: 1;
276
277  /* TRUE if the new ELF dynamic tags are enabled. */
278  unsigned int new_dtags: 1;
279
280  /* TRUE if non-PLT relocs should be merged into one reloc section
281     and sorted so that relocs against the same symbol come together.  */
282  unsigned int combreloc: 1;
283
284  /* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
285     should be created.  */
286  unsigned int eh_frame_hdr: 1;
287
288  /* TRUE if global symbols in discarded sections should be stripped.  */
289  unsigned int strip_discarded: 1;
290
291  /* TRUE if the final relax pass is needed.  */
292  unsigned int need_relax_finalize: 1;
293
294  /* TRUE if generating a position independent executable.  */
295  unsigned int pie: 1;
296
297  /* TRUE if generating an executable, position independent or not.  */
298  unsigned int executable : 1;
299
300  /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X
301     flags.  */
302  unsigned int execstack: 1;
303
304  /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W
305     flags.  */
306  unsigned int noexecstack: 1;
307
308  /* TRUE if PT_GNU_RELRO segment should be created.  */
309  unsigned int relro: 1;
310
311  /* TRUE if we should warn when adding a DT_TEXTREL to a shared object.  */
312  unsigned int warn_shared_textrel: 1;
313
314  /* What to do with unresolved symbols in an object file.
315     When producing executables the default is GENERATE_ERROR.
316     When producing shared libraries the default is IGNORE.  The
317     assumption with shared libraries is that the reference will be
318     resolved at load/execution time.  */
319  enum report_method unresolved_syms_in_objects;
320
321  /* What to do with unresolved symbols in a shared library.
322     The same defaults apply.  */
323  enum report_method unresolved_syms_in_shared_libs;
324
325  /* Which symbols to strip.  */
326  enum bfd_link_strip strip;
327
328  /* Which local symbols to discard.  */
329  enum bfd_link_discard discard;
330
331  /* Criteria for skipping symbols when detemining
332     whether to include an object from an archive. */
333  enum bfd_link_common_skip_ar_aymbols common_skip_ar_aymbols;
334
335  /* Char that may appear as the first char of a symbol, but should be
336     skipped (like symbol_leading_char) when looking up symbols in
337     wrap_hash.  Used by PowerPC Linux for 'dot' symbols.  */
338  char wrap_char;
339
340  /* Function callbacks.  */
341  const struct bfd_link_callbacks *callbacks;
342
343  /* Hash table handled by BFD.  */
344  struct bfd_link_hash_table *hash;
345
346  /* Hash table of symbols to keep.  This is NULL unless strip is
347     strip_some.  */
348  struct bfd_hash_table *keep_hash;
349
350  /* Hash table of symbols to report back via the notice callback.  If
351     this is NULL, and notice_all is FALSE, then no symbols are
352     reported back.  */
353  struct bfd_hash_table *notice_hash;
354
355  /* Hash table of symbols which are being wrapped (the --wrap linker
356     option).  If this is NULL, no symbols are being wrapped.  */
357  struct bfd_hash_table *wrap_hash;
358
359  /* The list of input BFD's involved in the link.  These are chained
360     together via the link_next field.  */
361  bfd *input_bfds;
362
363  /* If a symbol should be created for each input BFD, this is section
364     where those symbols should be placed.  It must be a section in
365     the output BFD.  It may be NULL, in which case no such symbols
366     will be created.  This is to support CREATE_OBJECT_SYMBOLS in the
367     linker command language.  */
368  asection *create_object_symbols_section;
369
370  /* List of global symbol names that are starting points for marking
371     sections against garbage collection.  */
372  struct bfd_sym_chain *gc_sym_list;
373
374  /* If a base output file is wanted, then this points to it */
375  void *base_file;
376
377  /* The function to call when the executable or shared object is
378     loaded.  */
379  const char *init_function;
380
381  /* The function to call when the executable or shared object is
382     unloaded.  */
383  const char *fini_function;
384
385  /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
386     should be generated/linked against.  Set to 1 if this feature
387     is explicitly requested by the user, -1 if enabled by default.  */
388  int pei386_auto_import;
389
390  /* Non-zero if runtime relocs for DATA items with non-zero addends
391     in pei386 DLLs should be generated.  Set to 1 if this feature
392     is explicitly requested by the user, -1 if enabled by default.  */
393  int pei386_runtime_pseudo_reloc;
394
395  /* How many spare .dynamic DT_NULL entries should be added?  */
396  unsigned int spare_dynamic_tags;
397
398  /* May be used to set DT_FLAGS for ELF. */
399  bfd_vma flags;
400
401  /* May be used to set DT_FLAGS_1 for ELF. */
402  bfd_vma flags_1;
403
404  /* Start and end of RELRO region.  */
405  bfd_vma relro_start, relro_end;
406};
407
408/* This structures holds a set of callback functions.  These are
409   called by the BFD linker routines.  The first argument to each
410   callback function is the bfd_link_info structure being used.  Each
411   function returns a boolean value.  If the function returns FALSE,
412   then the BFD function which called it will return with a failure
413   indication.  */
414
415struct bfd_link_callbacks
416{
417  /* A function which is called when an object is added from an
418     archive.  ABFD is the archive element being added.  NAME is the
419     name of the symbol which caused the archive element to be pulled
420     in.  */
421  bfd_boolean (*add_archive_element)
422    (struct bfd_link_info *, bfd *abfd, const char *name);
423  /* A function which is called when a symbol is found with multiple
424     definitions.  NAME is the symbol which is defined multiple times.
425     OBFD is the old BFD, OSEC is the old section, OVAL is the old
426     value, NBFD is the new BFD, NSEC is the new section, and NVAL is
427     the new value.  OBFD may be NULL.  OSEC and NSEC may be
428     bfd_com_section or bfd_ind_section.  */
429  bfd_boolean (*multiple_definition)
430    (struct bfd_link_info *, const char *name,
431     bfd *obfd, asection *osec, bfd_vma oval,
432     bfd *nbfd, asection *nsec, bfd_vma nval);
433  /* A function which is called when a common symbol is defined
434     multiple times.  NAME is the symbol appearing multiple times.
435     OBFD is the BFD of the existing symbol; it may be NULL if this is
436     not known.  OTYPE is the type of the existing symbol, which may
437     be bfd_link_hash_defined, bfd_link_hash_defweak,
438     bfd_link_hash_common, or bfd_link_hash_indirect.  If OTYPE is
439     bfd_link_hash_common, OSIZE is the size of the existing symbol.
440     NBFD is the BFD of the new symbol.  NTYPE is the type of the new
441     symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
442     bfd_link_hash_indirect.  If NTYPE is bfd_link_hash_common, NSIZE
443     is the size of the new symbol.  */
444  bfd_boolean (*multiple_common)
445    (struct bfd_link_info *, const char *name,
446     bfd *obfd, enum bfd_link_hash_type otype, bfd_vma osize,
447     bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
448  /* A function which is called to add a symbol to a set.  ENTRY is
449     the link hash table entry for the set itself (e.g.,
450     __CTOR_LIST__).  RELOC is the relocation to use for an entry in
451     the set when generating a relocatable file, and is also used to
452     get the size of the entry when generating an executable file.
453     ABFD, SEC and VALUE identify the value to add to the set.  */
454  bfd_boolean (*add_to_set)
455    (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
456     bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
457  /* A function which is called when the name of a g++ constructor or
458     destructor is found.  This is only called by some object file
459     formats.  CONSTRUCTOR is TRUE for a constructor, FALSE for a
460     destructor.  This will use BFD_RELOC_CTOR when generating a
461     relocatable file.  NAME is the name of the symbol found.  ABFD,
462     SECTION and VALUE are the value of the symbol.  */
463  bfd_boolean (*constructor)
464    (struct bfd_link_info *, bfd_boolean constructor, const char *name,
465     bfd *abfd, asection *sec, bfd_vma value);
466  /* A function which is called to issue a linker warning.  For
467     example, this is called when there is a reference to a warning
468     symbol.  WARNING is the warning to be issued.  SYMBOL is the name
469     of the symbol which triggered the warning; it may be NULL if
470     there is none.  ABFD, SECTION and ADDRESS identify the location
471     which trigerred the warning; either ABFD or SECTION or both may
472     be NULL if the location is not known.  */
473  bfd_boolean (*warning)
474    (struct bfd_link_info *, const char *warning, const char *symbol,
475     bfd *abfd, asection *section, bfd_vma address);
476  /* A function which is called when a relocation is attempted against
477     an undefined symbol.  NAME is the symbol which is undefined.
478     ABFD, SECTION and ADDRESS identify the location from which the
479     reference is made. FATAL indicates whether an undefined symbol is
480     a fatal error or not. In some cases SECTION may be NULL.  */
481  bfd_boolean (*undefined_symbol)
482    (struct bfd_link_info *, const char *name, bfd *abfd,
483     asection *section, bfd_vma address, bfd_boolean fatal);
484  /* A function which is called when a reloc overflow occurs.  NAME is
485     the name of the symbol or section the reloc is against,
486     RELOC_NAME is the name of the relocation, and ADDEND is any
487     addend that is used.  ABFD, SECTION and ADDRESS identify the
488     location at which the overflow occurs; if this is the result of a
489     bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
490     ABFD will be NULL.  */
491  bfd_boolean (*reloc_overflow)
492    (struct bfd_link_info *, const char *name, const char *reloc_name,
493     bfd_vma addend, bfd *abfd, asection *section, bfd_vma address);
494  /* A function which is called when a dangerous reloc is performed.
495     The canonical example is an a29k IHCONST reloc which does not
496     follow an IHIHALF reloc.  MESSAGE is an appropriate message.
497     ABFD, SECTION and ADDRESS identify the location at which the
498     problem occurred; if this is the result of a
499     bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
500     ABFD will be NULL.  */
501  bfd_boolean (*reloc_dangerous)
502    (struct bfd_link_info *, const char *message,
503     bfd *abfd, asection *section, bfd_vma address);
504  /* A function which is called when a reloc is found to be attached
505     to a symbol which is not being written out.  NAME is the name of
506     the symbol.  ABFD, SECTION and ADDRESS identify the location of
507     the reloc; if this is the result of a
508     bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
509     ABFD will be NULL.  */
510  bfd_boolean (*unattached_reloc)
511    (struct bfd_link_info *, const char *name,
512     bfd *abfd, asection *section, bfd_vma address);
513  /* A function which is called when a symbol in notice_hash is
514     defined or referenced.  NAME is the symbol.  ABFD, SECTION and
515     ADDRESS are the value of the symbol.  If SECTION is
516     bfd_und_section, this is a reference.  */
517  bfd_boolean (*notice)
518    (struct bfd_link_info *, const char *name,
519     bfd *abfd, asection *section, bfd_vma address);
520};
521
522/* The linker builds link_order structures which tell the code how to
523   include input data in the output file.  */
524
525/* These are the types of link_order structures.  */
526
527enum bfd_link_order_type
528{
529  bfd_undefined_link_order,	/* Undefined.  */
530  bfd_indirect_link_order,	/* Built from a section.  */
531  bfd_data_link_order,		/* Set to explicit data.  */
532  bfd_section_reloc_link_order,	/* Relocate against a section.  */
533  bfd_symbol_reloc_link_order	/* Relocate against a symbol.  */
534};
535
536/* This is the link_order structure itself.  These form a chain
537   attached to the section whose contents they are describing.  */
538
539struct bfd_link_order
540{
541  /* Next link_order in chain.  */
542  struct bfd_link_order *next;
543  /* Type of link_order.  */
544  enum bfd_link_order_type type;
545  /* Offset within output section.  */
546  bfd_vma offset;
547  /* Size within output section.  */
548  bfd_size_type size;
549  /* Type specific information.  */
550  union
551    {
552      struct
553	{
554	  /* Section to include.  If this is used, then
555	     section->output_section must be the section the
556	     link_order is attached to, section->output_offset must
557	     equal the link_order offset field, and section->size
558	     must equal the link_order size field.  Maybe these
559	     restrictions should be relaxed someday.  */
560	  asection *section;
561	} indirect;
562      struct
563	{
564	  /* Size of contents, or zero when contents size == size
565	     within output section.
566	     A non-zero value allows filling of the output section
567	     with an arbitrary repeated pattern.  */
568	  unsigned int size;
569	  /* Data to put into file.  */
570	  bfd_byte *contents;
571	} data;
572      struct
573	{
574	  /* Description of reloc to generate.  Used for
575	     bfd_section_reloc_link_order and
576	     bfd_symbol_reloc_link_order.  */
577	  struct bfd_link_order_reloc *p;
578	} reloc;
579    } u;
580};
581
582/* A linker order of type bfd_section_reloc_link_order or
583   bfd_symbol_reloc_link_order means to create a reloc against a
584   section or symbol, respectively.  This is used to implement -Ur to
585   generate relocs for the constructor tables.  The
586   bfd_link_order_reloc structure describes the reloc that BFD should
587   create.  It is similar to a arelent, but I didn't use arelent
588   because the linker does not know anything about most symbols, and
589   any asymbol structure it creates will be partially meaningless.
590   This information could logically be in the bfd_link_order struct,
591   but I didn't want to waste the space since these types of relocs
592   are relatively rare.  */
593
594struct bfd_link_order_reloc
595{
596  /* Reloc type.  */
597  bfd_reloc_code_real_type reloc;
598
599  union
600    {
601      /* For type bfd_section_reloc_link_order, this is the section
602	 the reloc should be against.  This must be a section in the
603	 output BFD, not any of the input BFDs.  */
604      asection *section;
605      /* For type bfd_symbol_reloc_link_order, this is the name of the
606	 symbol the reloc should be against.  */
607      const char *name;
608    } u;
609
610  /* Addend to use.  The object file should contain zero.  The BFD
611     backend is responsible for filling in the contents of the object
612     file correctly.  For some object file formats (e.g., COFF) the
613     addend must be stored into in the object file, and for some
614     (e.g., SPARC a.out) it is kept in the reloc.  */
615  bfd_vma addend;
616};
617
618/* Allocate a new link_order for a section.  */
619extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
620
621/* These structures are used to describe version information for the
622   ELF linker.  These structures could be manipulated entirely inside
623   BFD, but it would be a pain.  Instead, the regular linker sets up
624   these structures, and then passes them into BFD.  */
625
626/* Glob pattern for a version.  */
627
628struct bfd_elf_version_expr
629{
630  /* Next glob pattern for this version.  */
631  struct bfd_elf_version_expr *next;
632  /* Glob pattern.  */
633  const char *pattern;
634  /* NULL for a glob pattern, otherwise a straight symbol.  */
635  const char *symbol;
636  /* Defined by ".symver".  */
637  unsigned int symver : 1;
638  /* Defined by version script.  */
639  unsigned int script : 1;
640  /* Pattern type.  */
641#define BFD_ELF_VERSION_C_TYPE		1
642#define BFD_ELF_VERSION_CXX_TYPE	2
643#define BFD_ELF_VERSION_JAVA_TYPE	4
644  unsigned int mask : 3;
645};
646
647struct bfd_elf_version_expr_head
648{
649  /* List of all patterns, both wildcards and non-wildcards.  */
650  struct bfd_elf_version_expr *list;
651  /* Hash table for non-wildcards.  */
652  void *htab;
653  /* Remaining patterns.  */
654  struct bfd_elf_version_expr *remaining;
655  /* What kind of pattern types are present in list (bitmask).  */
656  unsigned int mask;
657};
658
659/* Version dependencies.  */
660
661struct bfd_elf_version_deps
662{
663  /* Next dependency for this version.  */
664  struct bfd_elf_version_deps *next;
665  /* The version which this version depends upon.  */
666  struct bfd_elf_version_tree *version_needed;
667};
668
669/* A node in the version tree.  */
670
671struct bfd_elf_version_tree
672{
673  /* Next version.  */
674  struct bfd_elf_version_tree *next;
675  /* Name of this version.  */
676  const char *name;
677  /* Version number.  */
678  unsigned int vernum;
679  /* Regular expressions for global symbols in this version.  */
680  struct bfd_elf_version_expr_head globals;
681  /* Regular expressions for local symbols in this version.  */
682  struct bfd_elf_version_expr_head locals;
683  /* List of versions which this version depends upon.  */
684  struct bfd_elf_version_deps *deps;
685  /* Index of the version name.  This is used within BFD.  */
686  unsigned int name_indx;
687  /* Whether this version tree was used.  This is used within BFD.  */
688  int used;
689  /* Matching hook.  */
690  struct bfd_elf_version_expr *(*match)
691    (struct bfd_elf_version_expr_head *head,
692     struct bfd_elf_version_expr *prev, const char *sym);
693};
694
695#endif
696