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