(root)/
binutils-2.41/
ld/
ld.h
       1  /* ld.h -- general linker header file
       2     Copyright (C) 1991-2023 Free Software Foundation, Inc.
       3  
       4     This file is part of the GNU Binutils.
       5  
       6     This program is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU General Public License as published by
       8     the Free Software Foundation; either version 3 of the License, or
       9     (at your option) any later version.
      10  
      11     This program is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14     GNU General Public License for more details.
      15  
      16     You should have received a copy of the GNU General Public License
      17     along with this program; if not, write to the Free Software
      18     Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
      19     MA 02110-1301, USA.  */
      20  
      21  #ifndef LD_H
      22  #define LD_H
      23  
      24  #ifndef SEEK_CUR
      25  #define SEEK_CUR 1
      26  #endif
      27  #ifndef SEEK_END
      28  #define SEEK_END 2
      29  #endif
      30  
      31  #ifndef ENABLE_NLS
      32    /* The Solaris version of locale.h always includes libintl.h.  If we have
      33       been configured with --disable-nls then ENABLE_NLS will not be defined
      34       and the dummy definitions of bindtextdomain (et al) below will conflict
      35       with the defintions in libintl.h.  So we define these values to prevent
      36       the bogus inclusion of libintl.h.  */
      37  # define _LIBINTL_H
      38  # define _LIBGETTEXT_H
      39  #endif
      40  #include <locale.h>
      41  
      42  #ifdef ENABLE_NLS
      43  # include <libintl.h>
      44  # define _(String) gettext (String)
      45  # ifdef gettext_noop
      46  #  define N_(String) gettext_noop (String)
      47  # else
      48  #  define N_(String) (String)
      49  # endif
      50  #else
      51  # define gettext(Msgid) (Msgid)
      52  # define dgettext(Domainname, Msgid) (Msgid)
      53  # define dcgettext(Domainname, Msgid, Category) (Msgid)
      54  # define ngettext(Msgid1, Msgid2, n) \
      55    (n == 1 ? Msgid1 : Msgid2)
      56  # define dngettext(Domainname, Msgid1, Msgid2, n) \
      57    (n == 1 ? Msgid1 : Msgid2)
      58  # define dcngettext(Domainname, Msgid1, Msgid2, n, Category) \
      59    (n == 1 ? Msgid1 : Msgid2)
      60  # define textdomain(Domainname) do {} while (0)
      61  # define bindtextdomain(Domainname, Dirname) do {} while (0)
      62  # define _(String) (String)
      63  # define N_(String) (String)
      64  #endif
      65  
      66  /* Look in this environment name for the linker to pretend to be */
      67  #define EMULATION_ENVIRON "LDEMULATION"
      68  /* If in there look for the strings: */
      69  
      70  /* Look in this variable for a target format */
      71  #define TARGET_ENVIRON "GNUTARGET"
      72  
      73  /* Input sections which are put in a section of this name are actually
      74     discarded.  */
      75  #define DISCARD_SECTION_NAME "/DISCARD/"
      76  
      77  /* A file name list.  */
      78  typedef struct name_list
      79  {
      80    const char *name;
      81    struct name_list *next;
      82  }
      83  name_list;
      84  
      85  typedef enum {sort_none, sort_ascending, sort_descending} sort_order;
      86  
      87  /* A wildcard specification.  */
      88  
      89  typedef enum
      90  {
      91    none, by_name, by_alignment, by_name_alignment, by_alignment_name,
      92    by_none, by_init_priority
      93  } sort_type;
      94  
      95  extern sort_type sort_section;
      96  
      97  struct wildcard_spec
      98  {
      99    const char *name;
     100    struct name_list *exclude_name_list;
     101    struct flag_info *section_flag_list;
     102    size_t namelen, prefixlen, suffixlen;
     103    sort_type sorted;
     104  };
     105  
     106  struct wildcard_list
     107  {
     108    struct wildcard_list *next;
     109    struct wildcard_spec spec;
     110  };
     111  
     112  #define BYTE_SIZE	(1)
     113  #define SHORT_SIZE	(2)
     114  #define LONG_SIZE	(4)
     115  #define QUAD_SIZE	(8)
     116  
     117  enum endian_enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE };
     118  
     119  typedef struct
     120  {
     121    /* 1 => assign space to common symbols even if `relocatable_output'.  */
     122    bool force_common_definition;
     123  
     124    /* If TRUE, build MIPS embedded PIC relocation tables in the output
     125       file.  */
     126    bool embedded_relocs;
     127  
     128    /* If TRUE, force generation of a file with a .exe file.  */
     129    bool force_exe_suffix;
     130  
     131    /* If TRUE, generate a cross reference report.  */
     132    bool cref;
     133  
     134    /* If TRUE (which is the default), warn about mismatched input
     135       files.  */
     136    bool warn_mismatch;
     137  
     138    /* Warn on attempting to open an incompatible library during a library
     139       search.  */
     140    bool warn_search_mismatch;
     141  
     142    /* If non-zero check section addresses, once computed,
     143       for overlaps.  Relocatable links only check when this is > 0.  */
     144    signed char check_section_addresses;
     145  
     146    /* If TRUE allow the linking of input files in an unknown architecture
     147       assuming that the user knows what they are doing.  This was the old
     148       behaviour of the linker.  The new default behaviour is to reject such
     149       input files.  */
     150    bool accept_unknown_input_arch;
     151  
     152    /* Name of the import library to generate.  */
     153    char *out_implib_filename;
     154  
     155    /* If TRUE we'll just print the default output on stdout.  */
     156    bool print_output_format;
     157  
     158    /* If set, display the target memory usage (per memory region).  */
     159    bool print_memory_usage;
     160  
     161    /* Should we force section groups to be resolved?  Controlled with
     162       --force-group-allocation on the command line or FORCE_GROUP_ALLOCATION
     163       in the linker script.  */
     164    bool force_group_allocation;
     165  
     166    /* Big or little endian as set on command line.  */
     167    enum endian_enum endian;
     168  
     169    /* Name of runtime interpreter to invoke.  */
     170    char *interpreter;
     171  
     172    /* Name to give runtime library from the -soname argument.  */
     173    char *soname;
     174  
     175    /* Runtime library search path from the -rpath argument.  */
     176    char *rpath;
     177  
     178    /* Link time runtime library search path from the -rpath-link
     179       argument.  */
     180    char *rpath_link;
     181  
     182    /* Name of shared object whose symbol table should be filtered with
     183       this shared object.  From the --filter option.  */
     184    char *filter_shlib;
     185  
     186    /* Name of shared object for whose symbol table this shared object
     187       is an auxiliary filter.  From the --auxiliary option.  */
     188    char **auxiliary_filters;
     189  
     190    /* A version symbol to be applied to the symbol names found in the
     191       .exports sections.  */
     192    char *version_exports_section;
     193  
     194    /* Default linker script.  */
     195    char *default_script;
     196  } args_type;
     197  
     198  extern args_type command_line;
     199  
     200  typedef int token_code_type;
     201  
     202  /* Different ways we can handle orphan sections.  */
     203  
     204  enum orphan_handling_enum
     205  {
     206    /* The classic strategy, find a suitable section to place the orphan
     207       into.  */
     208    orphan_handling_place = 0,
     209  
     210    /* Discard any orphan sections as though they were assign to the section
     211       /DISCARD/.  */
     212    orphan_handling_discard,
     213  
     214    /* Find somewhere to place the orphan section, as with
     215       ORPHAN_HANDLING_PLACE, but also issue a warning.  */
     216    orphan_handling_warn,
     217  
     218    /* Issue a fatal error if any orphan sections are found.  */
     219    orphan_handling_error,
     220  };
     221  
     222  typedef struct
     223  {
     224    bool magic_demand_paged;
     225    bool make_executable;
     226  
     227    /* If TRUE, -shared is supported.  */
     228    /* ??? A better way to do this is perhaps to define this in the
     229       ld_emulation_xfer_struct since this is really a target dependent
     230       parameter.  */
     231    bool has_shared;
     232  
     233    /* If TRUE, build constructors.  */
     234    bool build_constructors;
     235  
     236    /* If TRUE, warn about any constructors.  */
     237    bool warn_constructors;
     238  
     239    /* If TRUE, warn about merging common symbols with others.  */
     240    bool warn_common;
     241  
     242    /* If TRUE, only warn once about a particular undefined symbol.  */
     243    bool warn_once;
     244  
     245    /* How should we deal with orphan sections.  */
     246    enum orphan_handling_enum orphan_handling;
     247  
     248    /* If TRUE, warn if multiple global-pointers are needed (Alpha
     249       only).  */
     250    bool warn_multiple_gp;
     251  
     252    /* If TRUE, warn if the starting address of an output section
     253       changes due to the alignment of an input section.  */
     254    bool warn_section_align;
     255  
     256    /* If TRUE, warning messages are fatal.  */
     257    bool fatal_warnings;
     258  
     259    /* If TRUE, warning and error messages are ignored.  */
     260    bool no_warnings;
     261  
     262    sort_order sort_common;
     263  
     264    bool text_read_only;
     265  
     266    bool stats;
     267  
     268    /* If set, orphan input sections will be mapped to separate output
     269       sections.  */
     270    bool unique_orphan_sections;
     271  
     272    /* If set, only search library directories explicitly selected
     273       on the command line.  */
     274    bool only_cmd_line_lib_dirs;
     275  
     276    /* If set, numbers and absolute symbols are simply treated as
     277       numbers everywhere.  */
     278    bool sane_expr;
     279  
     280    /* If set, code and non-code sections should never be in one segment.  */
     281    bool separate_code;
     282  
     283    /* If set, generation of ELF section header should be suppressed.  */
     284    bool no_section_header;
     285  
     286    /* The rpath separation character.  Usually ':'.  */
     287    char rpath_separator;
     288  
     289    char *map_filename;
     290    FILE *map_file;
     291  
     292    char *dependency_file;
     293  
     294    unsigned int split_by_reloc;
     295    bfd_size_type split_by_file;
     296  
     297    /* The size of the hash table to use.  */
     298    unsigned long hash_table_size;
     299  
     300    /* If set, print discarded sections in map file output.  */
     301    bool print_map_discarded;
     302  
     303    /* If set, print local symbols in map file output.  */
     304    bool print_map_locals;
     305  
     306    /* If set, emit the names and types of statically-linked variables
     307       into the CTF.  */
     308    bool ctf_variables;
     309  
     310    /* If set, share only duplicated types in CTF, rather than sharing
     311       all types that are not in conflict.  */
     312    bool ctf_share_duplicated;
     313  
     314    /* Compress DWARF debug sections.  */
     315    enum compressed_debug_section_type compress_debug;
     316  } ld_config_type;
     317  
     318  extern ld_config_type config;
     319  
     320  extern FILE * saved_script_handle;
     321  extern bool force_make_executable;
     322  
     323  extern int yyparse (void);
     324  extern void add_cref (const char *, bfd *, asection *, bfd_vma);
     325  extern bool handle_asneeded_cref (bfd *, enum notice_asneeded_action);
     326  extern void output_cref (FILE *);
     327  extern void check_nocrossrefs (void);
     328  extern void ld_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
     329  
     330  /* If gcc >= 2.6, we can give a function name, too.  */
     331  #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
     332  #define __PRETTY_FUNCTION__  NULL
     333  #endif
     334  
     335  #undef abort
     336  #define abort() ld_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
     337  
     338  #endif