X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=include%2Fbfdlink.h;h=32d15129ab5ceeae17bfd1929a39106301bf9739;hb=2f1575ea6f93a3f0c2b439ac6bf5fe34ef42a1ad;hp=9b2194f6d5ca930f661e338062cc64877fdfc66a;hpb=76359541825cf36ecd14ab6b5974ee56e1c59eff;p=deliverable%2Fbinutils-gdb.git diff --git a/include/bfdlink.h b/include/bfdlink.h index 9b2194f6d5..32d15129ab 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -1,5 +1,5 @@ /* bfdlink.h -- header file for BFD link routines - Copyright (C) 1993-2016 Free Software Foundation, Inc. + Copyright (C) 1993-2019 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. @@ -42,6 +42,12 @@ enum bfd_link_discard 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 @@ -100,9 +106,13 @@ struct bfd_link_hash_entry /* 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. */ @@ -111,6 +121,11 @@ struct bfd_link_hash_entry /* 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 { @@ -140,9 +155,6 @@ struct bfd_link_hash_entry struct bfd_link_hash_entry *next; /* BFD symbol was found in. */ bfd *abfd; - /* For __start_ and __stop_ symbols, the first - input section matching the name. */ - asection *section; } undef; /* bfd_link_hash_defined, bfd_link_hash_defweak. */ struct @@ -328,6 +340,9 @@ struct bfd_link_info /* 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; @@ -341,6 +356,13 @@ struct bfd_link_info /* 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; @@ -379,6 +401,9 @@ struct bfd_link_info /* 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; @@ -429,6 +454,9 @@ struct bfd_link_info /* TRUE if ok to have multiple definition. */ unsigned int allow_multiple_definition: 1; + /* TRUE if ok to have prohibit multiple definition of absolute symbols. */ + unsigned int prohibit_multiple_definition_absolute: 1; + /* TRUE if ok to have version with no definition. */ unsigned int allow_undefined_version: 1; @@ -457,24 +485,21 @@ struct bfd_link_info /* 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 generate a 1-byte NOP as suffix for x86 call instruction. */ - unsigned int call_nop_as_suffix : 1; + /* TRUE if common symbols should be treated as undefined. */ + unsigned int inhibit_common_definition : 1; - /* The 1-byte NOP for x86 call instruction. */ - char call_nop_byte; + /* TRUE if "-Map map" is passed to linker. */ + unsigned int has_map_file : 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 @@ -581,8 +606,9 @@ struct bfd_link_info 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 @@ -614,6 +640,11 @@ struct bfd_link_info struct bfd_elf_version_tree *version_info; }; +/* Some forward-definitions used by some callbacks. */ + +struct elf_strtab_hash; +struct elf_sym_strtab; + /* This structures holds a set of callback functions. These are called by the BFD linker routines. */ @@ -735,6 +766,16 @@ struct bfd_link_callbacks (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 string table and symbol table once they are complete and indexes and + offsets assigned. */ + void (*examine_strtab) + (struct elf_sym_strtab *syms, bfd_size_type symcount, + struct elf_strtab_hash *symstrtab); + /* 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); }; /* The linker builds link_order structures which tell the code how to @@ -836,6 +877,20 @@ struct bfd_link_order_reloc /* 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