xref: /netbsd-src/external/gpl3/binutils/dist/include/bfdlink.h (revision a5847cc334d9a7029f6352b847e9e8d71a0f9e0c)
1 /* bfdlink.h -- header file for BFD link routines
2    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
21    MA 02110-1301, USA.  */
22 
23 #ifndef BFDLINK_H
24 #define BFDLINK_H
25 
26 /* Which symbols to strip during a link.  */
27 enum bfd_link_strip
28 {
29   strip_none,		/* Don't strip any symbols.  */
30   strip_debugger,	/* Strip debugging symbols.  */
31   strip_some,		/* keep_hash is the list of symbols to keep.  */
32   strip_all		/* Strip all symbols.  */
33 };
34 
35 /* Which local symbols to discard during a link.  This is irrelevant
36    if strip_all is used.  */
37 enum bfd_link_discard
38 {
39   discard_sec_merge,	/* Discard local temporary symbols in SEC_MERGE
40 			   sections.  */
41   discard_none,		/* Don't discard any locals.  */
42   discard_l,		/* Discard local temporary symbols.  */
43   discard_all		/* Discard all locals.  */
44 };
45 
46 /* Describes the type of hash table entry structure being used.
47    Different hash table structure have different fields and so
48    support different linking features.  */
49 enum bfd_link_hash_table_type
50   {
51     bfd_link_generic_hash_table,
52     bfd_link_elf_hash_table
53   };
54 
55 /* These are the possible types of an entry in the BFD link hash
56    table.  */
57 
58 enum bfd_link_hash_type
59 {
60   bfd_link_hash_new,		/* Symbol is new.  */
61   bfd_link_hash_undefined,	/* Symbol seen before, but undefined.  */
62   bfd_link_hash_undefweak,	/* Symbol is weak and undefined.  */
63   bfd_link_hash_defined,	/* Symbol is defined.  */
64   bfd_link_hash_defweak,	/* Symbol is weak and defined.  */
65   bfd_link_hash_common,		/* Symbol is common.  */
66   bfd_link_hash_indirect,	/* Symbol is an indirect link.  */
67   bfd_link_hash_warning		/* Like indirect, but warn if referenced.  */
68 };
69 
70 enum bfd_link_common_skip_ar_symbols
71 {
72   bfd_link_common_skip_none,
73   bfd_link_common_skip_text,
74   bfd_link_common_skip_data,
75   bfd_link_common_skip_all
76 };
77 
78 struct bfd_link_hash_common_entry
79   {
80     unsigned int alignment_power;	/* Alignment.  */
81     asection *section;		/* Symbol section.  */
82   };
83 
84 /* The linking routines use a hash table which uses this structure for
85    its elements.  */
86 
87 struct bfd_link_hash_entry
88 {
89   /* Base hash table entry structure.  */
90   struct bfd_hash_entry root;
91 
92   /* Type of this entry.  */
93   ENUM_BITFIELD (bfd_link_hash_type) type : 8;
94 
95   unsigned int non_ir_ref : 1;
96 
97   /* A union of information depending upon the type.  */
98   union
99     {
100       /* Nothing is kept for bfd_hash_new.  */
101       /* bfd_link_hash_undefined, bfd_link_hash_undefweak.  */
102       struct
103 	{
104 	  /* Undefined and common symbols are kept in a linked list through
105 	     this field.  This field is present in all of the union element
106 	     so that we don't need to remove entries from the list when we
107 	     change their type.  Removing entries would either require the
108 	     list to be doubly linked, which would waste more memory, or
109 	     require a traversal.  When an undefined or common symbol is
110 	     created, it should be added to this list, the head of which is in
111 	     the link hash table itself.  As symbols are defined, they need
112 	     not be removed from the list; anything which reads the list must
113 	     doublecheck the symbol type.
114 
115 	     Weak symbols are not kept on this list.
116 
117 	     Defined and defweak symbols use this field as a reference marker.
118 	     If the field is not NULL, or this structure is the tail of the
119 	     undefined symbol list, the symbol has been referenced.  If the
120 	     symbol is undefined and becomes defined, this field will
121 	     automatically be non-NULL since the symbol will have been on the
122 	     undefined symbol list.  */
123 	  struct bfd_link_hash_entry *next;
124 	  bfd *abfd;		/* BFD symbol was found in.  */
125 	} undef;
126       /* bfd_link_hash_defined, bfd_link_hash_defweak.  */
127       struct
128 	{
129 	  struct bfd_link_hash_entry *next;
130 	  asection *section;	/* Symbol section.  */
131 	  bfd_vma value;	/* Symbol value.  */
132 	} def;
133       /* bfd_link_hash_indirect, bfd_link_hash_warning.  */
134       struct
135 	{
136 	  struct bfd_link_hash_entry *next;
137 	  struct bfd_link_hash_entry *link;	/* Real symbol.  */
138 	  const char *warning;	/* Warning (bfd_link_hash_warning only).  */
139 	} i;
140       /* bfd_link_hash_common.  */
141       struct
142 	{
143 	  struct bfd_link_hash_entry *next;
144 	  /* The linker needs to know three things about common
145 	     symbols: the size, the alignment, and the section in
146 	     which the symbol should be placed.  We store the size
147 	     here, and we allocate a small structure to hold the
148 	     section and the alignment.  The alignment is stored as a
149 	     power of two.  We don't store all the information
150 	     directly because we don't want to increase the size of
151 	     the union; this structure is a major space user in the
152 	     linker.  */
153 	  struct bfd_link_hash_common_entry *p;
154 	  bfd_size_type size;	/* Common symbol size.  */
155 	} c;
156     } u;
157 };
158 
159 /* This is the link hash table.  It is a derived class of
160    bfd_hash_table.  */
161 
162 struct bfd_link_hash_table
163 {
164   /* The hash table itself.  */
165   struct bfd_hash_table table;
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.  */
178 extern 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 
186 extern 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.  */
191 extern 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.  */
197 extern void bfd_link_add_undef
198   (struct bfd_link_hash_table *, struct bfd_link_hash_entry *);
199 
200 /* Remove symbols from the undefs list that don't belong there.  */
201 extern void bfd_link_repair_undef_list
202   (struct bfd_link_hash_table *table);
203 
204 /* Read symbols and cache symbol pointer array in outsymbols.  */
205 extern bfd_boolean bfd_generic_link_read_symbols (bfd *);
206 
207 struct bfd_sym_chain
208 {
209   struct bfd_sym_chain *next;
210   const char *name;
211 };
212 
213 /* How to handle unresolved symbols.
214    There are four possibilities which are enumerated below:  */
215 enum report_method
216 {
217   /* This is the initial value when then link_info structure is created.
218      It allows the various stages of the linker to determine whether they
219      allowed to set the value.  */
220   RM_NOT_YET_SET = 0,
221   RM_IGNORE,
222   RM_GENERATE_WARNING,
223   RM_GENERATE_ERROR
224 };
225 
226 struct bfd_elf_dynamic_list;
227 
228 /* This structure holds all the information needed to communicate
229    between BFD and the linker when doing a link.  */
230 
231 struct bfd_link_info
232 {
233   /* TRUE if BFD should generate a relocatable object file.  */
234   unsigned int relocatable: 1;
235 
236   /* TRUE if BFD should generate relocation information in the final
237      executable.  */
238   unsigned int emitrelocations: 1;
239 
240   /* TRUE if BFD should generate a "task linked" object file,
241      similar to relocatable but also with globals converted to
242      statics.  */
243   unsigned int task_link: 1;
244 
245   /* TRUE if BFD should generate a shared object.  */
246   unsigned int shared: 1;
247 
248   /* TRUE if BFD should pre-bind symbols in a shared object.  */
249   unsigned int symbolic: 1;
250 
251   /* TRUE if BFD should export all symbols in the dynamic symbol table
252      of an executable, rather than only those used.  */
253   unsigned int export_dynamic: 1;
254 
255   /* TRUE if shared objects should be linked directly, not shared.  */
256   unsigned int static_link: 1;
257 
258   /* TRUE if the output file should be in a traditional format.  This
259      is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
260      on the output file, but may be checked when reading the input
261      files.  */
262   unsigned int traditional_format: 1;
263 
264   /* TRUE if we want to produced optimized output files.  This might
265      need much more time and therefore must be explicitly selected.  */
266   unsigned int optimize: 1;
267 
268   /* TRUE if ok to have multiple definition.  */
269   unsigned int allow_multiple_definition: 1;
270 
271   /* TRUE if ok to have version with no definition.  */
272   unsigned int allow_undefined_version: 1;
273 
274   /* TRUE if a default symbol version should be created and used for
275      exported symbols.  */
276   unsigned int create_default_symver: 1;
277 
278   /* TRUE if a default symbol version should be created and used for
279      imported symbols.  */
280   unsigned int default_imported_symver: 1;
281 
282   /* TRUE if symbols should be retained in memory, FALSE if they
283      should be freed and reread.  */
284   unsigned int keep_memory: 1;
285 
286   /* TRUE if every symbol should be reported back via the notice
287      callback.  */
288   unsigned int notice_all: 1;
289 
290   /* TRUE if executable should not contain copy relocs.
291      Setting this true may result in a non-sharable text segment.  */
292   unsigned int nocopyreloc: 1;
293 
294   /* TRUE if the new ELF dynamic tags are enabled. */
295   unsigned int new_dtags: 1;
296 
297   /* TRUE if non-PLT relocs should be merged into one reloc section
298      and sorted so that relocs against the same symbol come together.  */
299   unsigned int combreloc: 1;
300 
301   /* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
302      should be created.  */
303   unsigned int eh_frame_hdr: 1;
304 
305   /* TRUE if global symbols in discarded sections should be stripped.  */
306   unsigned int strip_discarded: 1;
307 
308   /* TRUE if generating a position independent executable.  */
309   unsigned int pie: 1;
310 
311   /* TRUE if generating an executable, position independent or not.  */
312   unsigned int executable : 1;
313 
314   /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X
315      flags.  */
316   unsigned int execstack: 1;
317 
318   /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W
319      flags.  */
320   unsigned int noexecstack: 1;
321 
322   /* TRUE if PT_GNU_RELRO segment should be created.  */
323   unsigned int relro: 1;
324 
325   /* TRUE if we should warn when adding a DT_TEXTREL to a shared object.  */
326   unsigned int warn_shared_textrel: 1;
327 
328   /* TRUE if we should warn alternate ELF machine code.  */
329   unsigned int warn_alternate_em: 1;
330 
331   /* TRUE if unreferenced sections should be removed.  */
332   unsigned int gc_sections: 1;
333 
334   /* TRUE if user shoudl be informed of removed unreferenced sections.  */
335   unsigned int print_gc_sections: 1;
336 
337   /* TRUE if .hash section should be created.  */
338   unsigned int emit_hash: 1;
339 
340   /* TRUE if .gnu.hash section should be created.  */
341   unsigned int emit_gnu_hash: 1;
342 
343   /* If TRUE reduce memory overheads, at the expense of speed. This will
344      cause map file generation to use an O(N^2) algorithm and disable
345      caching ELF symbol buffer.  */
346   unsigned int reduce_memory_overheads: 1;
347 
348   /* TRUE if all data symbols should be dynamic.  */
349    unsigned int dynamic_data: 1;
350 
351   /* TRUE if some symbols have to be dynamic, controlled by
352      --dynamic-list command line options.  */
353   unsigned int dynamic: 1;
354 
355   /* Non-NULL if .note.gnu.build-id section should be created.  */
356   char *emit_note_gnu_build_id;
357 
358   /* What to do with unresolved symbols in an object file.
359      When producing executables the default is GENERATE_ERROR.
360      When producing shared libraries the default is IGNORE.  The
361      assumption with shared libraries is that the reference will be
362      resolved at load/execution time.  */
363   enum report_method unresolved_syms_in_objects;
364 
365   /* What to do with unresolved symbols in a shared library.
366      The same defaults apply.  */
367   enum report_method unresolved_syms_in_shared_libs;
368 
369   /* Which symbols to strip.  */
370   enum bfd_link_strip strip;
371 
372   /* Which local symbols to discard.  */
373   enum bfd_link_discard discard;
374 
375   /* Criteria for skipping symbols when determining
376      whether to include an object from an archive. */
377   enum bfd_link_common_skip_ar_symbols common_skip_ar_symbols;
378 
379   /* Char that may appear as the first char of a symbol, but should be
380      skipped (like symbol_leading_char) when looking up symbols in
381      wrap_hash.  Used by PowerPC Linux for 'dot' symbols.  */
382   char wrap_char;
383 
384   /* Separator between archive and filename in linker script filespecs.  */
385   char path_separator;
386 
387   /* Function callbacks.  */
388   const struct bfd_link_callbacks *callbacks;
389 
390   /* Hash table handled by BFD.  */
391   struct bfd_link_hash_table *hash;
392 
393   /* Hash table of symbols to keep.  This is NULL unless strip is
394      strip_some.  */
395   struct bfd_hash_table *keep_hash;
396 
397   /* Hash table of symbols to report back via the notice callback.  If
398      this is NULL, and notice_all is FALSE, then no symbols are
399      reported back.  */
400   struct bfd_hash_table *notice_hash;
401 
402   /* Hash table of symbols which are being wrapped (the --wrap linker
403      option).  If this is NULL, no symbols are being wrapped.  */
404   struct bfd_hash_table *wrap_hash;
405 
406   /* Hash table of symbols which may be left unresolved during
407      a link.  If this is NULL, no symbols can be left unresolved.  */
408   struct bfd_hash_table *ignore_hash;
409 
410   /* The output BFD.  */
411   bfd *output_bfd;
412 
413   /* The list of input BFD's involved in the link.  These are chained
414      together via the link_next field.  */
415   bfd *input_bfds;
416   bfd **input_bfds_tail;
417 
418   /* If a symbol should be created for each input BFD, this is section
419      where those symbols should be placed.  It must be a section in
420      the output BFD.  It may be NULL, in which case no such symbols
421      will be created.  This is to support CREATE_OBJECT_SYMBOLS in the
422      linker command language.  */
423   asection *create_object_symbols_section;
424 
425   /* List of global symbol names that are starting points for marking
426      sections against garbage collection.  */
427   struct bfd_sym_chain *gc_sym_list;
428 
429   /* If a base output file is wanted, then this points to it */
430   void *base_file;
431 
432   /* The function to call when the executable or shared object is
433      loaded.  */
434   const char *init_function;
435 
436   /* The function to call when the executable or shared object is
437      unloaded.  */
438   const char *fini_function;
439 
440   /* Number of relaxation passes.  Usually only one relaxation pass
441      is needed.  But a backend can have as many relaxation passes as
442      necessary.  During bfd_relax_section call, it is set to the
443      current pass, starting from 0.  */
444   int relax_pass;
445 
446   /* Number of relaxation trips.  This number is incremented every
447      time the relaxation pass is restarted due to a previous
448      relaxation returning true in *AGAIN.  */
449   int relax_trip;
450 
451   /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
452      should be generated/linked against.  Set to 1 if this feature
453      is explicitly requested by the user, -1 if enabled by default.  */
454   int pei386_auto_import;
455 
456   /* Non-zero if runtime relocs for DATA items with non-zero addends
457      in pei386 DLLs should be generated.  Set to 1 if this feature
458      is explicitly requested by the user, -1 if enabled by default.  */
459   int pei386_runtime_pseudo_reloc;
460 
461   /* How many spare .dynamic DT_NULL entries should be added?  */
462   unsigned int spare_dynamic_tags;
463 
464   /* May be used to set DT_FLAGS for ELF. */
465   bfd_vma flags;
466 
467   /* May be used to set DT_FLAGS_1 for ELF. */
468   bfd_vma flags_1;
469 
470   /* Start and end of RELRO region.  */
471   bfd_vma relro_start, relro_end;
472 
473   /* List of symbols should be dynamic.  */
474   struct bfd_elf_dynamic_list *dynamic_list;
475 };
476 
477 /* This structures holds a set of callback functions.  These are called
478    by the BFD linker routines.  Except for the info functions, the first
479    argument to each callback function is the bfd_link_info structure
480    being used and each function returns a boolean value.  If the
481    function returns FALSE, then the BFD function which called it should
482    return with a failure indication.  */
483 
484 struct bfd_link_callbacks
485 {
486   /* A function which is called when an object is added from an
487      archive.  ABFD is the archive element being added.  NAME is the
488      name of the symbol which caused the archive element to be pulled
489      in.  This function may set *SUBSBFD to point to an alternative
490      BFD from which symbols should in fact be added in place of the
491      original BFD's symbols.  */
492   bfd_boolean (*add_archive_element)
493     (struct bfd_link_info *, bfd *abfd, const char *name, bfd **subsbfd);
494   /* A function which is called when a symbol is found with multiple
495      definitions.  H is the symbol which is defined multiple times.
496      NBFD is the new BFD, NSEC is the new section, and NVAL is the new
497      value.  NSEC may be bfd_com_section or bfd_ind_section.  */
498   bfd_boolean (*multiple_definition)
499     (struct bfd_link_info *, struct bfd_link_hash_entry *h,
500      bfd *nbfd, asection *nsec, bfd_vma nval);
501   /* A function which is called when a common symbol is defined
502      multiple times.  H is the symbol appearing multiple times.
503      NBFD is the BFD of the new symbol.  NTYPE is the type of the new
504      symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
505      bfd_link_hash_indirect.  If NTYPE is bfd_link_hash_common, NSIZE
506      is the size of the new symbol.  */
507   bfd_boolean (*multiple_common)
508     (struct bfd_link_info *, struct bfd_link_hash_entry *h,
509      bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
510   /* A function which is called to add a symbol to a set.  ENTRY is
511      the link hash table entry for the set itself (e.g.,
512      __CTOR_LIST__).  RELOC is the relocation to use for an entry in
513      the set when generating a relocatable file, and is also used to
514      get the size of the entry when generating an executable file.
515      ABFD, SEC and VALUE identify the value to add to the set.  */
516   bfd_boolean (*add_to_set)
517     (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
518      bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
519   /* A function which is called when the name of a g++ constructor or
520      destructor is found.  This is only called by some object file
521      formats.  CONSTRUCTOR is TRUE for a constructor, FALSE for a
522      destructor.  This will use BFD_RELOC_CTOR when generating a
523      relocatable file.  NAME is the name of the symbol found.  ABFD,
524      SECTION and VALUE are the value of the symbol.  */
525   bfd_boolean (*constructor)
526     (struct bfd_link_info *, bfd_boolean constructor, const char *name,
527      bfd *abfd, asection *sec, bfd_vma value);
528   /* A function which is called to issue a linker warning.  For
529      example, this is called when there is a reference to a warning
530      symbol.  WARNING is the warning to be issued.  SYMBOL is the name
531      of the symbol which triggered the warning; it may be NULL if
532      there is none.  ABFD, SECTION and ADDRESS identify the location
533      which trigerred the warning; either ABFD or SECTION or both may
534      be NULL if the location is not known.  */
535   bfd_boolean (*warning)
536     (struct bfd_link_info *, const char *warning, const char *symbol,
537      bfd *abfd, asection *section, bfd_vma address);
538   /* A function which is called when a relocation is attempted against
539      an undefined symbol.  NAME is the symbol which is undefined.
540      ABFD, SECTION and ADDRESS identify the location from which the
541      reference is made. IS_FATAL indicates whether an undefined symbol is
542      a fatal error or not. In some cases SECTION may be NULL.  */
543   bfd_boolean (*undefined_symbol)
544     (struct bfd_link_info *, const char *name, bfd *abfd,
545      asection *section, bfd_vma address, bfd_boolean is_fatal);
546   /* A function which is called when a reloc overflow occurs. ENTRY is
547      the link hash table entry for the symbol the reloc is against.
548      NAME is the name of the local symbol or section the reloc is
549      against, RELOC_NAME is the name of the relocation, and ADDEND is
550      any addend that is used.  ABFD, SECTION and ADDRESS identify the
551      location at which the overflow occurs; if this is the result of a
552      bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
553      ABFD will be NULL.  */
554   bfd_boolean (*reloc_overflow)
555     (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
556      const char *name, const char *reloc_name, bfd_vma addend,
557      bfd *abfd, asection *section, bfd_vma address);
558   /* A function which is called when a dangerous reloc is performed.
559      MESSAGE is an appropriate message.
560      ABFD, SECTION and ADDRESS identify the location at which the
561      problem occurred; if this is the result of a
562      bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
563      ABFD will be NULL.  */
564   bfd_boolean (*reloc_dangerous)
565     (struct bfd_link_info *, const char *message,
566      bfd *abfd, asection *section, bfd_vma address);
567   /* A function which is called when a reloc is found to be attached
568      to a symbol which is not being written out.  NAME is the name of
569      the symbol.  ABFD, SECTION and ADDRESS identify the location of
570      the reloc; if this is the result of a
571      bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
572      ABFD will be NULL.  */
573   bfd_boolean (*unattached_reloc)
574     (struct bfd_link_info *, const char *name,
575      bfd *abfd, asection *section, bfd_vma address);
576   /* A function which is called when a symbol in notice_hash is
577      defined or referenced.  H is the symbol.  ABFD, SECTION and
578      ADDRESS are the (new) value of the symbol.  If SECTION is
579      bfd_und_section, this is a reference.  FLAGS are the symbol
580      BSF_* flags.  STRING is the name of the symbol to indirect to if
581      the sym is indirect, or the warning string if a warning sym.  */
582   bfd_boolean (*notice)
583     (struct bfd_link_info *, struct bfd_link_hash_entry *h,
584      bfd *abfd, asection *section, bfd_vma address, flagword flags,
585      const char *string);
586   /* Error or warning link info message.  */
587   void (*einfo)
588     (const char *fmt, ...);
589   /* General link info message.  */
590   void (*info)
591     (const char *fmt, ...);
592   /* Message to be printed in linker map file.  */
593   void (*minfo)
594     (const char *fmt, ...);
595   /* This callback provides a chance for users of the BFD library to
596      override its decision about whether to place two adjacent sections
597      into the same segment.  */
598   bfd_boolean (*override_segment_assignment)
599     (struct bfd_link_info *, bfd * abfd,
600      asection * current_section, asection * previous_section,
601      bfd_boolean new_segment);
602 };
603 
604 /* The linker builds link_order structures which tell the code how to
605    include input data in the output file.  */
606 
607 /* These are the types of link_order structures.  */
608 
609 enum bfd_link_order_type
610 {
611   bfd_undefined_link_order,	/* Undefined.  */
612   bfd_indirect_link_order,	/* Built from a section.  */
613   bfd_data_link_order,		/* Set to explicit data.  */
614   bfd_section_reloc_link_order,	/* Relocate against a section.  */
615   bfd_symbol_reloc_link_order	/* Relocate against a symbol.  */
616 };
617 
618 /* This is the link_order structure itself.  These form a chain
619    attached to the output section whose contents they are describing.  */
620 
621 struct bfd_link_order
622 {
623   /* Next link_order in chain.  */
624   struct bfd_link_order *next;
625   /* Type of link_order.  */
626   enum bfd_link_order_type type;
627   /* Offset within output section.  */
628   bfd_vma offset;
629   /* Size within output section.  */
630   bfd_size_type size;
631   /* Type specific information.  */
632   union
633     {
634       struct
635 	{
636 	  /* Section to include.  If this is used, then
637 	     section->output_section must be the section the
638 	     link_order is attached to, section->output_offset must
639 	     equal the link_order offset field, and section->size
640 	     must equal the link_order size field.  Maybe these
641 	     restrictions should be relaxed someday.  */
642 	  asection *section;
643 	} indirect;
644       struct
645 	{
646 	  /* Size of contents, or zero when contents size == size
647 	     within output section.
648 	     A non-zero value allows filling of the output section
649 	     with an arbitrary repeated pattern.  */
650 	  unsigned int size;
651 	  /* Data to put into file.  */
652 	  bfd_byte *contents;
653 	} data;
654       struct
655 	{
656 	  /* Description of reloc to generate.  Used for
657 	     bfd_section_reloc_link_order and
658 	     bfd_symbol_reloc_link_order.  */
659 	  struct bfd_link_order_reloc *p;
660 	} reloc;
661     } u;
662 };
663 
664 /* A linker order of type bfd_section_reloc_link_order or
665    bfd_symbol_reloc_link_order means to create a reloc against a
666    section or symbol, respectively.  This is used to implement -Ur to
667    generate relocs for the constructor tables.  The
668    bfd_link_order_reloc structure describes the reloc that BFD should
669    create.  It is similar to a arelent, but I didn't use arelent
670    because the linker does not know anything about most symbols, and
671    any asymbol structure it creates will be partially meaningless.
672    This information could logically be in the bfd_link_order struct,
673    but I didn't want to waste the space since these types of relocs
674    are relatively rare.  */
675 
676 struct bfd_link_order_reloc
677 {
678   /* Reloc type.  */
679   bfd_reloc_code_real_type reloc;
680 
681   union
682     {
683       /* For type bfd_section_reloc_link_order, this is the section
684 	 the reloc should be against.  This must be a section in the
685 	 output BFD, not any of the input BFDs.  */
686       asection *section;
687       /* For type bfd_symbol_reloc_link_order, this is the name of the
688 	 symbol the reloc should be against.  */
689       const char *name;
690     } u;
691 
692   /* Addend to use.  The object file should contain zero.  The BFD
693      backend is responsible for filling in the contents of the object
694      file correctly.  For some object file formats (e.g., COFF) the
695      addend must be stored into in the object file, and for some
696      (e.g., SPARC a.out) it is kept in the reloc.  */
697   bfd_vma addend;
698 };
699 
700 /* Allocate a new link_order for a section.  */
701 extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
702 
703 /* These structures are used to describe version information for the
704    ELF linker.  These structures could be manipulated entirely inside
705    BFD, but it would be a pain.  Instead, the regular linker sets up
706    these structures, and then passes them into BFD.  */
707 
708 /* Glob pattern for a version.  */
709 
710 struct bfd_elf_version_expr
711 {
712   /* Next glob pattern for this version.  */
713   struct bfd_elf_version_expr *next;
714   /* Glob pattern.  */
715   const char *pattern;
716   /* Set if pattern is not a glob.  */
717   unsigned int literal : 1;
718   /* Defined by ".symver".  */
719   unsigned int symver : 1;
720   /* Defined by version script.  */
721   unsigned int script : 1;
722   /* Pattern type.  */
723 #define BFD_ELF_VERSION_C_TYPE		1
724 #define BFD_ELF_VERSION_CXX_TYPE	2
725 #define BFD_ELF_VERSION_JAVA_TYPE	4
726   unsigned int mask : 3;
727 };
728 
729 struct bfd_elf_version_expr_head
730 {
731   /* List of all patterns, both wildcards and non-wildcards.  */
732   struct bfd_elf_version_expr *list;
733   /* Hash table for non-wildcards.  */
734   void *htab;
735   /* Remaining patterns.  */
736   struct bfd_elf_version_expr *remaining;
737   /* What kind of pattern types are present in list (bitmask).  */
738   unsigned int mask;
739 };
740 
741 /* Version dependencies.  */
742 
743 struct bfd_elf_version_deps
744 {
745   /* Next dependency for this version.  */
746   struct bfd_elf_version_deps *next;
747   /* The version which this version depends upon.  */
748   struct bfd_elf_version_tree *version_needed;
749 };
750 
751 /* A node in the version tree.  */
752 
753 struct bfd_elf_version_tree
754 {
755   /* Next version.  */
756   struct bfd_elf_version_tree *next;
757   /* Name of this version.  */
758   const char *name;
759   /* Version number.  */
760   unsigned int vernum;
761   /* Regular expressions for global symbols in this version.  */
762   struct bfd_elf_version_expr_head globals;
763   /* Regular expressions for local symbols in this version.  */
764   struct bfd_elf_version_expr_head locals;
765   /* List of versions which this version depends upon.  */
766   struct bfd_elf_version_deps *deps;
767   /* Index of the version name.  This is used within BFD.  */
768   unsigned int name_indx;
769   /* Whether this version tree was used.  This is used within BFD.  */
770   int used;
771   /* Matching hook.  */
772   struct bfd_elf_version_expr *(*match)
773     (struct bfd_elf_version_expr_head *head,
774      struct bfd_elf_version_expr *prev, const char *sym);
775 };
776 
777 struct bfd_elf_dynamic_list
778 {
779   struct bfd_elf_version_expr_head head;
780   struct bfd_elf_version_expr *(*match)
781     (struct bfd_elf_version_expr_head *head,
782      struct bfd_elf_version_expr *prev, const char *sym);
783 };
784 
785 #endif
786