/* bfdlink.h -- header file for BFD link routines
- Copyright (C) 1993-2017 Free Software Foundation, Inc.
+ Copyright (C) 1993-2021 Free Software Foundation, Inc.
Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
discard_all /* Discard all locals. */
};
+enum notice_asneeded_action {
+ notice_as_needed,
+ notice_not_needed,
+ notice_needed
+};
+
/* Whether to generate ELF common symbols with the STT_COMMON type
during a relocatable link. */
enum bfd_link_elf_stt_common
/* Type of this entry. */
ENUM_BITFIELD (bfd_link_hash_type) type : 8;
- /* Symbol is referenced in a normal object file, as distict from a LTO
- IR object file. */
- unsigned int non_ir_ref : 1;
+ /* Symbol is referenced in a normal regular object file,
+ as distinct from a LTO IR object file. */
+ unsigned int non_ir_ref_regular : 1;
+
+ /* Symbol is referenced in a normal dynamic object file,
+ as distinct from a LTO IR object file. */
+ unsigned int non_ir_ref_dynamic : 1;
/* Symbol is a built-in define. These will be overridden by PROVIDE
in a linker script. */
/* Symbol defined in a linker script. */
unsigned int ldscript_def : 1;
+ /* Symbol will be converted from absolute to section-relative. Set for
+ symbols defined by a script from "dot" (also SEGMENT_START or ORIGIN)
+ outside of an output section statement. */
+ unsigned int rel_from_abs : 1;
+
/* A union of information depending upon the type. */
union
{
struct bfd_link_hash_entry *next;
/* BFD symbol was found in. */
bfd *abfd;
- /* For __start_<name> and __stop_<name> symbols, the first
- input section matching the name. */
- asection *section;
} undef;
/* bfd_link_hash_defined, bfd_link_hash_defweak. */
struct
allowed to set the value. */
RM_NOT_YET_SET = 0,
RM_IGNORE,
- RM_GENERATE_WARNING,
- RM_GENERATE_ERROR
+ RM_DIAGNOSE,
+};
+
+/* How to handle DT_TEXTREL. */
+
+enum textrel_check_method
+{
+ textrel_check_none,
+ textrel_check_warning,
+ textrel_check_error
};
+#define bfd_link_textrel_check(info) \
+ (info->textrel_check != textrel_check_none)
+
typedef enum {with_flags, without_flags} flag_type;
/* A section flag list. */
/* TRUE if the LTO plugin is active. */
unsigned int lto_plugin_active: 1;
+ /* TRUE if all LTO IR symbols have been read. */
+ unsigned int lto_all_symbols_read : 1;
+
/* TRUE if global symbols in discarded sections should be stripped. */
unsigned int strip_discarded: 1;
/* TRUE if all data symbols should be dynamic. */
unsigned int dynamic_data: 1;
+ /* TRUE if section groups should be resolved. */
+ unsigned int resolve_section_groups: 1;
+
+ /* Set if output file is big-endian, or if that is unknown, from
+ the command line or first input file endianness. */
+ unsigned int big_endian : 1;
+
/* Which symbols to strip. */
ENUM_BITFIELD (bfd_link_strip) strip : 2;
ENUM_BITFIELD (bfd_link_elf_stt_common) elf_stt_common : 2;
/* Criteria for skipping symbols when determining
- whether to include an object from an archive. */
+ whether to include an object from an archive. */
ENUM_BITFIELD (bfd_link_common_skip_ar_symbols) common_skip_ar_symbols : 2;
/* What to do with unresolved symbols in an object file.
The same defaults apply. */
ENUM_BITFIELD (report_method) unresolved_syms_in_shared_libs : 2;
+ /* TRUE if unresolved symbols are to be warned, rather than errored. */
+ unsigned int warn_unresolved_syms: 1;
+
/* TRUE if shared objects should be linked directly, not shared. */
unsigned int static_link: 1;
/* TRUE if PT_GNU_RELRO segment should be created. */
unsigned int relro: 1;
+ /* TRUE if separate code segment should be created. */
+ unsigned int separate_code: 1;
+
/* Nonzero if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
should be created. 1 for DWARF2 tables, 2 for compact tables. */
unsigned int eh_frame_hdr_type: 2;
- /* TRUE if we should warn when adding a DT_TEXTREL to a shared object. */
- unsigned int warn_shared_textrel: 1;
-
- /* TRUE if we should error when adding a DT_TEXTREL. */
- unsigned int error_textrel: 1;
+ /* What to do with DT_TEXTREL in output. */
+ ENUM_BITFIELD (textrel_check_method) textrel_check: 2;
/* TRUE if .hash section should be created. */
unsigned int emit_hash: 1;
statics. */
unsigned int task_link: 1;
- /* TRUE if ok to have multiple definition. */
+ /* TRUE if ok to have multiple definitions, without warning. */
unsigned int allow_multiple_definition: 1;
+ /* TRUE if multiple definition of absolute symbols (eg. from -R) should
+ be reported. */
+ unsigned int prohibit_multiple_definition_absolute: 1;
+
+ /* TRUE if multiple definitions should only warn. */
+ unsigned int warn_multiple_definition: 1;
+
/* TRUE if ok to have version with no definition. */
unsigned int allow_undefined_version: 1;
/* TRUE if the linker script contained an explicit PHDRS command. */
unsigned int user_phdrs: 1;
+ /* TRUE if program headers ought to be loaded. */
+ unsigned int load_phdrs: 1;
+
/* TRUE if we should check relocations after all input files have
been opened. */
unsigned int check_relocs_after_open_input: 1;
- /* TRUE if BND prefix in PLT entries is always generated. */
- unsigned int bndplt: 1;
-
/* TRUE if generation of .interp/PT_INTERP should be suppressed. */
unsigned int nointerp: 1;
- /* TRUE if we shouldn't check relocation overflow. */
- unsigned int no_reloc_overflow_check: 1;
+ /* TRUE if common symbols should be treated as undefined. */
+ unsigned int inhibit_common_definition : 1;
+
+ /* TRUE if "-Map map" is passed to linker. */
+ unsigned int has_map_file : 1;
- /* TRUE if generate a 1-byte NOP as suffix for x86 call instruction. */
- unsigned int call_nop_as_suffix : 1;
+ /* TRUE if "--enable-non-contiguous-regions" is passed to the
+ linker. */
+ unsigned int non_contiguous_regions : 1;
- /* The 1-byte NOP for x86 call instruction. */
- char call_nop_byte;
+ /* TRUE if "--enable-non-contiguous-regions-warnings" is passed to
+ the linker. */
+ unsigned int non_contiguous_regions_warnings : 1;
+
+ /* TRUE if all symbol names should be unique. */
+ unsigned int unique_symbol : 1;
/* Char that may appear as the first char of a symbol, but should be
skipped (like symbol_leading_char) when looking up symbols in
Normally these optimizations are disabled by default but some targets
prefer to enable them by default. So this field is a tri-state variable.
The values are:
-
+
zero: Enable the optimizations (either from --relax being specified on
the command line or the backend's before_allocation emulation function.
-
+
positive: The user has requested that these optimizations be disabled.
(Via the --no-relax command line option).
/* May be used to set DT_FLAGS_1 for ELF. */
bfd_vma flags_1;
+ /* May be used to set DT_GNU_FLAGS_1 for ELF. */
+ bfd_vma gnu_flags_1;
+
+ /* TRUE if references to __start_/__stop_ synthesized symbols do not
+ specially retain C identifier named sections. */
+ int start_stop_gc;
+
+ /* May be used to set ELF visibility for __start_* / __stop_. */
+ unsigned int start_stop_visibility;
+
+ /* The maximum page size for ELF. */
+ bfd_vma maxpagesize;
+
+ /* The common page size for ELF. */
+ bfd_vma commonpagesize;
+
/* Start and end of RELRO region. */
bfd_vma relro_start, relro_end;
struct bfd_elf_version_tree *version_info;
};
+/* Some forward-definitions used by some callbacks. */
+
+struct elf_strtab_hash;
+struct elf_internal_sym;
+
/* This structures holds a set of callback functions. These are called
by the BFD linker routines. */
(struct bfd_link_info *, bfd * abfd,
asection * current_section, asection * previous_section,
bfd_boolean new_segment);
+ /* This callback provides a chance for callers of the BFD to examine the
+ ELF (dynamic) string table once it is complete. */
+ void (*examine_strtab)
+ (struct elf_strtab_hash *symstrtab);
+ /* This callback is called just before a symbol is swapped out, so that the
+ CTF machinery can look up symbols during construction. The name is
+ already an external strtab offset at this point. */
+ void (*ctf_new_symbol)
+ (int symidx, struct elf_internal_sym *sym);
+ /* Likewise, for dynamic symbols. */
+ void (*ctf_new_dynsym)
+ (int symidx, struct elf_internal_sym *sym);
+ /* This callback should emit the CTF section into a non-loadable section in
+ the output BFD named .ctf or a name beginning with ".ctf.". */
+ void (*emit_ctf)
+ (void);
};
\f
/* The linker builds link_order structures which tell the code how to
struct bfd_link_order *next;
/* Type of link_order. */
enum bfd_link_order_type type;
- /* Offset within output section. */
+ /* Offset within output section in bytes. */
bfd_vma offset;
- /* Size within output section. */
+ /* Size within output section in octets. */
bfd_size_type size;
/* Type specific information. */
union
/* Allocate a new link_order for a section. */
extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
+struct bfd_section_already_linked;
+
+extern bfd_boolean bfd_section_already_linked_table_init (void);
+extern void bfd_section_already_linked_table_free (void);
+extern bfd_boolean _bfd_handle_already_linked
+ (struct bfd_section *, struct bfd_section_already_linked *,
+ struct bfd_link_info *);
+
+extern struct bfd_section *_bfd_nearby_section
+ (bfd *, struct bfd_section *, bfd_vma);
+
+extern void _bfd_fix_excluded_sec_syms
+ (bfd *, struct bfd_link_info *);
+
/* These structures are used to describe version information for the
ELF linker. These structures could be manipulated entirely inside
BFD, but it would be a pain. Instead, the regular linker sets up