Limit moxie sto/ldo offsets to 16 bits
[external/binutils.git] / include / bfdlink.h
1 /* bfdlink.h -- header file for BFD link routines
2    Copyright (C) 1993-2014 Free Software Foundation, Inc.
3    Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
4
5    This file is part of BFD, the Binary File Descriptor library.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20    MA 02110-1301, 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 \f
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_symbols
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 struct bfd_link_hash_common_entry
78   {
79     unsigned int alignment_power;       /* Alignment.  */
80     asection *section;          /* Symbol section.  */
81   };
82
83 /* The linking routines use a hash table which uses this structure for
84    its elements.  */
85
86 struct bfd_link_hash_entry
87 {
88   /* Base hash table entry structure.  */
89   struct bfd_hash_entry root;
90
91   /* Type of this entry.  */
92   ENUM_BITFIELD (bfd_link_hash_type) type : 8;
93
94   /* Symbol is referenced in a normal object file, as distict from a LTO
95      IR object file.  */
96   unsigned int non_ir_ref : 1;
97
98   /* Symbol is a built-in define.  These will be overridden by PROVIDE
99      in a linker script.  */
100   unsigned int linker_def : 1;
101
102   /* A union of information depending upon the type.  */
103   union
104     {
105       /* Nothing is kept for bfd_hash_new.  */
106       /* bfd_link_hash_undefined, bfd_link_hash_undefweak.  */
107       struct
108         {
109           /* Undefined and common symbols are kept in a linked list through
110              this field.  This field is present in all of the union element
111              so that we don't need to remove entries from the list when we
112              change their type.  Removing entries would either require the
113              list to be doubly linked, which would waste more memory, or
114              require a traversal.  When an undefined or common symbol is
115              created, it should be added to this list, the head of which is in
116              the link hash table itself.  As symbols are defined, they need
117              not be removed from the list; anything which reads the list must
118              doublecheck the symbol type.
119
120              Weak symbols are not kept on this list.
121
122              Defined and defweak symbols use this field as a reference marker.
123              If the field is not NULL, or this structure is the tail of the
124              undefined symbol list, the symbol has been referenced.  If the
125              symbol is undefined and becomes defined, this field will
126              automatically be non-NULL since the symbol will have been on the
127              undefined symbol list.  */
128           struct bfd_link_hash_entry *next;
129           bfd *abfd;            /* BFD symbol was found in.  */
130         } undef;
131       /* bfd_link_hash_defined, bfd_link_hash_defweak.  */
132       struct
133         {
134           struct bfd_link_hash_entry *next;
135           asection *section;    /* Symbol section.  */
136           bfd_vma value;        /* Symbol value.  */
137         } def;
138       /* bfd_link_hash_indirect, bfd_link_hash_warning.  */
139       struct
140         {
141           struct bfd_link_hash_entry *next;
142           struct bfd_link_hash_entry *link;     /* Real symbol.  */
143           const char *warning;  /* Warning (bfd_link_hash_warning only).  */
144         } i;
145       /* bfd_link_hash_common.  */
146       struct
147         {
148           struct bfd_link_hash_entry *next;
149           /* The linker needs to know three things about common
150              symbols: the size, the alignment, and the section in
151              which the symbol should be placed.  We store the size
152              here, and we allocate a small structure to hold the
153              section and the alignment.  The alignment is stored as a
154              power of two.  We don't store all the information
155              directly because we don't want to increase the size of
156              the union; this structure is a major space user in the
157              linker.  */
158           struct bfd_link_hash_common_entry *p;
159           bfd_size_type size;   /* Common symbol size.  */
160         } c;
161     } u;
162 };
163
164 /* This is the link hash table.  It is a derived class of
165    bfd_hash_table.  */
166
167 struct bfd_link_hash_table
168 {
169   /* The hash table itself.  */
170   struct bfd_hash_table table;
171   /* A linked list of undefined and common symbols, linked through the
172      next field in the bfd_link_hash_entry structure.  */
173   struct bfd_link_hash_entry *undefs;
174   /* Entries are added to the tail of the undefs list.  */
175   struct bfd_link_hash_entry *undefs_tail;
176   /* Function to free the hash table on closing BFD.  */
177   void (*hash_table_free) (bfd *);
178   /* The type of the link hash table.  */
179   enum bfd_link_hash_table_type type;
180 };
181
182 /* Look up an entry in a link hash table.  If FOLLOW is TRUE, this
183    follows bfd_link_hash_indirect and bfd_link_hash_warning links to
184    the real symbol.  */
185 extern struct bfd_link_hash_entry *bfd_link_hash_lookup
186   (struct bfd_link_hash_table *, const char *, bfd_boolean create,
187    bfd_boolean copy, bfd_boolean follow);
188
189 /* Look up an entry in the main linker hash table if the symbol might
190    be wrapped.  This should only be used for references to an
191    undefined symbol, not for definitions of a symbol.  */
192
193 extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
194   (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
195    bfd_boolean, bfd_boolean);
196
197 /* If H is a wrapped symbol, ie. the symbol name starts with "__wrap_"
198    and the remainder is found in wrap_hash, return the real symbol.  */
199
200 extern struct bfd_link_hash_entry *unwrap_hash_lookup
201   (struct bfd_link_info *, bfd *, struct bfd_link_hash_entry *);
202
203 /* Traverse a link hash table.  */
204 extern void bfd_link_hash_traverse
205   (struct bfd_link_hash_table *,
206     bfd_boolean (*) (struct bfd_link_hash_entry *, void *),
207     void *);
208
209 /* Add an entry to the undefs list.  */
210 extern void bfd_link_add_undef
211   (struct bfd_link_hash_table *, struct bfd_link_hash_entry *);
212
213 /* Remove symbols from the undefs list that don't belong there.  */
214 extern void bfd_link_repair_undef_list
215   (struct bfd_link_hash_table *table);
216
217 /* Read symbols and cache symbol pointer array in outsymbols.  */
218 extern bfd_boolean bfd_generic_link_read_symbols (bfd *);
219
220 struct bfd_sym_chain
221 {
222   struct bfd_sym_chain *next;
223   const char *name;
224 };
225 \f
226 /* How to handle unresolved symbols.
227    There are four possibilities which are enumerated below:  */
228 enum report_method
229 {
230   /* This is the initial value when then link_info structure is created.
231      It allows the various stages of the linker to determine whether they
232      allowed to set the value.  */
233   RM_NOT_YET_SET = 0,
234   RM_IGNORE,
235   RM_GENERATE_WARNING,
236   RM_GENERATE_ERROR
237 };
238
239 typedef enum {with_flags, without_flags} flag_type;
240
241 /* A section flag list.  */
242 struct flag_info_list
243 {
244   flag_type with;
245   const char *name;
246   bfd_boolean valid;
247   struct flag_info_list *next;
248 };
249
250 /* Section flag info.  */
251 struct flag_info
252 {
253   flagword only_with_flags;
254   flagword not_with_flags;
255   struct flag_info_list *flag_list;
256   bfd_boolean flags_initialized;
257 };
258
259 struct bfd_elf_dynamic_list;
260 struct bfd_elf_version_tree;
261
262 /* This structure holds all the information needed to communicate
263    between BFD and the linker when doing a link.  */
264
265 struct bfd_link_info
266 {
267   /* TRUE if BFD should generate a shared object (or a pie).  */
268   unsigned int shared: 1;
269
270   /* TRUE if generating an executable, position independent or not.  */
271   unsigned int executable : 1;
272
273   /* TRUE if generating a position independent executable.  */
274   unsigned int pie: 1;
275
276   /* TRUE if BFD should generate a relocatable object file.  */
277   unsigned int relocatable: 1;
278
279   /* TRUE if BFD should pre-bind symbols in a shared object.  */
280   unsigned int symbolic: 1;
281
282   /* TRUE if executable should not contain copy relocs.
283      Setting this true may result in a non-sharable text segment.  */
284   unsigned int nocopyreloc: 1;
285
286   /* TRUE if BFD should export all symbols in the dynamic symbol table
287      of an executable, rather than only those used.  */
288   unsigned int export_dynamic: 1;
289
290   /* TRUE if a default symbol version should be created and used for
291      exported symbols.  */
292   unsigned int create_default_symver: 1;
293
294   /* TRUE if unreferenced sections should be removed.  */
295   unsigned int gc_sections: 1;
296
297   /* TRUE if every symbol should be reported back via the notice
298      callback.  */
299   unsigned int notice_all: 1;
300
301   /* TRUE if the LTO plugin is active.  */
302   unsigned int lto_plugin_active: 1;
303
304   /* TRUE if we are loading LTO outputs.  */
305   unsigned int loading_lto_outputs: 1;
306
307   /* TRUE if global symbols in discarded sections should be stripped.  */
308   unsigned int strip_discarded: 1;
309
310   /* TRUE if all data symbols should be dynamic.  */
311   unsigned int dynamic_data: 1;
312
313   /* Which symbols to strip.  */
314   ENUM_BITFIELD (bfd_link_strip) strip : 2;
315
316   /* Which local symbols to discard.  */
317   ENUM_BITFIELD (bfd_link_discard) discard : 2;
318
319   /* Criteria for skipping symbols when determining
320      whether to include an object from an archive. */
321   ENUM_BITFIELD (bfd_link_common_skip_ar_symbols) common_skip_ar_symbols : 2;
322
323   /* What to do with unresolved symbols in an object file.
324      When producing executables the default is GENERATE_ERROR.
325      When producing shared libraries the default is IGNORE.  The
326      assumption with shared libraries is that the reference will be
327      resolved at load/execution time.  */
328   ENUM_BITFIELD (report_method) unresolved_syms_in_objects : 2;
329
330   /* What to do with unresolved symbols in a shared library.
331      The same defaults apply.  */
332   ENUM_BITFIELD (report_method) unresolved_syms_in_shared_libs : 2;
333
334   /* TRUE if shared objects should be linked directly, not shared.  */
335   unsigned int static_link: 1;
336
337   /* TRUE if symbols should be retained in memory, FALSE if they
338      should be freed and reread.  */
339   unsigned int keep_memory: 1;
340
341   /* TRUE if BFD should generate relocation information in the final
342      executable.  */
343   unsigned int emitrelocations: 1;
344
345   /* TRUE if PT_GNU_RELRO segment should be created.  */
346   unsigned int relro: 1;
347
348   /* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
349      should be created.  */
350   unsigned int eh_frame_hdr: 1;
351
352   /* TRUE if we should warn when adding a DT_TEXTREL to a shared object.  */
353   unsigned int warn_shared_textrel: 1;
354
355   /* TRUE if we should error when adding a DT_TEXTREL.  */
356   unsigned int error_textrel: 1;
357
358   /* TRUE if .hash section should be created.  */
359   unsigned int emit_hash: 1;
360
361   /* TRUE if .gnu.hash section should be created.  */
362   unsigned int emit_gnu_hash: 1;
363
364   /* If TRUE reduce memory overheads, at the expense of speed. This will
365      cause map file generation to use an O(N^2) algorithm and disable
366      caching ELF symbol buffer.  */
367   unsigned int reduce_memory_overheads: 1;
368
369   /* TRUE if the output file should be in a traditional format.  This
370      is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
371      on the output file, but may be checked when reading the input
372      files.  */
373   unsigned int traditional_format: 1;
374
375   /* TRUE if non-PLT relocs should be merged into one reloc section
376      and sorted so that relocs against the same symbol come together.  */
377   unsigned int combreloc: 1;
378
379   /* TRUE if a default symbol version should be created and used for
380      imported symbols.  */
381   unsigned int default_imported_symver: 1;
382
383   /* TRUE if the new ELF dynamic tags are enabled. */
384   unsigned int new_dtags: 1;
385
386   /* FALSE if .eh_frame unwind info should be generated for PLT and other
387      linker created sections, TRUE if it should be omitted.  */
388   unsigned int no_ld_generated_unwind_info: 1;
389
390   /* TRUE if BFD should generate a "task linked" object file,
391      similar to relocatable but also with globals converted to
392      statics.  */
393   unsigned int task_link: 1;
394
395   /* TRUE if ok to have multiple definition.  */
396   unsigned int allow_multiple_definition: 1;
397
398   /* TRUE if ok to have version with no definition.  */
399   unsigned int allow_undefined_version: 1;
400
401   /* TRUE if some symbols have to be dynamic, controlled by
402      --dynamic-list command line options.  */
403   unsigned int dynamic: 1;
404
405   /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X
406      flags.  */
407   unsigned int execstack: 1;
408
409   /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W
410      flags.  */
411   unsigned int noexecstack: 1;
412
413   /* TRUE if we want to produced optimized output files.  This might
414      need much more time and therefore must be explicitly selected.  */
415   unsigned int optimize: 1;
416
417   /* TRUE if user should be informed of removed unreferenced sections.  */
418   unsigned int print_gc_sections: 1;
419
420   /* TRUE if we should warn alternate ELF machine code.  */
421   unsigned int warn_alternate_em: 1;
422
423   /* TRUE if the linker script contained an explicit PHDRS command.  */
424   unsigned int user_phdrs: 1;
425
426   /* TRUE if BND prefix in PLT entries is always generated.  */
427   unsigned int bndplt: 1;
428
429   /* Char that may appear as the first char of a symbol, but should be
430      skipped (like symbol_leading_char) when looking up symbols in
431      wrap_hash.  Used by PowerPC Linux for 'dot' symbols.  */
432   char wrap_char;
433
434   /* Separator between archive and filename in linker script filespecs.  */
435   char path_separator;
436
437   /* Default stack size.  Zero means default (often zero itself), -1
438      means explicitly zero-sized.  */
439   bfd_signed_vma stacksize;
440
441   /* Enable or disable target specific optimizations.
442
443      Not all targets have optimizations to enable.
444
445      Normally these optimizations are disabled by default but some targets
446      prefer to enable them by default.  So this field is a tri-state variable.
447      The values are:
448      
449      zero: Enable the optimizations (either from --relax being specified on
450        the command line or the backend's before_allocation emulation function.
451        
452      positive: The user has requested that these optimizations be disabled.
453        (Via the --no-relax command line option).
454
455      negative: The optimizations are disabled.  (Set when initializing the
456        args_type structure in ldmain.c:main.  */
457   signed int disable_target_specific_optimizations;
458
459   /* Function callbacks.  */
460   const struct bfd_link_callbacks *callbacks;
461
462   /* Hash table handled by BFD.  */
463   struct bfd_link_hash_table *hash;
464
465   /* Hash table of symbols to keep.  This is NULL unless strip is
466      strip_some.  */
467   struct bfd_hash_table *keep_hash;
468
469   /* Hash table of symbols to report back via the notice callback.  If
470      this is NULL, and notice_all is FALSE, then no symbols are
471      reported back.  */
472   struct bfd_hash_table *notice_hash;
473
474   /* Hash table of symbols which are being wrapped (the --wrap linker
475      option).  If this is NULL, no symbols are being wrapped.  */
476   struct bfd_hash_table *wrap_hash;
477
478   /* Hash table of symbols which may be left unresolved during
479      a link.  If this is NULL, no symbols can be left unresolved.  */
480   struct bfd_hash_table *ignore_hash;
481
482   /* The output BFD.  */
483   bfd *output_bfd;
484
485   /* The list of input BFD's involved in the link.  These are chained
486      together via the link.next field.  */
487   bfd *input_bfds;
488   bfd **input_bfds_tail;
489
490   /* If a symbol should be created for each input BFD, this is section
491      where those symbols should be placed.  It must be a section in
492      the output BFD.  It may be NULL, in which case no such symbols
493      will be created.  This is to support CREATE_OBJECT_SYMBOLS in the
494      linker command language.  */
495   asection *create_object_symbols_section;
496
497   /* List of global symbol names that are starting points for marking
498      sections against garbage collection.  */
499   struct bfd_sym_chain *gc_sym_list;
500
501   /* If a base output file is wanted, then this points to it */
502   void *base_file;
503
504   /* The function to call when the executable or shared object is
505      loaded.  */
506   const char *init_function;
507
508   /* The function to call when the executable or shared object is
509      unloaded.  */
510   const char *fini_function;
511
512   /* Number of relaxation passes.  Usually only one relaxation pass
513      is needed.  But a backend can have as many relaxation passes as
514      necessary.  During bfd_relax_section call, it is set to the
515      current pass, starting from 0.  */
516   int relax_pass;
517
518   /* Number of relaxation trips.  This number is incremented every
519      time the relaxation pass is restarted due to a previous
520      relaxation returning true in *AGAIN.  */
521   int relax_trip;
522
523   /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
524      should be generated/linked against.  Set to 1 if this feature
525      is explicitly requested by the user, -1 if enabled by default.  */
526   int pei386_auto_import;
527
528   /* Non-zero if runtime relocs for DATA items with non-zero addends
529      in pei386 DLLs should be generated.  Set to 1 if this feature
530      is explicitly requested by the user, -1 if enabled by default.  */
531   int pei386_runtime_pseudo_reloc;
532
533   /* How many spare .dynamic DT_NULL entries should be added?  */
534   unsigned int spare_dynamic_tags;
535
536   /* May be used to set DT_FLAGS for ELF. */
537   bfd_vma flags;
538
539   /* May be used to set DT_FLAGS_1 for ELF. */
540   bfd_vma flags_1;
541
542   /* Start and end of RELRO region.  */
543   bfd_vma relro_start, relro_end;
544
545   /* List of symbols should be dynamic.  */
546   struct bfd_elf_dynamic_list *dynamic_list;
547
548   /* The version information.  */
549   struct bfd_elf_version_tree *version_info;
550 };
551
552 /* This structures holds a set of callback functions.  These are called
553    by the BFD linker routines.  Except for the info functions, the first
554    argument to each callback function is the bfd_link_info structure
555    being used and each function returns a boolean value.  If the
556    function returns FALSE, then the BFD function which called it should
557    return with a failure indication.  */
558
559 struct bfd_link_callbacks
560 {
561   /* A function which is called when an object is added from an
562      archive.  ABFD is the archive element being added.  NAME is the
563      name of the symbol which caused the archive element to be pulled
564      in.  This function may set *SUBSBFD to point to an alternative
565      BFD from which symbols should in fact be added in place of the
566      original BFD's symbols.  */
567   bfd_boolean (*add_archive_element)
568     (struct bfd_link_info *, bfd *abfd, const char *name, bfd **subsbfd);
569   /* A function which is called when a symbol is found with multiple
570      definitions.  H is the symbol which is defined multiple times.
571      NBFD is the new BFD, NSEC is the new section, and NVAL is the new
572      value.  NSEC may be bfd_com_section or bfd_ind_section.  */
573   bfd_boolean (*multiple_definition)
574     (struct bfd_link_info *, struct bfd_link_hash_entry *h,
575      bfd *nbfd, asection *nsec, bfd_vma nval);
576   /* A function which is called when a common symbol is defined
577      multiple times.  H is the symbol appearing multiple times.
578      NBFD is the BFD of the new symbol.  NTYPE is the type of the new
579      symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
580      bfd_link_hash_indirect.  If NTYPE is bfd_link_hash_common, NSIZE
581      is the size of the new symbol.  */
582   bfd_boolean (*multiple_common)
583     (struct bfd_link_info *, struct bfd_link_hash_entry *h,
584      bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
585   /* A function which is called to add a symbol to a set.  ENTRY is
586      the link hash table entry for the set itself (e.g.,
587      __CTOR_LIST__).  RELOC is the relocation to use for an entry in
588      the set when generating a relocatable file, and is also used to
589      get the size of the entry when generating an executable file.
590      ABFD, SEC and VALUE identify the value to add to the set.  */
591   bfd_boolean (*add_to_set)
592     (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
593      bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
594   /* A function which is called when the name of a g++ constructor or
595      destructor is found.  This is only called by some object file
596      formats.  CONSTRUCTOR is TRUE for a constructor, FALSE for a
597      destructor.  This will use BFD_RELOC_CTOR when generating a
598      relocatable file.  NAME is the name of the symbol found.  ABFD,
599      SECTION and VALUE are the value of the symbol.  */
600   bfd_boolean (*constructor)
601     (struct bfd_link_info *, bfd_boolean constructor, const char *name,
602      bfd *abfd, asection *sec, bfd_vma value);
603   /* A function which is called to issue a linker warning.  For
604      example, this is called when there is a reference to a warning
605      symbol.  WARNING is the warning to be issued.  SYMBOL is the name
606      of the symbol which triggered the warning; it may be NULL if
607      there is none.  ABFD, SECTION and ADDRESS identify the location
608      which trigerred the warning; either ABFD or SECTION or both may
609      be NULL if the location is not known.  */
610   bfd_boolean (*warning)
611     (struct bfd_link_info *, const char *warning, const char *symbol,
612      bfd *abfd, asection *section, bfd_vma address);
613   /* A function which is called when a relocation is attempted against
614      an undefined symbol.  NAME is the symbol which is undefined.
615      ABFD, SECTION and ADDRESS identify the location from which the
616      reference is made. IS_FATAL indicates whether an undefined symbol is
617      a fatal error or not. In some cases SECTION may be NULL.  */
618   bfd_boolean (*undefined_symbol)
619     (struct bfd_link_info *, const char *name, bfd *abfd,
620      asection *section, bfd_vma address, bfd_boolean is_fatal);
621   /* A function which is called when a reloc overflow occurs. ENTRY is
622      the link hash table entry for the symbol the reloc is against.
623      NAME is the name of the local symbol or section the reloc is
624      against, RELOC_NAME is the name of the relocation, and ADDEND is
625      any addend that is used.  ABFD, SECTION and ADDRESS identify the
626      location at which the overflow occurs; if this is the result of a
627      bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
628      ABFD will be NULL.  */
629   bfd_boolean (*reloc_overflow)
630     (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
631      const char *name, const char *reloc_name, bfd_vma addend,
632      bfd *abfd, asection *section, bfd_vma address);
633   /* A function which is called when a dangerous reloc is performed.
634      MESSAGE is an appropriate message.
635      ABFD, SECTION and ADDRESS identify the location at which the
636      problem occurred; if this is the result of a
637      bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
638      ABFD will be NULL.  */
639   bfd_boolean (*reloc_dangerous)
640     (struct bfd_link_info *, const char *message,
641      bfd *abfd, asection *section, bfd_vma address);
642   /* A function which is called when a reloc is found to be attached
643      to a symbol which is not being written out.  NAME is the name of
644      the symbol.  ABFD, SECTION and ADDRESS identify the location of
645      the reloc; if this is the result of a
646      bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
647      ABFD will be NULL.  */
648   bfd_boolean (*unattached_reloc)
649     (struct bfd_link_info *, const char *name,
650      bfd *abfd, asection *section, bfd_vma address);
651   /* A function which is called when a symbol in notice_hash is
652      defined or referenced.  H is the symbol, INH the indirect symbol
653      if applicable.  ABFD, SECTION and ADDRESS are the (new) value of
654      the symbol.  If SECTION is bfd_und_section, this is a reference.
655      FLAGS are the symbol BSF_* flags.  */
656   bfd_boolean (*notice)
657     (struct bfd_link_info *, struct bfd_link_hash_entry *h,
658      struct bfd_link_hash_entry *inh,
659      bfd *abfd, asection *section, bfd_vma address, flagword flags);
660   /* Error or warning link info message.  */
661   void (*einfo)
662     (const char *fmt, ...);
663   /* General link info message.  */
664   void (*info)
665     (const char *fmt, ...);
666   /* Message to be printed in linker map file.  */
667   void (*minfo)
668     (const char *fmt, ...);
669   /* This callback provides a chance for users of the BFD library to
670      override its decision about whether to place two adjacent sections
671      into the same segment.  */
672   bfd_boolean (*override_segment_assignment)
673     (struct bfd_link_info *, bfd * abfd,
674      asection * current_section, asection * previous_section,
675      bfd_boolean new_segment);
676 };
677 \f
678 /* The linker builds link_order structures which tell the code how to
679    include input data in the output file.  */
680
681 /* These are the types of link_order structures.  */
682
683 enum bfd_link_order_type
684 {
685   bfd_undefined_link_order,     /* Undefined.  */
686   bfd_indirect_link_order,      /* Built from a section.  */
687   bfd_data_link_order,          /* Set to explicit data.  */
688   bfd_section_reloc_link_order, /* Relocate against a section.  */
689   bfd_symbol_reloc_link_order   /* Relocate against a symbol.  */
690 };
691
692 /* This is the link_order structure itself.  These form a chain
693    attached to the output section whose contents they are describing.  */
694
695 struct bfd_link_order
696 {
697   /* Next link_order in chain.  */
698   struct bfd_link_order *next;
699   /* Type of link_order.  */
700   enum bfd_link_order_type type;
701   /* Offset within output section.  */
702   bfd_vma offset;
703   /* Size within output section.  */
704   bfd_size_type size;
705   /* Type specific information.  */
706   union
707     {
708       struct
709         {
710           /* Section to include.  If this is used, then
711              section->output_section must be the section the
712              link_order is attached to, section->output_offset must
713              equal the link_order offset field, and section->size
714              must equal the link_order size field.  Maybe these
715              restrictions should be relaxed someday.  */
716           asection *section;
717         } indirect;
718       struct
719         {
720           /* Size of contents, or zero when contents should be filled by
721              the architecture-dependent fill function.
722              A non-zero value allows filling of the output section
723              with an arbitrary repeated pattern.  */
724           unsigned int size;
725           /* Data to put into file.  */
726           bfd_byte *contents;
727         } data;
728       struct
729         {
730           /* Description of reloc to generate.  Used for
731              bfd_section_reloc_link_order and
732              bfd_symbol_reloc_link_order.  */
733           struct bfd_link_order_reloc *p;
734         } reloc;
735     } u;
736 };
737
738 /* A linker order of type bfd_section_reloc_link_order or
739    bfd_symbol_reloc_link_order means to create a reloc against a
740    section or symbol, respectively.  This is used to implement -Ur to
741    generate relocs for the constructor tables.  The
742    bfd_link_order_reloc structure describes the reloc that BFD should
743    create.  It is similar to a arelent, but I didn't use arelent
744    because the linker does not know anything about most symbols, and
745    any asymbol structure it creates will be partially meaningless.
746    This information could logically be in the bfd_link_order struct,
747    but I didn't want to waste the space since these types of relocs
748    are relatively rare.  */
749
750 struct bfd_link_order_reloc
751 {
752   /* Reloc type.  */
753   bfd_reloc_code_real_type reloc;
754
755   union
756     {
757       /* For type bfd_section_reloc_link_order, this is the section
758          the reloc should be against.  This must be a section in the
759          output BFD, not any of the input BFDs.  */
760       asection *section;
761       /* For type bfd_symbol_reloc_link_order, this is the name of the
762          symbol the reloc should be against.  */
763       const char *name;
764     } u;
765
766   /* Addend to use.  The object file should contain zero.  The BFD
767      backend is responsible for filling in the contents of the object
768      file correctly.  For some object file formats (e.g., COFF) the
769      addend must be stored into in the object file, and for some
770      (e.g., SPARC a.out) it is kept in the reloc.  */
771   bfd_vma addend;
772 };
773
774 /* Allocate a new link_order for a section.  */
775 extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
776
777 /* These structures are used to describe version information for the
778    ELF linker.  These structures could be manipulated entirely inside
779    BFD, but it would be a pain.  Instead, the regular linker sets up
780    these structures, and then passes them into BFD.  */
781
782 /* Glob pattern for a version.  */
783
784 struct bfd_elf_version_expr
785 {
786   /* Next glob pattern for this version.  */
787   struct bfd_elf_version_expr *next;
788   /* Glob pattern.  */
789   const char *pattern;
790   /* Set if pattern is not a glob.  */
791   unsigned int literal : 1;
792   /* Defined by ".symver".  */
793   unsigned int symver : 1;
794   /* Defined by version script.  */
795   unsigned int script : 1;
796   /* Pattern type.  */
797 #define BFD_ELF_VERSION_C_TYPE          1
798 #define BFD_ELF_VERSION_CXX_TYPE        2
799 #define BFD_ELF_VERSION_JAVA_TYPE       4
800   unsigned int mask : 3;
801 };
802
803 struct bfd_elf_version_expr_head
804 {
805   /* List of all patterns, both wildcards and non-wildcards.  */
806   struct bfd_elf_version_expr *list;
807   /* Hash table for non-wildcards.  */
808   void *htab;
809   /* Remaining patterns.  */
810   struct bfd_elf_version_expr *remaining;
811   /* What kind of pattern types are present in list (bitmask).  */
812   unsigned int mask;
813 };
814
815 /* Version dependencies.  */
816
817 struct bfd_elf_version_deps
818 {
819   /* Next dependency for this version.  */
820   struct bfd_elf_version_deps *next;
821   /* The version which this version depends upon.  */
822   struct bfd_elf_version_tree *version_needed;
823 };
824
825 /* A node in the version tree.  */
826
827 struct bfd_elf_version_tree
828 {
829   /* Next version.  */
830   struct bfd_elf_version_tree *next;
831   /* Name of this version.  */
832   const char *name;
833   /* Version number.  */
834   unsigned int vernum;
835   /* Regular expressions for global symbols in this version.  */
836   struct bfd_elf_version_expr_head globals;
837   /* Regular expressions for local symbols in this version.  */
838   struct bfd_elf_version_expr_head locals;
839   /* List of versions which this version depends upon.  */
840   struct bfd_elf_version_deps *deps;
841   /* Index of the version name.  This is used within BFD.  */
842   unsigned int name_indx;
843   /* Whether this version tree was used.  This is used within BFD.  */
844   int used;
845   /* Matching hook.  */
846   struct bfd_elf_version_expr *(*match)
847     (struct bfd_elf_version_expr_head *head,
848      struct bfd_elf_version_expr *prev, const char *sym);
849 };
850
851 struct bfd_elf_dynamic_list
852 {
853   struct bfd_elf_version_expr_head head;
854   struct bfd_elf_version_expr *(*match)
855     (struct bfd_elf_version_expr_head *head,
856      struct bfd_elf_version_expr *prev, const char *sym);
857 };
858
859 #endif