Coverage Report

Created: 2024-05-21 06:29

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