123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- /* ld.h -- general linker header file
- Copyright (C) 1991-2022 Free Software Foundation, Inc.
- This file is part of the GNU Binutils.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
- #ifndef LD_H
- #define LD_H
- #ifndef SEEK_CUR
- #define SEEK_CUR 1
- #endif
- #ifndef SEEK_END
- #define SEEK_END 2
- #endif
- #ifndef ENABLE_NLS
- /* The Solaris version of locale.h always includes libintl.h. If we have
- been configured with --disable-nls then ENABLE_NLS will not be defined
- and the dummy definitions of bindtextdomain (et al) below will conflict
- with the defintions in libintl.h. So we define these values to prevent
- the bogus inclusion of libintl.h. */
- # define _LIBINTL_H
- # define _LIBGETTEXT_H
- #endif
- #include <locale.h>
- #ifdef ENABLE_NLS
- # include <libintl.h>
- # define _(String) gettext (String)
- # ifdef gettext_noop
- # define N_(String) gettext_noop (String)
- # else
- # define N_(String) (String)
- # endif
- #else
- # define gettext(Msgid) (Msgid)
- # define dgettext(Domainname, Msgid) (Msgid)
- # define dcgettext(Domainname, Msgid, Category) (Msgid)
- # define ngettext(Msgid1, Msgid2, n) \
- (n == 1 ? Msgid1 : Msgid2)
- # define dngettext(Domainname, Msgid1, Msgid2, n) \
- (n == 1 ? Msgid1 : Msgid2)
- # define dcngettext(Domainname, Msgid1, Msgid2, n, Category) \
- (n == 1 ? Msgid1 : Msgid2)
- # define textdomain(Domainname) do {} while (0)
- # define bindtextdomain(Domainname, Dirname) do {} while (0)
- # define _(String) (String)
- # define N_(String) (String)
- #endif
- /* Look in this environment name for the linker to pretend to be */
- #define EMULATION_ENVIRON "LDEMULATION"
- /* If in there look for the strings: */
- /* Look in this variable for a target format */
- #define TARGET_ENVIRON "GNUTARGET"
- /* Input sections which are put in a section of this name are actually
- discarded. */
- #define DISCARD_SECTION_NAME "/DISCARD/"
- /* A file name list. */
- typedef struct name_list
- {
- const char *name;
- struct name_list *next;
- }
- name_list;
- typedef enum {sort_none, sort_ascending, sort_descending} sort_order;
- /* A wildcard specification. */
- typedef enum
- {
- none, by_name, by_alignment, by_name_alignment, by_alignment_name,
- by_none, by_init_priority
- } sort_type;
- extern sort_type sort_section;
- struct wildcard_spec
- {
- const char *name;
- struct name_list *exclude_name_list;
- sort_type sorted;
- struct flag_info *section_flag_list;
- };
- struct wildcard_list
- {
- struct wildcard_list *next;
- struct wildcard_spec spec;
- };
- #define BYTE_SIZE (1)
- #define SHORT_SIZE (2)
- #define LONG_SIZE (4)
- #define QUAD_SIZE (8)
- enum endian_enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE };
- typedef struct
- {
- /* 1 => assign space to common symbols even if `relocatable_output'. */
- bool force_common_definition;
- /* If TRUE, build MIPS embedded PIC relocation tables in the output
- file. */
- bool embedded_relocs;
- /* If TRUE, force generation of a file with a .exe file. */
- bool force_exe_suffix;
- /* If TRUE, generate a cross reference report. */
- bool cref;
- /* If TRUE (which is the default), warn about mismatched input
- files. */
- bool warn_mismatch;
- /* Warn on attempting to open an incompatible library during a library
- search. */
- bool warn_search_mismatch;
- /* If non-zero check section addresses, once computed,
- for overlaps. Relocatable links only check when this is > 0. */
- signed char check_section_addresses;
- /* If TRUE allow the linking of input files in an unknown architecture
- assuming that the user knows what they are doing. This was the old
- behaviour of the linker. The new default behaviour is to reject such
- input files. */
- bool accept_unknown_input_arch;
- /* Name of the import library to generate. */
- char *out_implib_filename;
- /* If TRUE we'll just print the default output on stdout. */
- bool print_output_format;
- /* If set, display the target memory usage (per memory region). */
- bool print_memory_usage;
- /* Should we force section groups to be resolved? Controlled with
- --force-group-allocation on the command line or FORCE_GROUP_ALLOCATION
- in the linker script. */
- bool force_group_allocation;
- /* Big or little endian as set on command line. */
- enum endian_enum endian;
- /* Name of runtime interpreter to invoke. */
- char *interpreter;
- /* Name to give runtime library from the -soname argument. */
- char *soname;
- /* Runtime library search path from the -rpath argument. */
- char *rpath;
- /* Link time runtime library search path from the -rpath-link
- argument. */
- char *rpath_link;
- /* Name of shared object whose symbol table should be filtered with
- this shared object. From the --filter option. */
- char *filter_shlib;
- /* Name of shared object for whose symbol table this shared object
- is an auxiliary filter. From the --auxiliary option. */
- char **auxiliary_filters;
- /* A version symbol to be applied to the symbol names found in the
- .exports sections. */
- char *version_exports_section;
- /* Default linker script. */
- char *default_script;
- } args_type;
- extern args_type command_line;
- typedef int token_code_type;
- /* Different ways we can handle orphan sections. */
- enum orphan_handling_enum
- {
- /* The classic strategy, find a suitable section to place the orphan
- into. */
- orphan_handling_place = 0,
- /* Discard any orphan sections as though they were assign to the section
- /DISCARD/. */
- orphan_handling_discard,
- /* Find somewhere to place the orphan section, as with
- ORPHAN_HANDLING_PLACE, but also issue a warning. */
- orphan_handling_warn,
- /* Issue a fatal error if any orphan sections are found. */
- orphan_handling_error,
- };
- typedef struct
- {
- bool magic_demand_paged;
- bool make_executable;
- /* If TRUE, -shared is supported. */
- /* ??? A better way to do this is perhaps to define this in the
- ld_emulation_xfer_struct since this is really a target dependent
- parameter. */
- bool has_shared;
- /* If TRUE, build constructors. */
- bool build_constructors;
- /* If TRUE, warn about any constructors. */
- bool warn_constructors;
- /* If TRUE, warn about merging common symbols with others. */
- bool warn_common;
- /* If TRUE, only warn once about a particular undefined symbol. */
- bool warn_once;
- /* How should we deal with orphan sections. */
- enum orphan_handling_enum orphan_handling;
- /* If TRUE, warn if multiple global-pointers are needed (Alpha
- only). */
- bool warn_multiple_gp;
- /* If TRUE, warn if the starting address of an output section
- changes due to the alignment of an input section. */
- bool warn_section_align;
- /* If TRUE, warning messages are fatal */
- bool fatal_warnings;
- sort_order sort_common;
- bool text_read_only;
- bool stats;
- /* If set, orphan input sections will be mapped to separate output
- sections. */
- bool unique_orphan_sections;
- /* If set, only search library directories explicitly selected
- on the command line. */
- bool only_cmd_line_lib_dirs;
- /* If set, numbers and absolute symbols are simply treated as
- numbers everywhere. */
- bool sane_expr;
- /* If set, code and non-code sections should never be in one segment. */
- bool separate_code;
- /* The rpath separation character. Usually ':'. */
- char rpath_separator;
- char *map_filename;
- FILE *map_file;
- char *dependency_file;
- unsigned int split_by_reloc;
- bfd_size_type split_by_file;
- /* The size of the hash table to use. */
- unsigned long hash_table_size;
- /* If set, print discarded sections in map file output. */
- bool print_map_discarded;
- /* If set, emit the names and types of statically-linked variables
- into the CTF. */
- bool ctf_variables;
- /* If set, share only duplicated types in CTF, rather than sharing
- all types that are not in conflict. */
- bool ctf_share_duplicated;
- } ld_config_type;
- extern ld_config_type config;
- extern FILE * saved_script_handle;
- extern bool force_make_executable;
- extern int yyparse (void);
- extern void add_cref (const char *, bfd *, asection *, bfd_vma);
- extern bool handle_asneeded_cref (bfd *, enum notice_asneeded_action);
- extern void output_cref (FILE *);
- extern void check_nocrossrefs (void);
- extern void ld_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
- /* If gcc >= 2.6, we can give a function name, too. */
- #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
- #define __PRETTY_FUNCTION__ NULL
- #endif
- #undef abort
- #define abort() ld_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
- #endif
|