* gas/config/tc-tic4x.c: Remove c4x_pseudo_ignore function.
[deliverable/binutils-gdb.git] / include / bfdlink.h
index 1a7db544052aa553c815dfaac642ceb818e3ed05..9263bcc126d6ebc48f3b71a4483dae78f0148189 100644 (file)
@@ -1,22 +1,23 @@
 /* bfdlink.h -- header file for BFD link routines
-   Copyright 1993, 94, 95, 96, 1997 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002
+   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.
+   This file is part of BFD, the Binary File Descriptor library.
 
-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 2 of the License, or
-(at your option) any later version.
+   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 2 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.
+   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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef BFDLINK_H
 #define BFDLINK_H
@@ -34,10 +35,21 @@ enum bfd_link_strip
    if strip_all is used.  */
 enum bfd_link_discard
 {
+  discard_sec_merge,   /* Discard local temporary symbols in SEC_MERGE
+                          sections.  */
   discard_none,                /* Don't discard any locals.  */
   discard_l,           /* Discard local temporary symbols.  */
   discard_all          /* Discard all locals.  */
 };
+
+/* Describes the type of hash table entry structure being used.
+   Different hash table structure have different fields and so
+   support different linking features.  */
+enum bfd_link_hash_table_type
+  {
+    bfd_link_generic_hash_table,
+    bfd_link_elf_hash_table
+  };
 \f
 /* These are the possible types of an entry in the BFD link hash
    table.  */
@@ -54,6 +66,14 @@ enum bfd_link_hash_type
   bfd_link_hash_warning                /* Like indirect, but warn if referenced.  */
 };
 
+enum bfd_link_common_skip_ar_aymbols
+{
+  bfd_link_common_skip_none,
+  bfd_link_common_skip_text,
+  bfd_link_common_skip_data,
+  bfd_link_common_skip_all
+};
+
 /* The linking routines use a hash table which uses this structure for
    its elements.  */
 
@@ -143,6 +163,8 @@ struct bfd_link_hash_table
   struct bfd_link_hash_entry *undefs;
   /* Entries are added to the tail of the undefs list.  */
   struct bfd_link_hash_entry *undefs_tail;
+  /* The type of the ink hash table.  */
+  enum bfd_link_hash_table_type type;
 };
 
 /* Look up an entry in a link hash table.  If FOLLOW is true, this
@@ -169,6 +191,12 @@ extern void bfd_link_hash_traverse
 /* Add an entry to the undefs list.  */
 extern void bfd_link_add_undef
   PARAMS ((struct bfd_link_hash_table *, struct bfd_link_hash_entry *));
+
+struct bfd_sym_chain
+{
+  struct bfd_sym_chain *next;
+  const char *name;
+};
 \f
 /* This structure holds all the information needed to communicate
    between BFD and the linker when doing a link.  */
@@ -177,58 +205,164 @@ struct bfd_link_info
 {
   /* Function callbacks.  */
   const struct bfd_link_callbacks *callbacks;
+
   /* true if BFD should generate a relocateable object file.  */
   boolean relocateable;
+
+  /* true if BFD should generate relocation information in the final
+     executable.  */
+  boolean emitrelocations;
+
   /* true if BFD should generate a "task linked" object file,
-     similar to relocatable but also with globals converted to statics. */
+     similar to relocatable but also with globals converted to
+     statics.  */
   boolean task_link;
+
   /* true if BFD should generate a shared object.  */
   boolean shared;
+
   /* true if BFD should pre-bind symbols in a shared object.  */
   boolean symbolic;
+
+  /* true if BFD should export all symbols in the dynamic symbol table
+     of an executable, rather than only those used.  */
+  boolean export_dynamic;
+
   /* true if shared objects should be linked directly, not shared.  */
   boolean static_link;
+
   /* true if the output file should be in a traditional format.  This
      is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
      on the output file, but may be checked when reading the input
      files.  */
   boolean traditional_format;
+
   /* true if we want to produced optimized output files.  This might
      need much more time and therefore must be explicitly selected.  */
   boolean optimize;
+
+  /* true if BFD should generate errors for undefined symbols
+     even if generating a shared object.  */
+  boolean no_undefined;
+
+  /* true if BFD should allow undefined symbols in shared objects even
+     when no_undefined is set to disallow undefined symbols.  The net
+     result will be that undefined symbols in regular objects will
+     still trigger an error, but undefined symbols in shared objects
+     will be ignored.  The implementation of no_undefined makes the
+     assumption that the runtime linker will choke on undefined
+     symbols.  However there is at least one system (BeOS) where
+     undefined symbols in shared libraries is normal since the kernel
+     patches them at load time to select which function is most
+     appropriate for the current architecture.  I.E. dynamically
+     select an appropriate memset function.  Apparently it is also
+     normal for HPPA shared libraries to have undefined symbols.  */
+  boolean allow_shlib_undefined;
+
+  /* true if ok to have multiple definition.  */
+  boolean allow_multiple_definition;
+
+  /* true if ok to have version with no definition.  */
+  boolean allow_undefined_version;
+
   /* Which symbols to strip.  */
   enum bfd_link_strip strip;
+
   /* Which local symbols to discard.  */
   enum bfd_link_discard discard;
+
   /* true if symbols should be retained in memory, false if they
      should be freed and reread.  */
   boolean keep_memory;
+
   /* The list of input BFD's involved in the link.  These are chained
      together via the link_next field.  */
   bfd *input_bfds;
+
   /* If a symbol should be created for each input BFD, this is section
      where those symbols should be placed.  It must be a section in
      the output BFD.  It may be NULL, in which case no such symbols
      will be created.  This is to support CREATE_OBJECT_SYMBOLS in the
      linker command language.  */
   asection *create_object_symbols_section;
+
+  /* List of global symbol names that are starting points for marking
+     sections against garbage collection.  */
+  struct bfd_sym_chain *gc_sym_list;
+
   /* Hash table handled by BFD.  */
   struct bfd_link_hash_table *hash;
+
   /* Hash table of symbols to keep.  This is NULL unless strip is
      strip_some.  */
   struct bfd_hash_table *keep_hash;
+
   /* true if every symbol should be reported back via the notice
      callback.  */
   boolean notice_all;
+
   /* Hash table of symbols to report back via the notice callback.  If
      this is NULL, and notice_all is false, then no symbols are
      reported back.  */
   struct bfd_hash_table *notice_hash;
+
   /* Hash table of symbols which are being wrapped (the --wrap linker
      option).  If this is NULL, no symbols are being wrapped.  */
   struct bfd_hash_table *wrap_hash;
+
   /* If a base output file is wanted, then this points to it */
   PTR base_file;
+
+  /* If non-zero, specifies that branches which are problematic for the
+  MPC860 C0 (or earlier) should be checked for and modified.  It gives the
+  number of bytes that should be checked at the end of each text page. */
+  int mpc860c0;
+
+  /* The function to call when the executable or shared object is
+     loaded.  */
+  const char *init_function;
+
+  /* The function to call when the executable or shared object is
+     unloaded.  */
+  const char *fini_function;
+
+  /* true if the new ELF dynamic tags are enabled. */ 
+  boolean new_dtags;
+
+  /* May be used to set DT_FLAGS for ELF. */
+  bfd_vma flags;
+
+  /* May be used to set DT_FLAGS_1 for ELF. */
+  bfd_vma flags_1;
+
+  /* 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.  */
+  int pei386_auto_import;
+
+  /* Non-zero if runtime relocs for DATA items with non-zero addends
+     in pei386 DLLs should be generated.  Set to 1 if this feature
+     is explicitly requested by the user, -1 if enabled by default.  */
+  int pei386_runtime_pseudo_reloc;
+
+  /* True if non-PLT relocs should be merged into one reloc section
+     and sorted so that relocs against the same symbol come together.  */
+  boolean combreloc;
+
+  /* True if executable should not contain copy relocs.
+     Setting this true may result in a non-sharable text segment.  */
+  boolean nocopyreloc;
+
+  /* True if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
+     should be created.  */
+  boolean eh_frame_hdr;
+
+  /* How many spare .dynamic DT_NULL entries should be added?  */
+  unsigned int spare_dynamic_tags;
+
+  /* Criteria for skipping symbols when detemining
+     whether to include an object from an archive. */
+  enum bfd_link_common_skip_ar_aymbols common_skip_ar_aymbols;
 };
 
 /* This structures holds a set of callback functions.  These are
@@ -314,10 +448,13 @@ struct bfd_link_callbacks
   /* A function which is called when a relocation is attempted against
      an undefined symbol.  NAME is the symbol which is undefined.
      ABFD, SECTION and ADDRESS identify the location from which the
-     reference is made.  In some cases SECTION may be NULL.  */
+     reference is made. FATAL indicates whether an undefined symbol is
+     a fatal error or not. In some cases SECTION may be NULL.  */
   boolean (*undefined_symbol) PARAMS ((struct bfd_link_info *,
                                       const char *name, bfd *abfd,
-                                      asection *section, bfd_vma address));
+                                      asection *section,
+                                      bfd_vma address,
+                                      boolean fatal));
   /* A function which is called when a reloc overflow occurs.  NAME is
      the name of the symbol or section the reloc is against,
      RELOC_NAME is the name of the relocation, and ADDEND is any
@@ -368,7 +505,6 @@ enum bfd_link_order_type
 {
   bfd_undefined_link_order,    /* Undefined.  */
   bfd_indirect_link_order,     /* Built from a section.  */
-  bfd_fill_link_order,         /* Fill with a 16 bit constant.  */
   bfd_data_link_order,         /* Set to explicit data.  */
   bfd_section_reloc_link_order,        /* Relocate against a section.  */
   bfd_symbol_reloc_link_order  /* Relocate against a symbol.  */
@@ -402,13 +538,12 @@ struct bfd_link_order
        } indirect;
       struct
        {
-         /* Value to fill with.  */
-         unsigned int value;
-       } fill;
-      struct
-       {
-         /* Data to put into file.  The size field gives the number
-            of bytes which this field points to.  */
+         /* Size of contents, or zero when contents size == size
+            within output section.
+            A non-zero value allows filling of the output section
+            with an arbitrary repeated pattern.  */
+         unsigned int size;
+         /* Data to put into file.  */
          bfd_byte *contents;
        } data;
       struct
@@ -472,7 +607,13 @@ struct bfd_elf_version_expr
   /* Next regular expression for this version.  */
   struct bfd_elf_version_expr *next;
   /* Regular expression.  */
-  const char *match;
+  const char *pattern;
+  /* Matching function.  */
+  int (*match) PARAMS((struct bfd_elf_version_expr *, const char *));
+  /* Defined by ".symver".  */
+  unsigned int symver: 1;
+  /* Defined by version script.  */
+  unsigned int script : 1;
 };
 
 /* Version dependencies.  */
This page took 0.049417 seconds and 4 git commands to generate.