* config/atof-ieee.c (gen_to_words): Correctly round a
[deliverable/binutils-gdb.git] / include / bfdlink.h
index 080988c5a68676e2f2f5fd90f12139f7850be5b4..a055fa082da962b7823142e2a37435f8c9a025cf 100644 (file)
@@ -1,5 +1,5 @@
 /* bfdlink.h -- header file for BFD link routines
-   Copyright 1993 Free Software Foundation, Inc.
+   Copyright 1993, 94, 95, 96, 97, 1999 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.
@@ -16,7 +16,7 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef BFDLINK_H
 #define BFDLINK_H
@@ -35,7 +35,7 @@ enum bfd_link_strip
 enum bfd_link_discard
 {
   discard_none,                /* Don't discard any locals.  */
-  discard_l,           /* Discard locals with a certain prefix.  */
+  discard_l,           /* Discard local temporary symbols.  */
   discard_all          /* Discard all locals.  */
 };
 \f
@@ -109,14 +109,19 @@ struct bfd_link_hash_entry
        {
          /* The linker needs to know three things about common
              symbols: the size, the alignment, and the section in
-             which the symbol should be placed.  On the assumption
-             that a single common symbol will not take up incredible
-             amounts of memory, we pack the size and the alignment
-             into the space of a single integer.  The alignment is
-             stored as a power of two.  */
-         unsigned int alignment_power : 6;     /* Alignment.  */
-         unsigned int size : 26;               /* Common symbol size.  */
-         asection *section;                    /* Symbol section.  */
+             which the symbol should be placed.  We store the size
+             here, and we allocate a small structure to hold the
+             section and the alignment.  The alignment is stored as a
+             power of two.  We don't store all the information
+             directly because we don't want to increase the size of
+             the union; this structure is a major space user in the
+             linker.  */
+         bfd_size_type size;   /* Common symbol size.  */
+         struct bfd_link_hash_common_entry
+           {
+             unsigned int alignment_power;     /* Alignment.  */
+             asection *section;                /* Symbol section.  */
+           } *p;
        } c;
     } u;
 };
@@ -147,6 +152,14 @@ extern struct bfd_link_hash_entry *bfd_link_hash_lookup
   PARAMS ((struct bfd_link_hash_table *, const char *, boolean create,
           boolean copy, boolean follow));
 
+/* Look up an entry in the main linker hash table if the symbol might
+   be wrapped.  This should only be used for references to an
+   undefined symbol, not for definitions of a symbol.  */
+
+extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
+  PARAMS ((bfd *, struct bfd_link_info *, const char *, boolean, boolean,
+          boolean));
+
 /* Traverse a link hash table.  */
 extern void bfd_link_hash_traverse
   PARAMS ((struct bfd_link_hash_table *,
@@ -166,15 +179,30 @@ struct bfd_link_info
   const struct bfd_link_callbacks *callbacks;
   /* true if BFD should generate a relocateable object file.  */
   boolean relocateable;
+  /* true if BFD should generate a "task linked" object file,
+     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 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;
   /* Which symbols to strip.  */
   enum bfd_link_strip strip;
   /* Which local symbols to discard.  */
   enum bfd_link_discard discard;
-  /* The local symbol prefix to discard if using discard_l.  */
-  unsigned int lprefix_len;
-  const char *lprefix;
   /* true if symbols should be retained in memory, false if they
      should be freed and reread.  */
   boolean keep_memory;
@@ -192,9 +220,23 @@ struct bfd_link_info
   /* Hash table of symbols to keep.  This is NULL unless strip is
      strip_some.  */
   struct bfd_hash_table *keep_hash;
-  /* Hash table of symbols to report back via notice_callback.  If
-     this is NULL no symbols are reported back.  */
+  /* 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;
 };
 
 /* This structures holds a set of callback functions.  These are
@@ -266,10 +308,17 @@ struct bfd_link_callbacks
                                  boolean constructor,
                                  const char *name, bfd *abfd, asection *sec,
                                  bfd_vma value));
-  /* A function which is called when there is a reference to a warning
-     symbol.  WARNING is the warning to be issued.  */
+  /* A function which is called to issue a linker warning.  For
+     example, this is called when there is a reference to a warning
+     symbol.  WARNING is the warning to be issued.  SYMBOL is the name
+     of the symbol which triggered the warning; it may be NULL if
+     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.  */
   boolean (*warning) PARAMS ((struct bfd_link_info *,
-                             const char *warning));
+                             const char *warning, const char *symbol,
+                             bfd *abfd, asection *section,
+                             bfd_vma address));
   /* 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
@@ -419,4 +468,53 @@ struct bfd_link_order_reloc
 /* Allocate a new link_order for a section.  */
 extern struct bfd_link_order *bfd_new_link_order PARAMS ((bfd *, asection *));
 
+/* 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
+   these structures, and then passes them into BFD.  */
+
+/* Regular expressions for a version.  */
+
+struct bfd_elf_version_expr
+{
+  /* Next regular expression for this version.  */
+  struct bfd_elf_version_expr *next;
+  /* Regular expression.  */
+  const char *pattern;
+  /* Matching function.  */
+  int (*match) PARAMS((struct bfd_elf_version_expr *, const char *));
+};
+
+/* Version dependencies.  */
+
+struct bfd_elf_version_deps
+{
+  /* Next dependency for this version.  */
+  struct bfd_elf_version_deps *next;
+  /* The version which this version depends upon.  */
+  struct bfd_elf_version_tree *version_needed;
+};
+
+/* A node in the version tree.  */
+
+struct bfd_elf_version_tree
+{
+  /* Next version.  */
+  struct bfd_elf_version_tree *next;
+  /* Name of this version.  */
+  const char *name;
+  /* Version number.  */
+  unsigned int vernum;
+  /* Regular expressions for global symbols in this version.  */
+  struct bfd_elf_version_expr *globals;
+  /* Regular expressions for local symbols in this version.  */
+  struct bfd_elf_version_expr *locals;
+  /* List of versions which this version depends upon.  */
+  struct bfd_elf_version_deps *deps;
+  /* Index of the version name.  This is used within BFD.  */
+  unsigned int name_indx;
+  /* Whether this version tree was used.  This is used within BFD.  */
+  int used;
+};
+
 #endif
This page took 0.025015 seconds and 4 git commands to generate.