/* bfdlink.h -- header file for BFD link routines
- Copyright (C) 1993-2016 Free Software Foundation, Inc.
+ Copyright (C) 1993-2017 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.
/* 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. */
+ /* Symbol is referenced in a normal regular object file,
+ as distinct from a LTO IR object file. */
unsigned int non_ir_ref : 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. */
unsigned int linker_def : 1;
+ /* Symbol defined in a linker script. */
+ unsigned int ldscript_def : 1;
+
/* A union of information depending upon the type. */
union
{
automatically be non-NULL since the symbol will have been on the
undefined symbol list. */
struct bfd_link_hash_entry *next;
- bfd *abfd; /* BFD symbol was found in. */
+ /* 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
{
struct bfd_link_hash_entry *next;
- asection *section; /* Symbol section. */
- bfd_vma value; /* Symbol value. */
+ /* Symbol section. */
+ asection *section;
+ /* Symbol value. */
+ bfd_vma value;
} def;
/* bfd_link_hash_indirect, bfd_link_hash_warning. */
struct
{
struct bfd_link_hash_entry *next;
- struct bfd_link_hash_entry *link; /* Real symbol. */
- const char *warning; /* Warning (bfd_link_hash_warning only). */
+ /* Real symbol. */
+ struct bfd_link_hash_entry *link;
+ /* Warning message (bfd_link_hash_warning only). */
+ const char *warning;
} i;
/* bfd_link_hash_common. */
struct
the union; this structure is a major space user in the
linker. */
struct bfd_link_hash_common_entry *p;
- bfd_size_type size; /* Common symbol size. */
+ /* Common symbol size. */
+ bfd_size_type size;
} c;
} u;
};
/* TRUE if unreferenced sections should be removed. */
unsigned int gc_sections: 1;
+ /* TRUE if exported symbols should be kept during section gc. */
+ unsigned int gc_keep_exported: 1;
+
/* TRUE if every symbol should be reported back via the notice
callback. */
unsigned int notice_all: 1;
/* The output BFD. */
bfd *output_bfd;
+ /* The import library generated. */
+ bfd *out_implib_bfd;
+
/* The list of input BFD's involved in the link. These are chained
together via the link.next field. */
bfd *input_bfds;
backend to decide. */
int extern_protected_data;
- /* > 0 to treat undefined weak symbol in the executable as dynamic,
- requiring dynamic relocation. */
+ /* 1 to make undefined weak symbols dynamic when building a dynamic
+ object. 0 to resolve undefined weak symbols to zero. -1 to let
+ the backend decide. */
int dynamic_undefined_weak;
/* Non-zero if auto-import thunks for DATA items in pei386 DLLs
};
/* This structures holds a set of callback functions. These are called
- by the BFD linker routines. Except for the info functions, the first
- argument to each callback function is the bfd_link_info structure
- being used and each function returns a boolean value. If the
- function returns FALSE, then the BFD function which called it should
- return with a failure indication. */
+ by the BFD linker routines. */
struct bfd_link_callbacks
{
name of the symbol which caused the archive element to be pulled
in. This function may set *SUBSBFD to point to an alternative
BFD from which symbols should in fact be added in place of the
- original BFD's symbols. */
+ original BFD's symbols. Returns TRUE if the object should be
+ added, FALSE if it should be skipped. */
bfd_boolean (*add_archive_element)
(struct bfd_link_info *, bfd *abfd, const char *name, bfd **subsbfd);
/* A function which is called when a symbol is found with multiple
definitions. H is the symbol which is defined multiple times.
NBFD is the new BFD, NSEC is the new section, and NVAL is the new
value. NSEC may be bfd_com_section or bfd_ind_section. */
- bfd_boolean (*multiple_definition)
+ void (*multiple_definition)
(struct bfd_link_info *, struct bfd_link_hash_entry *h,
bfd *nbfd, asection *nsec, bfd_vma nval);
/* A function which is called when a common symbol is defined
symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
bfd_link_hash_indirect. If NTYPE is bfd_link_hash_common, NSIZE
is the size of the new symbol. */
- bfd_boolean (*multiple_common)
+ void (*multiple_common)
(struct bfd_link_info *, struct bfd_link_hash_entry *h,
bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
/* A function which is called to add a symbol to a set. ENTRY is
the set when generating a relocatable file, and is also used to
get the size of the entry when generating an executable file.
ABFD, SEC and VALUE identify the value to add to the set. */
- bfd_boolean (*add_to_set)
+ void (*add_to_set)
(struct bfd_link_info *, struct bfd_link_hash_entry *entry,
bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
/* A function which is called when the name of a g++ constructor or
destructor. This will use BFD_RELOC_CTOR when generating a
relocatable file. NAME is the name of the symbol found. ABFD,
SECTION and VALUE are the value of the symbol. */
- bfd_boolean (*constructor)
+ void (*constructor)
(struct bfd_link_info *, bfd_boolean constructor, const char *name,
bfd *abfd, asection *sec, bfd_vma value);
/* A function which is called to issue a linker warning. For
there is none. ABFD, SECTION and ADDRESS identify the location
which trigerred the warning; either ABFD or SECTION or both may
be NULL if the location is not known. */
- bfd_boolean (*warning)
+ void (*warning)
(struct bfd_link_info *, const char *warning, const char *symbol,
bfd *abfd, asection *section, bfd_vma address);
/* A function which is called when a relocation is attempted against
ABFD, SECTION and ADDRESS identify the location from which the
reference is made. IS_FATAL indicates whether an undefined symbol is
a fatal error or not. In some cases SECTION may be NULL. */
- bfd_boolean (*undefined_symbol)
+ void (*undefined_symbol)
(struct bfd_link_info *, const char *name, bfd *abfd,
asection *section, bfd_vma address, bfd_boolean is_fatal);
/* A function which is called when a reloc overflow occurs. ENTRY is
location at which the overflow occurs; if this is the result of a
bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
ABFD will be NULL. */
- bfd_boolean (*reloc_overflow)
+ void (*reloc_overflow)
(struct bfd_link_info *, struct bfd_link_hash_entry *entry,
const char *name, const char *reloc_name, bfd_vma addend,
bfd *abfd, asection *section, bfd_vma address);
problem occurred; if this is the result of a
bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
ABFD will be NULL. */
- bfd_boolean (*reloc_dangerous)
+ void (*reloc_dangerous)
(struct bfd_link_info *, const char *message,
bfd *abfd, asection *section, bfd_vma address);
/* A function which is called when a reloc is found to be attached
the reloc; if this is the result of a
bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
ABFD will be NULL. */
- bfd_boolean (*unattached_reloc)
+ void (*unattached_reloc)
(struct bfd_link_info *, const char *name,
bfd *abfd, asection *section, bfd_vma address);
/* A function which is called when a symbol in notice_hash is