Allow veneers to claim veneered symbols
[binutils-gdb.git] / include / bfdlink.h
index 62309a5c6827e2798dec3b9ce91e758691baaabe..56ab03872baa958a232a575f1082b44e4b559d56 100644 (file)
@@ -1,5 +1,5 @@
 /* bfdlink.h -- header file for BFD link routines
-   Copyright (C) 1993-2015 Free Software Foundation, Inc.
+   Copyright (C) 1993-2016 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,15 @@ enum bfd_link_discard
   discard_all          /* Discard all locals.  */
 };
 
+/* Whether to generate ELF common symbols with the STT_COMMON type
+   during a relocatable link.  */
+enum bfd_link_elf_stt_common
+{
+  unchanged,
+  elf_stt_common,
+  no_elf_stt_common
+};
+
 /* Describes the type of hash table entry structure being used.
    Different hash table structure have different fields and so
    support different linking features.  */
@@ -126,21 +135,29 @@ struct bfd_link_hash_entry
             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
@@ -156,7 +173,8 @@ struct bfd_link_hash_entry
             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;
 };
@@ -217,6 +235,11 @@ extern void bfd_link_repair_undef_list
 /* Read symbols and cache symbol pointer array in outsymbols.  */
 extern bfd_boolean bfd_generic_link_read_symbols (bfd *);
 
+/* Check the relocs in the BFD.  Called after all the input
+   files have been loaded, and garbage collection has tagged
+   any unneeded sections.  */
+extern bfd_boolean bfd_link_check_relocs (bfd *,struct bfd_link_info *);
+
 struct bfd_sym_chain
 {
   struct bfd_sym_chain *next;
@@ -263,19 +286,18 @@ struct bfd_elf_version_tree;
 
 enum output_type
 {
-  type_executable = 0,
+  type_pde,
+  type_pie,
+  type_relocatable,
   type_dll,
-  type_relocatable
 };
 
-#define bfd_link_executable(info)  ((info)->type == type_executable)
+#define bfd_link_pde(info)        ((info)->type == type_pde)
 #define bfd_link_dll(info)        ((info)->type == type_dll)
 #define bfd_link_relocatable(info) ((info)->type == type_relocatable)
-#define bfd_link_pic(info)        (info)->pic
-#define bfd_link_pie(info)        (bfd_link_executable (info) \
-                                   && bfd_link_pic (info))
-#define bfd_link_pde(info)        (bfd_link_executable (info) \
-                                   && !bfd_link_pic (info))
+#define bfd_link_pie(info)        ((info)->type == type_pie)
+#define bfd_link_executable(info)  (bfd_link_pde (info) || bfd_link_pie (info))
+#define bfd_link_pic(info)        (bfd_link_dll (info) || bfd_link_pie (info))
 
 /* This structure holds all the information needed to communicate
    between BFD and the linker when doing a link.  */
@@ -285,9 +307,6 @@ struct bfd_link_info
   /* Output type.  */
   ENUM_BITFIELD (output_type) type : 2;
 
-  /* TRUE if BFD should generate a position independent object.  */
-  unsigned int pic : 1;
-
   /* TRUE if BFD should pre-bind symbols in a shared object.  */
   unsigned int symbolic: 1;
 
@@ -325,6 +344,9 @@ struct bfd_link_info
   /* Which local symbols to discard.  */
   ENUM_BITFIELD (bfd_link_discard) discard : 2;
 
+  /* Whether to generate ELF common symbols with the STT_COMMON type.  */
+  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. */
   ENUM_BITFIELD (bfd_link_common_skip_ar_symbols) common_skip_ar_symbols : 2;
@@ -432,9 +454,25 @@ struct bfd_link_info
   /* TRUE if the linker script contained an explicit PHDRS command.  */
   unsigned int user_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;
+
+  /* The 1-byte NOP for x86 call instruction.  */
+  char call_nop_byte;
+
   /* Char that may appear as the first char of a symbol, but should be
      skipped (like symbol_leading_char) when looking up symbols in
      wrap_hash.  Used by PowerPC Linux for 'dot' symbols.  */
@@ -537,6 +575,10 @@ 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.  */
+  int dynamic_undefined_weak;
+
   /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
      should be generated/linked against.  Set to 1 if this feature
      is explicitly requested by the user, -1 if enabled by default.  */