Home | History | Annotate | Line # | Download | only in bfd
elf-bfd.h revision 1.9
      1 /* BFD back-end data structures for ELF files.
      2    Copyright (C) 1992-2020 Free Software Foundation, Inc.
      3    Written by Cygnus Support.
      4 
      5    This file is part of BFD, the Binary File Descriptor library.
      6 
      7    This program is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program; if not, write to the Free Software
     19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     20    MA 02110-1301, USA.  */
     21 
     22 #ifndef _LIBELF_H_
     23 #define _LIBELF_H_ 1
     24 
     25 #include "elf/common.h"
     26 #include "elf/external.h"
     27 #include "elf/internal.h"
     28 #include "bfdlink.h"
     29 
     30 #ifdef __cplusplus
     31 extern "C" {
     32 #endif
     33 
     34 /* The number of entries in a section is its size divided by the size
     35    of a single entry.  This is normally only applicable to reloc and
     36    symbol table sections.
     37    PR 9934: It is possible to have relocations that do not refer to
     38    symbols, thus it is also possible to have a relocation section in
     39    an object file, but no symbol table.  */
     40 #define NUM_SHDR_ENTRIES(shdr) ((shdr)->sh_entsize > 0 ? (shdr)->sh_size / (shdr)->sh_entsize : 0)
     41 
     42 /* If size isn't specified as 64 or 32, NAME macro should fail.  */
     43 #ifndef NAME
     44 #if ARCH_SIZE == 64
     45 #define NAME(x, y) x ## 64 ## _ ## y
     46 #endif
     47 #if ARCH_SIZE == 32
     48 #define NAME(x, y) x ## 32 ## _ ## y
     49 #endif
     50 #endif
     51 
     52 #ifndef NAME
     53 #define NAME(x, y) x ## NOSIZE ## _ ## y
     54 #endif
     55 
     56 #define ElfNAME(X)	NAME(Elf,X)
     57 #define elfNAME(X)	NAME(elf,X)
     58 
     59 /* Information held for an ELF symbol.  The first field is the
     60    corresponding asymbol.  Every symbol is an ELF file is actually a
     61    pointer to this structure, although it is often handled as a
     62    pointer to an asymbol.  */
     63 
     64 typedef struct
     65 {
     66   /* The BFD symbol.  */
     67   asymbol symbol;
     68   /* ELF symbol information.  */
     69   Elf_Internal_Sym internal_elf_sym;
     70   /* Backend specific information.  */
     71   union
     72     {
     73       unsigned int hppa_arg_reloc;
     74       void *mips_extr;
     75       void *any;
     76     }
     77   tc_data;
     78 
     79   /* Version information.  This is from an Elf_Internal_Versym
     80      structure in a SHT_GNU_versym section.  It is zero if there is no
     81      version information.  */
     82   unsigned short version;
     83 
     84 } elf_symbol_type;
     85 
     86 struct elf_strtab_hash;
     88 struct got_entry;
     89 struct plt_entry;
     90 
     91 union gotplt_union
     92   {
     93     bfd_signed_vma refcount;
     94     bfd_vma offset;
     95     struct got_entry *glist;
     96     struct plt_entry *plist;
     97   };
     98 
     99 struct elf_link_virtual_table_entry
    100   {
    101     /* Virtual table entry use information.  This array is nominally of size
    102        size/sizeof(target_void_pointer), though we have to be able to assume
    103        and track a size while the symbol is still undefined.  It is indexed
    104        via offset/sizeof(target_void_pointer).  */
    105     size_t size;
    106     bfd_boolean *used;
    107 
    108     /* Virtual table derivation info.  */
    109     struct elf_link_hash_entry *parent;
    110   };
    111 
    112 /* ELF symbol version.  */
    113 enum elf_symbol_version
    114   {
    115     unknown = 0,
    116     unversioned,
    117     versioned,
    118     versioned_hidden
    119   };
    120 
    121 /* ELF linker hash table entries.  */
    122 
    123 struct elf_link_hash_entry
    124 {
    125   struct bfd_link_hash_entry root;
    126 
    127   /* Symbol index in output file.  This is initialized to -1.  It is
    128      set to -2 if the symbol is used by a reloc.  It is set to -3 if
    129      this symbol is defined in a discarded section.  */
    130   long indx;
    131 
    132   /* Symbol index as a dynamic symbol.  Initialized to -1, and remains
    133      -1 if this is not a dynamic symbol.  */
    134   /* ??? Note that this is consistently used as a synonym for tests
    135      against whether we can perform various simplifying transformations
    136      to the code.  (E.g. changing a pc-relative jump to a PLT entry
    137      into a pc-relative jump to the target function.)  That test, which
    138      is often relatively complex, and someplaces wrong or incomplete,
    139      should really be replaced by a predicate in elflink.c.
    140 
    141      End result: this field -1 does not indicate that the symbol is
    142      not in the dynamic symbol table, but rather that the symbol is
    143      not visible outside this DSO.  */
    144   long dynindx;
    145 
    146   /* If this symbol requires an entry in the global offset table, the
    147      processor specific backend uses this field to track usage and
    148      final offset.  Two schemes are supported:  The first assumes that
    149      a symbol may only have one GOT entry, and uses REFCOUNT until
    150      size_dynamic_sections, at which point the contents of the .got is
    151      fixed.  Afterward, if OFFSET is -1, then the symbol does not
    152      require a global offset table entry.  The second scheme allows
    153      multiple GOT entries per symbol, managed via a linked list
    154      pointed to by GLIST.  */
    155   union gotplt_union got;
    156 
    157   /* Same, but tracks a procedure linkage table entry.  */
    158   union gotplt_union plt;
    159 
    160   /* Symbol size.  NB: All fields starting from here are cleared by
    161     _bfd_elf_link_hash_newfunc.  */
    162   bfd_size_type size;
    163 
    164   /* Track dynamic relocs copied for this symbol.  */
    165   struct elf_dyn_relocs *dyn_relocs;
    166 
    167   /* Symbol type (STT_NOTYPE, STT_OBJECT, etc.).  */
    168   unsigned int type : 8;
    169 
    170   /* Symbol st_other value, symbol visibility.  */
    171   unsigned int other : 8;
    172 
    173   /* The symbol's st_target_internal value (see Elf_Internal_Sym).  */
    174   unsigned int target_internal : 8;
    175 
    176   /* Symbol is referenced by a non-shared object (other than the object
    177      in which it is defined).  */
    178   unsigned int ref_regular : 1;
    179   /* Symbol is defined by a non-shared object.  */
    180   unsigned int def_regular : 1;
    181   /* Symbol is referenced by a shared object.  */
    182   unsigned int ref_dynamic : 1;
    183   /* Symbol is defined by a shared object.  */
    184   unsigned int def_dynamic : 1;
    185   /* Symbol has a non-weak reference from a non-shared object (other than
    186      the object in which it is defined).  */
    187   unsigned int ref_regular_nonweak : 1;
    188   /* Dynamic symbol has been adjustd.  */
    189   unsigned int dynamic_adjusted : 1;
    190   /* Symbol needs a copy reloc.  */
    191   unsigned int needs_copy : 1;
    192   /* Symbol needs a procedure linkage table entry.  */
    193   unsigned int needs_plt : 1;
    194   /* Symbol appears in a non-ELF input file.  */
    195   unsigned int non_elf : 1;
    196   /* Symbol version information.  */
    197   ENUM_BITFIELD (elf_symbol_version) versioned : 2;
    198   /* Symbol was forced to local scope due to a version script file.  */
    199   unsigned int forced_local : 1;
    200   /* Symbol was forced to be dynamic due to a version script file.  */
    201   unsigned int dynamic : 1;
    202   /* Symbol was marked during garbage collection.  */
    203   unsigned int mark : 1;
    204   /* Symbol is referenced by a non-GOT/non-PLT relocation.  This is
    205      not currently set by all the backends.  */
    206   unsigned int non_got_ref : 1;
    207   /* Symbol has a definition in a shared object.
    208      FIXME: There is no real need for this field if def_dynamic is never
    209      cleared and all places that test def_dynamic also test def_regular.  */
    210   unsigned int dynamic_def : 1;
    211   /* Symbol has a non-weak reference from a shared object.  */
    212   unsigned int ref_dynamic_nonweak : 1;
    213   /* Symbol is referenced with a relocation where C/C++ pointer equality
    214      matters.  */
    215   unsigned int pointer_equality_needed : 1;
    216   /* Symbol is a unique global symbol.  */
    217   unsigned int unique_global : 1;
    218   /* Symbol is defined by a shared library with non-default visibility
    219      in a read/write section.  */
    220   unsigned int protected_def : 1;
    221   /* Symbol is __start_SECNAME or __stop_SECNAME to mark section
    222      SECNAME.  */
    223   unsigned int start_stop : 1;
    224   /* Symbol is or was a weak defined symbol from a dynamic object with
    225      a strong defined symbol alias.  U.ALIAS points to a list of aliases,
    226      the definition having is_weakalias clear.  */
    227   unsigned int is_weakalias : 1;
    228 
    229   /* String table index in .dynstr if this is a dynamic symbol.  */
    230   unsigned long dynstr_index;
    231 
    232   union
    233   {
    234     /* Points to a circular list of non-function symbol aliases.  */
    235     struct elf_link_hash_entry *alias;
    236 
    237     /* Hash value of the name computed using the ELF hash function.
    238        Used part way through size_dynamic_sections, after we've finished
    239        with aliases.  */
    240     unsigned long elf_hash_value;
    241   } u;
    242 
    243   /* Version information.  */
    244   union
    245   {
    246     /* This field is used for a symbol which is not defined in a
    247        regular object.  It points to the version information read in
    248        from the dynamic object.  */
    249     Elf_Internal_Verdef *verdef;
    250     /* This field is used for a symbol which is defined in a regular
    251        object.  It is set up in size_dynamic_sections.  It points to
    252        the version information we should write out for this symbol.  */
    253     struct bfd_elf_version_tree *vertree;
    254   } verinfo;
    255 
    256   union
    257   {
    258     /* For __start_SECNAME and __stop_SECNAME symbols, record the first
    259        input section whose section name is SECNAME.  */
    260     asection *start_stop_section;
    261 
    262     /* Vtable information. */
    263     struct elf_link_virtual_table_entry *vtable;
    264   } u2;
    265 };
    266 
    267 /* Return the strong definition for a weak symbol with aliases.  */
    268 
    269 static inline struct elf_link_hash_entry *
    270 weakdef (struct elf_link_hash_entry *h)
    271 {
    272   while (h->is_weakalias)
    273     h = h->u.alias;
    274   return h;
    275 }
    276 
    277 /* Will references to this symbol always reference the symbol
    278    in this object?  */
    279 #define SYMBOL_REFERENCES_LOCAL(INFO, H) \
    280   _bfd_elf_symbol_refs_local_p (H, INFO, 0)
    281 
    282 /* Will _calls_ to this symbol always call the version in this object?  */
    283 #define SYMBOL_CALLS_LOCAL(INFO, H) \
    284   _bfd_elf_symbol_refs_local_p (H, INFO, 1)
    285 
    286 /* Whether an undefined weak symbol should resolve to its link-time
    287    value, even in PIC or PIE objects.  */
    288 #define UNDEFWEAK_NO_DYNAMIC_RELOC(INFO, H)		\
    289   ((H)->root.type == bfd_link_hash_undefweak		\
    290    && (ELF_ST_VISIBILITY ((H)->other) != STV_DEFAULT	\
    291        || (INFO)->dynamic_undefined_weak == 0))
    292 
    293 /* Common symbols that are turned into definitions don't have the
    294    DEF_REGULAR flag set, so they might appear to be undefined.
    295    Symbols defined in linker scripts also don't have DEF_REGULAR set.  */
    296 #define ELF_COMMON_DEF_P(H) \
    297   (!(H)->def_regular							\
    298    && !(H)->def_dynamic							\
    299    && (H)->root.type == bfd_link_hash_defined)
    300 
    301 /* Records local symbols to be emitted in the dynamic symbol table.  */
    302 
    303 struct elf_link_local_dynamic_entry
    304 {
    305   struct elf_link_local_dynamic_entry *next;
    306 
    307   /* The input bfd this symbol came from.  */
    308   bfd *input_bfd;
    309 
    310   /* The index of the local symbol being copied.  */
    311   long input_indx;
    312 
    313   /* The index in the outgoing dynamic symbol table.  */
    314   long dynindx;
    315 
    316   /* A copy of the input symbol.  */
    317   Elf_Internal_Sym isym;
    318 };
    319 
    320 struct elf_link_loaded_list
    321 {
    322   struct elf_link_loaded_list *next;
    323   bfd *abfd;
    324 };
    325 
    326 /* Structures used by the eh_frame optimization code.  */
    327 struct eh_cie_fde
    328 {
    329   union {
    330     struct {
    331       /* If REMOVED == 1, this is the CIE that the FDE originally used.
    332 	 The CIE belongs to the same .eh_frame input section as the FDE.
    333 
    334 	 If REMOVED == 0, this is the CIE that we have chosen to use for
    335 	 the output FDE.  The CIE's REMOVED field is also 0, but the CIE
    336 	 might belong to a different .eh_frame input section from the FDE.
    337 
    338 	 May be NULL to signify that the FDE should be discarded.  */
    339       struct eh_cie_fde *cie_inf;
    340       struct eh_cie_fde *next_for_section;
    341     } fde;
    342     struct {
    343       /* CIEs have three states:
    344 
    345 	 - REMOVED && !MERGED: Slated for removal because we haven't yet
    346 	   proven that an FDE needs it.  FULL_CIE, if nonnull, points to
    347 	   more detailed information about the CIE.
    348 
    349 	 - REMOVED && MERGED: We have merged this CIE with MERGED_WITH,
    350 	   which may not belong to the same input section.
    351 
    352 	 - !REMOVED: We have decided to keep this CIE.  SEC is the
    353 	   .eh_frame input section that contains the CIE.  */
    354       union {
    355 	struct cie *full_cie;
    356 	struct eh_cie_fde *merged_with;
    357 	asection *sec;
    358       } u;
    359 
    360       /* The offset of the personality data from the start of the CIE,
    361 	 or 0 if the CIE doesn't have any.  */
    362       unsigned int personality_offset : 8;
    363 
    364       /* Length of augmentation.  aug_str_len is the length of the
    365 	 string including null terminator.  aug_data_len is the length
    366 	 of the rest up to the initial insns.  */
    367       unsigned int aug_str_len : 3;
    368       unsigned int aug_data_len : 5;
    369 
    370       /* True if we have marked relocations associated with this CIE.  */
    371       unsigned int gc_mark : 1;
    372 
    373       /* True if we have decided to turn an absolute LSDA encoding into
    374 	 a PC-relative one.  */
    375       unsigned int make_lsda_relative : 1;
    376 
    377       /* True if we have decided to turn an absolute personality
    378 	 encoding into a PC-relative one.  */
    379       unsigned int make_per_encoding_relative : 1;
    380 
    381       /* True if the CIE contains personality data and if that
    382 	 data uses a PC-relative encoding.  Always true when
    383 	 make_per_encoding_relative is.  */
    384       unsigned int per_encoding_relative : 1;
    385 
    386       /* True if the CIE contains personality data aligned to a
    387 	 multiple of eight bytes.  */
    388       unsigned int per_encoding_aligned8 : 1;
    389 
    390       /* True if we need to add an 'R' (FDE encoding) entry to the
    391 	 CIE's augmentation data.  */
    392       unsigned int add_fde_encoding : 1;
    393 
    394       /* True if we have merged this CIE with another.  */
    395       unsigned int merged : 1;
    396 
    397       /* Unused bits.  */
    398       unsigned int pad1 : 9;
    399     } cie;
    400   } u;
    401   unsigned int reloc_index;
    402   unsigned int size;
    403   unsigned int offset;
    404   unsigned int new_offset;
    405   unsigned int fde_encoding : 8;
    406   unsigned int lsda_encoding : 8;
    407   unsigned int lsda_offset : 8;
    408 
    409   /* True if this entry represents a CIE, false if it represents an FDE.  */
    410   unsigned int cie : 1;
    411 
    412   /* True if this entry is currently marked for removal.  */
    413   unsigned int removed : 1;
    414 
    415   /* True if we need to add a 'z' (augmentation size) entry to the CIE's
    416      augmentation data, and an associated byte to each of the CIE's FDEs.  */
    417   unsigned int add_augmentation_size : 1;
    418 
    419   /* True if we have decided to convert absolute FDE relocations into
    420      relative ones.  This applies to the first relocation in the FDE,
    421      which is against the code that the FDE describes.  */
    422   unsigned int make_relative : 1;
    423 
    424   /* Unused bits.  */
    425   unsigned int pad1 : 4;
    426 
    427   unsigned int *set_loc;
    428 };
    429 
    430 struct eh_frame_sec_info
    431 {
    432   unsigned int count;
    433   struct cie *cies;
    434   struct eh_cie_fde entry[1];
    435 };
    436 
    437 struct eh_frame_array_ent
    438 {
    439   bfd_vma initial_loc;
    440   bfd_size_type range;
    441   bfd_vma fde;
    442 };
    443 
    444 struct htab;
    445 
    446 #define DWARF2_EH_HDR 1
    447 #define COMPACT_EH_HDR 2
    448 
    449 /* Endian-neutral code indicating that a function cannot be unwound.  */
    450 #define COMPACT_EH_CANT_UNWIND_OPCODE 0x015d5d01
    451 
    452 struct dwarf_eh_frame_hdr_info
    453 {
    454   struct htab *cies;
    455   unsigned int fde_count;
    456   /* TRUE if .eh_frame_hdr should contain the sorted search table.
    457      We build it if we successfully read all .eh_frame input sections
    458      and recognize them.  */
    459   bfd_boolean table;
    460   struct eh_frame_array_ent *array;
    461 };
    462 
    463 struct compact_eh_frame_hdr_info
    464 {
    465   unsigned int allocated_entries;
    466   /* eh_frame_entry fragments.  */
    467   asection **entries;
    468 };
    469 
    470 struct eh_frame_hdr_info
    471 {
    472   asection *hdr_sec;
    473   unsigned int array_count;
    474   bfd_boolean frame_hdr_is_compact;
    475   union
    476     {
    477       struct dwarf_eh_frame_hdr_info dwarf;
    478       struct compact_eh_frame_hdr_info compact;
    479     }
    480   u;
    481 };
    482 
    483 /* Enum used to identify target specific extensions to the elf_obj_tdata
    484    and elf_link_hash_table structures.  Note the enums deliberately start
    485    from 1 so that we can detect an uninitialized field.  The generic value
    486    is last so that additions to this enum do not need to modify more than
    487    one line.  */
    488 enum elf_target_id
    489 {
    490   AARCH64_ELF_DATA = 1,
    491   ALPHA_ELF_DATA,
    492   ARC_ELF_DATA,
    493   ARM_ELF_DATA,
    494   AVR_ELF_DATA,
    495   BFIN_ELF_DATA,
    496   CRIS_ELF_DATA,
    497   CSKY_ELF_DATA,
    498   FRV_ELF_DATA,
    499   HPPA32_ELF_DATA,
    500   HPPA64_ELF_DATA,
    501   I386_ELF_DATA,
    502   IA64_ELF_DATA,
    503   LM32_ELF_DATA,
    504   M32R_ELF_DATA,
    505   M68HC11_ELF_DATA,
    506   M68K_ELF_DATA,
    507   METAG_ELF_DATA,
    508   MICROBLAZE_ELF_DATA,
    509   MIPS_ELF_DATA,
    510   MN10300_ELF_DATA,
    511   NDS32_ELF_DATA,
    512   NIOS2_ELF_DATA,
    513   OR1K_ELF_DATA,
    514   PPC32_ELF_DATA,
    515   PPC64_ELF_DATA,
    516   PRU_ELF_DATA,
    517   S390_ELF_DATA,
    518   SH_ELF_DATA,
    519   SPARC_ELF_DATA,
    520   SPU_ELF_DATA,
    521   TIC6X_ELF_DATA,
    522   X86_64_ELF_DATA,
    523   XTENSA_ELF_DATA,
    524   TILEGX_ELF_DATA,
    525   TILEPRO_ELF_DATA,
    526   RISCV_ELF_DATA,
    527   GENERIC_ELF_DATA
    528 };
    529 
    530 struct elf_sym_strtab
    531 {
    532   Elf_Internal_Sym sym;
    533   unsigned long dest_index;
    534   unsigned long destshndx_index;
    535 };
    536 
    537 struct bfd_link_needed_list
    538 {
    539   struct bfd_link_needed_list *next;
    540   bfd *by;
    541   const char *name;
    542 };
    543 
    544 enum elf_target_os
    545 {
    546   is_normal,
    547   is_symbian,	/* Symbian OS.  */
    548   is_solaris,	/* Solaris.  */
    549   is_vxworks,	/* VxWorks.  */
    550   is_nacl	/* Native Client.  */
    551 };
    552 
    553 /* Used by bfd_sym_from_r_symndx to cache a small number of local
    554    symbols.  */
    555 #define LOCAL_SYM_CACHE_SIZE 32
    556 struct sym_cache
    557 {
    558   bfd *abfd;
    559   unsigned long indx[LOCAL_SYM_CACHE_SIZE];
    560   Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE];
    561 };
    562 
    563 /* ELF linker hash table.  */
    564 
    565 struct elf_link_hash_table
    566 {
    567   struct bfd_link_hash_table root;
    568 
    569   /* An identifier used to distinguish different target
    570      specific extensions to this structure.  */
    571   enum elf_target_id hash_table_id;
    572 
    573   /* Whether we have created the special dynamic sections required
    574      when linking against or generating a shared object.  */
    575   bfd_boolean dynamic_sections_created;
    576 
    577   /* Whether dynamic relocations are present.  */
    578   bfd_boolean dynamic_relocs;
    579 
    580   /* True if this target has relocatable executables, so needs dynamic
    581      section symbols.  */
    582   bfd_boolean is_relocatable_executable;
    583 
    584   /* TRUE if there are IFUNC resolvers.  */
    585   bfd_boolean ifunc_resolvers;
    586 
    587   /* TRUE if DT_PLTGOT is a required dynamic tag.  */
    588   bfd_boolean dt_pltgot_required;
    589 
    590   /* TRUE if DT_JMPREL is a required dynamic tag.  */
    591   bfd_boolean dt_jmprel_required;
    592 
    593   /* The BFD used to hold special sections created by the linker.
    594      This will be the first BFD found which requires these sections to
    595      be created.  */
    596   bfd *dynobj;
    597 
    598   /* The value to use when initialising got.refcount/offset and
    599      plt.refcount/offset in an elf_link_hash_entry.  Set to zero when
    600      the values are refcounts.  Set to init_got_offset/init_plt_offset
    601      in size_dynamic_sections when the values may be offsets.  */
    602   union gotplt_union init_got_refcount;
    603   union gotplt_union init_plt_refcount;
    604 
    605   /* The value to use for got.refcount/offset and plt.refcount/offset
    606      when the values may be offsets.  Normally (bfd_vma) -1.  */
    607   union gotplt_union init_got_offset;
    608   union gotplt_union init_plt_offset;
    609 
    610   /* The number of symbols found in the link which is intended for the
    611      mandatory DT_SYMTAB tag (.dynsym section) in .dynamic section.  */
    612   bfd_size_type dynsymcount;
    613   bfd_size_type local_dynsymcount;
    614 
    615   /* The string table of dynamic symbols, which becomes the .dynstr
    616      section.  */
    617   struct elf_strtab_hash *dynstr;
    618 
    619   /* The number of symbol strings found in the link which must be put
    620      into the .strtab section.  */
    621   bfd_size_type strtabcount;
    622 
    623   /* The array size of the symbol string table, which becomes the
    624      .strtab section.  */
    625   bfd_size_type strtabsize;
    626 
    627   /* The array of strings, which becomes the .strtab section.  */
    628   struct elf_sym_strtab *strtab;
    629 
    630   /* The number of buckets in the hash table in the .hash section.
    631      This is based on the number of dynamic symbols.  */
    632   bfd_size_type bucketcount;
    633 
    634   /* A linked list of DT_NEEDED names found in dynamic objects
    635      included in the link.  */
    636   struct bfd_link_needed_list *needed;
    637 
    638   /* Sections in the output bfd that provides a section symbol
    639      to be used by relocations emitted against local symbols.
    640      Most targets will not use data_index_section.  */
    641   asection *text_index_section;
    642   asection *data_index_section;
    643 
    644   /* The _GLOBAL_OFFSET_TABLE_ symbol.  */
    645   struct elf_link_hash_entry *hgot;
    646 
    647   /* The _PROCEDURE_LINKAGE_TABLE_ symbol.  */
    648   struct elf_link_hash_entry *hplt;
    649 
    650   /* The _DYNAMIC symbol.  */
    651   struct elf_link_hash_entry *hdynamic;
    652 
    653   /* A pointer to information used to merge SEC_MERGE sections.  */
    654   void *merge_info;
    655 
    656   /* Used to link stabs in sections.  */
    657   struct stab_info stab_info;
    658 
    659   /* Used by eh_frame code when editing .eh_frame.  */
    660   struct eh_frame_hdr_info eh_info;
    661 
    662   /* A linked list of local symbols to be added to .dynsym.  */
    663   struct elf_link_local_dynamic_entry *dynlocal;
    664 
    665   /* A linked list of DT_RPATH/DT_RUNPATH names found in dynamic
    666      objects included in the link.  */
    667   struct bfd_link_needed_list *runpath;
    668 
    669   /* Cached first output tls section and size of PT_TLS segment.  */
    670   asection *tls_sec;
    671   bfd_size_type tls_size;  /* Bytes.  */
    672 
    673   /* The offset into splt of the PLT entry for the TLS descriptor
    674      resolver.  Special values are 0, if not necessary (or not found
    675      to be necessary yet), and -1 if needed but not determined
    676      yet.  */
    677   bfd_vma tlsdesc_plt;
    678 
    679   /* The GOT offset for the lazy trampoline.  Communicated to the
    680      loader via DT_TLSDESC_GOT.  The magic value (bfd_vma) -1
    681      indicates an offset is not allocated.  */
    682   bfd_vma tlsdesc_got;
    683 
    684   /* Target OS for linker output.  */
    685   enum elf_target_os target_os;
    686 
    687   /* A linked list of dynamic BFD's loaded in the link.  */
    688   struct elf_link_loaded_list *dyn_loaded;
    689 
    690   /* Small local sym cache.  */
    691   struct sym_cache sym_cache;
    692 
    693   /* Short-cuts to get to dynamic linker sections.  */
    694   asection *sgot;
    695   asection *sgotplt;
    696   asection *srelgot;
    697   asection *splt;
    698   asection *srelplt;
    699   asection *sdynbss;
    700   asection *srelbss;
    701   asection *sdynrelro;
    702   asection *sreldynrelro;
    703   asection *igotplt;
    704   asection *iplt;
    705   asection *irelplt;
    706   asection *irelifunc;
    707   asection *dynsym;
    708 };
    709 
    710 /* Look up an entry in an ELF linker hash table.  */
    711 
    712 #define elf_link_hash_lookup(table, string, create, copy, follow)	\
    713   ((struct elf_link_hash_entry *)					\
    714    bfd_link_hash_lookup (&(table)->root, (string), (create),		\
    715 			 (copy), (follow)))
    716 
    717 /* Traverse an ELF linker hash table.  */
    718 
    719 #define elf_link_hash_traverse(table, func, info)			\
    720   (bfd_link_hash_traverse						\
    721    (&(table)->root,							\
    722     (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func),	\
    723     (info)))
    724 
    725 /* Get the ELF linker hash table from a link_info structure.  */
    726 
    727 #define elf_hash_table(p) ((struct elf_link_hash_table *) ((p)->hash))
    728 
    729 #define elf_hash_table_id(table)	((table) -> hash_table_id)
    730 
    731 /* Returns TRUE if the hash table is a struct elf_link_hash_table.  */
    732 #define is_elf_hash_table(htab)						\
    733   (((struct bfd_link_hash_table *) (htab))->type == bfd_link_elf_hash_table)
    734 
    735 /* Constant information held for an ELF backend.  */
    737 
    738 struct elf_size_info {
    739   unsigned char sizeof_ehdr, sizeof_phdr, sizeof_shdr;
    740   unsigned char sizeof_rel, sizeof_rela, sizeof_sym, sizeof_dyn, sizeof_note;
    741 
    742   /* The size of entries in the .hash section.  */
    743   unsigned char sizeof_hash_entry;
    744 
    745   /* The number of internal relocations to allocate per external
    746      relocation entry.  */
    747   unsigned char int_rels_per_ext_rel;
    748   /* We use some fixed size arrays.  This should be large enough to
    749      handle all back-ends.  */
    750 #define MAX_INT_RELS_PER_EXT_REL 3
    751 
    752   unsigned char arch_size, log_file_align;
    753   unsigned char elfclass, ev_current;
    754   int (*write_out_phdrs)
    755     (bfd *, const Elf_Internal_Phdr *, unsigned int);
    756   bfd_boolean
    757     (*write_shdrs_and_ehdr) (bfd *);
    758   bfd_boolean (*checksum_contents)
    759     (bfd * , void (*) (const void *, size_t, void *), void *);
    760   void (*write_relocs)
    761     (bfd *, asection *, void *);
    762   bfd_boolean (*swap_symbol_in)
    763     (bfd *, const void *, const void *, Elf_Internal_Sym *);
    764   void (*swap_symbol_out)
    765     (bfd *, const Elf_Internal_Sym *, void *, void *);
    766   bfd_boolean (*slurp_reloc_table)
    767     (bfd *, asection *, asymbol **, bfd_boolean);
    768   long (*slurp_symbol_table)
    769     (bfd *, asymbol **, bfd_boolean);
    770   void (*swap_dyn_in)
    771     (bfd *, const void *, Elf_Internal_Dyn *);
    772   void (*swap_dyn_out)
    773     (bfd *, const Elf_Internal_Dyn *, void *);
    774 
    775   /* This function is called to swap in a REL relocation.  If an
    776      external relocation corresponds to more than one internal
    777      relocation, then all relocations are swapped in at once.  */
    778   void (*swap_reloc_in)
    779     (bfd *, const bfd_byte *, Elf_Internal_Rela *);
    780 
    781   /* This function is called to swap out a REL relocation.  */
    782   void (*swap_reloc_out)
    783     (bfd *, const Elf_Internal_Rela *, bfd_byte *);
    784 
    785   /* This function is called to swap in a RELA relocation.  If an
    786      external relocation corresponds to more than one internal
    787      relocation, then all relocations are swapped in at once.  */
    788   void (*swap_reloca_in)
    789     (bfd *, const bfd_byte *, Elf_Internal_Rela *);
    790 
    791   /* This function is called to swap out a RELA relocation.  */
    792   void (*swap_reloca_out)
    793     (bfd *, const Elf_Internal_Rela *, bfd_byte *);
    794 };
    795 
    796 #define elf_symbol_from(ABFD,S) \
    797   (((S)->the_bfd != NULL					\
    798     && (S)->the_bfd->xvec->flavour == bfd_target_elf_flavour	\
    799     && (S)->the_bfd->tdata.elf_obj_data != 0)			\
    800    ? (elf_symbol_type *) (S)					\
    801    : 0)
    802 
    803 enum elf_reloc_type_class {
    804   reloc_class_normal,
    805   reloc_class_relative,
    806   reloc_class_copy,
    807   reloc_class_ifunc,
    808   reloc_class_plt
    809 };
    810 
    811 struct elf_reloc_cookie
    812 {
    813   Elf_Internal_Rela *rels, *rel, *relend;
    814   Elf_Internal_Sym *locsyms;
    815   bfd *abfd;
    816   size_t locsymcount;
    817   size_t extsymoff;
    818   struct elf_link_hash_entry **sym_hashes;
    819   int r_sym_shift;
    820   bfd_boolean bad_symtab;
    821 };
    822 
    823 /* The level of IRIX compatibility we're striving for.  */
    824 
    825 typedef enum {
    826   ict_none,
    827   ict_irix5,
    828   ict_irix6
    829 } irix_compat_t;
    830 
    831 /* Mapping of ELF section names and types.  */
    832 struct bfd_elf_special_section
    833 {
    834   const char *prefix;
    835   unsigned int prefix_length;
    836   /* 0 means name must match PREFIX exactly.
    837      -1 means name must start with PREFIX followed by an arbitrary string.
    838      -2 means name must match PREFIX exactly or consist of PREFIX followed
    839      by a dot then anything.
    840      > 0 means name must start with the first PREFIX_LENGTH chars of
    841      PREFIX and finish with the last SUFFIX_LENGTH chars of PREFIX.  */
    842   signed int suffix_length;
    843   unsigned int type;
    844   bfd_vma attr;
    845 };
    846 
    847 enum action_discarded
    848   {
    849     COMPLAIN = 1,
    850     PRETEND = 2
    851   };
    852 
    853 typedef asection * (*elf_gc_mark_hook_fn)
    854   (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
    855    struct elf_link_hash_entry *, Elf_Internal_Sym *);
    856 
    857 enum elf_property_kind
    858  {
    859     /* A new property.  */
    860     property_unknown = 0,
    861     /* A property ignored by backend.  */
    862     property_ignored,
    863     /* A corrupt property reported by backend.  */
    864     property_corrupt,
    865     /* A property should be removed due to property merge.  */
    866     property_remove,
    867     /* A property which is a number.  */
    868     property_number
    869  };
    870 
    871 typedef struct elf_property
    872 {
    873   unsigned int pr_type;
    874   unsigned int pr_datasz;
    875   union
    876     {
    877       /* For property_number, this is a number.  */
    878       bfd_vma number;
    879       /* Add a new one if elf_property_kind is updated.  */
    880     } u;
    881   enum elf_property_kind pr_kind;
    882 } elf_property;
    883 
    884 typedef struct elf_property_list
    885 {
    886   struct elf_property_list *next;
    887   struct elf_property property;
    888 } elf_property_list;
    889 
    890 struct bfd_elf_section_reloc_data;
    891 
    892 struct elf_backend_data
    893 {
    894   /* The architecture for this backend.  */
    895   enum bfd_architecture arch;
    896 
    897   /* An identifier used to distinguish different target specific
    898      extensions to elf_obj_tdata and elf_link_hash_table structures.  */
    899   enum elf_target_id target_id;
    900 
    901   /* Target OS.  */
    902   enum elf_target_os target_os;
    903 
    904   /* The ELF machine code (EM_xxxx) for this backend.  */
    905   int elf_machine_code;
    906 
    907   /* EI_OSABI.  */
    908   int elf_osabi;
    909 
    910   /* The maximum page size for this backend.  */
    911   bfd_vma maxpagesize;
    912 
    913   /* The minimum page size for this backend.  An input object will not be
    914      considered page aligned unless its sections are correctly aligned for
    915      pages at least this large.  May be smaller than maxpagesize.  */
    916   bfd_vma minpagesize;
    917 
    918   /* The common page size for this backend.  */
    919   bfd_vma commonpagesize;
    920 
    921   /* The value of commonpagesize to use when -z relro for this backend.  */
    922   bfd_vma relropagesize;
    923 
    924   /* The BFD flags applied to sections created for dynamic linking.  */
    925   flagword dynamic_sec_flags;
    926 
    927   /* Architecture-specific data for this backend.
    928      This is actually a pointer to some type like struct elf_ARCH_data.  */
    929   const void *arch_data;
    930 
    931   /* A function to translate an ELF RELA relocation to a BFD arelent
    932      structure.  Returns TRUE upon success, FALSE otherwise.  */
    933   bfd_boolean (*elf_info_to_howto)
    934     (bfd *, arelent *, Elf_Internal_Rela *);
    935 
    936   /* A function to translate an ELF REL relocation to a BFD arelent
    937      structure.  Returns TRUE upon success, FALSE otherwise.  */
    938   bfd_boolean (*elf_info_to_howto_rel)
    939     (bfd *, arelent *, Elf_Internal_Rela *);
    940 
    941   /* A function to determine whether a symbol is global when
    942      partitioning the symbol table into local and global symbols.
    943      This should be NULL for most targets, in which case the correct
    944      thing will be done.  MIPS ELF, at least on the Irix 5, has
    945      special requirements.  */
    946   bfd_boolean (*elf_backend_sym_is_global)
    947     (bfd *, asymbol *);
    948 
    949   /* The remaining functions are hooks which are called only if they
    950      are not NULL.  */
    951 
    952   /* A function to permit a backend specific check on whether a
    953      particular BFD format is relevant for an object file, and to
    954      permit the backend to set any global information it wishes.  When
    955      this is called elf_elfheader is set, but anything else should be
    956      used with caution.  If this returns FALSE, the check_format
    957      routine will return a bfd_error_wrong_format error.  */
    958   bfd_boolean (*elf_backend_object_p)
    959     (bfd *);
    960 
    961   /* A function to do additional symbol processing when reading the
    962      ELF symbol table.  This is where any processor-specific special
    963      section indices are handled.  */
    964   void (*elf_backend_symbol_processing)
    965     (bfd *, asymbol *);
    966 
    967   /* A function to do additional symbol processing after reading the
    968      entire ELF symbol table.  */
    969   bfd_boolean (*elf_backend_symbol_table_processing)
    970     (bfd *, elf_symbol_type *, unsigned int);
    971 
    972   /* A function to set the type of the info field.  Processor-specific
    973      types should be handled here.  */
    974   int (*elf_backend_get_symbol_type)
    975     (Elf_Internal_Sym *, int);
    976 
    977   /* A function to return the linker hash table entry of a symbol that
    978      might be satisfied by an archive symbol.  */
    979   struct elf_link_hash_entry * (*elf_backend_archive_symbol_lookup)
    980     (bfd *, struct bfd_link_info *, const char *);
    981 
    982   /* Return true if local section symbols should have a non-null st_name.
    983      NULL implies false.  */
    984   bfd_boolean (*elf_backend_name_local_section_symbols)
    985     (bfd *);
    986 
    987   /* A function to do additional processing on the ELF section header
    988      just before writing it out.  This is used to set the flags and
    989      type fields for some sections, or to actually write out data for
    990      unusual sections.  */
    991   bfd_boolean (*elf_backend_section_processing)
    992     (bfd *, Elf_Internal_Shdr *);
    993 
    994   /* A function to handle unusual section types when creating BFD
    995      sections from ELF sections.  */
    996   bfd_boolean (*elf_backend_section_from_shdr)
    997     (bfd *, Elf_Internal_Shdr *, const char *, int);
    998 
    999   /* A function to convert machine dependent ELF section header flags to
   1000      BFD internal section header flags.  */
   1001   bfd_boolean (*elf_backend_section_flags)
   1002     (const Elf_Internal_Shdr *);
   1003 
   1004   /* A function that returns a struct containing ELF section flags and
   1005      type for the given BFD section.   */
   1006   const struct bfd_elf_special_section * (*get_sec_type_attr)
   1007     (bfd *, asection *);
   1008 
   1009   /* A function to handle unusual program segment types when creating BFD
   1010      sections from ELF program segments.  */
   1011   bfd_boolean (*elf_backend_section_from_phdr)
   1012     (bfd *, Elf_Internal_Phdr *, int, const char *);
   1013 
   1014   /* A function to set up the ELF section header for a BFD section in
   1015      preparation for writing it out.  This is where the flags and type
   1016      fields are set for unusual sections.  */
   1017   bfd_boolean (*elf_backend_fake_sections)
   1018     (bfd *, Elf_Internal_Shdr *, asection *);
   1019 
   1020   /* A function to get the ELF section index for a BFD section.  If
   1021      this returns TRUE, the section was found.  If it is a normal ELF
   1022      section, *RETVAL should be left unchanged.  If it is not a normal
   1023      ELF section *RETVAL should be set to the SHN_xxxx index.  */
   1024   bfd_boolean (*elf_backend_section_from_bfd_section)
   1025     (bfd *, asection *, int *retval);
   1026 
   1027   /* If this field is not NULL, it is called by the add_symbols phase
   1028      of a link just before adding a symbol to the global linker hash
   1029      table.  It may modify any of the fields as it wishes.  If *NAME
   1030      is set to NULL, the symbol will be skipped rather than being
   1031      added to the hash table.  This function is responsible for
   1032      handling all processor dependent symbol bindings and section
   1033      indices, and must set at least *FLAGS and *SEC for each processor
   1034      dependent case; failure to do so will cause a link error.  */
   1035   bfd_boolean (*elf_add_symbol_hook)
   1036     (bfd *abfd, struct bfd_link_info *info, Elf_Internal_Sym *,
   1037      const char **name, flagword *flags, asection **sec, bfd_vma *value);
   1038 
   1039   /* If this field is not NULL, it is called by the elf_link_output_sym
   1040      phase of a link for each symbol which will appear in the object file.
   1041      On error, this function returns 0.  1 is returned when the symbol
   1042      should be output, 2 is returned when the symbol should be discarded.  */
   1043   int (*elf_backend_link_output_symbol_hook)
   1044     (struct bfd_link_info *info, const char *, Elf_Internal_Sym *,
   1045      asection *, struct elf_link_hash_entry *);
   1046 
   1047   /* The CREATE_DYNAMIC_SECTIONS function is called by the ELF backend
   1048      linker the first time it encounters a dynamic object in the link.
   1049      This function must create any sections required for dynamic
   1050      linking.  The ABFD argument is a dynamic object.  The .interp,
   1051      .dynamic, .dynsym, .dynstr, and .hash functions have already been
   1052      created, and this function may modify the section flags if
   1053      desired.  This function will normally create the .got and .plt
   1054      sections, but different backends have different requirements.  */
   1055   bfd_boolean (*elf_backend_create_dynamic_sections)
   1056     (bfd *abfd, struct bfd_link_info *info);
   1057 
   1058   /* When creating a shared library, determine whether to omit the
   1059      dynamic symbol for the section.  */
   1060   bfd_boolean (*elf_backend_omit_section_dynsym)
   1061     (bfd *output_bfd, struct bfd_link_info *info, asection *osec);
   1062 
   1063   /* Return TRUE if relocations of targets are compatible to the extent
   1064      that CHECK_RELOCS will properly process them.  PR 4424.  */
   1065   bfd_boolean (*relocs_compatible) (const bfd_target *, const bfd_target *);
   1066 
   1067   /* The CHECK_RELOCS function is called by the add_symbols phase of
   1068      the ELF backend linker.  It is called once for each section with
   1069      relocs of an object file, just after the symbols for the object
   1070      file have been added to the global linker hash table.  The
   1071      function must look through the relocs and do any special handling
   1072      required.  This generally means allocating space in the global
   1073      offset table, and perhaps allocating space for a reloc.  The
   1074      relocs are always passed as Rela structures; if the section
   1075      actually uses Rel structures, the r_addend field will always be
   1076      zero.  */
   1077   bfd_boolean (*check_relocs)
   1078     (bfd *abfd, struct bfd_link_info *info, asection *o,
   1079      const Elf_Internal_Rela *relocs);
   1080 
   1081   /* The CHECK_DIRECTIVES function is called once per input file by
   1082      the add_symbols phase of the ELF backend linker.  The function
   1083      must inspect the bfd and create any additional symbols according
   1084      to any custom directives in the bfd.  */
   1085   bfd_boolean (*check_directives)
   1086     (bfd *abfd, struct bfd_link_info *info);
   1087 
   1088   /* The NOTICE_AS_NEEDED function is called as the linker is about to
   1089      handle an as-needed lib (ACT = notice_as_needed), and after the
   1090      linker has decided to keep the lib (ACT = notice_needed) or when
   1091      the lib is not needed (ACT = notice_not_needed).  */
   1092   bfd_boolean (*notice_as_needed)
   1093     (bfd *abfd, struct bfd_link_info *info, enum notice_asneeded_action act);
   1094 
   1095   /* The ADJUST_DYNAMIC_SYMBOL function is called by the ELF backend
   1096      linker for every symbol which is defined by a dynamic object and
   1097      referenced by a regular object.  This is called after all the
   1098      input files have been seen, but before the SIZE_DYNAMIC_SECTIONS
   1099      function has been called.  The hash table entry should be
   1100      bfd_link_hash_defined ore bfd_link_hash_defweak, and it should be
   1101      defined in a section from a dynamic object.  Dynamic object
   1102      sections are not included in the final link, and this function is
   1103      responsible for changing the value to something which the rest of
   1104      the link can deal with.  This will normally involve adding an
   1105      entry to the .plt or .got or some such section, and setting the
   1106      symbol to point to that.  */
   1107   bfd_boolean (*elf_backend_adjust_dynamic_symbol)
   1108     (struct bfd_link_info *info, struct elf_link_hash_entry *h);
   1109 
   1110   /* The ALWAYS_SIZE_SECTIONS function is called by the backend linker
   1111      after all the linker input files have been seen but before the
   1112      section sizes have been set.  This is called after
   1113      ADJUST_DYNAMIC_SYMBOL, but before SIZE_DYNAMIC_SECTIONS.  */
   1114   bfd_boolean (*elf_backend_always_size_sections)
   1115     (bfd *output_bfd, struct bfd_link_info *info);
   1116 
   1117   /* The SIZE_DYNAMIC_SECTIONS function is called by the ELF backend
   1118      linker after all the linker input files have been seen but before
   1119      the sections sizes have been set.  This is called after
   1120      ADJUST_DYNAMIC_SYMBOL has been called on all appropriate symbols.
   1121      It is only called when linking against a dynamic object.  It must
   1122      set the sizes of the dynamic sections, and may fill in their
   1123      contents as well.  The generic ELF linker can handle the .dynsym,
   1124      .dynstr and .hash sections.  This function must handle the
   1125      .interp section and any sections created by the
   1126      CREATE_DYNAMIC_SECTIONS entry point.  */
   1127   bfd_boolean (*elf_backend_size_dynamic_sections)
   1128     (bfd *output_bfd, struct bfd_link_info *info);
   1129 
   1130   /* The STRIP_ZERO_SIZED_DYNAMIC_SECTIONS function is called by the
   1131      ELF backend linker to strip zero-sized dynamic sections after
   1132      the section sizes have been set.  */
   1133   bfd_boolean (*elf_backend_strip_zero_sized_dynamic_sections)
   1134     (struct bfd_link_info *info);
   1135 
   1136   /* Set TEXT_INDEX_SECTION and DATA_INDEX_SECTION, the output sections
   1137      we keep to use as a base for relocs and symbols.  */
   1138   void (*elf_backend_init_index_section)
   1139     (bfd *output_bfd, struct bfd_link_info *info);
   1140 
   1141   /* The RELOCATE_SECTION function is called by the ELF backend linker
   1142      to handle the relocations for a section.
   1143 
   1144      The relocs are always passed as Rela structures; if the section
   1145      actually uses Rel structures, the r_addend field will always be
   1146      zero.
   1147 
   1148      This function is responsible for adjust the section contents as
   1149      necessary, and (if using Rela relocs and generating a
   1150      relocatable output file) adjusting the reloc addend as
   1151      necessary.
   1152 
   1153      This function does not have to worry about setting the reloc
   1154      address or the reloc symbol index.
   1155 
   1156      LOCAL_SYMS is a pointer to the swapped in local symbols.
   1157 
   1158      LOCAL_SECTIONS is an array giving the section in the input file
   1159      corresponding to the st_shndx field of each local symbol.
   1160 
   1161      The global hash table entry for the global symbols can be found
   1162      via elf_sym_hashes (input_bfd).
   1163 
   1164      When generating relocatable output, this function must handle
   1165      STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
   1166      going to be the section symbol corresponding to the output
   1167      section, which means that the addend must be adjusted
   1168      accordingly.
   1169 
   1170      Returns FALSE on error, TRUE on success, 2 if successful and
   1171      relocations should be written for this section.  */
   1172   int (*elf_backend_relocate_section)
   1173     (bfd *output_bfd, struct bfd_link_info *info, bfd *input_bfd,
   1174      asection *input_section, bfd_byte *contents, Elf_Internal_Rela *relocs,
   1175      Elf_Internal_Sym *local_syms, asection **local_sections);
   1176 
   1177   /* The FINISH_DYNAMIC_SYMBOL function is called by the ELF backend
   1178      linker just before it writes a symbol out to the .dynsym section.
   1179      The processor backend may make any required adjustment to the
   1180      symbol.  It may also take the opportunity to set contents of the
   1181      dynamic sections.  Note that FINISH_DYNAMIC_SYMBOL is called on
   1182      all .dynsym symbols, while ADJUST_DYNAMIC_SYMBOL is only called
   1183      on those symbols which are defined by a dynamic object.  */
   1184   bfd_boolean (*elf_backend_finish_dynamic_symbol)
   1185     (bfd *output_bfd, struct bfd_link_info *info,
   1186      struct elf_link_hash_entry *h, Elf_Internal_Sym *sym);
   1187 
   1188   /* The FINISH_DYNAMIC_SECTIONS function is called by the ELF backend
   1189      linker just before it writes all the dynamic sections out to the
   1190      output file.  The FINISH_DYNAMIC_SYMBOL will have been called on
   1191      all dynamic symbols.  */
   1192   bfd_boolean (*elf_backend_finish_dynamic_sections)
   1193     (bfd *output_bfd, struct bfd_link_info *info);
   1194 
   1195   /* A function to do any beginning processing needed for the ELF file
   1196      before building the ELF headers and computing file positions.  */
   1197   void (*elf_backend_begin_write_processing)
   1198     (bfd *, struct bfd_link_info *);
   1199 
   1200   /* A function to do any final processing needed for the ELF file
   1201      before writing it out.  */
   1202   bfd_boolean (*elf_backend_final_write_processing)
   1203     (bfd *);
   1204 
   1205   /* This function is called by get_program_header_size.  It should
   1206      return the number of additional program segments which this BFD
   1207      will need.  It should return -1 on error.  */
   1208   int (*elf_backend_additional_program_headers)
   1209     (bfd *, struct bfd_link_info *);
   1210 
   1211   /* This function is called to modify an existing segment map in a
   1212      backend specific fashion.  */
   1213   bfd_boolean (*elf_backend_modify_segment_map)
   1214     (bfd *, struct bfd_link_info *);
   1215 
   1216   /* This function is called to modify program headers just before
   1217      they are written.  */
   1218   bfd_boolean (*elf_backend_modify_headers)
   1219     (bfd *, struct bfd_link_info *);
   1220 
   1221   /* This function is called to see if the PHDR header should be
   1222      checked for validity.  */
   1223   bfd_boolean (*elf_backend_allow_non_load_phdr)
   1224     (bfd *,  const Elf_Internal_Phdr *, unsigned);
   1225 
   1226   /* This function is called before section garbage collection to
   1227      mark entry symbol sections.  */
   1228   void (*gc_keep)
   1229     (struct bfd_link_info *);
   1230 
   1231   /* This function is called during section garbage collection to
   1232      mark sections that define global symbols.  */
   1233   bfd_boolean (*gc_mark_dynamic_ref)
   1234     (struct elf_link_hash_entry *, void *);
   1235 
   1236   /* This function is called during section gc to discover the section a
   1237      particular relocation refers to.  */
   1238   elf_gc_mark_hook_fn gc_mark_hook;
   1239 
   1240   /* This function, if defined, is called after the first gc marking pass
   1241      to allow the backend to mark additional sections.  */
   1242   bfd_boolean (*gc_mark_extra_sections)
   1243     (struct bfd_link_info *, elf_gc_mark_hook_fn);
   1244 
   1245   /* This function is called to initialise ELF file header info.
   1246      Customised versions can modify things like the OS and ABI version.  */
   1247   bfd_boolean (*elf_backend_init_file_header)
   1248     (bfd *, struct bfd_link_info *);
   1249 
   1250   /* This function, if defined, prints a symbol to file and returns the
   1251      name of the symbol to be printed.  It should return NULL to fall
   1252      back to default symbol printing.  */
   1253   const char *(*elf_backend_print_symbol_all)
   1254     (bfd *, void *, asymbol *);
   1255 
   1256   /* This function, if defined, is called after all local symbols and
   1257      global symbols converted to locals are emitted into the symtab
   1258      section.  It allows the backend to emit special local symbols
   1259      not handled in the hash table.  */
   1260   bfd_boolean (*elf_backend_output_arch_local_syms)
   1261     (bfd *, struct bfd_link_info *, void *,
   1262      bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *,
   1263 		      struct elf_link_hash_entry *));
   1264 
   1265   /* This function, if defined, is called after all symbols are emitted
   1266      into the symtab section.  It allows the backend to emit special
   1267      global symbols not handled in the hash table.  */
   1268   bfd_boolean (*elf_backend_output_arch_syms)
   1269     (bfd *, struct bfd_link_info *, void *,
   1270      bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *,
   1271 		      struct elf_link_hash_entry *));
   1272 
   1273   /* Filter what symbols of the output file to include in the import
   1274      library if one is created.  */
   1275   unsigned int (*elf_backend_filter_implib_symbols)
   1276     (bfd *, struct bfd_link_info *, asymbol **, long);
   1277 
   1278   /* Copy any information related to dynamic linking from a pre-existing
   1279      symbol to a newly created symbol.  Also called to copy flags and
   1280      other back-end info to a weakdef, in which case the symbol is not
   1281      newly created and plt/got refcounts and dynamic indices should not
   1282      be copied.  */
   1283   void (*elf_backend_copy_indirect_symbol)
   1284     (struct bfd_link_info *, struct elf_link_hash_entry *,
   1285      struct elf_link_hash_entry *);
   1286 
   1287   /* Modify any information related to dynamic linking such that the
   1288      symbol is not exported.  */
   1289   void (*elf_backend_hide_symbol)
   1290     (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean);
   1291 
   1292   /* A function to do additional symbol fixup, called by
   1293      _bfd_elf_fix_symbol_flags.  */
   1294   bfd_boolean (*elf_backend_fixup_symbol)
   1295     (struct bfd_link_info *, struct elf_link_hash_entry *);
   1296 
   1297   /* Merge the backend specific symbol attribute.  */
   1298   void (*elf_backend_merge_symbol_attribute)
   1299     (struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean,
   1300      bfd_boolean);
   1301 
   1302   /* This function, if defined, will return a string containing the
   1303      name of a target-specific dynamic tag.  */
   1304   char *(*elf_backend_get_target_dtag)
   1305     (bfd_vma);
   1306 
   1307   /* Decide whether an undefined symbol is special and can be ignored.
   1308      This is the case for OPTIONAL symbols on IRIX.  */
   1309   bfd_boolean (*elf_backend_ignore_undef_symbol)
   1310     (struct elf_link_hash_entry *);
   1311 
   1312   /* Emit relocations.  Overrides default routine for emitting relocs,
   1313      except during a relocatable link, or if all relocs are being emitted.  */
   1314   bfd_boolean (*elf_backend_emit_relocs)
   1315     (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *,
   1316      struct elf_link_hash_entry **);
   1317 
   1318   /* Update relocations.  It is allowed to change the number and the order.
   1319      In such a case hashes should be invalidated.  */
   1320   void (*elf_backend_update_relocs)
   1321     (asection *, struct bfd_elf_section_reloc_data *);
   1322 
   1323   /* Count relocations.  Not called for relocatable links
   1324      or if all relocs are being preserved in the output.  */
   1325   unsigned int (*elf_backend_count_relocs)
   1326     (struct bfd_link_info *, asection *);
   1327 
   1328   /* Count additionals relocations.  Called for relocatable links if
   1329      additional relocations needs to be created.  */
   1330   unsigned int (*elf_backend_count_additional_relocs)
   1331     (asection *);
   1332 
   1333   /* Say whether to sort relocs output by ld -r and ld --emit-relocs,
   1334      by r_offset.  If NULL, default to true.  */
   1335   bfd_boolean (*sort_relocs_p)
   1336     (asection *);
   1337 
   1338   /* This function, if defined, is called when an NT_PRSTATUS note is found
   1339      in a core file.  */
   1340   bfd_boolean (*elf_backend_grok_prstatus)
   1341     (bfd *, Elf_Internal_Note *);
   1342 
   1343   /* This function, if defined, is called when an NT_PSINFO or NT_PRPSINFO
   1344      note is found in a core file.  */
   1345   bfd_boolean (*elf_backend_grok_psinfo)
   1346     (bfd *, Elf_Internal_Note *);
   1347 
   1348   /* This function, if defined, is called when a "FreeBSD" NT_PRSTATUS
   1349      note is found in a core file.  */
   1350   bfd_boolean (*elf_backend_grok_freebsd_prstatus)
   1351     (bfd *, Elf_Internal_Note *);
   1352 
   1353   /* This function, if defined, is called to write a note to a corefile.  */
   1354   char *(*elf_backend_write_core_note)
   1355     (bfd *abfd, char *buf, int *bufsiz, int note_type, ...);
   1356 
   1357   /* This function, if defined, is called to convert target-specific
   1358      section flag names into hex values.  */
   1359   flagword (*elf_backend_lookup_section_flags_hook)
   1360     (char *);
   1361 
   1362   /* This function returns class of a reloc type.  */
   1363   enum elf_reloc_type_class (*elf_backend_reloc_type_class)
   1364   (const struct bfd_link_info *, const asection *, const Elf_Internal_Rela *);
   1365 
   1366   /* This function, if defined, removes information about discarded functions
   1367      from other sections which mention them.  */
   1368   bfd_boolean (*elf_backend_discard_info)
   1369     (bfd *, struct elf_reloc_cookie *, struct bfd_link_info *);
   1370 
   1371   /* This function, if defined, signals that the function above has removed
   1372      the discarded relocations for this section.  */
   1373   bfd_boolean (*elf_backend_ignore_discarded_relocs)
   1374     (asection *);
   1375 
   1376   /* What to do when ld finds relocations against symbols defined in
   1377      discarded sections.  */
   1378   unsigned int (*action_discarded)
   1379     (asection *);
   1380 
   1381   /* This function returns the width of FDE pointers in bytes, or 0 if
   1382      that can't be determined for some reason.  The default definition
   1383      goes by the bfd's EI_CLASS.  */
   1384   unsigned int (*elf_backend_eh_frame_address_size)
   1385     (bfd *, const asection *);
   1386 
   1387   /* These functions tell elf-eh-frame whether to attempt to turn
   1388      absolute or lsda encodings into pc-relative ones.  The default
   1389      definition enables these transformations.  */
   1390   bfd_boolean (*elf_backend_can_make_relative_eh_frame)
   1391      (bfd *, struct bfd_link_info *, asection *);
   1392   bfd_boolean (*elf_backend_can_make_lsda_relative_eh_frame)
   1393      (bfd *, struct bfd_link_info *, asection *);
   1394 
   1395   /* This function returns an encoding after computing the encoded
   1396      value (and storing it in ENCODED) for the given OFFSET into OSEC,
   1397      to be stored in at LOC_OFFSET into the LOC_SEC input section.
   1398      The default definition chooses a 32-bit PC-relative encoding.  */
   1399   bfd_byte (*elf_backend_encode_eh_address)
   1400      (bfd *abfd, struct bfd_link_info *info,
   1401       asection *osec, bfd_vma offset,
   1402       asection *loc_sec, bfd_vma loc_offset,
   1403       bfd_vma *encoded);
   1404 
   1405   /* This function, if defined, may write out the given section.
   1406      Returns TRUE if it did so and FALSE if the caller should.  */
   1407   bfd_boolean (*elf_backend_write_section)
   1408     (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
   1409 
   1410   /* This function, if defined, returns TRUE if it is section symbols
   1411      only that are considered local for the purpose of partitioning the
   1412      symbol table into local and global symbols.  This should be NULL
   1413      for most targets, in which case the correct thing will be done.
   1414      MIPS ELF, at least on the Irix 5, has special requirements.  */
   1415   bfd_boolean (*elf_backend_elfsym_local_is_section)
   1416     (bfd *);
   1417 
   1418   /* The level of IRIX compatibility we're striving for.
   1419      MIPS ELF specific function.  */
   1420   irix_compat_t (*elf_backend_mips_irix_compat)
   1421     (bfd *);
   1422 
   1423   reloc_howto_type *(*elf_backend_mips_rtype_to_howto)
   1424     (bfd *, unsigned int, bfd_boolean);
   1425 
   1426   /* The swapping table to use when dealing with ECOFF information.
   1427      Used for the MIPS ELF .mdebug section.  */
   1428   const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;
   1429 
   1430   /* This function implements `bfd_elf_bfd_from_remote_memory';
   1431      see elf.c, elfcode.h.  */
   1432   bfd *(*elf_backend_bfd_from_remote_memory)
   1433     (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
   1434      int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
   1435 				bfd_size_type len));
   1436 
   1437   bfd_boolean (*elf_backend_core_find_build_id) (bfd *, bfd_vma);
   1438 
   1439   /* This function is used by `_bfd_elf_get_synthetic_symtab';
   1440      see elf.c.  */
   1441   bfd_vma (*plt_sym_val) (bfd_vma, const asection *, const arelent *);
   1442 
   1443   /* Is symbol defined in common section?  */
   1444   bfd_boolean (*common_definition) (Elf_Internal_Sym *);
   1445 
   1446   /* Return a common section index for section.  */
   1447   unsigned int (*common_section_index) (asection *);
   1448 
   1449   /* Return a common section for section.  */
   1450   asection *(*common_section) (asection *);
   1451 
   1452   /* Return TRUE if we can merge 2 definitions.  */
   1453   bfd_boolean (*merge_symbol) (struct elf_link_hash_entry *,
   1454 			       const Elf_Internal_Sym *, asection **,
   1455 			       bfd_boolean, bfd_boolean,
   1456 			       bfd *, const asection *);
   1457 
   1458   /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
   1459   bfd_boolean (*elf_hash_symbol) (struct elf_link_hash_entry *);
   1460 
   1461   /* If non-NULL, called to register the location of XLAT_LOC within
   1462      .MIPS.xhash at which real final dynindx for H will be written.
   1463      If XLAT_LOC is zero, the symbol is not included in
   1464      .MIPS.xhash and no dynindx will be written.  */
   1465   void (*record_xhash_symbol)
   1466     (struct elf_link_hash_entry *h, bfd_vma xlat_loc);
   1467 
   1468   /* Return TRUE if type is a function symbol type.  */
   1469   bfd_boolean (*is_function_type) (unsigned int type);
   1470 
   1471   /* If the ELF symbol SYM might be a function in SEC, return the
   1472      function size and set *CODE_OFF to the function's entry point,
   1473      otherwise return zero.  */
   1474   bfd_size_type (*maybe_function_sym) (const asymbol *sym, asection *sec,
   1475 				       bfd_vma *code_off);
   1476 
   1477   /* Given NAME, the name of a relocation section stripped of its
   1478      .rel/.rela prefix, return the section in ABFD to which the
   1479      relocations apply.  */
   1480   asection *(*get_reloc_section) (bfd *abfd, const char *name);
   1481 
   1482   /* Called to set the sh_flags, sh_link and sh_info fields of OSECTION which
   1483      has a type >= SHT_LOOS.  Returns TRUE if the fields were initialised,
   1484      FALSE otherwise.  Can be called multiple times for a given section,
   1485      until it returns TRUE.  Most of the times it is called ISECTION will be
   1486      set to an input section that might be associated with the output section.
   1487      The last time that it is called, ISECTION will be set to NULL.  */
   1488   bfd_boolean (*elf_backend_copy_special_section_fields)
   1489     (const bfd *ibfd, bfd *obfd, const Elf_Internal_Shdr *isection,
   1490      Elf_Internal_Shdr *osection);
   1491 
   1492   /* Used to handle bad SHF_LINK_ORDER input.  */
   1493   void (*link_order_error_handler) (const char *, ...);
   1494 
   1495   /* Name of the PLT relocation section.  */
   1496   const char *relplt_name;
   1497 
   1498   /* Alternate EM_xxxx machine codes for this backend.  */
   1499   int elf_machine_alt1;
   1500   int elf_machine_alt2;
   1501 
   1502   const struct elf_size_info *s;
   1503 
   1504   /* An array of target specific special sections.  */
   1505   const struct bfd_elf_special_section *special_sections;
   1506 
   1507   /* The size in bytes of the header for the GOT.  This includes the
   1508      so-called reserved entries on some systems.  */
   1509   bfd_vma got_header_size;
   1510 
   1511   /* The size of the GOT entry for the symbol pointed to by H if non-NULL,
   1512      otherwise by the local symbol with index SYMNDX in IBFD.  */
   1513   bfd_vma (*got_elt_size) (bfd *, struct bfd_link_info *,
   1514 			   struct elf_link_hash_entry *h,
   1515 			   bfd *ibfd, unsigned long symndx);
   1516 
   1517   /* The vendor name to use for a processor-standard attributes section.  */
   1518   const char *obj_attrs_vendor;
   1519 
   1520   /* The section name to use for a processor-standard attributes section.  */
   1521   const char *obj_attrs_section;
   1522 
   1523   /* Return 1, 2 or 3 to indicate what type of arguments a
   1524      processor-specific tag takes.  */
   1525   int (*obj_attrs_arg_type) (int);
   1526 
   1527   /* The section type to use for an attributes section.  */
   1528   unsigned int obj_attrs_section_type;
   1529 
   1530   /* This function determines the order in which any attributes are
   1531      written.  It must be defined for input in the range
   1532      LEAST_KNOWN_OBJ_ATTRIBUTE..NUM_KNOWN_OBJ_ATTRIBUTES-1 (this range
   1533      is used in order to make unity easy).  The returned value is the
   1534      actual tag number to place in the input position.  */
   1535   int (*obj_attrs_order) (int);
   1536 
   1537   /* Handle merging unknown attributes; either warn and return TRUE,
   1538      or give an error and return FALSE.  */
   1539   bfd_boolean (*obj_attrs_handle_unknown) (bfd *, int);
   1540 
   1541   /* Parse GNU properties.  Return the property kind.  If the property
   1542      is corrupt, issue an error message and return property_corrupt.  */
   1543   enum elf_property_kind (*parse_gnu_properties) (bfd *, unsigned int,
   1544 						  bfd_byte *,
   1545 						  unsigned int);
   1546 
   1547   /* Merge GNU properties.  Return TRUE if property is updated.  */
   1548   bfd_boolean (*merge_gnu_properties) (struct bfd_link_info *, bfd *, bfd *,
   1549 				       elf_property *, elf_property *);
   1550 
   1551   /* Set up GNU properties.  */
   1552   bfd *(*setup_gnu_properties) (struct bfd_link_info *);
   1553 
   1554   /* Fix up GNU properties.  */
   1555   void (*fixup_gnu_properties) (struct bfd_link_info *,
   1556 				elf_property_list **);
   1557 
   1558   /* Encoding used for compact EH tables.  */
   1559   int (*compact_eh_encoding) (struct bfd_link_info *);
   1560 
   1561   /* Opcode representing no unwind.  */
   1562   int (*cant_unwind_opcode) (struct bfd_link_info *);
   1563 
   1564   /* Called when emitting an ELF symbol whoes input version had an
   1565      ST_SHNDX field set to a value in the range SHN_LOPROC..SHN_HIOS.
   1566      Returns the value to be installed in the ST_SHNDX field of the
   1567      emitted symbol.  If not defined, the value is left unchanged.  */
   1568   unsigned int (*symbol_section_index) (bfd *, elf_symbol_type *);
   1569 
   1570   /* Called when a section has extra reloc sections.  */
   1571   bfd_boolean (*init_secondary_reloc_section) (bfd *, Elf_Internal_Shdr *,
   1572 					       const char *, unsigned int);
   1573 
   1574   /* Called when after loading the normal relocs for a section.  */
   1575   bfd_boolean (*slurp_secondary_relocs) (bfd *, asection *, asymbol **);
   1576 
   1577   /* Called after writing the normal relocs for a section.  */
   1578   bfd_boolean (*write_secondary_relocs) (bfd *, asection *);
   1579 
   1580   /* This is non-zero if static TLS segments require a special alignment.  */
   1581   unsigned static_tls_alignment;
   1582 
   1583   /* Alignment for the PT_GNU_STACK segment.  */
   1584   unsigned stack_align;
   1585 
   1586   /* Flag bits to assign to a section of type SHT_STRTAB.  */
   1587   unsigned long elf_strtab_flags;
   1588 
   1589   /* This is TRUE if the linker should act like collect and gather
   1590      global constructors and destructors by name.  This is TRUE for
   1591      MIPS ELF because the Irix 5 tools can not handle the .init
   1592      section.  */
   1593   unsigned collect : 1;
   1594 
   1595   /* This is TRUE if the linker should ignore changes to the type of a
   1596      symbol.  This is TRUE for MIPS ELF because some Irix 5 objects
   1597      record undefined functions as STT_OBJECT although the definitions
   1598      are STT_FUNC.  */
   1599   unsigned type_change_ok : 1;
   1600 
   1601   /* Whether the backend may use REL relocations.  (Some backends use
   1602      both REL and RELA relocations, and this flag is set for those
   1603      backends.)  */
   1604   unsigned may_use_rel_p : 1;
   1605 
   1606   /* Whether the backend may use RELA relocations.  (Some backends use
   1607      both REL and RELA relocations, and this flag is set for those
   1608      backends.)  */
   1609   unsigned may_use_rela_p : 1;
   1610 
   1611   /* Whether the default relocation type is RELA.  If a backend with
   1612      this flag set wants REL relocations for a particular section,
   1613      it must note that explicitly.  Similarly, if this flag is clear,
   1614      and the backend wants RELA relocations for a particular
   1615      section.  */
   1616   unsigned default_use_rela_p : 1;
   1617 
   1618   /* True if PLT and copy relocations should be RELA by default.  */
   1619   unsigned rela_plts_and_copies_p : 1;
   1620 
   1621   /* Set if RELA relocations for a relocatable link can be handled by
   1622      generic code.  Backends that set this flag need do nothing in the
   1623      backend relocate_section routine for relocatable linking.  */
   1624   unsigned rela_normal : 1;
   1625 
   1626   /* Set if DT_REL/DT_RELA/DT_RELSZ/DT_RELASZ should not include PLT
   1627      relocations.  */
   1628   unsigned dtrel_excludes_plt : 1;
   1629 
   1630   /* TRUE if addresses "naturally" sign extend.  This is used when
   1631      swapping in from Elf32 when BFD64.  */
   1632   unsigned sign_extend_vma : 1;
   1633 
   1634   unsigned want_got_plt : 1;
   1635   unsigned plt_readonly : 1;
   1636   unsigned want_plt_sym : 1;
   1637   unsigned plt_not_loaded : 1;
   1638   unsigned plt_alignment : 4;
   1639   unsigned can_gc_sections : 1;
   1640   unsigned can_refcount : 1;
   1641   unsigned want_got_sym : 1;
   1642   unsigned want_dynbss : 1;
   1643   unsigned want_dynrelro : 1;
   1644 
   1645   /* Targets which do not support physical addressing often require
   1646      that the p_paddr field in the section header to be set to zero.
   1647      This field indicates whether this behavior is required.  */
   1648   unsigned want_p_paddr_set_to_zero : 1;
   1649 
   1650   /* Target has broken hardware and/or kernel that requires pages not
   1651      to be mapped twice with different permissions.  */
   1652   unsigned no_page_alias : 1;
   1653 
   1654   /* True if an object file lacking a .note.GNU-stack section
   1655      should be assumed to be requesting exec stack.  At least one
   1656      other file in the link needs to have a .note.GNU-stack section
   1657      for a PT_GNU_STACK segment to be created.  */
   1658   unsigned default_execstack : 1;
   1659 
   1660   /* True if elf_section_data(sec)->this_hdr.contents is sec->rawsize
   1661      in length rather than sec->size in length, if sec->rawsize is
   1662      non-zero and smaller than sec->size.  */
   1663   unsigned caches_rawsize : 1;
   1664 
   1665   /* Address of protected data defined in the shared library may be
   1666      external, i.e., due to copy relocation.   */
   1667   unsigned extern_protected_data : 1;
   1668 
   1669   /* True if `_bfd_elf_link_renumber_dynsyms' must be called even for
   1670      static binaries.  */
   1671   unsigned always_renumber_dynsyms : 1;
   1672 
   1673   /* True if the 32-bit Linux PRPSINFO structure's `pr_uid' and `pr_gid'
   1674      members use a 16-bit data type.  */
   1675   unsigned linux_prpsinfo32_ugid16 : 1;
   1676 
   1677   /* True if the 64-bit Linux PRPSINFO structure's `pr_uid' and `pr_gid'
   1678      members use a 16-bit data type.  */
   1679   unsigned linux_prpsinfo64_ugid16 : 1;
   1680 };
   1681 
   1682 /* Information about reloc sections associated with a bfd_elf_section_data
   1683    structure.  */
   1684 struct bfd_elf_section_reloc_data
   1685 {
   1686   /* The ELF header for the reloc section associated with this
   1687      section, if any.  */
   1688   Elf_Internal_Shdr *hdr;
   1689   /* The number of relocations currently assigned to HDR.  */
   1690   unsigned int count;
   1691   /* The ELF section number of the reloc section.  Only used for an
   1692      output file.  */
   1693   int idx;
   1694   /* Used by the backend linker to store the symbol hash table entries
   1695      associated with relocs against global symbols.  */
   1696   struct elf_link_hash_entry **hashes;
   1697 };
   1698 
   1699 /* Information stored for each BFD section in an ELF file.  This
   1700    structure is allocated by elf_new_section_hook.  */
   1701 
   1702 struct bfd_elf_section_data
   1703 {
   1704   /* The ELF header for this section.  */
   1705   Elf_Internal_Shdr this_hdr;
   1706 
   1707   /* INPUT_SECTION_FLAGS if specified in the linker script.  */
   1708   struct flag_info *section_flag_info;
   1709 
   1710   /* Information about the REL and RELA reloc sections associated
   1711      with this section, if any.  */
   1712   struct bfd_elf_section_reloc_data rel, rela;
   1713 
   1714   /* The ELF section number of this section.  */
   1715   int this_idx;
   1716 
   1717   /* Used by the backend linker when generating a shared library to
   1718      record the dynamic symbol index for a section symbol
   1719      corresponding to this section.  A value of 0 means that there is
   1720      no dynamic symbol for this section.  */
   1721   int dynindx;
   1722 
   1723   /* A pointer to the linked-to section for SHF_LINK_ORDER.  */
   1724   asection *linked_to;
   1725 
   1726   /* A pointer to the swapped relocs.  If the section uses REL relocs,
   1727      rather than RELA, all the r_addend fields will be zero.  This
   1728      pointer may be NULL.  It is used by the backend linker.  */
   1729   Elf_Internal_Rela *relocs;
   1730 
   1731   /* A pointer to a linked list tracking dynamic relocs copied for
   1732      local symbols.  */
   1733   void *local_dynrel;
   1734 
   1735   /* A pointer to the bfd section used for dynamic relocs.  */
   1736   asection *sreloc;
   1737 
   1738   union {
   1739     /* Group name, if this section is a member of a group.  */
   1740     const char *name;
   1741 
   1742     /* Group signature sym, if this is the SHT_GROUP section.  */
   1743     struct bfd_symbol *id;
   1744   } group;
   1745 
   1746   /* For a member of a group, points to the SHT_GROUP section.
   1747      NULL for the SHT_GROUP section itself and non-group sections.  */
   1748   asection *sec_group;
   1749 
   1750   /* A linked list of member sections in the group.  Circular when used by
   1751      the linker.  For the SHT_GROUP section, points at first member.  */
   1752   asection *next_in_group;
   1753 
   1754   /* The FDEs associated with this section.  The u.fde.next_in_section
   1755      field acts as a chain pointer.  */
   1756   struct eh_cie_fde *fde_list;
   1757 
   1758   /* Link from a text section to its .eh_frame_entry section.  */
   1759   asection *eh_frame_entry;
   1760 
   1761   /* TRUE if the section has secondary reloc sections associated with it.
   1762      FIXME: In the future it might be better to change this into a list
   1763      of secondary reloc sections, making lookup easier and faster.  */
   1764   bfd_boolean has_secondary_relocs;
   1765 
   1766   /* A pointer used for various section optimizations.  */
   1767   void *sec_info;
   1768 };
   1769 
   1770 #define elf_section_data(sec) ((struct bfd_elf_section_data*)(sec)->used_by_bfd)
   1771 #define elf_linked_to_section(sec) (elf_section_data(sec)->linked_to)
   1772 #define elf_section_type(sec)	(elf_section_data(sec)->this_hdr.sh_type)
   1773 #define elf_section_flags(sec)	(elf_section_data(sec)->this_hdr.sh_flags)
   1774 #define elf_section_info(sec)	(elf_section_data(sec)->this_hdr.sh_info)
   1775 #define elf_group_name(sec)	(elf_section_data(sec)->group.name)
   1776 #define elf_group_id(sec)	(elf_section_data(sec)->group.id)
   1777 #define elf_next_in_group(sec)	(elf_section_data(sec)->next_in_group)
   1778 #define elf_fde_list(sec)	(elf_section_data(sec)->fde_list)
   1779 #define elf_sec_group(sec)	(elf_section_data(sec)->sec_group)
   1780 #define elf_section_eh_frame_entry(sec)	(elf_section_data(sec)->eh_frame_entry)
   1781 
   1782 #define xvec_get_elf_backend_data(xvec) \
   1783   ((const struct elf_backend_data *) (xvec)->backend_data)
   1784 
   1785 #define get_elf_backend_data(abfd) \
   1786    xvec_get_elf_backend_data ((abfd)->xvec)
   1787 
   1788 /* The least object attributes (within an attributes subsection) known
   1789    for any target.  Some code assumes that the value 0 is not used and
   1790    the field for that attribute can instead be used as a marker to
   1791    indicate that attributes have been initialized.  */
   1792 #define LEAST_KNOWN_OBJ_ATTRIBUTE 2
   1793 
   1794 /* The maximum number of known object attributes for any target.  */
   1795 #define NUM_KNOWN_OBJ_ATTRIBUTES 71
   1796 
   1797 /* The value of an object attribute.  The type indicates whether the attribute
   1798    holds and integer, a string, or both.  It can also indicate that there can
   1799    be no default (i.e. all values must be written to file, even zero), or
   1800    that the value is in error and should not be written to file.  */
   1801 
   1802 typedef struct obj_attribute
   1803 {
   1804 #define ATTR_TYPE_FLAG_INT_VAL    (1 << 0)
   1805 #define ATTR_TYPE_FLAG_STR_VAL    (1 << 1)
   1806 #define ATTR_TYPE_FLAG_NO_DEFAULT (1 << 2)
   1807 #define ATTR_TYPE_FLAG_ERROR	  (1 << 3)
   1808 
   1809 #define ATTR_TYPE_HAS_INT_VAL(TYPE)	((TYPE) & ATTR_TYPE_FLAG_INT_VAL)
   1810 #define ATTR_TYPE_HAS_STR_VAL(TYPE)	((TYPE) & ATTR_TYPE_FLAG_STR_VAL)
   1811 #define ATTR_TYPE_HAS_NO_DEFAULT(TYPE)	((TYPE) & ATTR_TYPE_FLAG_NO_DEFAULT)
   1812 #define ATTR_TYPE_HAS_ERROR(TYPE)	((TYPE) & ATTR_TYPE_FLAG_ERROR)
   1813 
   1814   int type;
   1815   unsigned int i;
   1816   char *s;
   1817 } obj_attribute;
   1818 
   1819 typedef struct obj_attribute_list
   1820 {
   1821   struct obj_attribute_list *next;
   1822   unsigned int tag;
   1823   obj_attribute attr;
   1824 } obj_attribute_list;
   1825 
   1826 /* Object attributes may either be defined by the processor ABI, index
   1827    OBJ_ATTR_PROC in the *_obj_attributes arrays, or be GNU-specific
   1828    (and possibly also processor-specific), index OBJ_ATTR_GNU.  */
   1829 #define OBJ_ATTR_PROC 0
   1830 #define OBJ_ATTR_GNU 1
   1831 #define OBJ_ATTR_FIRST OBJ_ATTR_PROC
   1832 #define OBJ_ATTR_LAST OBJ_ATTR_GNU
   1833 
   1834 /* The following object attribute tags are taken as generic, for all
   1835    targets and for "gnu" where there is no target standard.  */
   1836 enum
   1837 {
   1838   Tag_NULL = 0,
   1839   Tag_File = 1,
   1840   Tag_Section = 2,
   1841   Tag_Symbol = 3,
   1842   Tag_compatibility = 32
   1843 };
   1844 
   1845 /* The following struct stores information about every SystemTap section
   1846    found in the object file.  */
   1847 struct sdt_note
   1848 {
   1849   struct sdt_note *next;
   1850   bfd_size_type size;
   1851   bfd_byte data[1];
   1852 };
   1853 
   1854 /* tdata information grabbed from an elf core file.  */
   1855 struct core_elf_obj_tdata
   1856 {
   1857   int signal;
   1858   int pid;
   1859   int lwpid;
   1860   char* program;
   1861   char* command;
   1862 };
   1863 
   1864 /* Extra tdata information held for output ELF BFDs.  */
   1865 struct output_elf_obj_tdata
   1866 {
   1867   struct elf_segment_map *seg_map;
   1868   struct elf_strtab_hash *strtab_ptr;
   1869 
   1870   /* STT_SECTION symbols for each section */
   1871   asymbol **section_syms;
   1872 
   1873   /* Used to determine if PT_GNU_EH_FRAME segment header should be
   1874      created.  */
   1875   asection *eh_frame_hdr;
   1876 
   1877   /* NT_GNU_BUILD_ID note type info.  */
   1878   struct
   1879   {
   1880     bfd_boolean (*after_write_object_contents) (bfd *);
   1881     const char *style;
   1882     asection *sec;
   1883   } build_id;
   1884 
   1885   /* Records the result of `get_program_header_size'.  */
   1886   bfd_size_type program_header_size;
   1887 
   1888   /* Used when laying out sections.  */
   1889   file_ptr next_file_pos;
   1890 
   1891   int num_section_syms;
   1892   unsigned int shstrtab_section, strtab_section;
   1893 
   1894   /* Segment flags for the PT_GNU_STACK segment.  */
   1895   unsigned int stack_flags;
   1896 
   1897   /* Used to determine if the e_flags field has been initialized */
   1898   bfd_boolean flags_init;
   1899 };
   1900 
   1901 /* Indicate if the bfd contains SHF_GNU_MBIND sections or symbols that
   1902    have the STT_GNU_IFUNC symbol type or STB_GNU_UNIQUE binding.  Used
   1903    to set the osabi field in the ELF header structure.  */
   1904 enum elf_gnu_osabi
   1905 {
   1906   elf_gnu_osabi_mbind = 1 << 0,
   1907   elf_gnu_osabi_ifunc = 1 << 1,
   1908   elf_gnu_osabi_unique = 1 << 2,
   1909 };
   1910 
   1911 typedef struct elf_section_list
   1912 {
   1913   Elf_Internal_Shdr	     hdr;
   1914   unsigned int		     ndx;
   1915   struct elf_section_list *  next;
   1916 } elf_section_list;
   1917 
   1918 enum dynamic_lib_link_class {
   1919   DYN_NORMAL = 0,
   1920   DYN_AS_NEEDED = 1,
   1921   DYN_DT_NEEDED = 2,
   1922   DYN_NO_ADD_NEEDED = 4,
   1923   DYN_NO_NEEDED = 8
   1924 };
   1925 
   1926 /* Some private data is stashed away for future use using the tdata pointer
   1927    in the bfd structure.  */
   1928 
   1929 struct elf_obj_tdata
   1930 {
   1931   Elf_Internal_Ehdr elf_header[1];	/* Actual data, but ref like ptr */
   1932   Elf_Internal_Shdr **elf_sect_ptr;
   1933   Elf_Internal_Phdr *phdr;
   1934   Elf_Internal_Shdr symtab_hdr;
   1935   Elf_Internal_Shdr shstrtab_hdr;
   1936   Elf_Internal_Shdr strtab_hdr;
   1937   Elf_Internal_Shdr dynsymtab_hdr;
   1938   Elf_Internal_Shdr dynstrtab_hdr;
   1939   Elf_Internal_Shdr dynversym_hdr;
   1940   Elf_Internal_Shdr dynverref_hdr;
   1941   Elf_Internal_Shdr dynverdef_hdr;
   1942   elf_section_list * symtab_shndx_list;
   1943   bfd_vma gp;				/* The gp value */
   1944   unsigned int gp_size;			/* The gp size */
   1945   unsigned int num_elf_sections;	/* elf_sect_ptr size */
   1946 
   1947   /* A mapping from external symbols to entries in the linker hash
   1948      table, used when linking.  This is indexed by the symbol index
   1949      minus the sh_info field of the symbol table header.  */
   1950   struct elf_link_hash_entry **sym_hashes;
   1951 
   1952   /* Track usage and final offsets of GOT entries for local symbols.
   1953      This array is indexed by symbol index.  Elements are used
   1954      identically to "got" in struct elf_link_hash_entry.  */
   1955   union
   1956     {
   1957       bfd_signed_vma *refcounts;
   1958       bfd_vma *offsets;
   1959       struct got_entry **ents;
   1960     } local_got;
   1961 
   1962   /* The linker ELF emulation code needs to let the backend ELF linker
   1963      know what filename should be used for a dynamic object if the
   1964      dynamic object is found using a search.  The emulation code then
   1965      sometimes needs to know what name was actually used.  Until the
   1966      file has been added to the linker symbol table, this field holds
   1967      the name the linker wants.  After it has been added, it holds the
   1968      name actually used, which will be the DT_SONAME entry if there is
   1969      one.  */
   1970   const char *dt_name;
   1971 
   1972   /* The linker emulation needs to know what audit libs
   1973      are used by a dynamic object.  */
   1974   const char *dt_audit;
   1975 
   1976   /* Used by find_nearest_line entry point.  */
   1977   void *line_info;
   1978 
   1979   /* A place to stash dwarf1 info for this bfd.  */
   1980   struct dwarf1_debug *dwarf1_find_line_info;
   1981 
   1982   /* A place to stash dwarf2 info for this bfd.  */
   1983   void *dwarf2_find_line_info;
   1984 
   1985   /* Stash away info for yet another find line/function variant.  */
   1986   void *elf_find_function_cache;
   1987 
   1988   /* Number of symbol version definitions we are about to emit.  */
   1989   unsigned int cverdefs;
   1990 
   1991   /* Number of symbol version references we are about to emit.  */
   1992   unsigned int cverrefs;
   1993 
   1994   /* Symbol version definitions in external objects.  */
   1995   Elf_Internal_Verdef *verdef;
   1996 
   1997   /* Symbol version references to external objects.  */
   1998   Elf_Internal_Verneed *verref;
   1999 
   2000   /* A pointer to the .eh_frame section.  */
   2001   asection *eh_frame_section;
   2002 
   2003   /* Symbol buffer.  */
   2004   void *symbuf;
   2005 
   2006   /* List of GNU properties.  Will be updated by setup_gnu_properties
   2007      after all input GNU properties are merged for output.  */
   2008   elf_property_list *properties;
   2009 
   2010   obj_attribute known_obj_attributes[2][NUM_KNOWN_OBJ_ATTRIBUTES];
   2011   obj_attribute_list *other_obj_attributes[2];
   2012 
   2013   /* Linked-list containing information about every Systemtap section
   2014      found in the object file.  Each section corresponds to one entry
   2015      in the list.  */
   2016   struct sdt_note *sdt_note_head;
   2017 
   2018   Elf_Internal_Shdr **group_sect_ptr;
   2019   unsigned int num_group;
   2020 
   2021   /* Index into group_sect_ptr, updated by setup_group when finding a
   2022      section's group.  Used to optimize subsequent group searches.  */
   2023   unsigned int group_search_offset;
   2024 
   2025   unsigned int symtab_section, dynsymtab_section;
   2026   unsigned int dynversym_section, dynverdef_section, dynverref_section;
   2027 
   2028   /* An identifier used to distinguish different target
   2029      specific extensions to this structure.  */
   2030   ENUM_BITFIELD (elf_target_id) object_id : 6;
   2031 
   2032   /* Whether a dyanmic object was specified normally on the linker
   2033      command line, or was specified when --as-needed was in effect,
   2034      or was found via a DT_NEEDED entry.  */
   2035   ENUM_BITFIELD (dynamic_lib_link_class) dyn_lib_class : 4;
   2036 
   2037   /* Whether the bfd uses OS specific bits that require ELFOSABI_GNU.  */
   2038   ENUM_BITFIELD (elf_gnu_osabi) has_gnu_osabi : 3;
   2039 
   2040   /* Whether if the bfd contains the GNU_PROPERTY_NO_COPY_ON_PROTECTED
   2041      property.  */
   2042   unsigned int has_no_copy_on_protected : 1;
   2043 
   2044   /* Irix 5 often screws up the symbol table, sorting local symbols
   2045      after global symbols.  This flag is set if the symbol table in
   2046      this BFD appears to be screwed up.  If it is, we ignore the
   2047      sh_info field in the symbol table header, and always read all the
   2048      symbols.  */
   2049   unsigned int bad_symtab : 1;
   2050 
   2051   /* Information grabbed from an elf core file.  */
   2052   struct core_elf_obj_tdata *core;
   2053 
   2054   /* More information held for output ELF BFDs.  */
   2055   struct output_elf_obj_tdata *o;
   2056 };
   2057 
   2058 #define elf_tdata(bfd)		((bfd) -> tdata.elf_obj_data)
   2059 
   2060 #define elf_object_id(bfd)	(elf_tdata(bfd) -> object_id)
   2061 #define elf_program_header_size(bfd) (elf_tdata(bfd) -> o->program_header_size)
   2062 #define elf_elfheader(bfd)	(elf_tdata(bfd) -> elf_header)
   2063 #define elf_elfsections(bfd)	(elf_tdata(bfd) -> elf_sect_ptr)
   2064 #define elf_numsections(bfd)	(elf_tdata(bfd) -> num_elf_sections)
   2065 #define elf_seg_map(bfd)	(elf_tdata(bfd) -> o->seg_map)
   2066 #define elf_next_file_pos(bfd)	(elf_tdata(bfd) -> o->next_file_pos)
   2067 #define elf_eh_frame_hdr(bfd)	(elf_tdata(bfd) -> o->eh_frame_hdr)
   2068 #define elf_stack_flags(bfd)	(elf_tdata(bfd) -> o->stack_flags)
   2069 #define elf_shstrtab(bfd)	(elf_tdata(bfd) -> o->strtab_ptr)
   2070 #define elf_onesymtab(bfd)	(elf_tdata(bfd) -> symtab_section)
   2071 #define elf_symtab_shndx_list(bfd)	(elf_tdata(bfd) -> symtab_shndx_list)
   2072 #define elf_strtab_sec(bfd)	(elf_tdata(bfd) -> o->strtab_section)
   2073 #define elf_shstrtab_sec(bfd)	(elf_tdata(bfd) -> o->shstrtab_section)
   2074 #define elf_symtab_hdr(bfd)	(elf_tdata(bfd) -> symtab_hdr)
   2075 #define elf_dynsymtab(bfd)	(elf_tdata(bfd) -> dynsymtab_section)
   2076 #define elf_dynversym(bfd)	(elf_tdata(bfd) -> dynversym_section)
   2077 #define elf_dynverdef(bfd)	(elf_tdata(bfd) -> dynverdef_section)
   2078 #define elf_dynverref(bfd)	(elf_tdata(bfd) -> dynverref_section)
   2079 #define elf_eh_frame_section(bfd) \
   2080 				(elf_tdata(bfd) -> eh_frame_section)
   2081 #define elf_section_syms(bfd)	(elf_tdata(bfd) -> o->section_syms)
   2082 #define elf_num_section_syms(bfd) (elf_tdata(bfd) -> o->num_section_syms)
   2083 #define core_prpsinfo(bfd)	(elf_tdata(bfd) -> prpsinfo)
   2084 #define core_prstatus(bfd)	(elf_tdata(bfd) -> prstatus)
   2085 #define elf_gp(bfd)		(elf_tdata(bfd) -> gp)
   2086 #define elf_gp_size(bfd)	(elf_tdata(bfd) -> gp_size)
   2087 #define elf_sym_hashes(bfd)	(elf_tdata(bfd) -> sym_hashes)
   2088 #define elf_local_got_refcounts(bfd) (elf_tdata(bfd) -> local_got.refcounts)
   2089 #define elf_local_got_offsets(bfd) (elf_tdata(bfd) -> local_got.offsets)
   2090 #define elf_local_got_ents(bfd) (elf_tdata(bfd) -> local_got.ents)
   2091 #define elf_dt_name(bfd)	(elf_tdata(bfd) -> dt_name)
   2092 #define elf_dt_audit(bfd)	(elf_tdata(bfd) -> dt_audit)
   2093 #define elf_dyn_lib_class(bfd)	(elf_tdata(bfd) -> dyn_lib_class)
   2094 #define elf_bad_symtab(bfd)	(elf_tdata(bfd) -> bad_symtab)
   2095 #define elf_flags_init(bfd)	(elf_tdata(bfd) -> o->flags_init)
   2096 #define elf_known_obj_attributes(bfd) (elf_tdata (bfd) -> known_obj_attributes)
   2097 #define elf_other_obj_attributes(bfd) (elf_tdata (bfd) -> other_obj_attributes)
   2098 #define elf_known_obj_attributes_proc(bfd) \
   2099   (elf_known_obj_attributes (bfd) [OBJ_ATTR_PROC])
   2100 #define elf_other_obj_attributes_proc(bfd) \
   2101   (elf_other_obj_attributes (bfd) [OBJ_ATTR_PROC])
   2102 #define elf_properties(bfd) (elf_tdata (bfd) -> properties)
   2103 #define elf_has_no_copy_on_protected(bfd) \
   2104   (elf_tdata(bfd) -> has_no_copy_on_protected)
   2105 
   2106 extern void _bfd_elf_swap_verdef_in
   2108   (bfd *, const Elf_External_Verdef *, Elf_Internal_Verdef *);
   2109 extern void _bfd_elf_swap_verdef_out
   2110   (bfd *, const Elf_Internal_Verdef *, Elf_External_Verdef *);
   2111 extern void _bfd_elf_swap_verdaux_in
   2112   (bfd *, const Elf_External_Verdaux *, Elf_Internal_Verdaux *);
   2113 extern void _bfd_elf_swap_verdaux_out
   2114   (bfd *, const Elf_Internal_Verdaux *, Elf_External_Verdaux *);
   2115 extern void _bfd_elf_swap_verneed_in
   2116   (bfd *, const Elf_External_Verneed *, Elf_Internal_Verneed *);
   2117 extern void _bfd_elf_swap_verneed_out
   2118   (bfd *, const Elf_Internal_Verneed *, Elf_External_Verneed *);
   2119 extern void _bfd_elf_swap_vernaux_in
   2120   (bfd *, const Elf_External_Vernaux *, Elf_Internal_Vernaux *);
   2121 extern void _bfd_elf_swap_vernaux_out
   2122   (bfd *, const Elf_Internal_Vernaux *, Elf_External_Vernaux *);
   2123 extern void _bfd_elf_swap_versym_in
   2124   (bfd *, const Elf_External_Versym *, Elf_Internal_Versym *);
   2125 extern void _bfd_elf_swap_versym_out
   2126   (bfd *, const Elf_Internal_Versym *, Elf_External_Versym *);
   2127 
   2128 extern unsigned int _bfd_elf_section_from_bfd_section
   2129   (bfd *, asection *);
   2130 extern char *bfd_elf_string_from_elf_section
   2131   (bfd *, unsigned, unsigned);
   2132 extern Elf_Internal_Sym *bfd_elf_get_elf_syms
   2133   (bfd *, Elf_Internal_Shdr *, size_t, size_t, Elf_Internal_Sym *, void *,
   2134    Elf_External_Sym_Shndx *);
   2135 extern char * bfd_elf_get_str_section (bfd *, unsigned int);
   2136 extern const char *bfd_elf_sym_name
   2137   (bfd *, Elf_Internal_Shdr *, Elf_Internal_Sym *, asection *);
   2138 
   2139 extern bfd_boolean _bfd_elf_copy_private_bfd_data
   2140   (bfd *, bfd *);
   2141 extern bfd_boolean _bfd_elf_print_private_bfd_data
   2142   (bfd *, void *);
   2143 const char * _bfd_elf_get_symbol_version_string
   2144   (bfd *, asymbol *, bfd_boolean, bfd_boolean *);
   2145 extern void bfd_elf_print_symbol
   2146   (bfd *, void *, asymbol *, bfd_print_symbol_type);
   2147 
   2148 extern unsigned int _bfd_elf_eh_frame_address_size
   2149   (bfd *, const asection *);
   2150 extern bfd_byte _bfd_elf_encode_eh_address
   2151   (bfd *abfd, struct bfd_link_info *info, asection *osec, bfd_vma offset,
   2152    asection *loc_sec, bfd_vma loc_offset, bfd_vma *encoded);
   2153 extern bfd_boolean _bfd_elf_can_make_relative
   2154   (bfd *input_bfd, struct bfd_link_info *info, asection *eh_frame_section);
   2155 
   2156 extern enum elf_reloc_type_class _bfd_elf_reloc_type_class
   2157   (const struct bfd_link_info *, const asection *,
   2158    const Elf_Internal_Rela *);
   2159 extern bfd_vma _bfd_elf_rela_local_sym
   2160   (bfd *, Elf_Internal_Sym *, asection **, Elf_Internal_Rela *);
   2161 extern bfd_vma _bfd_elf_rel_local_sym
   2162   (bfd *, Elf_Internal_Sym *, asection **, bfd_vma);
   2163 extern bfd_vma _bfd_elf_section_offset
   2164   (bfd *, struct bfd_link_info *, asection *, bfd_vma);
   2165 
   2166 extern unsigned long bfd_elf_hash
   2167   (const char *);
   2168 extern unsigned long bfd_elf_gnu_hash
   2169   (const char *);
   2170 
   2171 extern bfd_reloc_status_type bfd_elf_generic_reloc
   2172   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
   2173 extern bfd_boolean bfd_elf_allocate_object
   2174   (bfd *, size_t, enum elf_target_id);
   2175 extern bfd_boolean bfd_elf_make_object
   2176   (bfd *);
   2177 extern bfd_boolean bfd_elf_mkcorefile
   2178   (bfd *);
   2179 extern bfd_boolean _bfd_elf_make_section_from_shdr
   2180   (bfd *, Elf_Internal_Shdr *, const char *, int);
   2181 extern bfd_boolean _bfd_elf_make_section_from_phdr
   2182   (bfd *, Elf_Internal_Phdr *, int, const char *);
   2183 extern struct bfd_hash_entry *_bfd_elf_link_hash_newfunc
   2184   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
   2185 extern struct bfd_link_hash_table *_bfd_elf_link_hash_table_create
   2186   (bfd *);
   2187 extern void _bfd_elf_link_hash_table_free
   2188   (bfd *);
   2189 extern void _bfd_elf_link_hash_copy_indirect
   2190   (struct bfd_link_info *, struct elf_link_hash_entry *,
   2191    struct elf_link_hash_entry *);
   2192 extern void _bfd_elf_link_hash_hide_symbol
   2193   (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean);
   2194 extern void _bfd_elf_link_hide_symbol
   2195   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
   2196 extern bfd_boolean _bfd_elf_link_hash_fixup_symbol
   2197   (struct bfd_link_info *, struct elf_link_hash_entry *);
   2198 extern bfd_boolean _bfd_elf_link_hash_table_init
   2199   (struct elf_link_hash_table *, bfd *,
   2200    struct bfd_hash_entry *(*)
   2201      (struct bfd_hash_entry *, struct bfd_hash_table *, const char *),
   2202    unsigned int, enum elf_target_id);
   2203 extern bfd_boolean _bfd_elf_slurp_version_tables
   2204   (bfd *, bfd_boolean);
   2205 extern bfd_boolean _bfd_elf_merge_sections
   2206   (bfd *, struct bfd_link_info *);
   2207 extern bfd_boolean _bfd_elf_match_sections_by_type
   2208   (bfd *, const asection *, bfd *, const asection *);
   2209 extern bfd_boolean bfd_elf_is_group_section
   2210   (bfd *, const struct bfd_section *);
   2211 extern const char *bfd_elf_group_name
   2212   (bfd *, const struct bfd_section *);
   2213 extern bfd_boolean _bfd_elf_section_already_linked
   2214   (bfd *, asection *, struct bfd_link_info *);
   2215 extern void bfd_elf_set_group_contents
   2216   (bfd *, asection *, void *);
   2217 extern unsigned int _bfd_elf_filter_global_symbols
   2218   (bfd *, struct bfd_link_info *, asymbol **, long);
   2219 extern asection *_bfd_elf_check_kept_section
   2220   (asection *, struct bfd_link_info *);
   2221 #define _bfd_elf_link_just_syms _bfd_generic_link_just_syms
   2222 extern void _bfd_elf_copy_link_hash_symbol_type
   2223   (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
   2224 extern bfd_boolean _bfd_elf_size_group_sections
   2225   (struct bfd_link_info *);
   2226 extern bfd_boolean _bfd_elf_fixup_group_sections
   2227 (bfd *, asection *);
   2228 extern bfd_boolean _bfd_elf_copy_private_header_data
   2229   (bfd *, bfd *);
   2230 extern bfd_boolean _bfd_elf_copy_private_symbol_data
   2231   (bfd *, asymbol *, bfd *, asymbol *);
   2232 #define _bfd_generic_init_private_section_data \
   2233   _bfd_elf_init_private_section_data
   2234 extern bfd_boolean _bfd_elf_init_private_section_data
   2235   (bfd *, asection *, bfd *, asection *, struct bfd_link_info *);
   2236 extern bfd_boolean _bfd_elf_copy_private_section_data
   2237   (bfd *, asection *, bfd *, asection *);
   2238 extern bfd_boolean _bfd_elf_write_object_contents
   2239   (bfd *);
   2240 extern bfd_boolean _bfd_elf_write_corefile_contents
   2241   (bfd *);
   2242 extern bfd_boolean _bfd_elf_set_section_contents
   2243   (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
   2244 extern long _bfd_elf_get_symtab_upper_bound
   2245   (bfd *);
   2246 extern long _bfd_elf_canonicalize_symtab
   2247   (bfd *, asymbol **);
   2248 extern long _bfd_elf_get_dynamic_symtab_upper_bound
   2249   (bfd *);
   2250 extern long _bfd_elf_canonicalize_dynamic_symtab
   2251   (bfd *, asymbol **);
   2252 extern long _bfd_elf_get_synthetic_symtab
   2253   (bfd *, long, asymbol **, long, asymbol **, asymbol **);
   2254 extern long _bfd_elf_get_reloc_upper_bound
   2255   (bfd *, sec_ptr);
   2256 extern long _bfd_elf_canonicalize_reloc
   2257   (bfd *, sec_ptr, arelent **, asymbol **);
   2258 extern asection * _bfd_elf_get_dynamic_reloc_section
   2259   (bfd *, asection *, bfd_boolean);
   2260 extern asection * _bfd_elf_make_dynamic_reloc_section
   2261   (asection *, bfd *, unsigned int, bfd *, bfd_boolean);
   2262 extern long _bfd_elf_get_dynamic_reloc_upper_bound
   2263   (bfd *);
   2264 extern long _bfd_elf_canonicalize_dynamic_reloc
   2265   (bfd *, arelent **, asymbol **);
   2266 extern asymbol *_bfd_elf_make_empty_symbol
   2267   (bfd *);
   2268 extern void _bfd_elf_get_symbol_info
   2269   (bfd *, asymbol *, symbol_info *);
   2270 extern bfd_boolean _bfd_elf_is_local_label_name
   2271   (bfd *, const char *);
   2272 extern alent *_bfd_elf_get_lineno
   2273   (bfd *, asymbol *);
   2274 extern bfd_boolean _bfd_elf_set_arch_mach
   2275   (bfd *, enum bfd_architecture, unsigned long);
   2276 extern bfd_boolean _bfd_elf_find_nearest_line
   2277   (bfd *, asymbol **, asection *, bfd_vma,
   2278    const char **, const char **, unsigned int *, unsigned int *);
   2279 extern bfd_boolean _bfd_elf_find_line
   2280   (bfd *, asymbol **, asymbol *, const char **, unsigned int *);
   2281 extern bfd_boolean _bfd_elf_find_inliner_info
   2282   (bfd *, const char **, const char **, unsigned int *);
   2283 extern asymbol *_bfd_elf_find_function
   2284   (bfd *, asymbol **, asection *, bfd_vma, const char **, const char **);
   2285 #define _bfd_elf_read_minisymbols _bfd_generic_read_minisymbols
   2286 #define _bfd_elf_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
   2287 extern int _bfd_elf_sizeof_headers
   2288   (bfd *, struct bfd_link_info *);
   2289 extern bfd_boolean _bfd_elf_new_section_hook
   2290   (bfd *, asection *);
   2291 extern const struct bfd_elf_special_section *_bfd_elf_get_special_section
   2292   (const char *, const struct bfd_elf_special_section *, unsigned int);
   2293 extern const struct bfd_elf_special_section *_bfd_elf_get_sec_type_attr
   2294   (bfd *, asection *);
   2295 
   2296 extern bfd_boolean _bfd_elf_link_hide_sym_by_version
   2297   (struct bfd_link_info *, struct elf_link_hash_entry *);
   2298 
   2299 /* If the target doesn't have reloc handling written yet:  */
   2300 extern bfd_boolean _bfd_elf_no_info_to_howto
   2301   (bfd *, arelent *, Elf_Internal_Rela *);
   2302 
   2303 extern bfd_boolean bfd_section_from_shdr
   2304   (bfd *, unsigned int shindex);
   2305 extern bfd_boolean bfd_section_from_phdr
   2306   (bfd *, Elf_Internal_Phdr *, int);
   2307 
   2308 extern int _bfd_elf_symbol_from_bfd_symbol
   2309   (bfd *, asymbol **);
   2310 
   2311 extern Elf_Internal_Sym *bfd_sym_from_r_symndx
   2312   (struct sym_cache *, bfd *, unsigned long);
   2313 extern asection *bfd_section_from_elf_index
   2314   (bfd *, unsigned int);
   2315 
   2316 extern struct elf_strtab_hash * _bfd_elf_strtab_init
   2317   (void);
   2318 extern void _bfd_elf_strtab_free
   2319   (struct elf_strtab_hash *);
   2320 extern size_t _bfd_elf_strtab_add
   2321   (struct elf_strtab_hash *, const char *, bfd_boolean);
   2322 extern void _bfd_elf_strtab_addref
   2323   (struct elf_strtab_hash *, size_t);
   2324 extern void _bfd_elf_strtab_delref
   2325   (struct elf_strtab_hash *, size_t);
   2326 extern unsigned int _bfd_elf_strtab_refcount
   2327   (struct elf_strtab_hash *, size_t);
   2328 extern void _bfd_elf_strtab_clear_all_refs
   2329   (struct elf_strtab_hash *);
   2330 extern void *_bfd_elf_strtab_save
   2331   (struct elf_strtab_hash *);
   2332 extern void _bfd_elf_strtab_restore
   2333   (struct elf_strtab_hash *, void *);
   2334 extern bfd_size_type _bfd_elf_strtab_size
   2335   (struct elf_strtab_hash *);
   2336 extern bfd_size_type _bfd_elf_strtab_len
   2337   (struct elf_strtab_hash *);
   2338 extern bfd_size_type _bfd_elf_strtab_offset
   2339   (struct elf_strtab_hash *, size_t);
   2340 extern const char * _bfd_elf_strtab_str
   2341   (struct elf_strtab_hash *, size_t idx, bfd_size_type *offset);
   2342 extern bfd_boolean _bfd_elf_strtab_emit
   2343   (bfd *, struct elf_strtab_hash *);
   2344 extern void _bfd_elf_strtab_finalize
   2345   (struct elf_strtab_hash *);
   2346 
   2347 extern bfd_boolean bfd_elf_parse_eh_frame_entries
   2348   (bfd *, struct bfd_link_info *);
   2349 extern bfd_boolean _bfd_elf_parse_eh_frame_entry
   2350   (struct bfd_link_info *, asection *, struct elf_reloc_cookie *);
   2351 extern void _bfd_elf_parse_eh_frame
   2352   (bfd *, struct bfd_link_info *, asection *, struct elf_reloc_cookie *);
   2353 extern bfd_boolean _bfd_elf_end_eh_frame_parsing
   2354   (struct bfd_link_info *info);
   2355 
   2356 extern bfd_boolean _bfd_elf_discard_section_eh_frame
   2357   (bfd *, struct bfd_link_info *, asection *,
   2358    bfd_boolean (*) (bfd_vma, void *), struct elf_reloc_cookie *);
   2359 extern bfd_boolean _bfd_elf_adjust_eh_frame_global_symbol
   2360   (struct elf_link_hash_entry *, void *);
   2361 extern bfd_boolean _bfd_elf_discard_section_eh_frame_hdr
   2362   (bfd *, struct bfd_link_info *);
   2363 extern bfd_vma _bfd_elf_eh_frame_section_offset
   2364   (bfd *, struct bfd_link_info *, asection *, bfd_vma);
   2365 extern bfd_boolean _bfd_elf_write_section_eh_frame
   2366   (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
   2367 bfd_boolean _bfd_elf_write_section_eh_frame_entry
   2368   (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
   2369 extern bfd_boolean _bfd_elf_fixup_eh_frame_hdr (struct bfd_link_info *);
   2370 extern bfd_boolean _bfd_elf_write_section_eh_frame_hdr
   2371   (bfd *, struct bfd_link_info *);
   2372 extern bfd_boolean _bfd_elf_eh_frame_present
   2373   (struct bfd_link_info *);
   2374 extern bfd_boolean _bfd_elf_eh_frame_entry_present
   2375   (struct bfd_link_info *);
   2376 extern bfd_boolean _bfd_elf_maybe_strip_eh_frame_hdr
   2377   (struct bfd_link_info *);
   2378 
   2379 extern bfd_boolean _bfd_elf_hash_symbol (struct elf_link_hash_entry *);
   2380 
   2381 extern long _bfd_elf_link_lookup_local_dynindx
   2382   (struct bfd_link_info *, bfd *, long);
   2383 extern bfd_boolean _bfd_elf_compute_section_file_positions
   2384   (bfd *, struct bfd_link_info *);
   2385 extern file_ptr _bfd_elf_assign_file_position_for_section
   2386   (Elf_Internal_Shdr *, file_ptr, bfd_boolean);
   2387 extern bfd_boolean _bfd_elf_modify_headers
   2388   (bfd *, struct bfd_link_info *);
   2389 
   2390 extern bfd_boolean _bfd_elf_validate_reloc
   2391   (bfd *, arelent *);
   2392 
   2393 extern bfd_boolean bfd_elf_record_link_assignment
   2394   (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
   2395    bfd_boolean);
   2396 extern bfd_boolean bfd_elf_stack_segment_size (bfd *, struct bfd_link_info *,
   2397 					       const char *, bfd_vma);
   2398 extern bfd_boolean bfd_elf_size_dynamic_sections
   2399   (bfd *, const char *, const char *, const char *, const char *, const char *,
   2400    const char * const *, struct bfd_link_info *, struct bfd_section **);
   2401 extern bfd_boolean bfd_elf_size_dynsym_hash_dynstr
   2402   (bfd *, struct bfd_link_info *);
   2403 extern bfd_boolean bfd_elf_get_bfd_needed_list
   2404   (bfd *, struct bfd_link_needed_list **);
   2405 extern struct bfd_link_needed_list *bfd_elf_get_needed_list
   2406   (bfd *, struct bfd_link_info *);
   2407 extern void bfd_elf_set_dt_needed_name
   2408   (bfd *, const char *);
   2409 extern const char *bfd_elf_get_dt_soname
   2410   (bfd *);
   2411 extern void bfd_elf_set_dyn_lib_class
   2412   (bfd *, enum dynamic_lib_link_class);
   2413 extern int bfd_elf_get_dyn_lib_class
   2414   (bfd *);
   2415 extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
   2416   (bfd *, struct bfd_link_info *);
   2417 extern int bfd_elf_discard_info
   2418   (bfd *, struct bfd_link_info *);
   2419 extern unsigned int _bfd_elf_default_action_discarded
   2420   (struct bfd_section *);
   2421 extern struct bfd_section *_bfd_elf_tls_setup
   2422   (bfd *, struct bfd_link_info *);
   2423 
   2424 extern bfd_boolean _bfd_elf_link_create_dynamic_sections
   2425   (bfd *, struct bfd_link_info *);
   2426 extern bfd_boolean _bfd_elf_omit_section_dynsym_default
   2427   (bfd *, struct bfd_link_info *, asection *);
   2428 extern bfd_boolean _bfd_elf_omit_section_dynsym_all
   2429   (bfd *, struct bfd_link_info *, asection *);
   2430 extern bfd_boolean _bfd_elf_create_dynamic_sections
   2431   (bfd *, struct bfd_link_info *);
   2432 extern bfd_boolean _bfd_elf_create_got_section
   2433   (bfd *, struct bfd_link_info *);
   2434 extern asection *_bfd_elf_section_for_symbol
   2435   (struct elf_reloc_cookie *, unsigned long, bfd_boolean);
   2436 extern struct elf_link_hash_entry *_bfd_elf_define_linkage_sym
   2437   (bfd *, struct bfd_link_info *, asection *, const char *);
   2438 extern void _bfd_elf_init_1_index_section
   2439   (bfd *, struct bfd_link_info *);
   2440 extern void _bfd_elf_init_2_index_sections
   2441   (bfd *, struct bfd_link_info *);
   2442 
   2443 extern bfd_boolean _bfd_elfcore_make_pseudosection
   2444   (bfd *, char *, size_t, ufile_ptr);
   2445 extern char *_bfd_elfcore_strndup
   2446   (bfd *, char *, size_t);
   2447 
   2448 extern Elf_Internal_Rela *_bfd_elf_link_read_relocs
   2449   (bfd *, asection *, void *, Elf_Internal_Rela *, bfd_boolean);
   2450 
   2451 extern bfd_boolean _bfd_elf_link_output_relocs
   2452   (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *,
   2453    struct elf_link_hash_entry **);
   2454 
   2455 extern bfd_boolean _bfd_elf_adjust_dynamic_copy
   2456   (struct bfd_link_info *, struct elf_link_hash_entry *, asection *);
   2457 
   2458 extern bfd_boolean _bfd_elf_dynamic_symbol_p
   2459   (struct elf_link_hash_entry *, struct bfd_link_info *, bfd_boolean);
   2460 
   2461 extern bfd_boolean _bfd_elf_symbol_refs_local_p
   2462   (struct elf_link_hash_entry *, struct bfd_link_info *, bfd_boolean);
   2463 
   2464 extern bfd_reloc_status_type bfd_elf_perform_complex_relocation
   2465   (bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, bfd_vma);
   2466 
   2467 extern bfd_boolean _bfd_elf_setup_sections
   2468   (bfd *);
   2469 
   2470 extern struct bfd_link_hash_entry *bfd_elf_define_start_stop
   2471   (struct bfd_link_info *, const char *, asection *);
   2472 
   2473 extern bfd_boolean _bfd_elf_init_file_header (bfd *, struct bfd_link_info *);
   2474 
   2475 extern bfd_boolean _bfd_elf_final_write_processing (bfd *);
   2476 
   2477 extern bfd_cleanup bfd_elf32_object_p
   2478   (bfd *);
   2479 extern bfd_cleanup bfd_elf32_core_file_p
   2480   (bfd *);
   2481 extern char *bfd_elf32_core_file_failing_command
   2482   (bfd *);
   2483 extern int bfd_elf32_core_file_failing_signal
   2484   (bfd *);
   2485 extern bfd_boolean bfd_elf32_core_file_matches_executable_p
   2486   (bfd *, bfd *);
   2487 extern int bfd_elf32_core_file_pid
   2488   (bfd *);
   2489 extern bfd_boolean _bfd_elf32_core_find_build_id
   2490   (bfd *, bfd_vma);
   2491 
   2492 extern bfd_boolean bfd_elf32_swap_symbol_in
   2493   (bfd *, const void *, const void *, Elf_Internal_Sym *);
   2494 extern void bfd_elf32_swap_symbol_out
   2495   (bfd *, const Elf_Internal_Sym *, void *, void *);
   2496 extern void bfd_elf32_swap_reloc_in
   2497   (bfd *, const bfd_byte *, Elf_Internal_Rela *);
   2498 extern void bfd_elf32_swap_reloc_out
   2499   (bfd *, const Elf_Internal_Rela *, bfd_byte *);
   2500 extern void bfd_elf32_swap_reloca_in
   2501   (bfd *, const bfd_byte *, Elf_Internal_Rela *);
   2502 extern void bfd_elf32_swap_reloca_out
   2503   (bfd *, const Elf_Internal_Rela *, bfd_byte *);
   2504 extern void bfd_elf32_swap_phdr_in
   2505   (bfd *, const Elf32_External_Phdr *, Elf_Internal_Phdr *);
   2506 extern void bfd_elf32_swap_phdr_out
   2507   (bfd *, const Elf_Internal_Phdr *, Elf32_External_Phdr *);
   2508 extern void bfd_elf32_swap_dyn_in
   2509   (bfd *, const void *, Elf_Internal_Dyn *);
   2510 extern void bfd_elf32_swap_dyn_out
   2511   (bfd *, const Elf_Internal_Dyn *, void *);
   2512 extern long bfd_elf32_slurp_symbol_table
   2513   (bfd *, asymbol **, bfd_boolean);
   2514 extern bfd_boolean bfd_elf32_write_shdrs_and_ehdr
   2515   (bfd *);
   2516 extern int bfd_elf32_write_out_phdrs
   2517   (bfd *, const Elf_Internal_Phdr *, unsigned int);
   2518 extern bfd_boolean bfd_elf32_checksum_contents
   2519   (bfd * , void (*) (const void *, size_t, void *), void *);
   2520 extern void bfd_elf32_write_relocs
   2521   (bfd *, asection *, void *);
   2522 extern bfd_boolean bfd_elf32_slurp_reloc_table
   2523   (bfd *, asection *, asymbol **, bfd_boolean);
   2524 
   2525 extern bfd_cleanup bfd_elf64_object_p
   2526   (bfd *);
   2527 extern bfd_cleanup bfd_elf64_core_file_p
   2528   (bfd *);
   2529 extern char *bfd_elf64_core_file_failing_command
   2530   (bfd *);
   2531 extern int bfd_elf64_core_file_failing_signal
   2532   (bfd *);
   2533 extern bfd_boolean bfd_elf64_core_file_matches_executable_p
   2534   (bfd *, bfd *);
   2535 extern int bfd_elf64_core_file_pid
   2536   (bfd *);
   2537 extern bfd_boolean _bfd_elf64_core_find_build_id
   2538   (bfd *, bfd_vma);
   2539 
   2540 extern bfd_boolean bfd_elf64_swap_symbol_in
   2541   (bfd *, const void *, const void *, Elf_Internal_Sym *);
   2542 extern void bfd_elf64_swap_symbol_out
   2543   (bfd *, const Elf_Internal_Sym *, void *, void *);
   2544 extern void bfd_elf64_swap_reloc_in
   2545   (bfd *, const bfd_byte *, Elf_Internal_Rela *);
   2546 extern void bfd_elf64_swap_reloc_out
   2547   (bfd *, const Elf_Internal_Rela *, bfd_byte *);
   2548 extern void bfd_elf64_swap_reloca_in
   2549   (bfd *, const bfd_byte *, Elf_Internal_Rela *);
   2550 extern void bfd_elf64_swap_reloca_out
   2551   (bfd *, const Elf_Internal_Rela *, bfd_byte *);
   2552 extern void bfd_elf64_swap_phdr_in
   2553   (bfd *, const Elf64_External_Phdr *, Elf_Internal_Phdr *);
   2554 extern void bfd_elf64_swap_phdr_out
   2555   (bfd *, const Elf_Internal_Phdr *, Elf64_External_Phdr *);
   2556 extern void bfd_elf64_swap_dyn_in
   2557   (bfd *, const void *, Elf_Internal_Dyn *);
   2558 extern void bfd_elf64_swap_dyn_out
   2559   (bfd *, const Elf_Internal_Dyn *, void *);
   2560 extern long bfd_elf64_slurp_symbol_table
   2561   (bfd *, asymbol **, bfd_boolean);
   2562 extern bfd_boolean bfd_elf64_write_shdrs_and_ehdr
   2563   (bfd *);
   2564 extern int bfd_elf64_write_out_phdrs
   2565   (bfd *, const Elf_Internal_Phdr *, unsigned int);
   2566 extern bfd_boolean bfd_elf64_checksum_contents
   2567   (bfd * , void (*) (const void *, size_t, void *), void *);
   2568 extern void bfd_elf64_write_relocs
   2569   (bfd *, asection *, void *);
   2570 extern bfd_boolean bfd_elf64_slurp_reloc_table
   2571   (bfd *, asection *, asymbol **, bfd_boolean);
   2572 
   2573 extern bfd_boolean _bfd_elf_default_relocs_compatible
   2574   (const bfd_target *, const bfd_target *);
   2575 
   2576 extern bfd_boolean _bfd_elf_relocs_compatible
   2577   (const bfd_target *, const bfd_target *);
   2578 extern bfd_boolean _bfd_elf_notice_as_needed
   2579   (bfd *, struct bfd_link_info *, enum notice_asneeded_action);
   2580 
   2581 extern struct elf_link_hash_entry *_bfd_elf_archive_symbol_lookup
   2582   (bfd *, struct bfd_link_info *, const char *);
   2583 extern bfd_boolean bfd_elf_link_add_symbols
   2584   (bfd *, struct bfd_link_info *);
   2585 extern bfd_boolean _bfd_elf_add_dynamic_entry
   2586   (struct bfd_link_info *, bfd_vma, bfd_vma);
   2587 extern bfd_boolean _bfd_elf_strip_zero_sized_dynamic_sections
   2588   (struct bfd_link_info *);
   2589 extern int bfd_elf_add_dt_needed_tag
   2590   (bfd *, struct bfd_link_info *);
   2591 extern bfd_boolean _bfd_elf_link_check_relocs
   2592   (bfd *, struct bfd_link_info *);
   2593 
   2594 extern bfd_boolean bfd_elf_link_record_dynamic_symbol
   2595   (struct bfd_link_info *, struct elf_link_hash_entry *);
   2596 
   2597 extern int bfd_elf_link_record_local_dynamic_symbol
   2598   (struct bfd_link_info *, bfd *, long);
   2599 
   2600 extern bfd_boolean _bfd_elf_close_and_cleanup
   2601   (bfd *);
   2602 
   2603 extern bfd_boolean _bfd_elf_common_definition
   2604   (Elf_Internal_Sym *);
   2605 
   2606 extern unsigned int _bfd_elf_common_section_index
   2607   (asection *);
   2608 
   2609 extern asection *_bfd_elf_common_section
   2610   (asection *);
   2611 
   2612 extern bfd_vma _bfd_elf_default_got_elt_size
   2613 (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, bfd *,
   2614  unsigned long);
   2615 
   2616 extern bfd_reloc_status_type _bfd_elf_rel_vtable_reloc_fn
   2617   (bfd *, arelent *, struct bfd_symbol *, void *,
   2618    asection *, bfd *, char **);
   2619 
   2620 extern bfd_boolean bfd_elf_final_link
   2621   (bfd *, struct bfd_link_info *);
   2622 
   2623 extern void _bfd_elf_gc_keep
   2624   (struct bfd_link_info *info);
   2625 
   2626 extern bfd_boolean bfd_elf_gc_mark_dynamic_ref_symbol
   2627   (struct elf_link_hash_entry *h, void *inf);
   2628 
   2629 extern bfd_boolean bfd_elf_gc_sections
   2630   (bfd *, struct bfd_link_info *);
   2631 
   2632 extern bfd_boolean bfd_elf_gc_record_vtinherit
   2633   (bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);
   2634 
   2635 extern bfd_boolean bfd_elf_gc_record_vtentry
   2636   (bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);
   2637 
   2638 extern asection *_bfd_elf_gc_mark_hook
   2639   (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
   2640    struct elf_link_hash_entry *, Elf_Internal_Sym *);
   2641 
   2642 extern asection *_bfd_elf_gc_mark_rsec
   2643   (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn,
   2644    struct elf_reloc_cookie *, bfd_boolean *);
   2645 
   2646 extern bfd_boolean _bfd_elf_gc_mark_reloc
   2647   (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn,
   2648    struct elf_reloc_cookie *);
   2649 
   2650 extern bfd_boolean _bfd_elf_gc_mark_fdes
   2651   (struct bfd_link_info *, asection *, asection *, elf_gc_mark_hook_fn,
   2652    struct elf_reloc_cookie *);
   2653 
   2654 extern bfd_boolean _bfd_elf_gc_mark
   2655   (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn);
   2656 
   2657 extern bfd_boolean _bfd_elf_gc_mark_extra_sections
   2658   (struct bfd_link_info *, elf_gc_mark_hook_fn);
   2659 
   2660 extern bfd_boolean bfd_elf_gc_common_finalize_got_offsets
   2661   (bfd *, struct bfd_link_info *);
   2662 
   2663 extern bfd_boolean bfd_elf_gc_common_final_link
   2664   (bfd *, struct bfd_link_info *);
   2665 
   2666 extern bfd_boolean bfd_elf_reloc_symbol_deleted_p
   2667   (bfd_vma, void *);
   2668 
   2669 extern struct elf_segment_map * _bfd_elf_make_dynamic_segment
   2670   (bfd *, asection *);
   2671 
   2672 extern bfd_boolean _bfd_elf_map_sections_to_segments
   2673   (bfd *, struct bfd_link_info *);
   2674 
   2675 extern bfd_boolean _bfd_elf_is_function_type (unsigned int);
   2676 
   2677 extern bfd_size_type _bfd_elf_maybe_function_sym (const asymbol *, asection *,
   2678 						  bfd_vma *);
   2679 
   2680 extern asection *_bfd_elf_plt_get_reloc_section (bfd *, const char *);
   2681 
   2682 extern int bfd_elf_get_default_section_type (flagword);
   2683 
   2684 extern bfd_boolean bfd_elf_lookup_section_flags
   2685   (struct bfd_link_info *, struct flag_info *, asection *);
   2686 
   2687 extern Elf_Internal_Phdr * _bfd_elf_find_segment_containing_section
   2688   (bfd * abfd, asection * section);
   2689 
   2690 /* PowerPC @tls opcode transform/validate.  */
   2691 extern unsigned int _bfd_elf_ppc_at_tls_transform
   2692   (unsigned int, unsigned int);
   2693 /* PowerPC @tprel opcode transform/validate.  */
   2694 extern unsigned int _bfd_elf_ppc_at_tprel_transform
   2695   (unsigned int, unsigned int);
   2696 /* PowerPC elf_object_p tweak.  */
   2697 extern bfd_boolean _bfd_elf_ppc_set_arch (bfd *);
   2698 /* PowerPC .gnu.attributes handling common to both 32-bit and 64-bit.  */
   2699 extern bfd_boolean _bfd_elf_ppc_merge_fp_attributes
   2700   (bfd *, struct bfd_link_info *);
   2701 
   2702 /* Return an upper bound on the number of bytes required to store a
   2703    copy of ABFD's program header table entries.  Return -1 if an error
   2704    occurs; bfd_get_error will return an appropriate code.  */
   2705 extern long bfd_get_elf_phdr_upper_bound
   2706   (bfd *abfd);
   2707 
   2708 /* Copy ABFD's program header table entries to *PHDRS.  The entries
   2709    will be stored as an array of Elf_Internal_Phdr structures, as
   2710    defined in include/elf/internal.h.  To find out how large the
   2711    buffer needs to be, call bfd_get_elf_phdr_upper_bound.
   2712 
   2713    Return the number of program header table entries read, or -1 if an
   2714    error occurs; bfd_get_error will return an appropriate code.  */
   2715 extern int bfd_get_elf_phdrs
   2716   (bfd *abfd, void *phdrs);
   2717 
   2718 /* Exported interface for writing elf corefile notes.  */
   2719 extern char *elfcore_write_note
   2720   (bfd *, char *, int *, const char *, int, const void *, int);
   2721 extern char *elfcore_write_prpsinfo
   2722   (bfd *, char *, int *, const char *, const char *);
   2723 extern char *elfcore_write_prstatus
   2724   (bfd *, char *, int *, long, int, const void *);
   2725 extern char * elfcore_write_pstatus
   2726   (bfd *, char *, int *, long, int, const void *);
   2727 extern char *elfcore_write_prfpreg
   2728   (bfd *, char *, int *, const void *, int);
   2729 extern char *elfcore_write_prxfpreg
   2730   (bfd *, char *, int *, const void *, int);
   2731 extern char *elfcore_write_xstatereg
   2732   (bfd *, char *, int *, const void *, int);
   2733 extern char *elfcore_write_ppc_vmx
   2734   (bfd *, char *, int *, const void *, int);
   2735 extern char *elfcore_write_ppc_vsx
   2736   (bfd *, char *, int *, const void *, int);
   2737 extern char *elfcore_write_ppc_tar
   2738   (bfd *, char *, int *, const void *, int);
   2739 extern char *elfcore_write_ppc_ppr
   2740   (bfd *, char *, int *, const void *, int);
   2741 extern char *elfcore_write_ppc_dscr
   2742   (bfd *, char *, int *, const void *, int);
   2743 extern char *elfcore_write_ppc_ebb
   2744   (bfd *, char *, int *, const void *, int);
   2745 extern char *elfcore_write_ppc_pmu
   2746   (bfd *, char *, int *, const void *, int);
   2747 extern char *elfcore_write_ppc_tm_cgpr
   2748   (bfd *, char *, int *, const void *, int);
   2749 extern char *elfcore_write_ppc_tm_cfpr
   2750   (bfd *, char *, int *, const void *, int);
   2751 extern char *elfcore_write_ppc_tm_cvmx
   2752   (bfd *, char *, int *, const void *, int);
   2753 extern char *elfcore_write_ppc_tm_cvsx
   2754   (bfd *, char *, int *, const void *, int);
   2755 extern char *elfcore_write_ppc_tm_spr
   2756   (bfd *, char *, int *, const void *, int);
   2757 extern char *elfcore_write_ppc_tm_ctar
   2758   (bfd *, char *, int *, const void *, int);
   2759 extern char *elfcore_write_ppc_tm_cppr
   2760   (bfd *, char *, int *, const void *, int);
   2761 extern char *elfcore_write_ppc_tm_cdscr
   2762   (bfd *, char *, int *, const void *, int);
   2763 extern char *elfcore_write_s390_timer
   2764   (bfd *, char *, int *, const void *, int);
   2765 extern char *elfcore_write_s390_todcmp
   2766   (bfd *, char *, int *, const void *, int);
   2767 extern char *elfcore_write_s390_todpreg
   2768   (bfd *, char *, int *, const void *, int);
   2769 extern char *elfcore_write_s390_ctrs
   2770   (bfd *, char *, int *, const void *, int);
   2771 extern char *elfcore_write_s390_prefix
   2772   (bfd *, char *, int *, const void *, int);
   2773 extern char *elfcore_write_s390_last_break
   2774   (bfd *, char *, int *, const void *, int);
   2775 extern char *elfcore_write_s390_system_call
   2776   (bfd *, char *, int *, const void *, int);
   2777 extern char *elfcore_write_s390_tdb
   2778   (bfd *, char *, int *, const void *, int);
   2779 extern char *elfcore_write_s390_vxrs_low
   2780   (bfd *, char *, int *, const void *, int);
   2781 extern char *elfcore_write_s390_vxrs_high
   2782   (bfd *, char *, int *, const void *, int);
   2783 extern char *elfcore_write_s390_gs_cb
   2784   (bfd *, char *, int *, const void *, int);
   2785 extern char *elfcore_write_s390_gs_bc
   2786   (bfd *, char *, int *, const void *, int);
   2787 extern char *elfcore_write_arm_vfp
   2788   (bfd *, char *, int *, const void *, int);
   2789 extern char *elfcore_write_aarch_tls
   2790   (bfd *, char *, int *, const void *, int);
   2791 extern char *elfcore_write_aarch_hw_break
   2792   (bfd *, char *, int *, const void *, int);
   2793 extern char *elfcore_write_aarch_hw_watch
   2794   (bfd *, char *, int *, const void *, int);
   2795 extern char *elfcore_write_aarch_sve
   2796   (bfd *, char *, int *, const void *, int);
   2797 extern char *elfcore_write_aarch_pauth
   2798   (bfd *, char *, int *, const void *, int);
   2799 extern char *elfcore_write_arc_v2
   2800   (bfd *, char *, int *, const void *, int);
   2801 extern char *elfcore_write_lwpstatus
   2802   (bfd *, char *, int *, long, int, const void *);
   2803 extern char *elfcore_write_register_note
   2804   (bfd *, char *, int *, const char *, const void *, int);
   2805 
   2806 /* Internal structure which holds information to be included in the
   2807    PRPSINFO section of Linux core files.
   2808 
   2809    This is an "internal" structure in the sense that it should be used
   2810    to pass information to BFD (via the `elfcore_write_linux_prpsinfo'
   2811    function), so things like endianess shouldn't be an issue.  This
   2812    structure will eventually be converted in one of the
   2813    `elf_external_linux_*' structures and written out to an output bfd
   2814    by one of the functions declared below.  */
   2815 
   2816 struct elf_internal_linux_prpsinfo
   2817   {
   2818     char pr_state;			/* Numeric process state.  */
   2819     char pr_sname;			/* Char for pr_state.  */
   2820     char pr_zomb;			/* Zombie.  */
   2821     char pr_nice;			/* Nice val.  */
   2822     unsigned long pr_flag;		/* Flags.  */
   2823     unsigned int pr_uid;
   2824     unsigned int pr_gid;
   2825     int pr_pid, pr_ppid, pr_pgrp, pr_sid;
   2826     char pr_fname[16 + 1];		/* Filename of executable.  */
   2827     char pr_psargs[80 + 1];		/* Initial part of arg list.  */
   2828   };
   2829 
   2830 /* Linux/most 32-bit archs.  */
   2831 extern char *elfcore_write_linux_prpsinfo32
   2832   (bfd *, char *, int *, const struct elf_internal_linux_prpsinfo *);
   2833 
   2834 /* Linux/most 64-bit archs.  */
   2835 extern char *elfcore_write_linux_prpsinfo64
   2836   (bfd *, char *, int *, const struct elf_internal_linux_prpsinfo *);
   2837 
   2838 extern bfd *_bfd_elf32_bfd_from_remote_memory
   2839   (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
   2840    int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
   2841 extern bfd *_bfd_elf64_bfd_from_remote_memory
   2842   (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
   2843    int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
   2844 
   2845 extern bfd_vma bfd_elf_obj_attr_size (bfd *);
   2846 extern void bfd_elf_set_obj_attr_contents (bfd *, bfd_byte *, bfd_vma);
   2847 extern int bfd_elf_get_obj_attr_int (bfd *, int, unsigned int);
   2848 extern void bfd_elf_add_obj_attr_int (bfd *, int, unsigned int, unsigned int);
   2849 #define bfd_elf_add_proc_attr_int(BFD, TAG, VALUE) \
   2850   bfd_elf_add_obj_attr_int ((BFD), OBJ_ATTR_PROC, (TAG), (VALUE))
   2851 extern void bfd_elf_add_obj_attr_string (bfd *, int, unsigned int, const char *);
   2852 #define bfd_elf_add_proc_attr_string(BFD, TAG, VALUE) \
   2853   bfd_elf_add_obj_attr_string ((BFD), OBJ_ATTR_PROC, (TAG), (VALUE))
   2854 extern void bfd_elf_add_obj_attr_int_string (bfd *, int, unsigned int,
   2855 					     unsigned int, const char *);
   2856 #define bfd_elf_add_proc_attr_int_string(BFD, TAG, INTVAL, STRVAL) \
   2857   bfd_elf_add_obj_attr_int_string ((BFD), OBJ_ATTR_PROC, (TAG), \
   2858 				   (INTVAL), (STRVAL))
   2859 
   2860 extern char *_bfd_elf_attr_strdup (bfd *, const char *);
   2861 extern void _bfd_elf_copy_obj_attributes (bfd *, bfd *);
   2862 extern int _bfd_elf_obj_attrs_arg_type (bfd *, int, unsigned int);
   2863 extern void _bfd_elf_parse_attributes (bfd *, Elf_Internal_Shdr *);
   2864 extern bfd_boolean _bfd_elf_merge_object_attributes
   2865   (bfd *, struct bfd_link_info *);
   2866 extern bfd_boolean _bfd_elf_merge_unknown_attribute_low (bfd *, bfd *, int);
   2867 extern bfd_boolean _bfd_elf_merge_unknown_attribute_list (bfd *, bfd *);
   2868 extern Elf_Internal_Shdr *_bfd_elf_single_rel_hdr (asection *sec);
   2869 extern bfd_boolean elf_read_notes (bfd *, file_ptr, bfd_size_type, size_t);
   2870 
   2871 extern bfd_boolean _bfd_elf_parse_gnu_properties
   2872   (bfd *, Elf_Internal_Note *);
   2873 extern elf_property * _bfd_elf_get_property
   2874   (bfd *, unsigned int, unsigned int);
   2875 extern bfd *_bfd_elf_link_setup_gnu_properties
   2876   (struct bfd_link_info *);
   2877 extern bfd_size_type _bfd_elf_convert_gnu_property_size
   2878   (bfd *, bfd *);
   2879 extern bfd_boolean _bfd_elf_convert_gnu_properties
   2880   (bfd *, asection *, bfd *, bfd_byte **, bfd_size_type *);
   2881 
   2882 /* The linker may need to keep track of the number of relocs that it
   2883    decides to copy as dynamic relocs in check_relocs for each symbol.
   2884    This is so that it can later discard them if they are found to be
   2885    unnecessary.  We can store the information in a field extending the
   2886    regular ELF linker hash table.  */
   2887 
   2888 struct elf_dyn_relocs
   2889 {
   2890   struct elf_dyn_relocs *next;
   2891 
   2892   /* The input section of the reloc.  */
   2893   asection *sec;
   2894 
   2895   /* Total number of relocs copied for the input section.  */
   2896   bfd_size_type count;
   2897 
   2898   /* Number of pc-relative relocs copied for the input section.  */
   2899   bfd_size_type pc_count;
   2900 };
   2901 
   2902 extern bfd_boolean _bfd_elf_create_ifunc_sections
   2903   (bfd *, struct bfd_link_info *);
   2904 extern bfd_boolean _bfd_elf_allocate_ifunc_dyn_relocs
   2905   (struct bfd_link_info *, struct elf_link_hash_entry *,
   2906    struct elf_dyn_relocs **, unsigned int, unsigned int,
   2907    unsigned int, bfd_boolean);
   2908 
   2909 extern void elf_append_rela (bfd *, asection *, Elf_Internal_Rela *);
   2910 extern void elf_append_rel (bfd *, asection *, Elf_Internal_Rela *);
   2911 
   2912 extern bfd_vma elf64_r_info (bfd_vma, bfd_vma);
   2913 extern bfd_vma elf64_r_sym (bfd_vma);
   2914 extern bfd_vma elf32_r_info (bfd_vma, bfd_vma);
   2915 extern bfd_vma elf32_r_sym (bfd_vma);
   2916 
   2917 extern bfd_boolean is_debuginfo_file (bfd *);
   2918 
   2919 
   2920 extern bfd_boolean _bfd_elf_init_secondary_reloc_section
   2921   (bfd *, Elf_Internal_Shdr *, const char *, unsigned int);
   2922 extern bfd_boolean _bfd_elf_slurp_secondary_reloc_section
   2923   (bfd *, asection *, asymbol **);
   2924 extern bfd_boolean _bfd_elf_copy_special_section_fields
   2925   (const bfd *, bfd *, const Elf_Internal_Shdr *, Elf_Internal_Shdr *);
   2926 extern bfd_boolean _bfd_elf_write_secondary_reloc_section
   2927   (bfd *, asection *);
   2928 extern unsigned int _bfd_elf_symbol_section_index
   2929   (bfd *, elf_symbol_type *);
   2930 
   2931 extern asection *_bfd_elf_readonly_dynrelocs
   2932   (struct elf_link_hash_entry *);
   2933 extern bfd_boolean _bfd_elf_maybe_set_textrel
   2934   (struct elf_link_hash_entry *, void *);
   2935 
   2936 extern bfd_boolean _bfd_elf_add_dynamic_tags
   2937   (bfd *, struct bfd_link_info *, bfd_boolean);
   2938 
   2939 /* Large common section.  */
   2940 extern asection _bfd_elf_large_com_section;
   2941 
   2942 /* Hash for local symbol with the first section id, ID, in the input
   2943    file and the local symbol index, SYM.  */
   2944 #define ELF_LOCAL_SYMBOL_HASH(ID, SYM) \
   2945   (((((ID) & 0xffU) << 24) | (((ID) & 0xff00) << 8)) \
   2946    ^ (SYM) ^ (((ID) & 0xffff0000U) >> 16))
   2947 
   2948 /* This is the condition under which finish_dynamic_symbol will be called.
   2949    If our finish_dynamic_symbol isn't called, we'll need to do something
   2950    about initializing any .plt and .got entries in relocate_section.  */
   2951 #define WILL_CALL_FINISH_DYNAMIC_SYMBOL(DYN, SHARED, H) \
   2952   ((DYN)								\
   2953    && ((SHARED) || !(H)->forced_local)					\
   2954    && ((H)->dynindx != -1 || (H)->forced_local))
   2955 
   2956 /* This macro is to avoid lots of duplicated code in the body
   2957    of xxx_relocate_section() in the various elfxx-xxxx.c files.  */
   2958 #define RELOC_FOR_GLOBAL_SYMBOL(info, input_bfd, input_section, rel,	\
   2959 				r_symndx, symtab_hdr, sym_hashes,	\
   2960 				h, sec, relocation,			\
   2961 				unresolved_reloc, warned, ignored)	\
   2962   do									\
   2963     {									\
   2964       /* It seems this can happen with erroneous or unsupported		\
   2965 	 input (mixing a.out and elf in an archive, for example.)  */	\
   2966       if (sym_hashes == NULL)						\
   2967 	return FALSE;							\
   2968 									\
   2969       h = sym_hashes[r_symndx - symtab_hdr->sh_info];			\
   2970 									\
   2971       if (info->wrap_hash != NULL					\
   2972 	  && (input_section->flags & SEC_DEBUGGING) != 0)		\
   2973 	h = ((struct elf_link_hash_entry *)				\
   2974 	     unwrap_hash_lookup (info, input_bfd, &h->root));		\
   2975 									\
   2976       while (h->root.type == bfd_link_hash_indirect			\
   2977 	     || h->root.type == bfd_link_hash_warning)			\
   2978 	h = (struct elf_link_hash_entry *) h->root.u.i.link;		\
   2979 									\
   2980       warned = FALSE;							\
   2981       ignored = FALSE;							\
   2982       unresolved_reloc = FALSE;						\
   2983       relocation = 0;							\
   2984       if (h->root.type == bfd_link_hash_defined				\
   2985 	  || h->root.type == bfd_link_hash_defweak)			\
   2986 	{								\
   2987 	  sec = h->root.u.def.section;					\
   2988 	  if (sec == NULL						\
   2989 	      || sec->output_section == NULL)				\
   2990 	    /* Set a flag that will be cleared later if we find a	\
   2991 	       relocation value for this symbol.  output_section	\
   2992 	       is typically NULL for symbols satisfied by a shared	\
   2993 	       library.  */						\
   2994 	    unresolved_reloc = TRUE;					\
   2995 	  else								\
   2996 	    relocation = (h->root.u.def.value				\
   2997 			  + sec->output_section->vma			\
   2998 			  + sec->output_offset);			\
   2999 	}								\
   3000       else if (h->root.type == bfd_link_hash_undefweak)			\
   3001 	;								\
   3002       else if (info->unresolved_syms_in_objects == RM_IGNORE		\
   3003 	       && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)		\
   3004 	ignored = TRUE;							\
   3005       else if (!bfd_link_relocatable (info))				\
   3006 	{								\
   3007 	  bfd_boolean err;						\
   3008 	  err = (info->unresolved_syms_in_objects == RM_DIAGNOSE &&	\
   3009 		 !info->warn_unresolved_syms)				\
   3010 		 || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT;	\
   3011 	  (*info->callbacks->undefined_symbol) (info,			\
   3012 						h->root.root.string,	\
   3013 						input_bfd,		\
   3014 						input_section,		\
   3015 						rel->r_offset, err);	\
   3016 	  warned = TRUE;						\
   3017 	}								\
   3018       (void) unresolved_reloc;						\
   3019       (void) warned;							\
   3020       (void) ignored;							\
   3021     }									\
   3022   while (0)
   3023 
   3024 /* This macro is to avoid lots of duplicated code in the body of the
   3025    loop over relocations in xxx_relocate_section() in the various
   3026    elfxx-xxxx.c files.
   3027 
   3028    Handle relocations against symbols from removed linkonce sections,
   3029    or sections discarded by a linker script.  When doing a relocatable
   3030    link, we remove such relocations.  Otherwise, we just want the
   3031    section contents zeroed and avoid any special processing.  */
   3032 #define RELOC_AGAINST_DISCARDED_SECTION(info, input_bfd, input_section,	\
   3033 					rel, count, relend,		\
   3034 					howto, index, contents)		\
   3035   {									\
   3036     int i_;								\
   3037     _bfd_clear_contents (howto, input_bfd, input_section,		\
   3038 			 contents, rel[index].r_offset);		\
   3039 									\
   3040     if (bfd_link_relocatable (info)					\
   3041 	&& (input_section->flags & SEC_DEBUGGING))			\
   3042       {									\
   3043 	/* Only remove relocations in debug sections since other	\
   3044 	   sections may require relocations.  */			\
   3045 	Elf_Internal_Shdr *rel_hdr;					\
   3046 									\
   3047 	rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \
   3048 									\
   3049 	/* Avoid empty output section.  */				\
   3050 	if (rel_hdr->sh_size > rel_hdr->sh_entsize)			\
   3051 	  {								\
   3052 	    rel_hdr->sh_size -= rel_hdr->sh_entsize;			\
   3053 	    rel_hdr = _bfd_elf_single_rel_hdr (input_section);		\
   3054 	    rel_hdr->sh_size -= rel_hdr->sh_entsize;			\
   3055 									\
   3056 	    memmove (rel, rel + count,					\
   3057 		     (relend - rel - count) * sizeof (*rel));		\
   3058 									\
   3059 	    input_section->reloc_count -= count;			\
   3060 	    relend -= count;						\
   3061 	    rel--;							\
   3062 	    continue;							\
   3063 	  }								\
   3064       }									\
   3065 									\
   3066     for (i_ = 0; i_ < count; i_++)					\
   3067       {									\
   3068 	rel[i_].r_info = 0;						\
   3069 	rel[i_].r_addend = 0;						\
   3070       }									\
   3071     rel += count - 1;							\
   3072     continue;								\
   3073   }
   3074 
   3075 /* Will a symbol be bound to the definition within the shared
   3076    library, if any.  A unique symbol can never be bound locally.  */
   3077 #define SYMBOLIC_BIND(INFO, H) \
   3078     (!(H)->unique_global \
   3079      && ((INFO)->symbolic \
   3080 	 || (H)->start_stop \
   3081 	 || ((INFO)->dynamic && !(H)->dynamic)))
   3082 
   3083 /* Determine if a section contains CTF data, using its name.  */
   3084 static inline bfd_boolean
   3085 bfd_section_is_ctf (const asection *sec)
   3086 {
   3087   const char *name = bfd_section_name (sec);
   3088   return strncmp (name, ".ctf", 4) == 0 && (name[4] == 0 || name[4] == '.');
   3089 }
   3090 
   3091 #ifdef __cplusplus
   3092 }
   3093 #endif
   3094 #endif /* _LIBELF_H_ */
   3095