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