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