binutils (2.41)

(root)/
include/
bfdlink.h
       1  /* bfdlink.h -- header file for BFD link routines
       2     Copyright (C) 1993-2023 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  enum notice_asneeded_action {
      46    notice_as_needed,
      47    notice_not_needed,
      48    notice_needed
      49  };
      50  
      51  /* Whether to generate ELF common symbols with the STT_COMMON type
      52     during a relocatable link.  */
      53  enum bfd_link_elf_stt_common
      54  {
      55    unchanged,
      56    elf_stt_common,
      57    no_elf_stt_common
      58  };
      59  
      60  /* Describes the type of hash table entry structure being used.
      61     Different hash table structure have different fields and so
      62     support different linking features.  */
      63  enum bfd_link_hash_table_type
      64    {
      65      bfd_link_generic_hash_table,
      66      bfd_link_elf_hash_table
      67    };
      68  
      69  /* These are the possible types of an entry in the BFD link hash
      70     table.  */
      71  
      72  enum bfd_link_hash_type
      73  {
      74    bfd_link_hash_new,		/* Symbol is new.  */
      75    bfd_link_hash_undefined,	/* Symbol seen before, but undefined.  */
      76    bfd_link_hash_undefweak,	/* Symbol is weak and undefined.  */
      77    bfd_link_hash_defined,	/* Symbol is defined.  */
      78    bfd_link_hash_defweak,	/* Symbol is weak and defined.  */
      79    bfd_link_hash_common,		/* Symbol is common.  */
      80    bfd_link_hash_indirect,	/* Symbol is an indirect link.  */
      81    bfd_link_hash_warning		/* Like indirect, but warn if referenced.  */
      82  };
      83  
      84  enum bfd_link_common_skip_ar_symbols
      85  {
      86    bfd_link_common_skip_none,
      87    bfd_link_common_skip_text,
      88    bfd_link_common_skip_data,
      89    bfd_link_common_skip_all
      90  };
      91  
      92  struct bfd_link_hash_common_entry
      93    {
      94      unsigned int alignment_power;	/* Alignment.  */
      95      asection *section;		/* Symbol section.  */
      96    };
      97  
      98  /* The linking routines use a hash table which uses this structure for
      99     its elements.  */
     100  
     101  struct bfd_link_hash_entry
     102  {
     103    /* Base hash table entry structure.  */
     104    struct bfd_hash_entry root;
     105  
     106    /* Type of this entry.  */
     107    ENUM_BITFIELD (bfd_link_hash_type) type : 8;
     108  
     109    /* Symbol is referenced in a normal regular object file,
     110       as distinct from a LTO IR object file.  */
     111    unsigned int non_ir_ref_regular : 1;
     112  
     113    /* Symbol is referenced in a normal dynamic object file,
     114       as distinct from a LTO IR object file.  */
     115    unsigned int non_ir_ref_dynamic : 1;
     116  
     117    /* The symbol, SYM, is referenced by __real_SYM in an object file.  */
     118    unsigned int ref_real : 1;
     119  
     120    /* Symbol is a built-in define.  These will be overridden by PROVIDE
     121       in a linker script.  */
     122    unsigned int linker_def : 1;
     123  
     124    /* Symbol defined in a linker script.  */
     125    unsigned int ldscript_def : 1;
     126  
     127    /* Symbol will be converted from absolute to section-relative.  Set for
     128       symbols defined by a script from "dot" (also SEGMENT_START or ORIGIN)
     129       outside of an output section statement.  */
     130    unsigned int rel_from_abs : 1;
     131  
     132    /* A union of information depending upon the type.  */
     133    union
     134      {
     135        /* Nothing is kept for bfd_hash_new.  */
     136        /* bfd_link_hash_undefined, bfd_link_hash_undefweak.  */
     137        struct
     138  	{
     139  	  /* Undefined and common symbols are kept in a linked list through
     140  	     this field.  This field is present in all of the union element
     141  	     so that we don't need to remove entries from the list when we
     142  	     change their type.  Removing entries would either require the
     143  	     list to be doubly linked, which would waste more memory, or
     144  	     require a traversal.  When an undefined or common symbol is
     145  	     created, it should be added to this list, the head of which is in
     146  	     the link hash table itself.  As symbols are defined, they need
     147  	     not be removed from the list; anything which reads the list must
     148  	     doublecheck the symbol type.
     149  
     150  	     Weak symbols are not kept on this list.
     151  
     152  	     Defined and defweak symbols use this field as a reference marker.
     153  	     If the field is not NULL, or this structure is the tail of the
     154  	     undefined symbol list, the symbol has been referenced.  If the
     155  	     symbol is undefined and becomes defined, this field will
     156  	     automatically be non-NULL since the symbol will have been on the
     157  	     undefined symbol list.  */
     158  	  struct bfd_link_hash_entry *next;
     159  	  /* BFD symbol was found in.  */
     160  	  bfd *abfd;
     161  	} undef;
     162        /* bfd_link_hash_defined, bfd_link_hash_defweak.  */
     163        struct
     164  	{
     165  	  struct bfd_link_hash_entry *next;
     166  	  /* Symbol section.  */
     167  	  asection *section;
     168  	  /* Symbol value.  */
     169  	  bfd_vma value;
     170  	} def;
     171        /* bfd_link_hash_indirect, bfd_link_hash_warning.  */
     172        struct
     173  	{
     174  	  struct bfd_link_hash_entry *next;
     175  	  /* Real symbol.  */
     176  	  struct bfd_link_hash_entry *link;
     177  	  /* Warning message (bfd_link_hash_warning only).  */
     178  	  const char *warning;
     179  	} i;
     180        /* bfd_link_hash_common.  */
     181        struct
     182  	{
     183  	  struct bfd_link_hash_entry *next;
     184  	  /* The linker needs to know three things about common
     185  	     symbols: the size, the alignment, and the section in
     186  	     which the symbol should be placed.  We store the size
     187  	     here, and we allocate a small structure to hold the
     188  	     section and the alignment.  The alignment is stored as a
     189  	     power of two.  We don't store all the information
     190  	     directly because we don't want to increase the size of
     191  	     the union; this structure is a major space user in the
     192  	     linker.  */
     193  	  struct bfd_link_hash_common_entry *p;
     194  	  /* Common symbol size.  */
     195  	  bfd_size_type size;
     196  	} c;
     197      } u;
     198  };
     199  
     200  /* This is the link hash table.  It is a derived class of
     201     bfd_hash_table.  */
     202  
     203  struct bfd_link_hash_table
     204  {
     205    /* The hash table itself.  */
     206    struct bfd_hash_table table;
     207    /* A linked list of undefined and common symbols, linked through the
     208       next field in the bfd_link_hash_entry structure.  */
     209    struct bfd_link_hash_entry *undefs;
     210    /* Entries are added to the tail of the undefs list.  */
     211    struct bfd_link_hash_entry *undefs_tail;
     212    /* Function to free the hash table on closing BFD.  */
     213    void (*hash_table_free) (bfd *);
     214    /* The type of the link hash table.  */
     215    enum bfd_link_hash_table_type type;
     216  };
     217  
     218  /* Look up an entry in a link hash table.  If FOLLOW is TRUE, this
     219     follows bfd_link_hash_indirect and bfd_link_hash_warning links to
     220     the real symbol.  */
     221  extern struct bfd_link_hash_entry *bfd_link_hash_lookup
     222    (struct bfd_link_hash_table *, const char *, bool create,
     223     bool copy, bool follow);
     224  
     225  /* Look up an entry in the main linker hash table if the symbol might
     226     be wrapped.  This should only be used for references to an
     227     undefined symbol, not for definitions of a symbol.  */
     228  
     229  extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
     230    (bfd *, struct bfd_link_info *, const char *, bool, bool, bool);
     231  
     232  /* If H is a wrapped symbol, ie. the symbol name starts with "__wrap_"
     233     and the remainder is found in wrap_hash, return the real symbol.  */
     234  
     235  extern struct bfd_link_hash_entry *unwrap_hash_lookup
     236    (struct bfd_link_info *, bfd *, struct bfd_link_hash_entry *);
     237  
     238  /* Traverse a link hash table.  */
     239  extern void bfd_link_hash_traverse
     240    (struct bfd_link_hash_table *,
     241      bool (*) (struct bfd_link_hash_entry *, void *),
     242      void *);
     243  
     244  /* Add an entry to the undefs list.  */
     245  extern void bfd_link_add_undef
     246    (struct bfd_link_hash_table *, struct bfd_link_hash_entry *);
     247  
     248  /* Remove symbols from the undefs list that don't belong there.  */
     249  extern void bfd_link_repair_undef_list
     250    (struct bfd_link_hash_table *table);
     251  
     252  /* Read symbols and cache symbol pointer array in outsymbols.  */
     253  extern bool bfd_generic_link_read_symbols (bfd *);
     254  
     255  /* Check the relocs in the BFD.  Called after all the input
     256     files have been loaded, and garbage collection has tagged
     257     any unneeded sections.  */
     258  extern bool bfd_link_check_relocs (bfd *,struct bfd_link_info *);
     259  
     260  struct bfd_sym_chain
     261  {
     262    struct bfd_sym_chain *next;
     263    const char *name;
     264  };
     265  
     266  /* How to handle unresolved symbols.
     267     There are four possibilities which are enumerated below:  */
     268  enum report_method
     269  {
     270    /* This is the initial value when then link_info structure is created.
     271       It allows the various stages of the linker to determine whether they
     272       allowed to set the value.  */
     273    RM_NOT_YET_SET = 0,
     274    RM_IGNORE,
     275    RM_DIAGNOSE,
     276  };
     277  
     278  /* How to handle DT_TEXTREL.  */
     279  
     280  enum textrel_check_method
     281  {
     282    textrel_check_none,
     283    textrel_check_warning,
     284    textrel_check_error
     285  };
     286  
     287  #define bfd_link_textrel_check(info) \
     288    (info->textrel_check != textrel_check_none)
     289  
     290  typedef enum {with_flags, without_flags} flag_type;
     291  
     292  /* A section flag list.  */
     293  struct flag_info_list
     294  {
     295    flag_type with;
     296    const char *name;
     297    bool valid;
     298    struct flag_info_list *next;
     299  };
     300  
     301  /* Section flag info.  */
     302  struct flag_info
     303  {
     304    flagword only_with_flags;
     305    flagword not_with_flags;
     306    struct flag_info_list *flag_list;
     307    bool flags_initialized;
     308  };
     309  
     310  struct bfd_elf_dynamic_list;
     311  struct bfd_elf_version_tree;
     312  
     313  /* Types of output.  */
     314  
     315  enum output_type
     316  {
     317    type_pde,
     318    type_pie,
     319    type_relocatable,
     320    type_dll,
     321  };
     322  
     323  #define bfd_link_pde(info)	   ((info)->type == type_pde)
     324  #define bfd_link_dll(info)	   ((info)->type == type_dll)
     325  #define bfd_link_relocatable(info) ((info)->type == type_relocatable)
     326  #define bfd_link_pie(info)	   ((info)->type == type_pie)
     327  #define bfd_link_executable(info)  (bfd_link_pde (info) || bfd_link_pie (info))
     328  #define bfd_link_pic(info)	   (bfd_link_dll (info) || bfd_link_pie (info))
     329  
     330  /* This structure holds all the information needed to communicate
     331     between BFD and the linker when doing a link.  */
     332  
     333  struct bfd_link_info
     334  {
     335    /* Output type.  */
     336    ENUM_BITFIELD (output_type) type : 2;
     337  
     338    /* TRUE if BFD should pre-bind symbols in a shared object.  */
     339    unsigned int symbolic: 1;
     340  
     341    /* TRUE if BFD should export all symbols in the dynamic symbol table
     342       of an executable, rather than only those used.  */
     343    unsigned int export_dynamic: 1;
     344  
     345    /* TRUE if a default symbol version should be created and used for
     346       exported symbols.  */
     347    unsigned int create_default_symver: 1;
     348  
     349    /* TRUE if unreferenced sections should be removed.  */
     350    unsigned int gc_sections: 1;
     351  
     352    /* TRUE if exported symbols should be kept during section gc.  */
     353    unsigned int gc_keep_exported: 1;
     354  
     355    /* TRUE if every symbol should be reported back via the notice
     356       callback.  */
     357    unsigned int notice_all: 1;
     358  
     359    /* TRUE if the LTO plugin is active.  */
     360    unsigned int lto_plugin_active: 1;
     361  
     362    /* TRUE if all LTO IR symbols have been read.  */
     363    unsigned int lto_all_symbols_read : 1;
     364  
     365    /* TRUE if global symbols in discarded sections should be stripped.  */
     366    unsigned int strip_discarded: 1;
     367  
     368    /* TRUE if all data symbols should be dynamic.  */
     369    unsigned int dynamic_data: 1;
     370  
     371    /* TRUE if section groups should be resolved.  */
     372    unsigned int resolve_section_groups: 1;
     373  
     374    /* Set if output file is big-endian, or if that is unknown, from
     375       the command line or first input file endianness.  */
     376    unsigned int big_endian : 1;
     377  
     378    /* Which symbols to strip.  */
     379    ENUM_BITFIELD (bfd_link_strip) strip : 2;
     380  
     381    /* Which local symbols to discard.  */
     382    ENUM_BITFIELD (bfd_link_discard) discard : 2;
     383  
     384    /* Whether to generate ELF common symbols with the STT_COMMON type.  */
     385    ENUM_BITFIELD (bfd_link_elf_stt_common) elf_stt_common : 2;
     386  
     387    /* Criteria for skipping symbols when determining
     388       whether to include an object from an archive.  */
     389    ENUM_BITFIELD (bfd_link_common_skip_ar_symbols) common_skip_ar_symbols : 2;
     390  
     391    /* What to do with unresolved symbols in an object file.
     392       When producing executables the default is GENERATE_ERROR.
     393       When producing shared libraries the default is IGNORE.  The
     394       assumption with shared libraries is that the reference will be
     395       resolved at load/execution time.  */
     396    ENUM_BITFIELD (report_method) unresolved_syms_in_objects : 2;
     397  
     398    /* What to do with unresolved symbols in a shared library.
     399       The same defaults apply.  */
     400    ENUM_BITFIELD (report_method) unresolved_syms_in_shared_libs : 2;
     401  
     402    /* TRUE if unresolved symbols are to be warned, rather than errored.  */
     403    unsigned int warn_unresolved_syms: 1;
     404  
     405    /* TRUE if shared objects should be linked directly, not shared.  */
     406    unsigned int static_link: 1;
     407  
     408    /* TRUE if symbols should be retained in memory, FALSE if they
     409       should be freed and reread.  */
     410    unsigned int keep_memory: 1;
     411  
     412    /* TRUE if BFD should generate relocation information in the final
     413       executable.  */
     414    unsigned int emitrelocations: 1;
     415  
     416    /* TRUE if PT_GNU_RELRO segment should be created.  */
     417    unsigned int relro: 1;
     418  
     419    /* TRUE if DT_RELR should be enabled for compact relative
     420       relocations.  */
     421    unsigned int enable_dt_relr: 1;
     422  
     423    /* TRUE if separate code segment should be created.  */
     424    unsigned int separate_code: 1;
     425  
     426    /* Nonzero if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
     427       should be created.  1 for DWARF2 tables, 2 for compact tables.  */
     428    unsigned int eh_frame_hdr_type: 2;
     429  
     430    /* What to do with DT_TEXTREL in output.  */
     431    ENUM_BITFIELD (textrel_check_method) textrel_check: 2;
     432  
     433    /* TRUE if .hash section should be created.  */
     434    unsigned int emit_hash: 1;
     435  
     436    /* TRUE if .gnu.hash section should be created.  */
     437    unsigned int emit_gnu_hash: 1;
     438  
     439    /* If TRUE reduce memory overheads, at the expense of speed. This will
     440       cause map file generation to use an O(N^2) algorithm and disable
     441       caching ELF symbol buffer.  */
     442    unsigned int reduce_memory_overheads: 1;
     443  
     444    /* TRUE if the output file should be in a traditional format.  This
     445       is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
     446       on the output file, but may be checked when reading the input
     447       files.  */
     448    unsigned int traditional_format: 1;
     449  
     450    /* TRUE if non-PLT relocs should be merged into one reloc section
     451       and sorted so that relocs against the same symbol come together.  */
     452    unsigned int combreloc: 1;
     453  
     454    /* TRUE if a default symbol version should be created and used for
     455       imported symbols.  */
     456    unsigned int default_imported_symver: 1;
     457  
     458    /* TRUE if the new ELF dynamic tags are enabled. */
     459    unsigned int new_dtags: 1;
     460  
     461    /* FALSE if .eh_frame unwind info should be generated for PLT and other
     462       linker created sections, TRUE if it should be omitted.  */
     463    unsigned int no_ld_generated_unwind_info: 1;
     464  
     465    /* TRUE if BFD should generate a "task linked" object file,
     466       similar to relocatable but also with globals converted to
     467       statics.  */
     468    unsigned int task_link: 1;
     469  
     470    /* TRUE if ok to have multiple definitions, without warning.  */
     471    unsigned int allow_multiple_definition: 1;
     472  
     473    /* TRUE if multiple definition of absolute symbols (eg. from -R) should
     474       be reported.  */
     475    unsigned int prohibit_multiple_definition_absolute: 1;
     476  
     477    /* TRUE if multiple definitions should only warn.  */
     478    unsigned int warn_multiple_definition: 1;
     479  
     480    /* TRUE if ok to have version with no definition.  */
     481    unsigned int allow_undefined_version: 1;
     482  
     483    /* TRUE if some symbols have to be dynamic, controlled by
     484       --dynamic-list command line options.  */
     485    unsigned int dynamic: 1;
     486  
     487    /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X
     488       flags.  */
     489    unsigned int execstack: 1;
     490  
     491    /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W
     492       flags.  */
     493    unsigned int noexecstack: 1;
     494  
     495    /* Tri-state variable:
     496       0 => do not warn when creating an executable stack.
     497       1 => always warn when creating an executable stack.
     498       >1 => warn when creating an executable stack if execstack is 0.  */
     499    unsigned int warn_execstack: 2;
     500  
     501    /* TRUE if warnings should not be generated for TLS segments with eXecute
     502       permission or LOAD segments with RWX permissions.  */
     503    unsigned int no_warn_rwx_segments: 1;
     504    /* TRUE if the user gave either --warn-rwx-segments or
     505       --no-warn-rwx-segments.  */
     506    unsigned int user_warn_rwx_segments: 1;
     507  
     508    /* TRUE if the stack can be made executable because of the absence of a
     509       .note.GNU-stack section in an input file.  Note - even if this field
     510       is set, some targets may choose to ignore the setting and not create
     511       an executable stack.  */
     512    unsigned int default_execstack : 1;
     513    
     514    /* TRUE if we want to produced optimized output files.  This might
     515       need much more time and therefore must be explicitly selected.  */
     516    unsigned int optimize: 1;
     517  
     518    /* TRUE if user should be informed of removed unreferenced sections.  */
     519    unsigned int print_gc_sections: 1;
     520  
     521    /* TRUE if we should warn alternate ELF machine code.  */
     522    unsigned int warn_alternate_em: 1;
     523  
     524    /* TRUE if the linker script contained an explicit PHDRS command.  */
     525    unsigned int user_phdrs: 1;
     526  
     527    /* TRUE if program headers ought to be loaded.  */
     528    unsigned int load_phdrs: 1;
     529  
     530    /* TRUE if we should check relocations after all input files have
     531       been opened.  */
     532    unsigned int check_relocs_after_open_input: 1;
     533  
     534    /* TRUE if generation of .interp/PT_INTERP should be suppressed.  */
     535    unsigned int nointerp: 1;
     536  
     537    /* TRUE if common symbols should be treated as undefined.  */
     538    unsigned int inhibit_common_definition : 1;
     539  
     540    /* TRUE if "-Map map" is passed to linker.  */
     541    unsigned int has_map_file : 1;
     542  
     543    /* TRUE if "--enable-non-contiguous-regions" is passed to the
     544       linker.  */
     545    unsigned int non_contiguous_regions : 1;
     546  
     547    /* TRUE if "--enable-non-contiguous-regions-warnings" is passed to
     548       the linker.  */
     549    unsigned int non_contiguous_regions_warnings : 1;
     550  
     551    /* TRUE if all symbol names should be unique.  */
     552    unsigned int unique_symbol : 1;
     553  
     554    /* TRUE if maxpagesize is set on command-line.  */
     555    unsigned int maxpagesize_is_set : 1;
     556  
     557    /* TRUE if commonpagesize is set on command-line.  */
     558    unsigned int commonpagesize_is_set : 1;
     559  
     560    /* Char that may appear as the first char of a symbol, but should be
     561       skipped (like symbol_leading_char) when looking up symbols in
     562       wrap_hash.  Used by PowerPC Linux for 'dot' symbols.  */
     563    char wrap_char;
     564  
     565    /* Separator between archive and filename in linker script filespecs.  */
     566    char path_separator;
     567  
     568    /* Default stack size.  Zero means default (often zero itself), -1
     569       means explicitly zero-sized.  */
     570    bfd_signed_vma stacksize;
     571  
     572    /* Enable or disable target specific optimizations.
     573  
     574       Not all targets have optimizations to enable.
     575  
     576       Normally these optimizations are disabled by default but some targets
     577       prefer to enable them by default.  So this field is a tri-state variable.
     578       The values are:
     579  
     580       zero: Enable the optimizations (either from --relax being specified on
     581         the command line or the backend's before_allocation emulation function.
     582  
     583       positive: The user has requested that these optimizations be disabled.
     584         (Via the --no-relax command line option).
     585  
     586       negative: The optimizations are disabled.  (Set when initializing the
     587         args_type structure in ldmain.c:main.  */
     588    signed int disable_target_specific_optimizations;
     589  
     590    /* Function callbacks.  */
     591    const struct bfd_link_callbacks *callbacks;
     592  
     593    /* Hash table handled by BFD.  */
     594    struct bfd_link_hash_table *hash;
     595  
     596    /* Hash table of symbols to keep.  This is NULL unless strip is
     597       strip_some.  */
     598    struct bfd_hash_table *keep_hash;
     599  
     600    /* Hash table of symbols to report back via the notice callback.  If
     601       this is NULL, and notice_all is FALSE, then no symbols are
     602       reported back.  */
     603    struct bfd_hash_table *notice_hash;
     604  
     605    /* Hash table of symbols which are being wrapped (the --wrap linker
     606       option).  If this is NULL, no symbols are being wrapped.  */
     607    struct bfd_hash_table *wrap_hash;
     608  
     609    /* Hash table of symbols which may be left unresolved during
     610       a link.  If this is NULL, no symbols can be left unresolved.  */
     611    struct bfd_hash_table *ignore_hash;
     612  
     613    /* The output BFD.  */
     614    bfd *output_bfd;
     615  
     616    /* The import library generated.  */
     617    bfd *out_implib_bfd;
     618  
     619    /* The list of input BFD's involved in the link.  These are chained
     620       together via the link.next field.  */
     621    bfd *input_bfds;
     622    bfd **input_bfds_tail;
     623  
     624    /* If a symbol should be created for each input BFD, this is section
     625       where those symbols should be placed.  It must be a section in
     626       the output BFD.  It may be NULL, in which case no such symbols
     627       will be created.  This is to support CREATE_OBJECT_SYMBOLS in the
     628       linker command language.  */
     629    asection *create_object_symbols_section;
     630  
     631    /* List of global symbol names that are starting points for marking
     632       sections against garbage collection.  */
     633    struct bfd_sym_chain *gc_sym_list;
     634  
     635    /* If a base output file is wanted, then this points to it */
     636    void *base_file;
     637  
     638    /* The function to call when the executable or shared object is
     639       loaded.  */
     640    const char *init_function;
     641  
     642    /* The function to call when the executable or shared object is
     643       unloaded.  */
     644    const char *fini_function;
     645  
     646    /* Number of relaxation passes.  Usually only one relaxation pass
     647       is needed.  But a backend can have as many relaxation passes as
     648       necessary.  During bfd_relax_section call, it is set to the
     649       current pass, starting from 0.  */
     650    int relax_pass;
     651  
     652    /* Number of relaxation trips.  This number is incremented every
     653       time the relaxation pass is restarted due to a previous
     654       relaxation returning true in *AGAIN.  */
     655    int relax_trip;
     656  
     657    /* > 0 to treat protected data defined in the shared library as
     658       reference external.  0 to treat it as internal.  -1 to let
     659       backend to decide.  */
     660    int extern_protected_data;
     661  
     662    /* 1 to make undefined weak symbols dynamic when building a dynamic
     663       object.  0 to resolve undefined weak symbols to zero.  -1 to let
     664       the backend decide.  */
     665    int dynamic_undefined_weak;
     666  
     667    /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
     668       should be generated/linked against.  Set to 1 if this feature
     669       is explicitly requested by the user, -1 if enabled by default.  */
     670    int pei386_auto_import;
     671  
     672    /* Non-zero if runtime relocs for DATA items with non-zero addends
     673       in pei386 DLLs should be generated.  Set to 1 if this feature
     674       is explicitly requested by the user, -1 if enabled by default.  */
     675    int pei386_runtime_pseudo_reloc;
     676  
     677    /* How many spare .dynamic DT_NULL entries should be added?  */
     678    unsigned int spare_dynamic_tags;
     679  
     680    /* GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS control:
     681         > 1: Turn on by -z indirect-extern-access or by backend.
     682        == 1: Turn on by an input.
     683           0: Turn off.
     684         < 0: Turn on if it is set on any inputs or let backend to
     685  	    decide.  */
     686    int indirect_extern_access;
     687  
     688    /* Non-zero if executable should not contain copy relocs.
     689         > 1: Implied by indirect_extern_access.
     690        == 1: Turn on by -z nocopyreloc.
     691           0: Turn off.
     692      Setting this to non-zero may result in a non-sharable text
     693      segment.  */
     694    int nocopyreloc;
     695  
     696    /* Pointer to the GNU_PROPERTY_1_NEEDED property in memory.  */
     697    bfd_byte *needed_1_p;
     698  
     699    /* May be used to set DT_FLAGS for ELF. */
     700    bfd_vma flags;
     701  
     702    /* May be used to set DT_FLAGS_1 for ELF. */
     703    bfd_vma flags_1;
     704  
     705    /* May be used to set DT_GNU_FLAGS_1 for ELF. */
     706    bfd_vma gnu_flags_1;
     707  
     708    /* TRUE if references to __start_/__stop_ synthesized symbols do not
     709       specially retain C identifier named sections.  */
     710    int start_stop_gc;
     711  
     712    /* May be used to set ELF visibility for __start_* / __stop_.  */
     713    unsigned int start_stop_visibility;
     714  
     715    /* The maximum page size for ELF.  */
     716    bfd_vma maxpagesize;
     717  
     718    /* The common page size for ELF.  */
     719    bfd_vma commonpagesize;
     720  
     721    /* Start and end of RELRO region.  */
     722    bfd_vma relro_start, relro_end;
     723  
     724    /* List of symbols should be dynamic.  */
     725    struct bfd_elf_dynamic_list *dynamic_list;
     726  
     727    /* The version information.  */
     728    struct bfd_elf_version_tree *version_info;
     729  
     730    /* Size of cache.  Backend can use it to keep strace cache size.   */
     731    bfd_size_type cache_size;
     732  
     733    /* The maximum cache size.  Backend can use cache_size and and
     734       max_cache_size to decide if keep_memory should be honored.  */
     735    bfd_size_type max_cache_size;
     736  };
     737  
     738  /* Some forward-definitions used by some callbacks.  */
     739  
     740  struct elf_strtab_hash;
     741  struct elf_internal_sym;
     742  
     743  /* This structures holds a set of callback functions.  These are called
     744     by the BFD linker routines.  */
     745  
     746  struct bfd_link_callbacks
     747  {
     748    /* A function which is called when an object is added from an
     749       archive.  ABFD is the archive element being added.  NAME is the
     750       name of the symbol which caused the archive element to be pulled
     751       in.  This function may set *SUBSBFD to point to an alternative
     752       BFD from which symbols should in fact be added in place of the
     753       original BFD's symbols.  Returns TRUE if the object should be
     754       added, FALSE if it should be skipped.  */
     755    bool (*add_archive_element)
     756      (struct bfd_link_info *, bfd *abfd, const char *name, bfd **subsbfd);
     757    /* A function which is called when a symbol is found with multiple
     758       definitions.  H is the symbol which is defined multiple times.
     759       NBFD is the new BFD, NSEC is the new section, and NVAL is the new
     760       value.  NSEC may be bfd_com_section or bfd_ind_section.  */
     761    void (*multiple_definition)
     762      (struct bfd_link_info *, struct bfd_link_hash_entry *h,
     763       bfd *nbfd, asection *nsec, bfd_vma nval);
     764    /* A function which is called when a common symbol is defined
     765       multiple times.  H is the symbol appearing multiple times.
     766       NBFD is the BFD of the new symbol.  NTYPE is the type of the new
     767       symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
     768       bfd_link_hash_indirect.  If NTYPE is bfd_link_hash_common, NSIZE
     769       is the size of the new symbol.  */
     770    void (*multiple_common)
     771      (struct bfd_link_info *, struct bfd_link_hash_entry *h,
     772       bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
     773    /* A function which is called to add a symbol to a set.  ENTRY is
     774       the link hash table entry for the set itself (e.g.,
     775       __CTOR_LIST__).  RELOC is the relocation to use for an entry in
     776       the set when generating a relocatable file, and is also used to
     777       get the size of the entry when generating an executable file.
     778       ABFD, SEC and VALUE identify the value to add to the set.  */
     779    void (*add_to_set)
     780      (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
     781       bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
     782    /* A function which is called when the name of a g++ constructor or
     783       destructor is found.  This is only called by some object file
     784       formats.  CONSTRUCTOR is TRUE for a constructor, FALSE for a
     785       destructor.  This will use BFD_RELOC_CTOR when generating a
     786       relocatable file.  NAME is the name of the symbol found.  ABFD,
     787       SECTION and VALUE are the value of the symbol.  */
     788    void (*constructor)
     789      (struct bfd_link_info *, bool constructor, const char *name,
     790       bfd *abfd, asection *sec, bfd_vma value);
     791    /* A function which is called to issue a linker warning.  For
     792       example, this is called when there is a reference to a warning
     793       symbol.  WARNING is the warning to be issued.  SYMBOL is the name
     794       of the symbol which triggered the warning; it may be NULL if
     795       there is none.  ABFD, SECTION and ADDRESS identify the location
     796       which trigerred the warning; either ABFD or SECTION or both may
     797       be NULL if the location is not known.  */
     798    void (*warning)
     799      (struct bfd_link_info *, const char *warning, const char *symbol,
     800       bfd *abfd, asection *section, bfd_vma address);
     801    /* A function which is called when a relocation is attempted against
     802       an undefined symbol.  NAME is the symbol which is undefined.
     803       ABFD, SECTION and ADDRESS identify the location from which the
     804       reference is made. IS_FATAL indicates whether an undefined symbol is
     805       a fatal error or not. In some cases SECTION may be NULL.  */
     806    void (*undefined_symbol)
     807      (struct bfd_link_info *, const char *name, bfd *abfd,
     808       asection *section, bfd_vma address, bool is_fatal);
     809    /* A function which is called when a reloc overflow occurs. ENTRY is
     810       the link hash table entry for the symbol the reloc is against.
     811       NAME is the name of the local symbol or section the reloc is
     812       against, RELOC_NAME is the name of the relocation, and ADDEND is
     813       any addend that is used.  ABFD, SECTION and ADDRESS identify the
     814       location at which the overflow occurs; if this is the result of a
     815       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
     816       ABFD will be NULL.  */
     817    void (*reloc_overflow)
     818      (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
     819       const char *name, const char *reloc_name, bfd_vma addend,
     820       bfd *abfd, asection *section, bfd_vma address);
     821    /* A function which is called when a dangerous reloc is performed.
     822       MESSAGE is an appropriate message.
     823       ABFD, SECTION and ADDRESS identify the location at which the
     824       problem occurred; if this is the result of a
     825       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
     826       ABFD will be NULL.  */
     827    void (*reloc_dangerous)
     828      (struct bfd_link_info *, const char *message,
     829       bfd *abfd, asection *section, bfd_vma address);
     830    /* A function which is called when a reloc is found to be attached
     831       to a symbol which is not being written out.  NAME is the name of
     832       the symbol.  ABFD, SECTION and ADDRESS identify the location of
     833       the reloc; if this is the result of a
     834       bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
     835       ABFD will be NULL.  */
     836    void (*unattached_reloc)
     837      (struct bfd_link_info *, const char *name,
     838       bfd *abfd, asection *section, bfd_vma address);
     839    /* A function which is called when a symbol in notice_hash is
     840       defined or referenced.  H is the symbol, INH the indirect symbol
     841       if applicable.  ABFD, SECTION and ADDRESS are the (new) value of
     842       the symbol.  If SECTION is bfd_und_section, this is a reference.
     843       FLAGS are the symbol BSF_* flags.  */
     844    bool (*notice)
     845      (struct bfd_link_info *, struct bfd_link_hash_entry *h,
     846       struct bfd_link_hash_entry *inh,
     847       bfd *abfd, asection *section, bfd_vma address, flagword flags);
     848    /* Error or warning link info message.  */
     849    void (*einfo)
     850      (const char *fmt, ...);
     851    /* General link info message.  */
     852    void (*info)
     853      (const char *fmt, ...);
     854    /* Message to be printed in linker map file.  */
     855    void (*minfo)
     856      (const char *fmt, ...);
     857    /* This callback provides a chance for users of the BFD library to
     858       override its decision about whether to place two adjacent sections
     859       into the same segment.  */
     860    bool (*override_segment_assignment)
     861      (struct bfd_link_info *, bfd * abfd,
     862       asection * current_section, asection * previous_section,
     863       bool new_segment);
     864    /* This callback provides a chance for callers of the BFD to examine the
     865       ELF (dynamic) string table once it is complete.  */
     866    void (*examine_strtab)
     867      (struct elf_strtab_hash *symstrtab);
     868    /* This callback is called just before a symbol is swapped out, so that the
     869       CTF machinery can look up symbols during construction.  The name is
     870       already an external strtab offset at this point.  */
     871    void (*ctf_new_symbol)
     872      (int symidx, struct elf_internal_sym *sym);
     873    /* Likewise, for dynamic symbols.  */
     874    void (*ctf_new_dynsym)
     875      (int symidx, struct elf_internal_sym *sym);
     876    /* This callback should emit the CTF section into a non-loadable section in
     877       the output BFD named .ctf or a name beginning with ".ctf.".  */
     878    void (*emit_ctf)
     879      (void);
     880  };
     881  
     882  /* The linker builds link_order structures which tell the code how to
     883     include input data in the output file.  */
     884  
     885  /* These are the types of link_order structures.  */
     886  
     887  enum bfd_link_order_type
     888  {
     889    bfd_undefined_link_order,	/* Undefined.  */
     890    bfd_indirect_link_order,	/* Built from a section.  */
     891    bfd_data_link_order,		/* Set to explicit data.  */
     892    bfd_section_reloc_link_order,	/* Relocate against a section.  */
     893    bfd_symbol_reloc_link_order	/* Relocate against a symbol.  */
     894  };
     895  
     896  /* This is the link_order structure itself.  These form a chain
     897     attached to the output section whose contents they are describing.  */
     898  
     899  struct bfd_link_order
     900  {
     901    /* Next link_order in chain.  */
     902    struct bfd_link_order *next;
     903    /* Type of link_order.  */
     904    enum bfd_link_order_type type;
     905    /* Offset within output section in bytes.  */
     906    bfd_vma offset;
     907    /* Size within output section in octets.  */
     908    bfd_size_type size;
     909    /* Type specific information.  */
     910    union
     911      {
     912        struct
     913  	{
     914  	  /* Section to include.  If this is used, then
     915  	     section->output_section must be the section the
     916  	     link_order is attached to, section->output_offset must
     917  	     equal the link_order offset field, and section->size
     918  	     must equal the link_order size field.  Maybe these
     919  	     restrictions should be relaxed someday.  */
     920  	  asection *section;
     921  	} indirect;
     922        struct
     923  	{
     924  	  /* Size of contents, or zero when contents should be filled by
     925  	     the architecture-dependent fill function.
     926  	     A non-zero value allows filling of the output section
     927  	     with an arbitrary repeated pattern.  */
     928  	  unsigned int size;
     929  	  /* Data to put into file.  */
     930  	  bfd_byte *contents;
     931  	} data;
     932        struct
     933  	{
     934  	  /* Description of reloc to generate.  Used for
     935  	     bfd_section_reloc_link_order and
     936  	     bfd_symbol_reloc_link_order.  */
     937  	  struct bfd_link_order_reloc *p;
     938  	} reloc;
     939      } u;
     940  };
     941  
     942  /* A linker order of type bfd_section_reloc_link_order or
     943     bfd_symbol_reloc_link_order means to create a reloc against a
     944     section or symbol, respectively.  This is used to implement -Ur to
     945     generate relocs for the constructor tables.  The
     946     bfd_link_order_reloc structure describes the reloc that BFD should
     947     create.  It is similar to a arelent, but I didn't use arelent
     948     because the linker does not know anything about most symbols, and
     949     any asymbol structure it creates will be partially meaningless.
     950     This information could logically be in the bfd_link_order struct,
     951     but I didn't want to waste the space since these types of relocs
     952     are relatively rare.  */
     953  
     954  struct bfd_link_order_reloc
     955  {
     956    /* Reloc type.  */
     957    bfd_reloc_code_real_type reloc;
     958  
     959    union
     960      {
     961        /* For type bfd_section_reloc_link_order, this is the section
     962  	 the reloc should be against.  This must be a section in the
     963  	 output BFD, not any of the input BFDs.  */
     964        asection *section;
     965        /* For type bfd_symbol_reloc_link_order, this is the name of the
     966  	 symbol the reloc should be against.  */
     967        const char *name;
     968      } u;
     969  
     970    /* Addend to use.  The object file should contain zero.  The BFD
     971       backend is responsible for filling in the contents of the object
     972       file correctly.  For some object file formats (e.g., COFF) the
     973       addend must be stored into in the object file, and for some
     974       (e.g., SPARC a.out) it is kept in the reloc.  */
     975    bfd_vma addend;
     976  };
     977  
     978  /* Allocate a new link_order for a section.  */
     979  extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
     980  
     981  struct bfd_section_already_linked;
     982  
     983  extern bool bfd_section_already_linked_table_init (void);
     984  extern void bfd_section_already_linked_table_free (void);
     985  extern bool _bfd_handle_already_linked
     986    (struct bfd_section *, struct bfd_section_already_linked *,
     987     struct bfd_link_info *);
     988  
     989  extern struct bfd_section *_bfd_nearby_section
     990    (bfd *, struct bfd_section *, bfd_vma);
     991  
     992  extern void _bfd_fix_excluded_sec_syms
     993    (bfd *, struct bfd_link_info *);
     994  
     995  /* These structures are used to describe version information for the
     996     ELF linker.  These structures could be manipulated entirely inside
     997     BFD, but it would be a pain.  Instead, the regular linker sets up
     998     these structures, and then passes them into BFD.  */
     999  
    1000  /* Glob pattern for a version.  */
    1001  
    1002  struct bfd_elf_version_expr
    1003  {
    1004    /* Next glob pattern for this version.  */
    1005    struct bfd_elf_version_expr *next;
    1006    /* Glob pattern.  */
    1007    const char *pattern;
    1008    /* Set if pattern is not a glob.  */
    1009    unsigned int literal : 1;
    1010    /* Defined by ".symver".  */
    1011    unsigned int symver : 1;
    1012    /* Defined by version script.  */
    1013    unsigned int script : 1;
    1014    /* Pattern type.  */
    1015  #define BFD_ELF_VERSION_C_TYPE		1
    1016  #define BFD_ELF_VERSION_CXX_TYPE	2
    1017  #define BFD_ELF_VERSION_JAVA_TYPE	4
    1018    unsigned int mask : 3;
    1019  };
    1020  
    1021  struct bfd_elf_version_expr_head
    1022  {
    1023    /* List of all patterns, both wildcards and non-wildcards.  */
    1024    struct bfd_elf_version_expr *list;
    1025    /* Hash table for non-wildcards.  */
    1026    void *htab;
    1027    /* Remaining patterns.  */
    1028    struct bfd_elf_version_expr *remaining;
    1029    /* What kind of pattern types are present in list (bitmask).  */
    1030    unsigned int mask;
    1031  };
    1032  
    1033  /* Version dependencies.  */
    1034  
    1035  struct bfd_elf_version_deps
    1036  {
    1037    /* Next dependency for this version.  */
    1038    struct bfd_elf_version_deps *next;
    1039    /* The version which this version depends upon.  */
    1040    struct bfd_elf_version_tree *version_needed;
    1041  };
    1042  
    1043  /* A node in the version tree.  */
    1044  
    1045  struct bfd_elf_version_tree
    1046  {
    1047    /* Next version.  */
    1048    struct bfd_elf_version_tree *next;
    1049    /* Name of this version.  */
    1050    const char *name;
    1051    /* Version number.  */
    1052    unsigned int vernum;
    1053    /* Regular expressions for global symbols in this version.  */
    1054    struct bfd_elf_version_expr_head globals;
    1055    /* Regular expressions for local symbols in this version.  */
    1056    struct bfd_elf_version_expr_head locals;
    1057    /* List of versions which this version depends upon.  */
    1058    struct bfd_elf_version_deps *deps;
    1059    /* Index of the version name.  This is used within BFD.  */
    1060    unsigned int name_indx;
    1061    /* Whether this version tree was used.  This is used within BFD.  */
    1062    int used;
    1063    /* Matching hook.  */
    1064    struct bfd_elf_version_expr *(*match)
    1065      (struct bfd_elf_version_expr_head *head,
    1066       struct bfd_elf_version_expr *prev, const char *sym);
    1067  };
    1068  
    1069  struct bfd_elf_dynamic_list
    1070  {
    1071    struct bfd_elf_version_expr_head head;
    1072    struct bfd_elf_version_expr *(*match)
    1073      (struct bfd_elf_version_expr_head *head,
    1074       struct bfd_elf_version_expr *prev, const char *sym);
    1075  };
    1076  
    1077  #endif