* elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Improve
[deliverable/binutils-gdb.git] / bfd / elf-bfd.h
index 18cf8cbfa60c63d9aec3a73f2b564b5761c41a57..f15353ce2d6cec7f2c0df43c7e397cfc9fc9b7bf 100644 (file)
@@ -1,6 +1,6 @@
 /* BFD back-end data structures for ELF files.
    Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-   2002 Free Software Foundation, Inc.
+   2002, 2003 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -80,6 +80,8 @@ typedef struct
 } elf_symbol_type;
 \f
 struct elf_strtab_hash;
+struct got_entry;
+struct plt_entry;
 
 /* ELF linker hash table entries.  */
 
@@ -139,30 +141,30 @@ struct elf_link_hash_entry
      and track a size while the symbol is still undefined.  It is indexed
      via offset/sizeof(target_void_pointer).  */
   size_t vtable_entries_size;
-  boolean *vtable_entries_used;
+  bfd_boolean *vtable_entries_used;
 
   /* Virtual table derivation info.  */
   struct elf_link_hash_entry *vtable_parent;
 
   /* If this symbol requires an entry in the global offset table, the
      processor specific backend uses this field to track usage and
-     final offset.  We use a union and two names primarily to document
-     the intent of any particular piece of code.  The field should be
-     used as a count until size_dynamic_sections, at which point the
-     contents of the .got is fixed.  Afterward, if this field is -1,
-     then the symbol does not require a global offset table entry.  */
-  union
+     final offset.  Two schemes are supported:  The first assumes that
+     a symbol may only have one GOT entry, and uses REFCOUNT until
+     size_dynamic_sections, at which point the contents of the .got is
+     fixed.  Afterward, if OFFSET is -1, then the symbol does not
+     require a global offset table entry.  The second scheme allows
+     multiple GOT entries per symbol, managed via a linked list
+     pointed to by GLIST.  */
+  union gotplt_union
     {
       bfd_signed_vma refcount;
       bfd_vma offset;
+      struct got_entry *glist;
+      struct plt_entry *plist;
     } got;
 
   /* Same, but tracks a procedure linkage table entry.  */
-  union
-    {
-      bfd_signed_vma refcount;
-      bfd_vma offset;
-    } plt;
+  union gotplt_union plt;
 
   /* Symbol size.  */
   bfd_size_type size;
@@ -202,6 +204,10 @@ struct elf_link_hash_entry
   /* Symbol is referenced by a non-GOT/non-PLT relocation.  This is
      not currently set by all the backends.  */
 #define ELF_LINK_NON_GOT_REF 010000
+  /* Symbol has a definition in a shared object.  */
+#define ELF_LINK_DYNAMIC_DEF 020000
+  /* Symbol is weak in all shared objects.  */
+#define ELF_LINK_DYNAMIC_WEAK 040000
 };
 
 /* Records local symbols to be emitted in the dynamic symbol table.  */
@@ -229,16 +235,6 @@ struct elf_link_loaded_list
   bfd *abfd;
 };
 
-enum elf_link_info_type
-{
-  ELF_INFO_TYPE_NONE,
-  ELF_INFO_TYPE_STABS,
-  ELF_INFO_TYPE_MERGE,
-  ELF_INFO_TYPE_EH_FRAME,
-  ELF_INFO_TYPE_JUST_SYMS,
-  ELF_INFO_TYPE_LAST
-};
-
 /* Structures used by the eh_frame optimization code.  */
 struct cie_header
 {
@@ -305,7 +301,7 @@ struct eh_frame_hdr_info
   /* TRUE if .eh_frame_hdr should contain the sorted search table.
      We build it if we successfully read all .eh_frame input sections
      and recognize them.  */
-  boolean table;
+  bfd_boolean table;
 };
 
 /* Cached start, size and alignment of PT_TLS segment.  */
@@ -324,7 +320,7 @@ struct elf_link_hash_table
 
   /* Whether we have created the special dynamic sections required
      when linking against or generating a shared object.  */
-  boolean dynamic_sections_created;
+  bfd_boolean dynamic_sections_created;
 
   /* The BFD used to hold special sections created by the linker.
      This will be the first BFD found which requires these sections to
@@ -333,9 +329,13 @@ struct elf_link_hash_table
 
   /* The value to use when initialising got.refcount/offset and
      plt.refcount/offset in an elf_link_hash_entry.  Set to zero when
-     the values are refcounts.  Set to -1 in size_dynamic_sections
-     when the values may be offsets.  */
-  bfd_signed_vma init_refcount;
+     the values are refcounts.  Set to init_offset in
+     size_dynamic_sections when the values may be offsets.  */
+  union gotplt_union init_refcount;
+
+  /* The value to use for got.refcount/offset and plt.refcount/offset
+     when the values may be offsets.  Normally (bfd_vma) -1.  */
+  union gotplt_union init_offset;
 
   /* The number of symbols found in the link which must be put into
      the .dynsym section.  */
@@ -391,14 +391,14 @@ struct elf_link_hash_table
 #define elf_link_hash_traverse(table, func, info)                      \
   (bfd_link_hash_traverse                                              \
    (&(table)->root,                                                    \
-    (boolean (*) PARAMS ((struct bfd_link_hash_entry *, PTR))) (func), \
+    (bfd_boolean (*) PARAMS ((struct bfd_link_hash_entry *, PTR))) (func), \
     (info)))
 
 /* Get the ELF linker hash table from a link_info structure.  */
 
 #define elf_hash_table(p) ((struct elf_link_hash_table *) ((p)->hash))
 
-/* Returns true if the hash table is a struct elf_link_hash_table.  */
+/* Returns TRUE if the hash table is a struct elf_link_hash_table.  */
 #define is_elf_hash_table(p)                                           \
   ((p)->hash->type == bfd_link_elf_hash_table)
 
@@ -432,7 +432,7 @@ struct elf_size_info {
   unsigned char elfclass, ev_current;
   int (*write_out_phdrs)
     PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
-  boolean (*write_shdrs_and_ehdr)
+  bfd_boolean (*write_shdrs_and_ehdr)
     PARAMS ((bfd *));
   void (*write_relocs)
     PARAMS ((bfd *, asection *, PTR));
@@ -440,10 +440,10 @@ struct elf_size_info {
     PARAMS ((bfd *, const PTR, const PTR, Elf_Internal_Sym *));
   void (*swap_symbol_out)
     PARAMS ((bfd *, const Elf_Internal_Sym *, PTR, PTR));
-  boolean (*slurp_reloc_table)
-    PARAMS ((bfd *, asection *, asymbol **, boolean));
+  bfd_boolean (*slurp_reloc_table)
+    PARAMS ((bfd *, asection *, asymbol **, bfd_boolean));
   long (*slurp_symbol_table)
-    PARAMS ((bfd *, asymbol **, boolean));
+    PARAMS ((bfd *, asymbol **, bfd_boolean));
   void (*swap_dyn_in)
     PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
   void (*swap_dyn_out)
@@ -491,7 +491,7 @@ struct elf_reloc_cookie
   size_t locsymcount;
   size_t extsymoff;
   struct elf_link_hash_entry **sym_hashes;
-  boolean bad_symtab;
+  bfd_boolean bad_symtab;
 };
 
 /* The level of IRIX compatibility we're striving for.  */
@@ -528,7 +528,7 @@ struct elf_backend_data
      This should be NULL for most targets, in which case the correct
      thing will be done.  MIPS ELF, at least on the Irix 5, has
      special requirements.  */
-  boolean (*elf_backend_sym_is_global)
+  bfd_boolean (*elf_backend_sym_is_global)
     PARAMS ((bfd *, asymbol *));
 
   /* The remaining functions are hooks which are called only if they
@@ -538,9 +538,9 @@ struct elf_backend_data
      particular BFD format is relevant for an object file, and to
      permit the backend to set any global information it wishes.  When
      this is called elf_elfheader is set, but anything else should be
-     used with caution.  If this returns false, the check_format
+     used with caution.  If this returns FALSE, the check_format
      routine will return a bfd_error_wrong_format error.  */
-  boolean (*elf_backend_object_p)
+  bfd_boolean (*elf_backend_object_p)
     PARAMS ((bfd *));
 
   /* A function to do additional symbol processing when reading the
@@ -551,7 +551,7 @@ struct elf_backend_data
 
   /* A function to do additional symbol processing after reading the
      entire ELF symbol table.  */
-  boolean (*elf_backend_symbol_table_processing)
+  bfd_boolean (*elf_backend_symbol_table_processing)
     PARAMS ((bfd *, elf_symbol_type *, unsigned int));
 
    /* A function to set the type of the info field.  Processor-specific
@@ -563,35 +563,35 @@ struct elf_backend_data
      just before writing it out.  This is used to set the flags and
      type fields for some sections, or to actually write out data for
      unusual sections.  */
-  boolean (*elf_backend_section_processing)
+  bfd_boolean (*elf_backend_section_processing)
     PARAMS ((bfd *, Elf_Internal_Shdr *));
 
   /* A function to handle unusual section types when creating BFD
      sections from ELF sections.  */
-  boolean (*elf_backend_section_from_shdr)
+  bfd_boolean (*elf_backend_section_from_shdr)
     PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
 
   /* A function to convert machine dependent section header flags to
      BFD internal section header flags.  */
-  boolean (*elf_backend_section_flags)
+  bfd_boolean (*elf_backend_section_flags)
     PARAMS ((flagword *, Elf_Internal_Shdr *));
 
   /* A function to handle unusual program segment types when creating BFD
      sections from ELF program segments.  */
-  boolean (*elf_backend_section_from_phdr)
+  bfd_boolean (*elf_backend_section_from_phdr)
     PARAMS ((bfd *, Elf_Internal_Phdr *, int));
 
   /* A function to set up the ELF section header for a BFD section in
      preparation for writing it out.  This is where the flags and type
      fields are set for unusual sections.  */
-  boolean (*elf_backend_fake_sections)
+  bfd_boolean (*elf_backend_fake_sections)
     PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
 
   /* A function to get the ELF section index for a BFD section.  If
-     this returns true, the section was found.  If it is a normal ELF
+     this returns TRUE, the section was found.  If it is a normal ELF
      section, *RETVAL should be left unchanged.  If it is not a normal
      ELF section *RETVAL should be set to the SHN_xxxx index.  */
-  boolean (*elf_backend_section_from_bfd_section)
+  bfd_boolean (*elf_backend_section_from_bfd_section)
     PARAMS ((bfd *, asection *, int *retval));
 
   /* If this field is not NULL, it is called by the add_symbols phase
@@ -602,14 +602,14 @@ struct elf_backend_data
      handling all processor dependent symbol bindings and section
      indices, and must set at least *FLAGS and *SEC for each processor
      dependent case; failure to do so will cause a link error.  */
-  boolean (*elf_add_symbol_hook)
+  bfd_boolean (*elf_add_symbol_hook)
     PARAMS ((bfd *abfd, struct bfd_link_info *info,
             const Elf_Internal_Sym *, const char **name,
             flagword *flags, asection **sec, bfd_vma *value));
 
   /* If this field is not NULL, it is called by the elf_link_output_sym
      phase of a link for each symbol which will appear in the object file.  */
-  boolean (*elf_backend_link_output_symbol_hook)
+  bfd_boolean (*elf_backend_link_output_symbol_hook)
     PARAMS ((bfd *, struct bfd_link_info *info, const char *,
             Elf_Internal_Sym *, asection *));
 
@@ -621,7 +621,7 @@ struct elf_backend_data
      created, and this function may modify the section flags if
      desired.  This function will normally create the .got and .plt
      sections, but different backends have different requirements.  */
-  boolean (*elf_backend_create_dynamic_sections)
+  bfd_boolean (*elf_backend_create_dynamic_sections)
     PARAMS ((bfd *abfd, struct bfd_link_info *info));
 
   /* The CHECK_RELOCS function is called by the add_symbols phase of
@@ -634,7 +634,7 @@ struct elf_backend_data
      relocs are always passed as Rela structures; if the section
      actually uses Rel structures, the r_addend field will always be
      zero.  */
-  boolean (*check_relocs)
+  bfd_boolean (*check_relocs)
     PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
             const Elf_Internal_Rela *relocs));
 
@@ -650,14 +650,14 @@ struct elf_backend_data
      the link can deal with.  This will normally involve adding an
      entry to the .plt or .got or some such section, and setting the
      symbol to point to that.  */
-  boolean (*elf_backend_adjust_dynamic_symbol)
+  bfd_boolean (*elf_backend_adjust_dynamic_symbol)
     PARAMS ((struct bfd_link_info *info, struct elf_link_hash_entry *h));
 
   /* The ALWAYS_SIZE_SECTIONS function is called by the backend linker
      after all the linker input files have been seen but before the
      section sizes have been set.  This is called after
      ADJUST_DYNAMIC_SYMBOL, but before SIZE_DYNAMIC_SECTIONS.  */
-  boolean (*elf_backend_always_size_sections)
+  bfd_boolean (*elf_backend_always_size_sections)
     PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
 
   /* The SIZE_DYNAMIC_SECTIONS function is called by the ELF backend
@@ -670,7 +670,7 @@ struct elf_backend_data
      .dynstr and .hash sections.  This function must handle the
      .interp section and any sections created by the
      CREATE_DYNAMIC_SECTIONS entry point.  */
-  boolean (*elf_backend_size_dynamic_sections)
+  bfd_boolean (*elf_backend_size_dynamic_sections)
     PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
 
   /* The RELOCATE_SECTION function is called by the ELF backend linker
@@ -701,7 +701,7 @@ struct elf_backend_data
      going to be the section symbol corresponding to the output
      section, which means that the addend must be adjusted
      accordingly.  */
-  boolean (*elf_backend_relocate_section)
+  bfd_boolean (*elf_backend_relocate_section)
     PARAMS ((bfd *output_bfd, struct bfd_link_info *info,
             bfd *input_bfd, asection *input_section, bfd_byte *contents,
             Elf_Internal_Rela *relocs, Elf_Internal_Sym *local_syms,
@@ -714,7 +714,7 @@ struct elf_backend_data
      dynamic sections.  Note that FINISH_DYNAMIC_SYMBOL is called on
      all .dynsym symbols, while ADJUST_DYNAMIC_SYMBOL is only called
      on those symbols which are defined by a dynamic object.  */
-  boolean (*elf_backend_finish_dynamic_symbol)
+  bfd_boolean (*elf_backend_finish_dynamic_symbol)
     PARAMS ((bfd *output_bfd, struct bfd_link_info *info,
             struct elf_link_hash_entry *h, Elf_Internal_Sym *sym));
 
@@ -722,7 +722,7 @@ struct elf_backend_data
      linker just before it writes all the dynamic sections out to the
      output file.  The FINISH_DYNAMIC_SYMBOL will have been called on
      all dynamic symbols.  */
-  boolean (*elf_backend_finish_dynamic_sections)
+  bfd_boolean (*elf_backend_finish_dynamic_sections)
     PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
 
   /* A function to do any beginning processing needed for the ELF file
@@ -731,10 +731,10 @@ struct elf_backend_data
     PARAMS ((bfd *, struct bfd_link_info *));
 
   /* A function to do any final processing needed for the ELF file
-     before writing it out.  The LINKER argument is true if this BFD
+     before writing it out.  The LINKER argument is TRUE if this BFD
      was created by the ELF backend linker.  */
   void (*elf_backend_final_write_processing)
-    PARAMS ((bfd *, boolean linker));
+    PARAMS ((bfd *, bfd_boolean linker));
 
   /* This function is called by get_program_header_size.  It should
      return the number of additional program segments which this BFD
@@ -744,7 +744,7 @@ struct elf_backend_data
 
   /* This function is called to modify an existing segment map in a
      backend specific fashion.  */
-  boolean (*elf_backend_modify_segment_map)
+  bfd_boolean (*elf_backend_modify_segment_map)
     PARAMS ((bfd *));
 
   /* This function is called during section gc to discover the section a
@@ -756,7 +756,7 @@ struct elf_backend_data
   /* This function, if defined, is called during the sweep phase of gc
      in order that a backend might update any data structures it might
      be maintaining.  */
-  boolean (*gc_sweep_hook)
+  bfd_boolean (*gc_sweep_hook)
     PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
             const Elf_Internal_Rela *relocs));
 
@@ -776,9 +776,9 @@ struct elf_backend_data
      global symbols converted to locals are emited into the symtab
      section.  It allows the backend to emit special global symbols
      not handled in the hash table.  */
-  boolean (*elf_backend_output_arch_syms)
+  bfd_boolean (*elf_backend_output_arch_syms)
     PARAMS ((bfd *, struct bfd_link_info *, PTR,
-           boolean (*) (PTR, const char *, Elf_Internal_Sym *, asection *)));
+           bfd_boolean (*) (PTR, const char *, Elf_Internal_Sym *, asection *)));
 
   /* Copy any information related to dynamic linking from a pre-existing
      symbol to a newly created symbol.  Also called to copy flags and
@@ -792,11 +792,11 @@ struct elf_backend_data
   /* Modify any information related to dynamic linking such that the
      symbol is not exported.  */
   void (*elf_backend_hide_symbol)
-    PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, boolean));
+    PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean));
 
   /* Emit relocations.  Overrides default routine for emitting relocs,
      except during a relocatable link, or if all relocs are being emitted.  */
-  boolean (*elf_backend_emit_relocs)
+  bfd_boolean (*elf_backend_emit_relocs)
     PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *));
 
   /* Count relocations.  Not called for relocatable links
@@ -806,12 +806,12 @@ struct elf_backend_data
 
   /* This function, if defined, is called when an NT_PRSTATUS note is found
      in a core file. */
-  boolean (*elf_backend_grok_prstatus)
+  bfd_boolean (*elf_backend_grok_prstatus)
     PARAMS ((bfd *, Elf_Internal_Note *));
 
   /* This function, if defined, is called when an NT_PSINFO or NT_PRPSINFO
      note is found in a core file. */
-  boolean (*elf_backend_grok_psinfo)
+  bfd_boolean (*elf_backend_grok_psinfo)
     PARAMS ((bfd *, Elf_Internal_Note *));
 
   /* Functions to print VMAs.  Special code to handle 64 bit ELF files.  */
@@ -826,17 +826,17 @@ struct elf_backend_data
 
   /* This function, if defined, removes information about discarded functions
      from other sections which mention them.  */
-  boolean (*elf_backend_discard_info)
+  bfd_boolean (*elf_backend_discard_info)
     PARAMS ((bfd *, struct elf_reloc_cookie *, struct bfd_link_info *));
 
   /* This function, if defined, signals that the function above has removed
      the discarded relocations for this section.  */
-  boolean (*elf_backend_ignore_discarded_relocs)
+  bfd_boolean (*elf_backend_ignore_discarded_relocs)
     PARAMS ((asection *));
 
   /* This function, if defined, may write out the given section.
-     Returns true if it did so and false if the caller should.  */
-  boolean (*elf_backend_write_section)
+     Returns TRUE if it did so and FALSE if the caller should.  */
+  bfd_boolean (*elf_backend_write_section)
     PARAMS ((bfd *, asection *, bfd_byte *));
 
   /* The level of IRIX compatibility we're striving for.
@@ -845,7 +845,7 @@ struct elf_backend_data
     PARAMS ((bfd *));
 
   reloc_howto_type *(*elf_backend_mips_rtype_to_howto)
-    PARAMS ((unsigned int, boolean));
+    PARAMS ((unsigned int, bfd_boolean));
 
   /* The swapping table to use when dealing with ECOFF information.
      Used for the MIPS ELF .mdebug section.  */
@@ -866,14 +866,14 @@ struct elf_backend_data
   bfd_vma got_header_size;
   bfd_vma plt_header_size;
 
-  /* This is true if the linker should act like collect and gather
-     global constructors and destructors by name.  This is true for
+  /* This is TRUE if the linker should act like collect and gather
+     global constructors and destructors by name.  This is TRUE for
      MIPS ELF because the Irix 5 tools can not handle the .init
      section.  */
   unsigned collect : 1;
 
-  /* This is true if the linker should ignore changes to the type of a
-     symbol.  This is true for MIPS ELF because some Irix 5 objects
+  /* This is TRUE if the linker should ignore changes to the type of a
+     symbol.  This is TRUE for MIPS ELF because some Irix 5 objects
      record undefined functions as STT_OBJECT although the definitions
      are STT_FUNC.  */
   unsigned type_change_ok : 1;
@@ -900,7 +900,7 @@ struct elf_backend_data
      backend relocate_section routine for relocatable linking.  */
   unsigned rela_normal : 1;
 
-  /* True if addresses "naturally" sign extend.  This is used when
+  /* TRUE if addresses "naturally" sign extend.  This is used when
      swapping in from Elf32 when BFD64.  */
   unsigned sign_extend_vma : 1;
 
@@ -941,13 +941,6 @@ struct bfd_elf_section_data
   /* The number of relocations currently assigned to REL_HDR2.  */
   unsigned int rel_count2;
 
-  /* A pointer to a linked list tracking dynamic relocs copied for
-     local symbols.  */
-  PTR local_dynrel;
-
-  /* A pointer to the bfd section used for dynamic relocs.  */
-  asection *sreloc;
-
   /* The ELF section number of this section.  Only used for an output
      file.  */
   int this_idx;
@@ -960,6 +953,12 @@ struct bfd_elf_section_data
      REL_HDR2 if any.  Only used for an output file.  */
   int rel_idx2;
 
+  /* Used by the backend linker when generating a shared library to
+     record the dynamic symbol index for a section symbol
+     corresponding to this section.  A value of 0 means that there is
+     no dynamic symbol for this section.  */
+  int dynindx;
+
   /* Used by the backend linker to store the symbol hash table entries
      associated with relocs against global symbols.  */
   struct elf_link_hash_entry **rel_hashes;
@@ -969,17 +968,12 @@ struct bfd_elf_section_data
      pointer may be NULL.  It is used by the backend linker.  */
   Elf_Internal_Rela *relocs;
 
-  /* Used by the backend linker when generating a shared library to
-     record the dynamic symbol index for a section symbol
-     corresponding to this section.  A value of 0 means that there is
-     no dynamic symbol for this section.  */
-  long dynindx;
-
-  /* A pointer used for various section optimizations.  */
-  PTR sec_info;
+  /* A pointer to a linked list tracking dynamic relocs copied for
+     local symbols.  */
+  PTR local_dynrel;
 
-  /* Type of that information.  */
-  enum elf_link_info_type sec_info_type;
+  /* A pointer to the bfd section used for dynamic relocs.  */
+  asection *sreloc;
 
   union {
     /* Group name, if this section is a member of a group.  */
@@ -993,28 +987,21 @@ struct bfd_elf_section_data
      the linker.  */
   asection *next_in_group;
 
-  /* A pointer available for the processor specific ELF backend.  */
-  PTR tdata;
-
-  /* Nonzero if this section uses RELA relocations, rather than REL.  */
-  unsigned int use_rela_p:1;
-
-  /* Nonzero when a group is COMDAT.  */
-  unsigned int linkonce_p:1;
+  /* A pointer used for various section optimizations.  */
+  PTR sec_info;
 };
 
 #define elf_section_data(sec)  ((struct bfd_elf_section_data*)sec->used_by_bfd)
 #define elf_group_name(sec)    (elf_section_data(sec)->group.name)
 #define elf_group_id(sec)      (elf_section_data(sec)->group.id)
 #define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group)
-#define elf_linkonce_p(sec)    (elf_section_data(sec)->linkonce_p)
 
-/* Return true if section has been discarded.  */
-#define elf_discarded_section(sec)                                     \
-  (!bfd_is_abs_section(sec)                                            \
-   && bfd_is_abs_section((sec)->output_section)                                \
-   && elf_section_data (sec)->sec_info_type != ELF_INFO_TYPE_MERGE     \
-   && elf_section_data (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
+/* Return TRUE if section has been discarded.  */
+#define elf_discarded_section(sec)                             \
+  (!bfd_is_abs_section (sec)                                   \
+   && bfd_is_abs_section ((sec)->output_section)               \
+   && sec->sec_info_type != ELF_INFO_TYPE_MERGE                        \
+   && sec->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
 
 #define get_elf_backend_data(abfd) \
   ((struct elf_backend_data *) (abfd)->xvec->backend_data)
@@ -1048,7 +1035,7 @@ typedef struct elf_linker_section
   bfd_vma hole_offset;                 /* current offset for the hole */
   bfd_vma max_hole_offset;             /* maximum offset for the hole */
   elf_linker_section_enum_t which;     /* which section this is */
-  boolean hole_written_p;              /* whether the hole has been initialized */
+  bfd_boolean hole_written_p;          /* whether the hole has been initialized */
   unsigned int alignment;              /* alignment for the section */
   flagword flags;                      /* flags to use to create the section */
 } elf_linker_section_t;
@@ -1062,7 +1049,7 @@ typedef struct elf_linker_section_pointers
   bfd_vma offset;                              /* offset of pointer from beginning of section */
   bfd_vma addend;                              /* addend used */
   elf_linker_section_enum_t which;             /* which linker section this is */
-  boolean written_address_p;                   /* whether address was written yet */
+  bfd_boolean written_address_p;               /* whether address was written yet */
 } elf_linker_section_pointers_t;
 
 /* Some private data is stashed away for future use using the tdata pointer
@@ -1113,26 +1100,23 @@ struct elf_obj_tdata
   char* core_program;
   char* core_command;
 
-  /* This is set to true if the object was created by the backend
+  /* This is set to TRUE if the object was created by the backend
      linker.  */
-  boolean linker;
+  bfd_boolean linker;
 
   /* A mapping from external symbols to entries in the linker hash
      table, used when linking.  This is indexed by the symbol index
      minus the sh_info field of the symbol table header.  */
   struct elf_link_hash_entry **sym_hashes;
 
-  /* A mapping from local symbols to offsets into the global offset
-     table, used when linking.  This is indexed by the symbol index.
-     Like for the globals, we use a union and two names primarily to
-     document the intent of any particular piece of code.  The field
-     should be used as a count until size_dynamic_sections, at which
-     point the contents of the .got is fixed.  Afterward, if an entry
-     is -1, then the symbol does not require a global offset table entry.  */
+  /* Track usage and final offsets of GOT entries for local symbols.
+     This array is indexed by symbol index.  Elements are used
+     identically to "got" in struct elf_link_hash_entry.  */
   union
     {
       bfd_signed_vma *refcounts;
       bfd_vma *offsets;
+      struct got_entry **ents;
     } local_got;
 
   /* A mapping from local symbols to offsets into the various linker
@@ -1162,7 +1146,7 @@ struct elf_obj_tdata
      this BFD appears to be screwed up.  If it is, we ignore the
      sh_info field in the symbol table header, and always read all the
      symbols.  */
-  boolean bad_symtab;
+  bfd_boolean bad_symtab;
 
   /* Records the result of `get_program_header_size'.  */
   bfd_size_type program_header_size;
@@ -1192,7 +1176,7 @@ struct elf_obj_tdata
   asection *eh_frame_hdr;
 
   /* Used to determine if the e_flags field has been initialized */
-  boolean flags_init;
+  bfd_boolean flags_init;
 
   /* Number of symbol version definitions we are about to emit.  */
   unsigned int cverdefs;
@@ -1239,6 +1223,7 @@ struct elf_obj_tdata
 #define elf_sym_hashes(bfd)    (elf_tdata(bfd) -> sym_hashes)
 #define elf_local_got_refcounts(bfd) (elf_tdata(bfd) -> local_got.refcounts)
 #define elf_local_got_offsets(bfd) (elf_tdata(bfd) -> local_got.offsets)
+#define elf_local_got_ents(bfd) (elf_tdata(bfd) -> local_got.ents)
 #define elf_local_ptr_offsets(bfd) (elf_tdata(bfd) -> linker_section_pointers)
 #define elf_dt_name(bfd)       (elf_tdata(bfd) -> dt_name)
 #define elf_dt_soname(bfd)     (elf_tdata(bfd) -> dt_soname)
@@ -1276,10 +1261,12 @@ extern char *bfd_elf_get_str_section
 extern Elf_Internal_Sym *bfd_elf_get_elf_syms
   PARAMS ((bfd *, Elf_Internal_Shdr *, size_t, size_t,
           Elf_Internal_Sym *, PTR, Elf_External_Sym_Shndx *));
+extern const char *bfd_elf_local_sym_name
+  PARAMS ((bfd *, Elf_Internal_Sym *));
 
-extern boolean _bfd_elf_copy_private_bfd_data
+extern bfd_boolean _bfd_elf_copy_private_bfd_data
   PARAMS ((bfd *, bfd *));
-extern boolean _bfd_elf_print_private_bfd_data
+extern bfd_boolean _bfd_elf_print_private_bfd_data
   PARAMS ((bfd *, PTR));
 extern void bfd_elf_print_symbol
   PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
@@ -1310,15 +1297,15 @@ extern unsigned long bfd_elf_hash
 
 extern bfd_reloc_status_type bfd_elf_generic_reloc
   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-extern boolean bfd_elf_mkobject
+extern bfd_boolean bfd_elf_mkobject
   PARAMS ((bfd *));
-extern boolean bfd_elf_mkcorefile
+extern bfd_boolean bfd_elf_mkcorefile
   PARAMS ((bfd *));
 extern Elf_Internal_Shdr *bfd_elf_find_section
   PARAMS ((bfd *, char *));
-extern boolean _bfd_elf_make_section_from_shdr
+extern bfd_boolean _bfd_elf_make_section_from_shdr
   PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
-extern boolean _bfd_elf_make_section_from_phdr
+extern bfd_boolean _bfd_elf_make_section_from_phdr
   PARAMS ((bfd *, Elf_Internal_Phdr *, int, const char *));
 extern struct bfd_hash_entry *_bfd_elf_link_hash_newfunc
   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
@@ -1328,31 +1315,31 @@ extern void _bfd_elf_link_hash_copy_indirect
   PARAMS ((struct elf_backend_data *, struct elf_link_hash_entry *,
           struct elf_link_hash_entry *));
 extern void _bfd_elf_link_hash_hide_symbol
-  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, boolean));
-extern boolean _bfd_elf_link_hash_table_init
+  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean));
+extern bfd_boolean _bfd_elf_link_hash_table_init
   PARAMS ((struct elf_link_hash_table *, bfd *,
           struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
                                       struct bfd_hash_table *,
                                       const char *)));
-extern boolean _bfd_elf_slurp_version_tables
+extern bfd_boolean _bfd_elf_slurp_version_tables
   PARAMS ((bfd *));
-extern boolean _bfd_elf_merge_sections
+extern bfd_boolean _bfd_elf_merge_sections
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean bfd_elf_discard_group
+extern bfd_boolean bfd_elf_discard_group
   PARAMS ((bfd *, struct sec *));
 extern void bfd_elf_set_group_contents
   PARAMS ((bfd *, asection *, PTR));
 extern void _bfd_elf_link_just_syms
   PARAMS ((asection *, struct bfd_link_info *));
-extern boolean _bfd_elf_copy_private_symbol_data
+extern bfd_boolean _bfd_elf_copy_private_symbol_data
   PARAMS ((bfd *, asymbol *, bfd *, asymbol *));
-extern boolean _bfd_elf_copy_private_section_data
+extern bfd_boolean _bfd_elf_copy_private_section_data
   PARAMS ((bfd *, asection *, bfd *, asection *));
-extern boolean _bfd_elf_write_object_contents
+extern bfd_boolean _bfd_elf_write_object_contents
   PARAMS ((bfd *));
-extern boolean _bfd_elf_write_corefile_contents
+extern bfd_boolean _bfd_elf_write_corefile_contents
   PARAMS ((bfd *));
-extern boolean _bfd_elf_set_section_contents
+extern bfd_boolean _bfd_elf_set_section_contents
   PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type));
 extern long _bfd_elf_get_symtab_upper_bound
   PARAMS ((bfd *));
@@ -1374,31 +1361,31 @@ extern asymbol *_bfd_elf_make_empty_symbol
   PARAMS ((bfd *));
 extern void _bfd_elf_get_symbol_info
   PARAMS ((bfd *, asymbol *, symbol_info *));
-extern boolean _bfd_elf_is_local_label_name
+extern bfd_boolean _bfd_elf_is_local_label_name
   PARAMS ((bfd *, const char *));
 extern alent *_bfd_elf_get_lineno
   PARAMS ((bfd *, asymbol *));
-extern boolean _bfd_elf_set_arch_mach
+extern bfd_boolean _bfd_elf_set_arch_mach
   PARAMS ((bfd *, enum bfd_architecture, unsigned long));
-extern boolean _bfd_elf_find_nearest_line
+extern bfd_boolean _bfd_elf_find_nearest_line
   PARAMS ((bfd *, asection *, asymbol **, bfd_vma, const char **,
           const char **, unsigned int *));
 #define _bfd_elf_read_minisymbols _bfd_generic_read_minisymbols
 #define _bfd_elf_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
 extern int _bfd_elf_sizeof_headers
-  PARAMS ((bfd *, boolean));
-extern boolean _bfd_elf_new_section_hook
+  PARAMS ((bfd *, bfd_boolean));
+extern bfd_boolean _bfd_elf_new_section_hook
   PARAMS ((bfd *, asection *));
-extern boolean _bfd_elf_init_reloc_shdr
-  PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, boolean));
+extern bfd_boolean _bfd_elf_init_reloc_shdr
+  PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, bfd_boolean));
 
 /* If the target doesn't have reloc handling written yet:  */
 extern void _bfd_elf_no_info_to_howto
   PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
 
-extern boolean bfd_section_from_shdr
+extern bfd_boolean bfd_section_from_shdr
   PARAMS ((bfd *, unsigned int shindex));
-extern boolean bfd_section_from_phdr
+extern bfd_boolean bfd_section_from_phdr
   PARAMS ((bfd *, Elf_Internal_Phdr *, int));
 
 extern int _bfd_elf_symbol_from_bfd_symbol
@@ -1408,7 +1395,7 @@ extern asection *bfd_section_from_r_symndx
   PARAMS ((bfd *, struct sym_sec_cache *, asection *, unsigned long));
 extern asection *bfd_section_from_elf_index
   PARAMS ((bfd *, unsigned int));
-extern boolean _bfd_elf_create_dynamic_sections
+extern bfd_boolean _bfd_elf_create_dynamic_sections
   PARAMS ((bfd *, struct bfd_link_info *));
 extern struct bfd_strtab_hash *_bfd_elf_stringtab_init
   PARAMS ((void));
@@ -1418,7 +1405,7 @@ extern struct elf_strtab_hash * _bfd_elf_strtab_init
 extern void _bfd_elf_strtab_free
   PARAMS ((struct elf_strtab_hash *));
 extern bfd_size_type _bfd_elf_strtab_add
-  PARAMS ((struct elf_strtab_hash *, const char *, boolean));
+  PARAMS ((struct elf_strtab_hash *, const char *, bfd_boolean));
 extern void _bfd_elf_strtab_addref
   PARAMS ((struct elf_strtab_hash *, bfd_size_type));
 extern void _bfd_elf_strtab_delref
@@ -1429,47 +1416,47 @@ extern bfd_size_type _bfd_elf_strtab_size
   PARAMS ((struct elf_strtab_hash *));
 extern bfd_size_type _bfd_elf_strtab_offset
   PARAMS ((struct elf_strtab_hash *, bfd_size_type));
-extern boolean _bfd_elf_strtab_emit
+extern bfd_boolean _bfd_elf_strtab_emit
   PARAMS ((bfd *, struct elf_strtab_hash *));
 extern void _bfd_elf_strtab_finalize
   PARAMS ((struct elf_strtab_hash *));
 
-extern boolean _bfd_elf_discard_section_eh_frame
+extern bfd_boolean _bfd_elf_discard_section_eh_frame
   PARAMS ((bfd *, struct bfd_link_info *, asection *,
-          boolean (*) (bfd_vma, PTR), struct elf_reloc_cookie *));
-extern boolean _bfd_elf_discard_section_eh_frame_hdr
+          bfd_boolean (*) (bfd_vma, PTR), struct elf_reloc_cookie *));
+extern bfd_boolean _bfd_elf_discard_section_eh_frame_hdr
   PARAMS ((bfd *, struct bfd_link_info *));
 extern bfd_vma _bfd_elf_eh_frame_section_offset
   PARAMS ((bfd *, asection *, bfd_vma));
-extern boolean _bfd_elf_write_section_eh_frame
+extern bfd_boolean _bfd_elf_write_section_eh_frame
   PARAMS ((bfd *, struct bfd_link_info *, asection *, bfd_byte *));
-extern boolean _bfd_elf_write_section_eh_frame_hdr
+extern bfd_boolean _bfd_elf_write_section_eh_frame_hdr
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf_maybe_strip_eh_frame_hdr
+extern bfd_boolean _bfd_elf_maybe_strip_eh_frame_hdr
   PARAMS ((struct bfd_link_info *));
 
-extern boolean _bfd_elf_link_record_dynamic_symbol
+extern bfd_boolean _bfd_elf_link_record_dynamic_symbol
   PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
 extern long _bfd_elf_link_lookup_local_dynindx
   PARAMS ((struct bfd_link_info *, bfd *, long));
-extern boolean _bfd_elf_compute_section_file_positions
+extern bfd_boolean _bfd_elf_compute_section_file_positions
   PARAMS ((bfd *, struct bfd_link_info *));
 extern void _bfd_elf_assign_file_positions_for_relocs
   PARAMS ((bfd *));
 extern file_ptr _bfd_elf_assign_file_position_for_section
-  PARAMS ((Elf_Internal_Shdr *, file_ptr, boolean));
+  PARAMS ((Elf_Internal_Shdr *, file_ptr, bfd_boolean));
 
-extern boolean _bfd_elf_validate_reloc
+extern bfd_boolean _bfd_elf_validate_reloc
   PARAMS ((bfd *, arelent *));
 
-extern boolean _bfd_elf_create_dynamic_sections
+extern bfd_boolean _bfd_elf_create_dynamic_sections
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf_create_got_section
+extern bfd_boolean _bfd_elf_create_got_section
   PARAMS ((bfd *, struct bfd_link_info *));
 extern unsigned long _bfd_elf_link_renumber_dynsyms
   PARAMS ((bfd *, struct bfd_link_info *));
 
-extern boolean _bfd_elfcore_make_pseudosection
+extern bfd_boolean _bfd_elfcore_make_pseudosection
   PARAMS ((bfd *, char *, size_t, ufile_ptr));
 extern char *_bfd_elfcore_strndup
   PARAMS ((bfd *, char *, size_t));
@@ -1482,7 +1469,7 @@ extern elf_linker_section_pointers_t *_bfd_elf_find_pointer_linker_section
   PARAMS ((elf_linker_section_pointers_t *, bfd_vma,
           elf_linker_section_enum_t));
 
-extern boolean bfd_elf32_create_pointer_linker_section
+extern bfd_boolean bfd_elf32_create_pointer_linker_section
   PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
           struct elf_link_hash_entry *, const Elf_Internal_Rela *));
 
@@ -1491,7 +1478,7 @@ extern bfd_vma bfd_elf32_finish_pointer_linker_section
           struct elf_link_hash_entry *, bfd_vma,
           const Elf_Internal_Rela *, int));
 
-extern boolean bfd_elf64_create_pointer_linker_section
+extern bfd_boolean bfd_elf64_create_pointer_linker_section
   PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
           struct elf_link_hash_entry *, const Elf_Internal_Rela *));
 
@@ -1500,7 +1487,7 @@ extern bfd_vma bfd_elf64_finish_pointer_linker_section
           struct elf_link_hash_entry *, bfd_vma,
           const Elf_Internal_Rela *, int));
 
-extern boolean _bfd_elf_make_linker_section_rela
+extern bfd_boolean _bfd_elf_make_linker_section_rela
   PARAMS ((bfd *, elf_linker_section_t *, int));
 
 extern const bfd_target *bfd_elf32_object_p
@@ -1511,12 +1498,12 @@ extern char *bfd_elf32_core_file_failing_command
   PARAMS ((bfd *));
 extern int bfd_elf32_core_file_failing_signal
   PARAMS ((bfd *));
-extern boolean bfd_elf32_core_file_matches_executable_p
+extern bfd_boolean bfd_elf32_core_file_matches_executable_p
   PARAMS ((bfd *, bfd *));
 
-extern boolean bfd_elf32_bfd_link_add_symbols
+extern bfd_boolean bfd_elf32_bfd_link_add_symbols
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean bfd_elf32_bfd_final_link
+extern bfd_boolean bfd_elf32_bfd_final_link
   PARAMS ((bfd *, struct bfd_link_info *));
 
 extern void bfd_elf32_swap_symbol_in
@@ -1540,21 +1527,21 @@ extern void bfd_elf32_swap_dyn_in
 extern void bfd_elf32_swap_dyn_out
   PARAMS ((bfd *, const Elf_Internal_Dyn *, PTR));
 extern long bfd_elf32_slurp_symbol_table
-  PARAMS ((bfd *, asymbol **, boolean));
-extern boolean bfd_elf32_write_shdrs_and_ehdr
+  PARAMS ((bfd *, asymbol **, bfd_boolean));
+extern bfd_boolean bfd_elf32_write_shdrs_and_ehdr
   PARAMS ((bfd *));
 extern int bfd_elf32_write_out_phdrs
   PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
 extern void bfd_elf32_write_relocs
   PARAMS ((bfd *, asection *, PTR));
-extern boolean bfd_elf32_slurp_reloc_table
-  PARAMS ((bfd *, asection *, asymbol **, boolean));
-extern boolean bfd_elf32_add_dynamic_entry
+extern bfd_boolean bfd_elf32_slurp_reloc_table
+  PARAMS ((bfd *, asection *, asymbol **, bfd_boolean));
+extern bfd_boolean bfd_elf32_add_dynamic_entry
   PARAMS ((struct bfd_link_info *, bfd_vma, bfd_vma));
-extern boolean bfd_elf32_link_create_dynamic_sections
+extern bfd_boolean bfd_elf32_link_create_dynamic_sections
   PARAMS ((bfd *, struct bfd_link_info *));
 extern Elf_Internal_Rela *_bfd_elf32_link_read_relocs
-  PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
+  PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, bfd_boolean));
 
 extern const bfd_target *bfd_elf64_object_p
   PARAMS ((bfd *));
@@ -1564,11 +1551,11 @@ extern char *bfd_elf64_core_file_failing_command
   PARAMS ((bfd *));
 extern int bfd_elf64_core_file_failing_signal
   PARAMS ((bfd *));
-extern boolean bfd_elf64_core_file_matches_executable_p
+extern bfd_boolean bfd_elf64_core_file_matches_executable_p
   PARAMS ((bfd *, bfd *));
-extern boolean bfd_elf64_bfd_link_add_symbols
+extern bfd_boolean bfd_elf64_bfd_link_add_symbols
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean bfd_elf64_bfd_final_link
+extern bfd_boolean bfd_elf64_bfd_final_link
   PARAMS ((bfd *, struct bfd_link_info *));
 
 extern void bfd_elf64_swap_symbol_in
@@ -1592,21 +1579,21 @@ extern void bfd_elf64_swap_dyn_in
 extern void bfd_elf64_swap_dyn_out
   PARAMS ((bfd *, const Elf_Internal_Dyn *, PTR));
 extern long bfd_elf64_slurp_symbol_table
-  PARAMS ((bfd *, asymbol **, boolean));
-extern boolean bfd_elf64_write_shdrs_and_ehdr
+  PARAMS ((bfd *, asymbol **, bfd_boolean));
+extern bfd_boolean bfd_elf64_write_shdrs_and_ehdr
   PARAMS ((bfd *));
 extern int bfd_elf64_write_out_phdrs
   PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
 extern void bfd_elf64_write_relocs
   PARAMS ((bfd *, asection *, PTR));
-extern boolean bfd_elf64_slurp_reloc_table
-  PARAMS ((bfd *, asection *, asymbol **, boolean));
-extern boolean bfd_elf64_add_dynamic_entry
+extern bfd_boolean bfd_elf64_slurp_reloc_table
+  PARAMS ((bfd *, asection *, asymbol **, bfd_boolean));
+extern bfd_boolean bfd_elf64_add_dynamic_entry
   PARAMS ((struct bfd_link_info *, bfd_vma, bfd_vma));
-extern boolean bfd_elf64_link_create_dynamic_sections
+extern bfd_boolean bfd_elf64_link_create_dynamic_sections
   PARAMS ((bfd *, struct bfd_link_info *));
 extern Elf_Internal_Rela *_bfd_elf64_link_read_relocs
-  PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
+  PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, bfd_boolean));
 
 #define bfd_elf32_link_record_dynamic_symbol \
   _bfd_elf_link_record_dynamic_symbol
@@ -1620,37 +1607,37 @@ extern int elf_link_record_local_dynamic_symbol
 #define _bfd_elf64_link_record_local_dynamic_symbol \
   elf_link_record_local_dynamic_symbol
 
-extern boolean _bfd_elf_close_and_cleanup
+extern bfd_boolean _bfd_elf_close_and_cleanup
   PARAMS ((bfd *));
 extern bfd_reloc_status_type _bfd_elf_rel_vtable_reloc_fn
   PARAMS ((bfd *, arelent *, struct symbol_cache_entry *, PTR,
            asection *, bfd *, char **));
 
-extern boolean _bfd_elf32_gc_sections
+extern bfd_boolean _bfd_elf32_gc_sections
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf32_gc_common_finalize_got_offsets
+extern bfd_boolean _bfd_elf32_gc_common_finalize_got_offsets
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf32_gc_common_final_link
+extern bfd_boolean _bfd_elf32_gc_common_final_link
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf32_gc_record_vtinherit
+extern bfd_boolean _bfd_elf32_gc_record_vtinherit
   PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
-extern boolean _bfd_elf32_gc_record_vtentry
+extern bfd_boolean _bfd_elf32_gc_record_vtentry
   PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
 
-extern boolean _bfd_elf64_gc_sections
+extern bfd_boolean _bfd_elf64_gc_sections
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf64_gc_common_finalize_got_offsets
+extern bfd_boolean _bfd_elf64_gc_common_finalize_got_offsets
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf64_gc_common_final_link
+extern bfd_boolean _bfd_elf64_gc_common_final_link
   PARAMS ((bfd *, struct bfd_link_info *));
-extern boolean _bfd_elf64_gc_record_vtinherit
+extern bfd_boolean _bfd_elf64_gc_record_vtinherit
   PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
-extern boolean _bfd_elf64_gc_record_vtentry
+extern bfd_boolean _bfd_elf64_gc_record_vtentry
   PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
 
-extern boolean _bfd_elf32_reloc_symbol_deleted_p
+extern bfd_boolean _bfd_elf32_reloc_symbol_deleted_p
   PARAMS ((bfd_vma, PTR));
-extern boolean _bfd_elf64_reloc_symbol_deleted_p
+extern bfd_boolean _bfd_elf64_reloc_symbol_deleted_p
   PARAMS ((bfd_vma, PTR));
 
 /* Exported interface for writing elf corefile notes. */
@@ -1671,7 +1658,7 @@ extern char *elfcore_write_lwpstatus
 
 /* SH ELF specific routine.  */
 
-extern boolean _sh_elf_set_mach_from_flags
+extern bfd_boolean _sh_elf_set_mach_from_flags
   PARAMS ((bfd *));
 
 #endif /* _LIBELF_H_ */
This page took 0.061203 seconds and 4 git commands to generate.