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