/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-2025 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 | 398k | #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 | 325M | #define NAME(x, y) x ## 64 ## _ ## y |
52 | | #endif |
53 | | #if ARCH_SIZE == 32 |
54 | 943M | #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: cofflink.c:weakdef Unexecuted instantiation: coffgen.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-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_objdump.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: 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_addr2line.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_dwarf.c:weakdef Unexecuted instantiation: fuzz_objcopy.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 | | CR16_ELF_DATA, |
544 | | CRIS_ELF_DATA, |
545 | | CSKY_ELF_DATA, |
546 | | FRV_ELF_DATA, |
547 | | HPPA32_ELF_DATA, |
548 | | HPPA64_ELF_DATA, |
549 | | I386_ELF_DATA, |
550 | | IA64_ELF_DATA, |
551 | | KVX_ELF_DATA, |
552 | | LARCH_ELF_DATA, |
553 | | LM32_ELF_DATA, |
554 | | M32R_ELF_DATA, |
555 | | M68HC11_ELF_DATA, |
556 | | M68K_ELF_DATA, |
557 | | METAG_ELF_DATA, |
558 | | MICROBLAZE_ELF_DATA, |
559 | | MIPS_ELF_DATA, |
560 | | MMIX_ELF_DATA, |
561 | | MN10300_ELF_DATA, |
562 | | NDS32_ELF_DATA, |
563 | | OR1K_ELF_DATA, |
564 | | PPC32_ELF_DATA, |
565 | | PPC64_ELF_DATA, |
566 | | PRU_ELF_DATA, |
567 | | RISCV_ELF_DATA, |
568 | | S390_ELF_DATA, |
569 | | SCORE_ELF_DATA, |
570 | | SH_ELF_DATA, |
571 | | SPARC_ELF_DATA, |
572 | | SPU_ELF_DATA, |
573 | | TIC6X_ELF_DATA, |
574 | | TILEGX_ELF_DATA, |
575 | | TILEPRO_ELF_DATA, |
576 | | X86_64_ELF_DATA, |
577 | | XTENSA_ELF_DATA, |
578 | | VAX_ELF_DATA, |
579 | | GENERIC_ELF_DATA |
580 | | }; |
581 | | |
582 | | struct elf_sym_strtab |
583 | | { |
584 | | Elf_Internal_Sym sym; |
585 | | unsigned long dest_index; |
586 | | }; |
587 | | |
588 | | struct bfd_link_needed_list |
589 | | { |
590 | | struct bfd_link_needed_list *next; |
591 | | bfd *by; |
592 | | const char *name; |
593 | | }; |
594 | | |
595 | | enum elf_target_os |
596 | | { |
597 | | is_normal, |
598 | | is_solaris, /* Solaris. */ |
599 | | is_vxworks, /* VxWorks. */ |
600 | | is_nacl /* Native Client. */ |
601 | | }; |
602 | | |
603 | | /* Used by bfd_sym_from_r_symndx to cache a small number of local |
604 | | symbols. */ |
605 | 0 | #define LOCAL_SYM_CACHE_SIZE 32 |
606 | | struct sym_cache |
607 | | { |
608 | | bfd *abfd; |
609 | | unsigned long indx[LOCAL_SYM_CACHE_SIZE]; |
610 | | Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE]; |
611 | | }; |
612 | | |
613 | | /* ELF linker hash table. */ |
614 | | |
615 | | struct elf_link_hash_table |
616 | | { |
617 | | struct bfd_link_hash_table root; |
618 | | |
619 | | /* An identifier used to distinguish different target |
620 | | specific extensions to this structure. */ |
621 | | enum elf_target_id hash_table_id; |
622 | | |
623 | | /* Whether we have created the special dynamic sections required |
624 | | when linking against or generating a shared object. */ |
625 | | bool dynamic_sections_created; |
626 | | |
627 | | /* Whether dynamic relocations are present. */ |
628 | | bool dynamic_relocs; |
629 | | |
630 | | /* True if this target has relocatable executables, so needs dynamic |
631 | | section symbols. */ |
632 | | bool is_relocatable_executable; |
633 | | |
634 | | /* TRUE if there are IFUNC resolvers. */ |
635 | | bool ifunc_resolvers; |
636 | | |
637 | | /* TRUE if DT_PLTGOT is a required dynamic tag. */ |
638 | | bool dt_pltgot_required; |
639 | | |
640 | | /* TRUE if DT_JMPREL is a required dynamic tag. */ |
641 | | bool dt_jmprel_required; |
642 | | |
643 | | /* TRUE when we are handling DT_NEEDED entries. */ |
644 | | bool handling_dt_needed; |
645 | | |
646 | | /* The BFD used to hold special sections created by the linker. |
647 | | This will be the first BFD found which requires these sections to |
648 | | be created. */ |
649 | | bfd *dynobj; |
650 | | |
651 | | /* The value to use when initialising got.refcount/offset and |
652 | | plt.refcount/offset in an elf_link_hash_entry. Set to zero when |
653 | | the values are refcounts. Set to init_got_offset/init_plt_offset |
654 | | in size_dynamic_sections when the values may be offsets. */ |
655 | | union gotplt_union init_got_refcount; |
656 | | union gotplt_union init_plt_refcount; |
657 | | |
658 | | /* The value to use for got.refcount/offset and plt.refcount/offset |
659 | | when the values may be offsets. Normally (bfd_vma) -1. */ |
660 | | union gotplt_union init_got_offset; |
661 | | union gotplt_union init_plt_offset; |
662 | | |
663 | | /* The number of symbols found in the link which is intended for the |
664 | | mandatory DT_SYMTAB tag (.dynsym section) in .dynamic section. */ |
665 | | bfd_size_type dynsymcount; |
666 | | bfd_size_type local_dynsymcount; |
667 | | |
668 | | /* The string table of dynamic symbols, which becomes the .dynstr |
669 | | section. */ |
670 | | struct elf_strtab_hash *dynstr; |
671 | | |
672 | | /* The array size of the symbol string table, which becomes the |
673 | | .strtab section. */ |
674 | | bfd_size_type strtabsize; |
675 | | |
676 | | /* The array of strings, which becomes the .strtab section. */ |
677 | | struct elf_sym_strtab *strtab; |
678 | | |
679 | | /* The number of buckets in the hash table in the .hash section. |
680 | | This is based on the number of dynamic symbols. */ |
681 | | bfd_size_type bucketcount; |
682 | | |
683 | | /* A linked list of DT_NEEDED names found in dynamic objects |
684 | | included in the link. */ |
685 | | struct bfd_link_needed_list *needed; |
686 | | |
687 | | /* Sections in the output bfd that provides a section symbol |
688 | | to be used by relocations emitted against local symbols. |
689 | | Most targets will not use data_index_section. */ |
690 | | asection *text_index_section; |
691 | | asection *data_index_section; |
692 | | |
693 | | /* The _GLOBAL_OFFSET_TABLE_ symbol. */ |
694 | | struct elf_link_hash_entry *hgot; |
695 | | |
696 | | /* The _PROCEDURE_LINKAGE_TABLE_ symbol. */ |
697 | | struct elf_link_hash_entry *hplt; |
698 | | |
699 | | /* The _DYNAMIC symbol. */ |
700 | | struct elf_link_hash_entry *hdynamic; |
701 | | |
702 | | /* The __ehdr_start symbol. */ |
703 | | struct elf_link_hash_entry *hehdr_start; |
704 | | |
705 | | /* A pointer to information used to merge SEC_MERGE sections. */ |
706 | | void *merge_info; |
707 | | |
708 | | /* Used to link stabs in sections. */ |
709 | | struct stab_info stab_info; |
710 | | |
711 | | /* Used by eh_frame code when editing .eh_frame. */ |
712 | | struct eh_frame_hdr_info eh_info; |
713 | | |
714 | | /* Used to link stack trace info in .sframe sections. */ |
715 | | struct sframe_enc_info sfe_info; |
716 | | |
717 | | /* A linked list of local symbols to be added to .dynsym. */ |
718 | | struct elf_link_local_dynamic_entry *dynlocal; |
719 | | |
720 | | /* A linked list of DT_RPATH/DT_RUNPATH names found in dynamic |
721 | | objects included in the link. */ |
722 | | struct bfd_link_needed_list *runpath; |
723 | | |
724 | | /* Cached first output tls section and size of PT_TLS segment. */ |
725 | | asection *tls_sec; |
726 | | bfd_size_type tls_size; /* Bytes. */ |
727 | | |
728 | | /* The offset into splt of the PLT entry for the TLS descriptor |
729 | | resolver. Special values are 0, if not necessary (or not found |
730 | | to be necessary yet), and -1 if needed but not determined |
731 | | yet. */ |
732 | | bfd_vma tlsdesc_plt; |
733 | | |
734 | | /* The GOT offset for the lazy trampoline. Communicated to the |
735 | | loader via DT_TLSDESC_GOT. The magic value (bfd_vma) -1 |
736 | | indicates an offset is not allocated. */ |
737 | | bfd_vma tlsdesc_got; |
738 | | |
739 | | /* Target OS for linker output. */ |
740 | | enum elf_target_os target_os; |
741 | | |
742 | | /* A linked list of dynamic BFD's loaded in the link. */ |
743 | | struct elf_link_loaded_list *dyn_loaded; |
744 | | |
745 | | /* Small local sym cache. */ |
746 | | struct sym_cache sym_cache; |
747 | | |
748 | | /* Hash table of symbols which are first defined in archives or shared |
749 | | objects when there are any IR inputs. */ |
750 | | struct bfd_hash_table *first_hash; |
751 | | |
752 | | /* Short-cuts to get to dynamic linker sections. */ |
753 | | asection *sgot; |
754 | | asection *sgotplt; |
755 | | asection *srelgot; |
756 | | asection *splt; |
757 | | asection *srelplt; |
758 | | asection *sdynbss; |
759 | | asection *srelbss; |
760 | | asection *sdynrelro; |
761 | | asection *sreldynrelro; |
762 | | asection *igotplt; |
763 | | asection *iplt; |
764 | | asection *irelplt; |
765 | | asection *irelifunc; |
766 | | asection *dynsym; |
767 | | asection *srelrdyn; |
768 | | asection *dynamic; |
769 | | }; |
770 | | |
771 | | /* Returns TRUE if the hash table is a struct elf_link_hash_table. */ |
772 | | |
773 | | static inline bool |
774 | | is_elf_hash_table (const struct bfd_link_hash_table *htab) |
775 | 0 | { |
776 | 0 | return htab->type == bfd_link_elf_hash_table; |
777 | 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: cofflink.c:is_elf_hash_table Unexecuted instantiation: coffgen.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-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_objdump.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: 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_addr2line.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_dwarf.c:is_elf_hash_table Unexecuted instantiation: fuzz_objcopy.c:is_elf_hash_table |
778 | | |
779 | | /* Look up an entry in an ELF linker hash table. */ |
780 | | |
781 | | static inline struct elf_link_hash_entry * |
782 | | elf_link_hash_lookup (struct elf_link_hash_table *table, const char *string, |
783 | | bool create, bool copy, bool follow) |
784 | 0 | { |
785 | 0 | if (ENABLE_CHECKING && !is_elf_hash_table (&table->root)) |
786 | 0 | abort (); |
787 | 0 | return (struct elf_link_hash_entry *) |
788 | 0 | bfd_link_hash_lookup (&table->root, string, create, copy, follow); |
789 | 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: cofflink.c:elf_link_hash_lookup Unexecuted instantiation: coffgen.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-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_objdump.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: 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_addr2line.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_dwarf.c:elf_link_hash_lookup Unexecuted instantiation: fuzz_objcopy.c:elf_link_hash_lookup |
790 | | |
791 | | /* Traverse an ELF linker hash table. */ |
792 | | |
793 | | static inline void |
794 | | elf_link_hash_traverse (struct elf_link_hash_table *table, |
795 | | bool (*f) (struct elf_link_hash_entry *, void *), |
796 | | void *info) |
797 | 0 | { |
798 | 0 | if (ENABLE_CHECKING && !is_elf_hash_table (&table->root)) |
799 | 0 | abort (); |
800 | 0 | bfd_link_hash_traverse (&table->root, |
801 | 0 | (bool (*) (struct bfd_link_hash_entry *, void *)) f, |
802 | 0 | info); |
803 | 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: cofflink.c:elf_link_hash_traverse Unexecuted instantiation: coffgen.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-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_objdump.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: 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_addr2line.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_dwarf.c:elf_link_hash_traverse Unexecuted instantiation: fuzz_objcopy.c:elf_link_hash_traverse |
804 | | |
805 | | /* Get the ELF linker hash table from a link_info structure. */ |
806 | | |
807 | | static inline struct elf_link_hash_table * |
808 | | elf_hash_table (const struct bfd_link_info *info) |
809 | 0 | { |
810 | 0 | return (struct elf_link_hash_table *) info->hash; |
811 | 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: cofflink.c:elf_hash_table Unexecuted instantiation: coffgen.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-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_objdump.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: 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_addr2line.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_dwarf.c:elf_hash_table Unexecuted instantiation: fuzz_objcopy.c:elf_hash_table |
812 | | |
813 | | static inline enum elf_target_id |
814 | | elf_hash_table_id (const struct elf_link_hash_table *table) |
815 | 0 | { |
816 | 0 | return table->hash_table_id; |
817 | 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: cofflink.c:elf_hash_table_id Unexecuted instantiation: coffgen.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-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_objdump.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: 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_addr2line.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_dwarf.c:elf_hash_table_id Unexecuted instantiation: fuzz_objcopy.c:elf_hash_table_id |
818 | | |
819 | | /* Constant information held for an ELF backend. */ |
820 | | |
821 | | struct elf_size_info { |
822 | | unsigned char sizeof_ehdr, sizeof_phdr, sizeof_shdr; |
823 | | unsigned char sizeof_rel, sizeof_rela, sizeof_sym, sizeof_dyn, sizeof_note; |
824 | | |
825 | | /* The size of entries in the .hash section. */ |
826 | | unsigned char sizeof_hash_entry; |
827 | | |
828 | | /* The number of internal relocations to allocate per external |
829 | | relocation entry. */ |
830 | | unsigned char int_rels_per_ext_rel; |
831 | | /* We use some fixed size arrays. This should be large enough to |
832 | | handle all back-ends. */ |
833 | 0 | #define MAX_INT_RELS_PER_EXT_REL 3 |
834 | | |
835 | | unsigned char arch_size, log_file_align; |
836 | | unsigned char elfclass, ev_current; |
837 | | int (*write_out_phdrs) |
838 | | (bfd *, const Elf_Internal_Phdr *, unsigned int); |
839 | | bool (*write_shdrs_and_ehdr) (bfd *); |
840 | | bool (*checksum_contents) |
841 | | (bfd * , void (*) (const void *, size_t, void *), void *); |
842 | | void (*write_relocs) |
843 | | (bfd *, asection *, void *); |
844 | | bool (*swap_symbol_in) |
845 | | (bfd *, const void *, const void *, Elf_Internal_Sym *); |
846 | | void (*swap_symbol_out) |
847 | | (bfd *, const Elf_Internal_Sym *, void *, void *); |
848 | | bool (*slurp_reloc_table) |
849 | | (bfd *, asection *, asymbol **, bool); |
850 | | long (*slurp_symbol_table) |
851 | | (bfd *, asymbol **, bool); |
852 | | void (*swap_dyn_in) |
853 | | (bfd *, const void *, Elf_Internal_Dyn *); |
854 | | void (*swap_dyn_out) |
855 | | (bfd *, const Elf_Internal_Dyn *, void *); |
856 | | |
857 | | /* This function is called to swap in a REL relocation. If an |
858 | | external relocation corresponds to more than one internal |
859 | | relocation, then all relocations are swapped in at once. */ |
860 | | void (*swap_reloc_in) |
861 | | (bfd *, const bfd_byte *, Elf_Internal_Rela *); |
862 | | |
863 | | /* This function is called to swap out a REL relocation. */ |
864 | | void (*swap_reloc_out) |
865 | | (bfd *, const Elf_Internal_Rela *, bfd_byte *); |
866 | | |
867 | | /* This function is called to swap in a RELA relocation. If an |
868 | | external relocation corresponds to more than one internal |
869 | | relocation, then all relocations are swapped in at once. */ |
870 | | void (*swap_reloca_in) |
871 | | (bfd *, const bfd_byte *, Elf_Internal_Rela *); |
872 | | |
873 | | /* This function is called to swap out a RELA relocation. */ |
874 | | void (*swap_reloca_out) |
875 | | (bfd *, const Elf_Internal_Rela *, bfd_byte *); |
876 | | }; |
877 | | |
878 | | #define elf_symbol_from(S) \ |
879 | 2.20M | ((((S)->flags & BSF_SYNTHETIC) == 0 \ |
880 | 2.20M | && (S)->the_bfd != NULL \ |
881 | 2.20M | && (S)->the_bfd->xvec->flavour == bfd_target_elf_flavour \ |
882 | 2.20M | && (S)->the_bfd->tdata.elf_obj_data != 0) \ |
883 | 2.20M | ? (elf_symbol_type *) (S) \ |
884 | 2.20M | : 0) |
885 | | |
886 | | enum elf_reloc_type_class { |
887 | | reloc_class_normal, |
888 | | reloc_class_relative, |
889 | | reloc_class_copy, |
890 | | reloc_class_ifunc, |
891 | | reloc_class_plt |
892 | | }; |
893 | | |
894 | | struct elf_reloc_cookie |
895 | | { |
896 | | Elf_Internal_Rela *rels, *rel, *relend; |
897 | | Elf_Internal_Sym *locsyms; |
898 | | bfd *abfd; |
899 | | size_t locsymcount; |
900 | | size_t extsymoff; |
901 | | struct elf_link_hash_entry **sym_hashes; |
902 | | int r_sym_shift; |
903 | | bool bad_symtab; |
904 | | }; |
905 | | |
906 | | /* The level of IRIX compatibility we're striving for. */ |
907 | | |
908 | | typedef enum { |
909 | | ict_none, |
910 | | ict_irix5, |
911 | | ict_irix6 |
912 | | } irix_compat_t; |
913 | | |
914 | | /* Mapping of ELF section names and types. */ |
915 | | struct bfd_elf_special_section |
916 | | { |
917 | | const char *prefix; |
918 | | unsigned int prefix_length; |
919 | | /* 0 means name must match PREFIX exactly. |
920 | | -1 means name must start with PREFIX followed by an arbitrary string. |
921 | | -2 means name must match PREFIX exactly or consist of PREFIX followed |
922 | | by a dot then anything. |
923 | | > 0 means name must start with the first PREFIX_LENGTH chars of |
924 | | PREFIX and finish with the last SUFFIX_LENGTH chars of PREFIX. */ |
925 | | signed int suffix_length; |
926 | | unsigned int type; |
927 | | bfd_vma attr; |
928 | | }; |
929 | | |
930 | | enum action_discarded |
931 | | { |
932 | | COMPLAIN = 1, |
933 | | PRETEND = 2 |
934 | | }; |
935 | | |
936 | | typedef asection * (*elf_gc_mark_hook_fn) |
937 | | (asection *, struct bfd_link_info *, Elf_Internal_Rela *, |
938 | | struct elf_link_hash_entry *, Elf_Internal_Sym *); |
939 | | |
940 | | enum elf_property_kind |
941 | | { |
942 | | /* A new property. */ |
943 | | property_unknown = 0, |
944 | | /* A property ignored by backend. */ |
945 | | property_ignored, |
946 | | /* A corrupt property reported by backend. */ |
947 | | property_corrupt, |
948 | | /* A property should be removed due to property merge. */ |
949 | | property_remove, |
950 | | /* A property which is a number. */ |
951 | | property_number |
952 | | }; |
953 | | |
954 | | typedef struct elf_property |
955 | | { |
956 | | unsigned int pr_type; |
957 | | unsigned int pr_datasz; |
958 | | union |
959 | | { |
960 | | /* For property_number, this is a number. */ |
961 | | bfd_vma number; |
962 | | /* Add a new one if elf_property_kind is updated. */ |
963 | | } u; |
964 | | enum elf_property_kind pr_kind; |
965 | | } elf_property; |
966 | | |
967 | | typedef struct elf_property_list |
968 | | { |
969 | | struct elf_property_list *next; |
970 | | struct elf_property property; |
971 | | } elf_property_list; |
972 | | |
973 | | /* This structure is used to pass information to |
974 | | elf_backend_add_glibc_version_dependency. */ |
975 | | |
976 | | struct elf_find_verdep_info |
977 | | { |
978 | | /* General link information. */ |
979 | | struct bfd_link_info *info; |
980 | | /* The number of dependencies. */ |
981 | | unsigned int vers; |
982 | | /* Whether we had a failure. */ |
983 | | bool failed; |
984 | | }; |
985 | | |
986 | | struct bfd_elf_section_reloc_data; |
987 | | |
988 | | struct elf_backend_data |
989 | | { |
990 | | /* The architecture for this backend. */ |
991 | | enum bfd_architecture arch; |
992 | | |
993 | | /* An identifier used to distinguish different target specific |
994 | | extensions to elf_obj_tdata and elf_link_hash_table structures. */ |
995 | | enum elf_target_id target_id; |
996 | | |
997 | | /* Target OS. */ |
998 | | enum elf_target_os target_os; |
999 | | |
1000 | | /* The ELF machine code (EM_xxxx) for this backend. */ |
1001 | | int elf_machine_code; |
1002 | | |
1003 | | /* EI_OSABI. */ |
1004 | | int elf_osabi; |
1005 | | |
1006 | | /* The maximum page size for this backend. */ |
1007 | | bfd_vma maxpagesize; |
1008 | | |
1009 | | /* The minimum page size for this backend. An input object will not be |
1010 | | considered page aligned unless its sections are correctly aligned for |
1011 | | pages at least this large. May be smaller than maxpagesize. */ |
1012 | | bfd_vma minpagesize; |
1013 | | |
1014 | | /* The common page size for this backend. */ |
1015 | | bfd_vma commonpagesize; |
1016 | | |
1017 | | /* The p_align value for this backend. If it is set, p_align of |
1018 | | PT_LOAD alignment will be to p_align by default. */ |
1019 | | bfd_vma p_align; |
1020 | | |
1021 | | /* The BFD flags applied to sections created for dynamic linking. */ |
1022 | | flagword dynamic_sec_flags; |
1023 | | |
1024 | | /* Architecture-specific data for this backend. |
1025 | | This is actually a pointer to some type like struct elf_ARCH_data. */ |
1026 | | const void *arch_data; |
1027 | | |
1028 | | /* A function to translate an ELF RELA relocation to a BFD arelent |
1029 | | structure. Returns TRUE upon success, FALSE otherwise. */ |
1030 | | bool (*elf_info_to_howto) |
1031 | | (bfd *, arelent *, Elf_Internal_Rela *); |
1032 | | |
1033 | | /* A function to translate an ELF REL relocation to a BFD arelent |
1034 | | structure. Returns TRUE upon success, FALSE otherwise. */ |
1035 | | bool (*elf_info_to_howto_rel) |
1036 | | (bfd *, arelent *, Elf_Internal_Rela *); |
1037 | | |
1038 | | /* A function to determine whether a symbol is global when |
1039 | | partitioning the symbol table into local and global symbols. |
1040 | | This should be NULL for most targets, in which case the correct |
1041 | | thing will be done. MIPS ELF, at least on the Irix 5, has |
1042 | | special requirements. */ |
1043 | | bool (*elf_backend_sym_is_global) |
1044 | | (bfd *, asymbol *); |
1045 | | |
1046 | | /* The remaining functions are hooks which are called only if they |
1047 | | are not NULL. */ |
1048 | | |
1049 | | /* A function to permit a backend specific check on whether a |
1050 | | particular BFD format is relevant for an object file, and to |
1051 | | permit the backend to set any global information it wishes. When |
1052 | | this is called elf_elfheader is set, but anything else should be |
1053 | | used with caution. If this returns FALSE, the check_format |
1054 | | routine will return a bfd_error_wrong_format error. */ |
1055 | | bool (*elf_backend_object_p) |
1056 | | (bfd *); |
1057 | | |
1058 | | /* A function to do additional symbol processing when reading the |
1059 | | ELF symbol table. This is where any processor-specific special |
1060 | | section indices are handled. */ |
1061 | | void (*elf_backend_symbol_processing) |
1062 | | (bfd *, asymbol *); |
1063 | | |
1064 | | /* A function to do additional symbol processing after reading the |
1065 | | entire ELF symbol table. */ |
1066 | | bool (*elf_backend_symbol_table_processing) |
1067 | | (bfd *, elf_symbol_type *, unsigned int); |
1068 | | |
1069 | | /* A function to set the type of the info field. Processor-specific |
1070 | | types should be handled here. */ |
1071 | | int (*elf_backend_get_symbol_type) |
1072 | | (Elf_Internal_Sym *, int); |
1073 | | |
1074 | | /* A function to return the linker hash table entry of a symbol that |
1075 | | might be satisfied by an archive symbol. */ |
1076 | | struct bfd_link_hash_entry * (*elf_backend_archive_symbol_lookup) |
1077 | | (bfd *, struct bfd_link_info *, const char *); |
1078 | | |
1079 | | /* Return true if local section symbols should have a non-null st_name. |
1080 | | NULL implies false. */ |
1081 | | bool (*elf_backend_name_local_section_symbols) |
1082 | | (bfd *); |
1083 | | |
1084 | | /* A function to do additional processing on the ELF section header |
1085 | | just before writing it out. This is used to set the flags and |
1086 | | type fields for some sections, or to actually write out data for |
1087 | | unusual sections. */ |
1088 | | bool (*elf_backend_section_processing) |
1089 | | (bfd *, Elf_Internal_Shdr *); |
1090 | | |
1091 | | /* A function to handle unusual section types when creating BFD |
1092 | | sections from ELF sections. */ |
1093 | | bool (*elf_backend_section_from_shdr) |
1094 | | (bfd *, Elf_Internal_Shdr *, const char *, int); |
1095 | | |
1096 | | /* A function to convert machine dependent ELF section header flags to |
1097 | | BFD internal section header flags. */ |
1098 | | bool (*elf_backend_section_flags) |
1099 | | (const Elf_Internal_Shdr *); |
1100 | | |
1101 | | /* A function that returns a struct containing ELF section flags and |
1102 | | type for the given BFD section. */ |
1103 | | const struct bfd_elf_special_section * (*get_sec_type_attr) |
1104 | | (bfd *, asection *); |
1105 | | |
1106 | | /* A function to handle unusual program segment types when creating BFD |
1107 | | sections from ELF program segments. */ |
1108 | | bool (*elf_backend_section_from_phdr) |
1109 | | (bfd *, Elf_Internal_Phdr *, int, const char *); |
1110 | | |
1111 | | /* A function to set up the ELF section header for a BFD section in |
1112 | | preparation for writing it out. This is where the flags and type |
1113 | | fields are set for unusual sections. */ |
1114 | | bool (*elf_backend_fake_sections) |
1115 | | (bfd *, Elf_Internal_Shdr *, asection *); |
1116 | | |
1117 | | /* A function to get the ELF section index for a BFD section. If |
1118 | | this returns TRUE, the section was found. If it is a normal ELF |
1119 | | section, *RETVAL should be left unchanged. If it is not a normal |
1120 | | ELF section *RETVAL should be set to the SHN_xxxx index. */ |
1121 | | bool (*elf_backend_section_from_bfd_section) |
1122 | | (bfd *, asection *, int *retval); |
1123 | | |
1124 | | /* If this field is not NULL, it is called by the add_symbols phase |
1125 | | of a link just before adding a symbol to the global linker hash |
1126 | | table. It may modify any of the fields as it wishes. If *NAME |
1127 | | is set to NULL, the symbol will be skipped rather than being |
1128 | | added to the hash table. This function is responsible for |
1129 | | handling all processor dependent symbol bindings and section |
1130 | | indices, and must set at least *FLAGS and *SEC for each processor |
1131 | | dependent case; failure to do so will cause a link error. */ |
1132 | | bool (*elf_add_symbol_hook) |
1133 | | (bfd *abfd, struct bfd_link_info *info, Elf_Internal_Sym *, |
1134 | | const char **name, flagword *flags, asection **sec, bfd_vma *value); |
1135 | | |
1136 | | /* If this field is not NULL, it is called by the elf_link_output_sym |
1137 | | phase of a link for each symbol which will appear in the object file. |
1138 | | On error, this function returns 0. 1 is returned when the symbol |
1139 | | should be output, 2 is returned when the symbol should be discarded. */ |
1140 | | int (*elf_backend_link_output_symbol_hook) |
1141 | | (struct bfd_link_info *info, const char *, Elf_Internal_Sym *, |
1142 | | asection *, struct elf_link_hash_entry *); |
1143 | | |
1144 | | /* The CREATE_DYNAMIC_SECTIONS function is called by the ELF backend |
1145 | | linker the first time it encounters a dynamic object in the link. |
1146 | | This function must create any sections required for dynamic |
1147 | | linking. The ABFD argument is a dynamic object. The .interp, |
1148 | | .dynamic, .dynsym, .dynstr, and .hash functions have already been |
1149 | | created, and this function may modify the section flags if |
1150 | | desired. This function will normally create the .got and .plt |
1151 | | sections, but different backends have different requirements. */ |
1152 | | bool (*elf_backend_create_dynamic_sections) |
1153 | | (bfd *abfd, struct bfd_link_info *info); |
1154 | | |
1155 | | /* When creating a shared library, determine whether to omit the |
1156 | | dynamic symbol for the section. */ |
1157 | | bool (*elf_backend_omit_section_dynsym) |
1158 | | (bfd *output_bfd, struct bfd_link_info *info, asection *osec); |
1159 | | |
1160 | | /* Return TRUE if relocations of targets are compatible to the extent |
1161 | | that CHECK_RELOCS will properly process them. PR 4424. */ |
1162 | | bool (*relocs_compatible) (const bfd_target *, const bfd_target *); |
1163 | | |
1164 | | /* The CHECK_RELOCS function is called after all input files have been |
1165 | | opened. It is called once for each section with relocs of an object |
1166 | | file. The function must look through the relocs and do any special |
1167 | | handling required. This generally means allocating space in the |
1168 | | global offset table, and perhaps allocating space for a reloc. The |
1169 | | relocs are always passed as Rela structures; if the section |
1170 | | actually uses Rel structures, the r_addend field will always be |
1171 | | zero. */ |
1172 | | bool (*check_relocs) |
1173 | | (bfd *abfd, struct bfd_link_info *info, asection *o, |
1174 | | const Elf_Internal_Rela *relocs); |
1175 | | |
1176 | | /* The SIZE_RELATIVE_RELOCS function is called to size relative |
1177 | | relocations when mappig sections to segments. */ |
1178 | | bool (*size_relative_relocs) |
1179 | | (struct bfd_link_info *info, bool *need_layout); |
1180 | | |
1181 | | /* The FINISH_RELATIVE_RELOCS function is called to finish relative |
1182 | | relocations in bfd_elf_final_link. */ |
1183 | | bool (*finish_relative_relocs) |
1184 | | (struct bfd_link_info *info); |
1185 | | |
1186 | | /* The CHECK_DIRECTIVES function is called once per input file by |
1187 | | the add_symbols phase of the ELF backend linker. The function |
1188 | | must inspect the bfd and create any additional symbols according |
1189 | | to any custom directives in the bfd. */ |
1190 | | bool (*check_directives) |
1191 | | (bfd *abfd, struct bfd_link_info *info); |
1192 | | |
1193 | | /* The NOTICE_AS_NEEDED function is called as the linker is about to |
1194 | | handle an as-needed lib (ACT = notice_as_needed), and after the |
1195 | | linker has decided to keep the lib (ACT = notice_needed) or when |
1196 | | the lib is not needed (ACT = notice_not_needed). */ |
1197 | | bool (*notice_as_needed) |
1198 | | (bfd *abfd, struct bfd_link_info *info, enum notice_asneeded_action act); |
1199 | | |
1200 | | /* The ADJUST_DYNAMIC_SYMBOL function is called by the ELF backend |
1201 | | linker for every symbol which is defined by a dynamic object and |
1202 | | referenced by a regular object. This is called after all the |
1203 | | input files have been seen, but before the LATE_SIZE_SECTIONS |
1204 | | function has been called. The hash table entry should be |
1205 | | bfd_link_hash_defined ore bfd_link_hash_defweak, and it should be |
1206 | | defined in a section from a dynamic object. Dynamic object |
1207 | | sections are not included in the final link, and this function is |
1208 | | responsible for changing the value to something which the rest of |
1209 | | the link can deal with. This will normally involve adding an |
1210 | | entry to the .plt or .got or some such section, and setting the |
1211 | | symbol to point to that. */ |
1212 | | bool (*elf_backend_adjust_dynamic_symbol) |
1213 | | (struct bfd_link_info *info, struct elf_link_hash_entry *h); |
1214 | | |
1215 | | /* The EARLY_SIZE_SECTIONS and LATE_SIZE_SECTIONS functions are |
1216 | | called by the backend linker after all linker input files have |
1217 | | been seen and sections have been assigned to output sections, but |
1218 | | before the section sizes have been set. Both of these functions |
1219 | | are called even when no dynamic object is seen by the linker. |
1220 | | Between them, they must set the sizes of the dynamic sections and |
1221 | | other backend specific sections, and may fill in their contents. |
1222 | | Most backends need only use LATE_SIZE_SECTIONS. |
1223 | | EARLY_SIZE_SECTIONS is called before --export-dynamic makes some |
1224 | | symbols dynamic and before ADJUST_DYNAMIC_SYMBOL processes |
1225 | | dynamic symbols, LATE_SIZE_SECTIONS afterwards. The generic ELF |
1226 | | linker can handle the .dynsym, .dynstr and .hash sections. |
1227 | | Besides those, these functions must handle the .interp section |
1228 | | and any other sections created by CREATE_DYNAMIC_SECTIONS. */ |
1229 | | bool (*elf_backend_early_size_sections) |
1230 | | (bfd *output_bfd, struct bfd_link_info *info); |
1231 | | bool (*elf_backend_late_size_sections) |
1232 | | (bfd *output_bfd, struct bfd_link_info *info); |
1233 | | |
1234 | | /* The STRIP_ZERO_SIZED_DYNAMIC_SECTIONS function is called by the |
1235 | | ELF backend linker to strip zero-sized dynamic sections after |
1236 | | the section sizes have been set. */ |
1237 | | bool (*elf_backend_strip_zero_sized_dynamic_sections) |
1238 | | (struct bfd_link_info *info); |
1239 | | |
1240 | | /* Set TEXT_INDEX_SECTION and DATA_INDEX_SECTION, the output sections |
1241 | | we keep to use as a base for relocs and symbols. */ |
1242 | | void (*elf_backend_init_index_section) |
1243 | | (bfd *output_bfd, struct bfd_link_info *info); |
1244 | | |
1245 | | /* The RELOCATE_SECTION function is called by the ELF backend linker |
1246 | | to handle the relocations for a section. |
1247 | | |
1248 | | The relocs are always passed as Rela structures; if the section |
1249 | | actually uses Rel structures, the r_addend field will always be |
1250 | | zero. |
1251 | | |
1252 | | This function is responsible for adjust the section contents as |
1253 | | necessary, and (if using Rela relocs and generating a |
1254 | | relocatable output file) adjusting the reloc addend as |
1255 | | necessary. |
1256 | | |
1257 | | This function does not have to worry about setting the reloc |
1258 | | address or the reloc symbol index. |
1259 | | |
1260 | | LOCAL_SYMS is a pointer to the swapped in local symbols. |
1261 | | |
1262 | | LOCAL_SECTIONS is an array giving the section in the input file |
1263 | | corresponding to the st_shndx field of each local symbol. |
1264 | | |
1265 | | The global hash table entry for the global symbols can be found |
1266 | | via elf_sym_hashes (input_bfd). |
1267 | | |
1268 | | When generating relocatable output, this function must handle |
1269 | | STB_LOCAL/STT_SECTION symbols specially. The output symbol is |
1270 | | going to be the section symbol corresponding to the output |
1271 | | section, which means that the addend must be adjusted |
1272 | | accordingly. |
1273 | | |
1274 | | Returns FALSE on error, TRUE on success, 2 if successful and |
1275 | | relocations should be written for this section. */ |
1276 | | int (*elf_backend_relocate_section) |
1277 | | (bfd *output_bfd, struct bfd_link_info *info, bfd *input_bfd, |
1278 | | asection *input_section, bfd_byte *contents, Elf_Internal_Rela *relocs, |
1279 | | Elf_Internal_Sym *local_syms, asection **local_sections); |
1280 | | |
1281 | | /* The FINISH_DYNAMIC_SYMBOL function is called by the ELF backend |
1282 | | linker just before it writes a symbol out to the .dynsym section. |
1283 | | The processor backend may make any required adjustment to the |
1284 | | symbol. It may also take the opportunity to set contents of the |
1285 | | dynamic sections. Note that FINISH_DYNAMIC_SYMBOL is called on |
1286 | | all .dynsym symbols, while ADJUST_DYNAMIC_SYMBOL is only called |
1287 | | on those symbols which are defined by a dynamic object. */ |
1288 | | bool (*elf_backend_finish_dynamic_symbol) |
1289 | | (bfd *output_bfd, struct bfd_link_info *info, |
1290 | | struct elf_link_hash_entry *h, Elf_Internal_Sym *sym); |
1291 | | |
1292 | | /* The FINISH_DYNAMIC_SECTIONS function is called by the ELF backend |
1293 | | linker just before it writes all the dynamic sections out to the |
1294 | | output file. The FINISH_DYNAMIC_SYMBOL will have been called on |
1295 | | all dynamic symbols. */ |
1296 | | bool (*elf_backend_finish_dynamic_sections) |
1297 | | (bfd *output_bfd, struct bfd_link_info *info); |
1298 | | |
1299 | | /* A function to do any beginning processing needed for the ELF file |
1300 | | before building the ELF headers and computing file positions. */ |
1301 | | void (*elf_backend_begin_write_processing) |
1302 | | (bfd *, struct bfd_link_info *); |
1303 | | |
1304 | | /* A function to do any final processing needed for the ELF file |
1305 | | before writing it out. */ |
1306 | | bool (*elf_backend_final_write_processing) |
1307 | | (bfd *); |
1308 | | |
1309 | | /* This function is called by get_program_header_size. It should |
1310 | | return the number of additional program segments which this BFD |
1311 | | will need. It should return -1 on error. */ |
1312 | | int (*elf_backend_additional_program_headers) |
1313 | | (bfd *, struct bfd_link_info *); |
1314 | | |
1315 | | /* This function is called to modify an existing segment map in a |
1316 | | backend specific fashion. */ |
1317 | | bool (*elf_backend_modify_segment_map) |
1318 | | (bfd *, struct bfd_link_info *); |
1319 | | |
1320 | | /* This function is called to modify program headers just before |
1321 | | they are written. */ |
1322 | | bool (*elf_backend_modify_headers) |
1323 | | (bfd *, struct bfd_link_info *); |
1324 | | |
1325 | | /* This function is called to see if the PHDR header should be |
1326 | | checked for validity. */ |
1327 | | bool (*elf_backend_allow_non_load_phdr) |
1328 | | (bfd *, const Elf_Internal_Phdr *, unsigned); |
1329 | | |
1330 | | /* This function is called before section garbage collection to |
1331 | | mark entry symbol sections. */ |
1332 | | void (*gc_keep) |
1333 | | (struct bfd_link_info *); |
1334 | | |
1335 | | /* This function is called during section garbage collection to |
1336 | | mark sections that define global symbols. */ |
1337 | | bool (*gc_mark_dynamic_ref) |
1338 | | (struct elf_link_hash_entry *, void *); |
1339 | | |
1340 | | /* This function is called during section gc to discover the section a |
1341 | | particular relocation refers to. */ |
1342 | | elf_gc_mark_hook_fn gc_mark_hook; |
1343 | | |
1344 | | /* This function, if defined, is called after the first gc marking pass |
1345 | | to allow the backend to mark additional sections. */ |
1346 | | bool (*gc_mark_extra_sections) |
1347 | | (struct bfd_link_info *, elf_gc_mark_hook_fn); |
1348 | | |
1349 | | /* This function is called to initialise ELF file header info. |
1350 | | Customised versions can modify things like the OS and ABI version. */ |
1351 | | bool (*elf_backend_init_file_header) |
1352 | | (bfd *, struct bfd_link_info *); |
1353 | | |
1354 | | /* This function, if defined, prints a symbol to file and returns the |
1355 | | name of the symbol to be printed. It should return NULL to fall |
1356 | | back to default symbol printing. */ |
1357 | | const char *(*elf_backend_print_symbol_all) |
1358 | | (bfd *, void *, asymbol *); |
1359 | | |
1360 | | /* This function, if defined, is called after all local symbols and |
1361 | | global symbols converted to locals are emitted into the symtab |
1362 | | section. It allows the backend to emit special local symbols |
1363 | | not handled in the hash table. */ |
1364 | | bool (*elf_backend_output_arch_local_syms) |
1365 | | (bfd *, struct bfd_link_info *, void *, |
1366 | | int (*) (void *, const char *, Elf_Internal_Sym *, asection *, |
1367 | | struct elf_link_hash_entry *)); |
1368 | | |
1369 | | /* This function, if defined, is called after all symbols are emitted |
1370 | | into the symtab section. It allows the backend to emit special |
1371 | | global symbols not handled in the hash table. */ |
1372 | | bool (*elf_backend_output_arch_syms) |
1373 | | (bfd *, struct bfd_link_info *, void *, |
1374 | | int (*) (void *, const char *, Elf_Internal_Sym *, asection *, |
1375 | | struct elf_link_hash_entry *)); |
1376 | | |
1377 | | /* Filter what symbols of the output file to include in the import |
1378 | | library if one is created. */ |
1379 | | unsigned int (*elf_backend_filter_implib_symbols) |
1380 | | (bfd *, struct bfd_link_info *, asymbol **, long); |
1381 | | |
1382 | | /* Copy any information related to dynamic linking from a pre-existing |
1383 | | symbol to a newly created symbol. Also called to copy flags and |
1384 | | other back-end info to a weakdef, in which case the symbol is not |
1385 | | newly created and plt/got refcounts and dynamic indices should not |
1386 | | be copied. */ |
1387 | | void (*elf_backend_copy_indirect_symbol) |
1388 | | (struct bfd_link_info *, struct elf_link_hash_entry *, |
1389 | | struct elf_link_hash_entry *); |
1390 | | |
1391 | | /* Modify any information related to dynamic linking such that the |
1392 | | symbol is not exported. */ |
1393 | | void (*elf_backend_hide_symbol) |
1394 | | (struct bfd_link_info *, struct elf_link_hash_entry *, bool); |
1395 | | |
1396 | | /* A function to do additional symbol fixup, called by |
1397 | | _bfd_elf_fix_symbol_flags. */ |
1398 | | bool (*elf_backend_fixup_symbol) |
1399 | | (struct bfd_link_info *, struct elf_link_hash_entry *); |
1400 | | |
1401 | | /* Merge the backend specific symbol attribute. */ |
1402 | | void (*elf_backend_merge_symbol_attribute) |
1403 | | (struct elf_link_hash_entry *, unsigned int, bool, bool); |
1404 | | |
1405 | | /* This function, if defined, will return a string containing the |
1406 | | name of a target-specific dynamic tag. */ |
1407 | | char *(*elf_backend_get_target_dtag) |
1408 | | (bfd_vma); |
1409 | | |
1410 | | /* Decide whether an undefined symbol is special and can be ignored. |
1411 | | This is the case for OPTIONAL symbols on IRIX. */ |
1412 | | bool (*elf_backend_ignore_undef_symbol) |
1413 | | (struct elf_link_hash_entry *); |
1414 | | |
1415 | | /* Emit relocations. Overrides default routine for emitting relocs, |
1416 | | except during a relocatable link, or if all relocs are being emitted. */ |
1417 | | bool (*elf_backend_emit_relocs) |
1418 | | (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *, |
1419 | | struct elf_link_hash_entry **); |
1420 | | |
1421 | | /* Update relocations. It is allowed to change the number and the order. |
1422 | | In such a case hashes should be invalidated. */ |
1423 | | void (*elf_backend_update_relocs) |
1424 | | (asection *, struct bfd_elf_section_reloc_data *); |
1425 | | |
1426 | | /* Count relocations. Not called for relocatable links |
1427 | | or if all relocs are being preserved in the output. */ |
1428 | | unsigned int (*elf_backend_count_relocs) |
1429 | | (struct bfd_link_info *, asection *); |
1430 | | |
1431 | | /* Count additionals relocations. Called for relocatable links if |
1432 | | additional relocations needs to be created. */ |
1433 | | unsigned int (*elf_backend_count_additional_relocs) |
1434 | | (asection *); |
1435 | | |
1436 | | /* Say whether to sort relocs output by ld -r and ld --emit-relocs, |
1437 | | by r_offset. If NULL, default to true. */ |
1438 | | bool (*sort_relocs_p) |
1439 | | (asection *); |
1440 | | |
1441 | | /* This function, if defined, is called when an NT_PRSTATUS note is found |
1442 | | in a core file. */ |
1443 | | bool (*elf_backend_grok_prstatus) |
1444 | | (bfd *, Elf_Internal_Note *); |
1445 | | |
1446 | | /* This function, if defined, is called when an NT_PSINFO or NT_PRPSINFO |
1447 | | note is found in a core file. */ |
1448 | | bool (*elf_backend_grok_psinfo) |
1449 | | (bfd *, Elf_Internal_Note *); |
1450 | | |
1451 | | /* This function, if defined, is called when a "FreeBSD" NT_PRSTATUS |
1452 | | note is found in a core file. */ |
1453 | | bool (*elf_backend_grok_freebsd_prstatus) |
1454 | | (bfd *, Elf_Internal_Note *); |
1455 | | |
1456 | | /* This function, if defined, is called to write a note to a corefile. */ |
1457 | | char *(*elf_backend_write_core_note) |
1458 | | (bfd *abfd, char *buf, int *bufsiz, int note_type, ...); |
1459 | | |
1460 | | /* This function, if defined, is called to convert target-specific |
1461 | | section flag names into hex values. */ |
1462 | | flagword (*elf_backend_lookup_section_flags_hook) |
1463 | | (char *); |
1464 | | |
1465 | | /* This function returns class of a reloc type. */ |
1466 | | enum elf_reloc_type_class (*elf_backend_reloc_type_class) |
1467 | | (const struct bfd_link_info *, const asection *, const Elf_Internal_Rela *); |
1468 | | |
1469 | | /* This function, if defined, removes information about discarded functions |
1470 | | from other sections which mention them. */ |
1471 | | bool (*elf_backend_discard_info) |
1472 | | (bfd *, struct elf_reloc_cookie *, struct bfd_link_info *); |
1473 | | |
1474 | | /* This function, if defined, signals that the function above has removed |
1475 | | the discarded relocations for this section. */ |
1476 | | bool (*elf_backend_ignore_discarded_relocs) |
1477 | | (asection *); |
1478 | | |
1479 | | /* What to do when ld finds relocations against symbols defined in |
1480 | | discarded sections. */ |
1481 | | unsigned int (*action_discarded) |
1482 | | (asection *); |
1483 | | |
1484 | | /* This function returns the width of FDE pointers in bytes, or 0 if |
1485 | | that can't be determined for some reason. The default definition |
1486 | | goes by the bfd's EI_CLASS. */ |
1487 | | unsigned int (*elf_backend_eh_frame_address_size) |
1488 | | (bfd *, const asection *); |
1489 | | |
1490 | | /* These functions tell elf-eh-frame whether to attempt to turn |
1491 | | absolute or lsda encodings into pc-relative ones. The default |
1492 | | definition enables these transformations. */ |
1493 | | bool (*elf_backend_can_make_relative_eh_frame) |
1494 | | (bfd *, struct bfd_link_info *, asection *); |
1495 | | bool (*elf_backend_can_make_lsda_relative_eh_frame) |
1496 | | (bfd *, struct bfd_link_info *, asection *); |
1497 | | |
1498 | | /* Tell linker to support multiple eh_frame sections. */ |
1499 | | bool elf_backend_can_make_multiple_eh_frame; |
1500 | | |
1501 | | /* This function returns an encoding after computing the encoded |
1502 | | value (and storing it in ENCODED) for the given OFFSET into OSEC, |
1503 | | to be stored in at LOC_OFFSET into the LOC_SEC input section. |
1504 | | The default definition chooses a 32-bit PC-relative encoding. */ |
1505 | | bfd_byte (*elf_backend_encode_eh_address) |
1506 | | (bfd *abfd, struct bfd_link_info *info, |
1507 | | asection *osec, bfd_vma offset, |
1508 | | asection *loc_sec, bfd_vma loc_offset, |
1509 | | bfd_vma *encoded); |
1510 | | |
1511 | | /* This function, if defined, may write out the given section. |
1512 | | Returns TRUE if it did so and FALSE if the caller should. */ |
1513 | | bool (*elf_backend_write_section) |
1514 | | (bfd *, struct bfd_link_info *, asection *, bfd_byte *); |
1515 | | |
1516 | | /* This function adds glibc version dependency. */ |
1517 | | void (*elf_backend_add_glibc_version_dependency) |
1518 | | (struct elf_find_verdep_info *); |
1519 | | |
1520 | | /* This function, if defined, returns TRUE if it is section symbols |
1521 | | only that are considered local for the purpose of partitioning the |
1522 | | symbol table into local and global symbols. This should be NULL |
1523 | | for most targets, in which case the correct thing will be done. |
1524 | | MIPS ELF, at least on the Irix 5, has special requirements. */ |
1525 | | bool (*elf_backend_elfsym_local_is_section) |
1526 | | (bfd *); |
1527 | | |
1528 | | /* The level of IRIX compatibility we're striving for. |
1529 | | MIPS ELF specific function. */ |
1530 | | irix_compat_t (*elf_backend_mips_irix_compat) |
1531 | | (bfd *); |
1532 | | |
1533 | | reloc_howto_type *(*elf_backend_mips_rtype_to_howto) |
1534 | | (bfd *, unsigned int, bool); |
1535 | | |
1536 | | /* The swapping table to use when dealing with ECOFF information. |
1537 | | Used for the MIPS ELF .mdebug section. */ |
1538 | | const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap; |
1539 | | |
1540 | | /* This function implements `bfd_elf_bfd_from_remote_memory'; |
1541 | | see elf.c, elfcode.h. */ |
1542 | | bfd *(*elf_backend_bfd_from_remote_memory) |
1543 | | (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep, |
1544 | | int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, |
1545 | | bfd_size_type len)); |
1546 | | |
1547 | | bool (*elf_backend_core_find_build_id) (bfd *, bfd_vma); |
1548 | | |
1549 | | /* This function is used by `_bfd_elf_get_synthetic_symtab'; |
1550 | | see elf.c. */ |
1551 | | bfd_vma (*plt_sym_val) (bfd_vma, const asection *, const arelent *); |
1552 | | |
1553 | | /* Is symbol defined in common section? */ |
1554 | | bool (*common_definition) (Elf_Internal_Sym *); |
1555 | | |
1556 | | /* Return a common section index for section. */ |
1557 | | unsigned int (*common_section_index) (asection *); |
1558 | | |
1559 | | /* Return a common section for section. */ |
1560 | | asection *(*common_section) (asection *); |
1561 | | |
1562 | | /* Return TRUE if we can merge 2 definitions. */ |
1563 | | bool (*merge_symbol) (struct elf_link_hash_entry *, |
1564 | | const Elf_Internal_Sym *, asection **, |
1565 | | bool, bool, |
1566 | | bfd *, const asection *); |
1567 | | |
1568 | | /* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */ |
1569 | | bool (*elf_hash_symbol) (struct elf_link_hash_entry *); |
1570 | | |
1571 | | /* If non-NULL, called to register the location of XLAT_LOC within |
1572 | | .MIPS.xhash at which real final dynindx for H will be written. |
1573 | | If XLAT_LOC is zero, the symbol is not included in |
1574 | | .MIPS.xhash and no dynindx will be written. */ |
1575 | | void (*record_xhash_symbol) |
1576 | | (struct elf_link_hash_entry *h, bfd_vma xlat_loc); |
1577 | | |
1578 | | /* Return TRUE if type is a function symbol type. */ |
1579 | | bool (*is_function_type) (unsigned int type); |
1580 | | |
1581 | | /* If the ELF symbol SYM might be a function in SEC, return the |
1582 | | function size and set *CODE_OFF to the function's entry point, |
1583 | | otherwise return zero. */ |
1584 | | bfd_size_type (*maybe_function_sym) (const asymbol *sym, asection *sec, |
1585 | | bfd_vma *code_off); |
1586 | | |
1587 | | /* Given NAME, the name of a relocation section stripped of its |
1588 | | .rel/.rela prefix, return the section in ABFD to which the |
1589 | | relocations apply. */ |
1590 | | asection *(*get_reloc_section) (bfd *abfd, const char *name); |
1591 | | |
1592 | | /* Called to set the sh_flags, sh_link and sh_info fields of OSECTION which |
1593 | | has a type >= SHT_LOOS. Returns TRUE if the fields were initialised, |
1594 | | FALSE otherwise. Can be called multiple times for a given section, |
1595 | | until it returns TRUE. Most of the times it is called ISECTION will be |
1596 | | set to an input section that might be associated with the output section. |
1597 | | The last time that it is called, ISECTION will be set to NULL. */ |
1598 | | bool (*elf_backend_copy_special_section_fields) |
1599 | | (const bfd *ibfd, bfd *obfd, const Elf_Internal_Shdr *isection, |
1600 | | Elf_Internal_Shdr *osection); |
1601 | | |
1602 | | /* Used to handle bad SHF_LINK_ORDER input. */ |
1603 | | void (*link_order_error_handler) (const char *, ...); |
1604 | | |
1605 | | /* Name of the PLT relocation section. */ |
1606 | | const char *relplt_name; |
1607 | | |
1608 | | /* Alternate EM_xxxx machine codes for this backend. */ |
1609 | | int elf_machine_alt1; |
1610 | | int elf_machine_alt2; |
1611 | | |
1612 | | const struct elf_size_info *s; |
1613 | | |
1614 | | /* An array of target specific special sections. */ |
1615 | | const struct bfd_elf_special_section *special_sections; |
1616 | | |
1617 | | /* The size in bytes of the header for the GOT. This includes the |
1618 | | so-called reserved entries on some systems. */ |
1619 | | bfd_vma got_header_size; |
1620 | | |
1621 | | /* The size of the GOT entry for the symbol pointed to by H if non-NULL, |
1622 | | otherwise by the local symbol with index SYMNDX in IBFD. */ |
1623 | | bfd_vma (*got_elt_size) (bfd *, struct bfd_link_info *, |
1624 | | struct elf_link_hash_entry *h, |
1625 | | bfd *ibfd, unsigned long symndx); |
1626 | | |
1627 | | /* The vendor name to use for a processor-standard attributes section. */ |
1628 | | const char *obj_attrs_vendor; |
1629 | | |
1630 | | /* The section name to use for a processor-standard attributes section. */ |
1631 | | const char *obj_attrs_section; |
1632 | | |
1633 | | /* Return 1, 2 or 3 to indicate what type of arguments a |
1634 | | processor-specific tag takes. */ |
1635 | | int (*obj_attrs_arg_type) (int); |
1636 | | |
1637 | | /* The section type to use for an attributes section. */ |
1638 | | unsigned int obj_attrs_section_type; |
1639 | | |
1640 | | /* This function determines the order in which any attributes are |
1641 | | written. It must be defined for input in the range |
1642 | | LEAST_KNOWN_OBJ_ATTRIBUTE..NUM_KNOWN_OBJ_ATTRIBUTES-1 (this range |
1643 | | is used in order to make unity easy). The returned value is the |
1644 | | actual tag number to place in the input position. */ |
1645 | | int (*obj_attrs_order) (int); |
1646 | | |
1647 | | /* Handle merging unknown attributes; either warn and return TRUE, |
1648 | | or give an error and return FALSE. */ |
1649 | | bool (*obj_attrs_handle_unknown) (bfd *, int); |
1650 | | |
1651 | | /* Parse GNU properties. Return the property kind. If the property |
1652 | | is corrupt, issue an error message and return property_corrupt. */ |
1653 | | enum elf_property_kind (*parse_gnu_properties) (bfd *, unsigned int, |
1654 | | bfd_byte *, |
1655 | | unsigned int); |
1656 | | |
1657 | | /* Merge GNU properties. Return TRUE if property is updated. */ |
1658 | | bool (*merge_gnu_properties) (struct bfd_link_info *, bfd *, bfd *, |
1659 | | elf_property *, elf_property *); |
1660 | | |
1661 | | /* Set up GNU properties. */ |
1662 | | bfd *(*setup_gnu_properties) (struct bfd_link_info *); |
1663 | | |
1664 | | /* Fix up GNU properties. */ |
1665 | | void (*fixup_gnu_properties) (struct bfd_link_info *, |
1666 | | elf_property_list **); |
1667 | | |
1668 | | /* Encoding used for compact EH tables. */ |
1669 | | int (*compact_eh_encoding) (struct bfd_link_info *); |
1670 | | |
1671 | | /* Opcode representing no unwind. */ |
1672 | | int (*cant_unwind_opcode) (struct bfd_link_info *); |
1673 | | |
1674 | | /* Called when emitting an ELF symbol whoes input version had an |
1675 | | ST_SHNDX field set to a value in the range SHN_LOPROC..SHN_HIOS. |
1676 | | Returns the value to be installed in the ST_SHNDX field of the |
1677 | | emitted symbol. If not defined, the value is left unchanged. */ |
1678 | | unsigned int (*symbol_section_index) (bfd *, elf_symbol_type *); |
1679 | | |
1680 | | /* Called when a section has extra reloc sections. */ |
1681 | | bool (*init_secondary_reloc_section) (bfd *, Elf_Internal_Shdr *, |
1682 | | const char *, unsigned int); |
1683 | | |
1684 | | /* Called when after loading the normal relocs for a section. */ |
1685 | | bool (*slurp_secondary_relocs) (bfd *, asection *, asymbol **, bool); |
1686 | | |
1687 | | /* Called after writing the normal relocs for a section. */ |
1688 | | bool (*write_secondary_relocs) (bfd *, asection *); |
1689 | | |
1690 | | /* This is non-zero if static TLS segments require a special alignment. */ |
1691 | | unsigned static_tls_alignment; |
1692 | | |
1693 | | /* Alignment for the PT_GNU_STACK segment. */ |
1694 | | unsigned stack_align; |
1695 | | |
1696 | | /* Flag bits to assign to a section of type SHT_STRTAB. */ |
1697 | | unsigned long elf_strtab_flags; |
1698 | | |
1699 | | /* This is TRUE if the linker should act like collect and gather |
1700 | | global constructors and destructors by name. This is TRUE for |
1701 | | MIPS ELF because the Irix 5 tools can not handle the .init |
1702 | | section. */ |
1703 | | unsigned collect : 1; |
1704 | | |
1705 | | /* This is TRUE if the linker should ignore changes to the type of a |
1706 | | symbol. This is TRUE for MIPS ELF because some Irix 5 objects |
1707 | | record undefined functions as STT_OBJECT although the definitions |
1708 | | are STT_FUNC. */ |
1709 | | unsigned type_change_ok : 1; |
1710 | | |
1711 | | /* Whether the backend may use REL relocations. (Some backends use |
1712 | | both REL and RELA relocations, and this flag is set for those |
1713 | | backends.) */ |
1714 | | unsigned may_use_rel_p : 1; |
1715 | | |
1716 | | /* Whether the backend may use RELA relocations. (Some backends use |
1717 | | both REL and RELA relocations, and this flag is set for those |
1718 | | backends.) */ |
1719 | | unsigned may_use_rela_p : 1; |
1720 | | |
1721 | | /* Whether the default relocation type is RELA. If a backend with |
1722 | | this flag set wants REL relocations for a particular section, |
1723 | | it must note that explicitly. Similarly, if this flag is clear, |
1724 | | and the backend wants RELA relocations for a particular |
1725 | | section. */ |
1726 | | unsigned default_use_rela_p : 1; |
1727 | | |
1728 | | /* True if PLT and copy relocations should be RELA by default. */ |
1729 | | unsigned rela_plts_and_copies_p : 1; |
1730 | | |
1731 | | /* Set if RELA relocations for a relocatable link can be handled by |
1732 | | generic code. Backends that set this flag need do nothing in the |
1733 | | backend relocate_section routine for relocatable linking. */ |
1734 | | unsigned rela_normal : 1; |
1735 | | |
1736 | | /* Set if DT_REL/DT_RELA/DT_RELSZ/DT_RELASZ should not include PLT |
1737 | | relocations. */ |
1738 | | unsigned dtrel_excludes_plt : 1; |
1739 | | |
1740 | | /* TRUE if addresses "naturally" sign extend. This is used when |
1741 | | swapping in from Elf32 when BFD64. */ |
1742 | | unsigned sign_extend_vma : 1; |
1743 | | |
1744 | | unsigned want_got_plt : 1; |
1745 | | unsigned plt_readonly : 1; |
1746 | | unsigned want_plt_sym : 1; |
1747 | | unsigned plt_not_loaded : 1; |
1748 | | unsigned plt_alignment : 4; |
1749 | | unsigned can_gc_sections : 1; |
1750 | | unsigned can_refcount : 1; |
1751 | | unsigned want_got_sym : 1; |
1752 | | unsigned want_dynbss : 1; |
1753 | | unsigned want_dynrelro : 1; |
1754 | | |
1755 | | /* Targets which do not support physical addressing often require |
1756 | | that the p_paddr field in the section header to be set to zero. |
1757 | | This field indicates whether this behavior is required. */ |
1758 | | unsigned want_p_paddr_set_to_zero : 1; |
1759 | | |
1760 | | /* Target has broken hardware and/or kernel that requires pages not |
1761 | | to be mapped twice with different permissions. */ |
1762 | | unsigned no_page_alias : 1; |
1763 | | |
1764 | | /* True if an object file lacking a .note.GNU-stack section |
1765 | | should be assumed to be requesting exec stack. At least one |
1766 | | other file in the link needs to have a .note.GNU-stack section |
1767 | | for a PT_GNU_STACK segment to be created. */ |
1768 | | unsigned default_execstack : 1; |
1769 | | |
1770 | | /* True if elf_section_data(sec)->this_hdr.contents is sec->rawsize |
1771 | | in length rather than sec->size in length, if sec->rawsize is |
1772 | | non-zero and smaller than sec->size. */ |
1773 | | unsigned caches_rawsize : 1; |
1774 | | |
1775 | | /* Address of protected data defined in the shared library may be |
1776 | | external, i.e., due to copy relocation. */ |
1777 | | unsigned extern_protected_data : 1; |
1778 | | |
1779 | | /* True if `_bfd_elf_link_renumber_dynsyms' must be called even for |
1780 | | static binaries. */ |
1781 | | unsigned always_renumber_dynsyms : 1; |
1782 | | |
1783 | | /* True if the 32-bit Linux PRPSINFO structure's `pr_uid' and `pr_gid' |
1784 | | members use a 16-bit data type. */ |
1785 | | unsigned linux_prpsinfo32_ugid16 : 1; |
1786 | | |
1787 | | /* True if the 64-bit Linux PRPSINFO structure's `pr_uid' and `pr_gid' |
1788 | | members use a 16-bit data type. */ |
1789 | | unsigned linux_prpsinfo64_ugid16 : 1; |
1790 | | |
1791 | | /* True if the backend can use mmap to map in all input section |
1792 | | contents. All bfd_malloc_and_get_section and free usages on |
1793 | | section contents must be replaced by _bfd_elf_mmap_section_contents |
1794 | | and _bfd_elf_munmap_section_contents. */ |
1795 | | unsigned use_mmap : 1; |
1796 | | }; |
1797 | | |
1798 | | /* Information about reloc sections associated with a bfd_elf_section_data |
1799 | | structure. */ |
1800 | | struct bfd_elf_section_reloc_data |
1801 | | { |
1802 | | /* The ELF header for the reloc section associated with this |
1803 | | section, if any. */ |
1804 | | Elf_Internal_Shdr *hdr; |
1805 | | /* The number of relocations currently assigned to HDR. */ |
1806 | | unsigned int count; |
1807 | | /* The ELF section number of the reloc section. Only used for an |
1808 | | output file. */ |
1809 | | int idx; |
1810 | | /* Used by the backend linker to store the symbol hash table entries |
1811 | | associated with relocs against global symbols. */ |
1812 | | struct elf_link_hash_entry **hashes; |
1813 | | }; |
1814 | | |
1815 | | /* Information stored for each BFD section in an ELF file. This |
1816 | | structure is allocated by elf_new_section_hook. */ |
1817 | | |
1818 | | struct bfd_elf_section_data |
1819 | | { |
1820 | | /* The ELF header for this section. */ |
1821 | | Elf_Internal_Shdr this_hdr; |
1822 | | |
1823 | | /* INPUT_SECTION_FLAGS if specified in the linker script. */ |
1824 | | struct flag_info *section_flag_info; |
1825 | | |
1826 | | /* Information about the REL and RELA reloc sections associated |
1827 | | with this section, if any. */ |
1828 | | struct bfd_elf_section_reloc_data rel, rela; |
1829 | | |
1830 | | /* The ELF section number of this section. */ |
1831 | | int this_idx; |
1832 | | |
1833 | | /* Used by the backend linker when generating a shared library to |
1834 | | record the dynamic symbol index for a section symbol |
1835 | | corresponding to this section. A value of 0 means that there is |
1836 | | no dynamic symbol for this section. */ |
1837 | | int dynindx; |
1838 | | |
1839 | | /* A pointer to the linked-to section for SHF_LINK_ORDER. */ |
1840 | | asection *linked_to; |
1841 | | |
1842 | | /* A pointer to the swapped relocs. If the section uses REL relocs, |
1843 | | rather than RELA, all the r_addend fields will be zero. This |
1844 | | pointer may be NULL. It is used by the backend linker. */ |
1845 | | Elf_Internal_Rela *relocs; |
1846 | | |
1847 | | /* A pointer to a linked list tracking dynamic relocs copied for |
1848 | | local symbols. */ |
1849 | | void *local_dynrel; |
1850 | | |
1851 | | /* A pointer to the bfd section used for dynamic relocs. */ |
1852 | | asection *sreloc; |
1853 | | |
1854 | | union { |
1855 | | /* Group name, if this section is a member of a group. */ |
1856 | | const char *name; |
1857 | | |
1858 | | /* Group signature sym, if this is the SHT_GROUP section. */ |
1859 | | struct bfd_symbol *id; |
1860 | | } group; |
1861 | | |
1862 | | /* For a member of a group, points to the SHT_GROUP section. |
1863 | | NULL for the SHT_GROUP section itself and non-group sections. */ |
1864 | | asection *sec_group; |
1865 | | |
1866 | | /* A linked list of member sections in the group. Circular when used by |
1867 | | the linker. For the SHT_GROUP section, points at first member. */ |
1868 | | asection *next_in_group; |
1869 | | |
1870 | | /* The FDEs associated with this section. The u.fde.next_in_section |
1871 | | field acts as a chain pointer. */ |
1872 | | struct eh_cie_fde *fde_list; |
1873 | | |
1874 | | /* Link from a text section to its .eh_frame_entry section. */ |
1875 | | asection *eh_frame_entry; |
1876 | | |
1877 | | /* If the mmapped_p flag is set, this points to the actual mmapped |
1878 | | address of contents. If it is set to NULL, contents isn't |
1879 | | mmapped. */ |
1880 | | void *contents_addr; |
1881 | | |
1882 | | /* If the mmapped_p flag is set, this is the actual mmapped size of |
1883 | | contents. */ |
1884 | | size_t contents_size; |
1885 | | |
1886 | | /* TRUE if the section has secondary reloc sections associated with it. |
1887 | | FIXME: In the future it might be better to change this into a list |
1888 | | of secondary reloc sections, making lookup easier and faster. */ |
1889 | | bool has_secondary_relocs; |
1890 | | |
1891 | | /* A pointer used for various section optimizations. */ |
1892 | | void *sec_info; |
1893 | | }; |
1894 | | |
1895 | 50.1M | #define elf_section_data(sec) ((struct bfd_elf_section_data*)(sec)->used_by_bfd) |
1896 | 472k | #define elf_linked_to_section(sec) (elf_section_data(sec)->linked_to) |
1897 | 6.06M | #define elf_section_type(sec) (elf_section_data(sec)->this_hdr.sh_type) |
1898 | 8.35M | #define elf_section_flags(sec) (elf_section_data(sec)->this_hdr.sh_flags) |
1899 | 1.29M | #define elf_section_info(sec) (elf_section_data(sec)->this_hdr.sh_info) |
1900 | 207k | #define elf_group_name(sec) (elf_section_data(sec)->group.name) |
1901 | 1.36k | #define elf_group_id(sec) (elf_section_data(sec)->group.id) |
1902 | 1.06M | #define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group) |
1903 | 0 | #define elf_fde_list(sec) (elf_section_data(sec)->fde_list) |
1904 | 1.32M | #define elf_sec_group(sec) (elf_section_data(sec)->sec_group) |
1905 | 0 | #define elf_section_eh_frame_entry(sec) (elf_section_data(sec)->eh_frame_entry) |
1906 | | |
1907 | | #define xvec_get_elf_backend_data(xvec) \ |
1908 | 282M | ((const struct elf_backend_data *) (xvec)->backend_data) |
1909 | | |
1910 | | #define get_elf_backend_data(abfd) \ |
1911 | 282M | xvec_get_elf_backend_data ((abfd)->xvec) |
1912 | | |
1913 | | /* The least object attributes (within an attributes subsection) known |
1914 | | for any target. Some code assumes that the value 0 is not used and |
1915 | | the field for that attribute can instead be used as a marker to |
1916 | | indicate that attributes have been initialized. */ |
1917 | 570 | #define LEAST_KNOWN_OBJ_ATTRIBUTE 2 |
1918 | | |
1919 | | /* The maximum number of known object attributes for any target. */ |
1920 | 1.44M | #define NUM_KNOWN_OBJ_ATTRIBUTES 77 |
1921 | | |
1922 | | /* The value of an object attribute. The type indicates whether the attribute |
1923 | | holds and integer, a string, or both. It can also indicate that there can |
1924 | | be no default (i.e. all values must be written to file, even zero), or |
1925 | | that the value is in error and should not be written to file. */ |
1926 | | |
1927 | | typedef struct obj_attribute |
1928 | | { |
1929 | 2.74M | #define ATTR_TYPE_FLAG_INT_VAL (1 << 0) |
1930 | 1.75M | #define ATTR_TYPE_FLAG_STR_VAL (1 << 1) |
1931 | 0 | #define ATTR_TYPE_FLAG_NO_DEFAULT (1 << 2) |
1932 | 0 | #define ATTR_TYPE_FLAG_ERROR (1 << 3) |
1933 | | |
1934 | 0 | #define ATTR_TYPE_HAS_INT_VAL(TYPE) ((TYPE) & ATTR_TYPE_FLAG_INT_VAL) |
1935 | 0 | #define ATTR_TYPE_HAS_STR_VAL(TYPE) ((TYPE) & ATTR_TYPE_FLAG_STR_VAL) |
1936 | 0 | #define ATTR_TYPE_HAS_NO_DEFAULT(TYPE) ((TYPE) & ATTR_TYPE_FLAG_NO_DEFAULT) |
1937 | 0 | #define ATTR_TYPE_HAS_ERROR(TYPE) ((TYPE) & ATTR_TYPE_FLAG_ERROR) |
1938 | | |
1939 | | int type; |
1940 | | unsigned int i; |
1941 | | char *s; |
1942 | | } obj_attribute; |
1943 | | |
1944 | | typedef struct obj_attribute_list |
1945 | | { |
1946 | | struct obj_attribute_list *next; |
1947 | | unsigned int tag; |
1948 | | obj_attribute attr; |
1949 | | } obj_attribute_list; |
1950 | | |
1951 | | /* Object attributes may either be defined by the processor ABI, index |
1952 | | OBJ_ATTR_PROC in the *_obj_attributes arrays, or be GNU-specific |
1953 | | (and possibly also processor-specific), index OBJ_ATTR_GNU. */ |
1954 | 215k | #define OBJ_ATTR_PROC 0 |
1955 | 2.71M | #define OBJ_ATTR_GNU 1 |
1956 | 95 | #define OBJ_ATTR_FIRST OBJ_ATTR_PROC |
1957 | 285 | #define OBJ_ATTR_LAST OBJ_ATTR_GNU |
1958 | | |
1959 | | /* The following object attribute tags are taken as generic, for all |
1960 | | targets and for "gnu" where there is no target standard. */ |
1961 | | enum |
1962 | | { |
1963 | | Tag_NULL = 0, |
1964 | | Tag_File = 1, |
1965 | | Tag_Section = 2, |
1966 | | Tag_Symbol = 3, |
1967 | | Tag_compatibility = 32 |
1968 | | }; |
1969 | | |
1970 | | /* The following struct stores information about every SystemTap section |
1971 | | found in the object file. */ |
1972 | | struct sdt_note |
1973 | | { |
1974 | | struct sdt_note *next; |
1975 | | bfd_size_type size; |
1976 | | bfd_byte data[1]; |
1977 | | }; |
1978 | | |
1979 | | /* tdata information grabbed from an elf core file. */ |
1980 | | struct core_elf_obj_tdata |
1981 | | { |
1982 | | int signal; |
1983 | | int pid; |
1984 | | int lwpid; |
1985 | | char* program; |
1986 | | char* command; |
1987 | | }; |
1988 | | |
1989 | | /* Extra tdata information held for output ELF BFDs. */ |
1990 | | struct output_elf_obj_tdata |
1991 | | { |
1992 | | struct elf_segment_map *seg_map; |
1993 | | struct elf_strtab_hash *strtab_ptr; |
1994 | | |
1995 | | /* STT_SECTION symbols for each section */ |
1996 | | asymbol **section_syms; |
1997 | | |
1998 | | /* NT_GNU_BUILD_ID note type info. */ |
1999 | | struct |
2000 | | { |
2001 | | bool (*after_write_object_contents) (bfd *); |
2002 | | const char *style; |
2003 | | asection *sec; |
2004 | | } build_id; |
2005 | | |
2006 | | /* FDO_PACKAGING_METADATA note type info. */ |
2007 | | struct |
2008 | | { |
2009 | | bool (*after_write_object_contents) (bfd *); |
2010 | | const char *json; |
2011 | | asection *sec; |
2012 | | } package_metadata; |
2013 | | |
2014 | | /* Records the result of `get_program_header_size'. */ |
2015 | | bfd_size_type program_header_size; |
2016 | | |
2017 | | /* Used when laying out sections. */ |
2018 | | file_ptr next_file_pos; |
2019 | | |
2020 | | /* Linker information. */ |
2021 | | struct bfd_link_info *link_info; |
2022 | | |
2023 | | unsigned int num_section_syms; |
2024 | | unsigned int shstrtab_section, strtab_section; |
2025 | | |
2026 | | /* Segment flags for the PT_GNU_STACK segment. */ |
2027 | | unsigned int stack_flags; |
2028 | | |
2029 | | /* Used to determine if PT_GNU_SFRAME segment header should be |
2030 | | created. */ |
2031 | | asection *sframe; |
2032 | | |
2033 | | /* Holds the build attributes section if it exists. */ |
2034 | | asection *obj_build_attributes; |
2035 | | |
2036 | | /* Used to determine if the e_flags field has been initialized */ |
2037 | | bool flags_init; |
2038 | | }; |
2039 | | |
2040 | | /* Indicate if the bfd contains SHF_GNU_MBIND/SHF_GNU_RETAIN sections or |
2041 | | symbols that have the STT_GNU_IFUNC symbol type or STB_GNU_UNIQUE |
2042 | | binding. Used to set the osabi field in the ELF header structure. */ |
2043 | | enum elf_gnu_osabi |
2044 | | { |
2045 | | elf_gnu_osabi_mbind = 1 << 0, |
2046 | | elf_gnu_osabi_ifunc = 1 << 1, |
2047 | | elf_gnu_osabi_unique = 1 << 2, |
2048 | | elf_gnu_osabi_retain = 1 << 3, |
2049 | | }; |
2050 | | |
2051 | | typedef struct elf_section_list |
2052 | | { |
2053 | | Elf_Internal_Shdr hdr; |
2054 | | unsigned int ndx; |
2055 | | struct elf_section_list * next; |
2056 | | } elf_section_list; |
2057 | | |
2058 | | enum dynamic_lib_link_class { |
2059 | | DYN_NORMAL = 0, |
2060 | | DYN_AS_NEEDED = 1, |
2061 | | DYN_DT_NEEDED = 2, |
2062 | | DYN_NO_ADD_NEEDED = 4, |
2063 | | DYN_NO_NEEDED = 8 |
2064 | | }; |
2065 | | |
2066 | | /* Some private data is stashed away for future use using the tdata pointer |
2067 | | in the bfd structure. */ |
2068 | | |
2069 | | struct elf_obj_tdata |
2070 | | { |
2071 | | Elf_Internal_Ehdr elf_header[1]; /* Actual data, but ref like ptr */ |
2072 | | Elf_Internal_Shdr **elf_sect_ptr; |
2073 | | Elf_Internal_Phdr *phdr; |
2074 | | Elf_Internal_Shdr symtab_hdr; |
2075 | | Elf_Internal_Shdr shstrtab_hdr; |
2076 | | Elf_Internal_Shdr strtab_hdr; |
2077 | | Elf_Internal_Shdr dynsymtab_hdr; |
2078 | | Elf_Internal_Shdr dynstrtab_hdr; |
2079 | | Elf_Internal_Shdr dynversym_hdr; |
2080 | | Elf_Internal_Shdr dynverref_hdr; |
2081 | | Elf_Internal_Shdr dynverdef_hdr; |
2082 | | Elf_Internal_Sym *dt_symtab; |
2083 | | bfd_byte *dt_versym; |
2084 | | bfd_byte *dt_verdef; |
2085 | | bfd_byte *dt_verneed; |
2086 | | size_t dt_symtab_count; |
2087 | | size_t dt_verdef_count; |
2088 | | size_t dt_verneed_count; |
2089 | | char * dt_strtab; |
2090 | | size_t dt_strsz; |
2091 | | elf_section_list * symtab_shndx_list; |
2092 | | bfd_vma gp; /* The gp value */ |
2093 | | unsigned int gp_size; /* The gp size */ |
2094 | | unsigned int num_elf_sections; /* elf_sect_ptr size */ |
2095 | | unsigned char *being_created; |
2096 | | |
2097 | | /* A mapping from external symbols to entries in the linker hash |
2098 | | table, used when linking. This is indexed by the symbol index |
2099 | | minus the sh_info field of the symbol table header. */ |
2100 | | struct elf_link_hash_entry **sym_hashes; |
2101 | | |
2102 | | /* Track usage and final offsets of GOT entries for local symbols. |
2103 | | This array is indexed by symbol index. Elements are used |
2104 | | identically to "got" in struct elf_link_hash_entry. */ |
2105 | | union |
2106 | | { |
2107 | | bfd_signed_vma *refcounts; |
2108 | | bfd_vma *offsets; |
2109 | | struct got_entry **ents; |
2110 | | } local_got; |
2111 | | |
2112 | | /* The linker ELF emulation code needs to let the backend ELF linker |
2113 | | know what filename should be used for a dynamic object if the |
2114 | | dynamic object is found using a search. The emulation code then |
2115 | | sometimes needs to know what name was actually used. Until the |
2116 | | file has been added to the linker symbol table, this field holds |
2117 | | the name the linker wants. After it has been added, it holds the |
2118 | | name actually used, which will be the DT_SONAME entry if there is |
2119 | | one. */ |
2120 | | const char *dt_name; |
2121 | | |
2122 | | /* The linker emulation needs to know what audit libs |
2123 | | are used by a dynamic object. */ |
2124 | | const char *dt_audit; |
2125 | | |
2126 | | /* Used by find_nearest_line entry point. */ |
2127 | | void *line_info; |
2128 | | |
2129 | | /* A place to stash dwarf1 info for this bfd. */ |
2130 | | void *dwarf1_find_line_info; |
2131 | | |
2132 | | /* A place to stash dwarf2 info for this bfd. */ |
2133 | | void *dwarf2_find_line_info; |
2134 | | |
2135 | | /* Stash away info for yet another find line/function variant. */ |
2136 | | void *elf_find_function_cache; |
2137 | | |
2138 | | /* Number of symbol version definitions we are about to emit. */ |
2139 | | unsigned int cverdefs; |
2140 | | |
2141 | | /* Number of symbol version references we are about to emit. */ |
2142 | | unsigned int cverrefs; |
2143 | | |
2144 | | /* Symbol version definitions in external objects. */ |
2145 | | Elf_Internal_Verdef *verdef; |
2146 | | |
2147 | | /* Symbol version references to external objects. */ |
2148 | | Elf_Internal_Verneed *verref; |
2149 | | |
2150 | | /* A pointer to the .eh_frame section. */ |
2151 | | asection *eh_frame_section; |
2152 | | |
2153 | | /* Symbol buffer. */ |
2154 | | void *symbuf; |
2155 | | |
2156 | | /* List of GNU properties. Will be updated by setup_gnu_properties |
2157 | | after all input GNU properties are merged for output. */ |
2158 | | elf_property_list *properties; |
2159 | | |
2160 | | obj_attribute known_obj_attributes[2][NUM_KNOWN_OBJ_ATTRIBUTES]; |
2161 | | obj_attribute_list *other_obj_attributes[2]; |
2162 | | |
2163 | | /* Linked-list containing information about every Systemtap section |
2164 | | found in the object file. Each section corresponds to one entry |
2165 | | in the list. */ |
2166 | | struct sdt_note *sdt_note_head; |
2167 | | |
2168 | | unsigned int symtab_section, dynsymtab_section; |
2169 | | unsigned int dynversym_section, dynverdef_section, dynverref_section; |
2170 | | |
2171 | | /* An identifier used to distinguish different target |
2172 | | specific extensions to this structure. */ |
2173 | | ENUM_BITFIELD (elf_target_id) object_id : 6; |
2174 | | |
2175 | | /* Whether a dyanmic object was specified normally on the linker |
2176 | | command line, or was specified when --as-needed was in effect, |
2177 | | or was found via a DT_NEEDED entry. */ |
2178 | | ENUM_BITFIELD (dynamic_lib_link_class) dyn_lib_class : 4; |
2179 | | |
2180 | | /* Whether the bfd uses OS specific bits that require ELFOSABI_GNU. */ |
2181 | | ENUM_BITFIELD (elf_gnu_osabi) has_gnu_osabi : 4; |
2182 | | |
2183 | | /* Whether if the bfd contains the GNU_PROPERTY_NO_COPY_ON_PROTECTED |
2184 | | property. */ |
2185 | | unsigned int has_no_copy_on_protected : 1; |
2186 | | |
2187 | | /* Whether if the bfd contains the |
2188 | | GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS property. */ |
2189 | | unsigned int has_indirect_extern_access : 1; |
2190 | | |
2191 | | /* Irix 5 often screws up the symbol table, sorting local symbols |
2192 | | after global symbols. This flag is set if the symbol table in |
2193 | | this BFD appears to be screwed up. If it is, we ignore the |
2194 | | sh_info field in the symbol table header, and always read all the |
2195 | | symbols. */ |
2196 | | unsigned int bad_symtab : 1; |
2197 | | |
2198 | | /* Set if DT_FLAGS_1 has DF_1_PIE set. */ |
2199 | | unsigned int is_pie : 1; |
2200 | | |
2201 | | /* Information grabbed from an elf core file. */ |
2202 | | struct core_elf_obj_tdata *core; |
2203 | | |
2204 | | /* More information held for output ELF BFDs. */ |
2205 | | struct output_elf_obj_tdata *o; |
2206 | | }; |
2207 | | |
2208 | 316M | #define elf_tdata(bfd) ((bfd) -> tdata.elf_obj_data) |
2209 | | |
2210 | 27.4M | #define elf_object_id(bfd) (elf_tdata(bfd) -> object_id) |
2211 | 324 | #define elf_program_header_size(bfd) (elf_tdata(bfd) -> o->program_header_size) |
2212 | 74.5M | #define elf_elfheader(bfd) (elf_tdata(bfd) -> elf_header) |
2213 | 55.4M | #define elf_elfsections(bfd) (elf_tdata(bfd) -> elf_sect_ptr) |
2214 | 52.2M | #define elf_numsections(bfd) (elf_tdata(bfd) -> num_elf_sections) |
2215 | 234 | #define elf_seg_map(bfd) (elf_tdata(bfd) -> o->seg_map) |
2216 | 0 | #define elf_link_info(bfd) (elf_tdata(bfd) -> o->link_info) |
2217 | 419 | #define elf_next_file_pos(bfd) (elf_tdata(bfd) -> o->next_file_pos) |
2218 | 2 | #define elf_stack_flags(bfd) (elf_tdata(bfd) -> o->stack_flags) |
2219 | 2 | #define elf_sframe(bfd) (elf_tdata(bfd) -> o->sframe) |
2220 | | #define elf_obj_build_attributes(bfd) \ |
2221 | 0 | (elf_tdata(bfd) -> o->obj_build_attributes) |
2222 | 13.5k | #define elf_shstrtab(bfd) (elf_tdata(bfd) -> o->strtab_ptr) |
2223 | 2.71M | #define elf_onesymtab(bfd) (elf_tdata(bfd) -> symtab_section) |
2224 | 525k | #define elf_symtab_shndx_list(bfd) (elf_tdata(bfd) -> symtab_shndx_list) |
2225 | 6.38k | #define elf_strtab_sec(bfd) (elf_tdata(bfd) -> o->strtab_section) |
2226 | 2.77k | #define elf_shstrtab_sec(bfd) (elf_tdata(bfd) -> o->shstrtab_section) |
2227 | 281k | #define elf_symtab_hdr(bfd) (elf_tdata(bfd) -> symtab_hdr) |
2228 | 225k | #define elf_dynsymtab(bfd) (elf_tdata(bfd) -> dynsymtab_section) |
2229 | 1.70M | #define elf_dynversym(bfd) (elf_tdata(bfd) -> dynversym_section) |
2230 | 1.26M | #define elf_dynverdef(bfd) (elf_tdata(bfd) -> dynverdef_section) |
2231 | 1.26M | #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 | 40 | #define elf_section_syms(bfd) (elf_tdata(bfd) -> o->section_syms) |
2235 | 40 | #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 | 2.83k | #define elf_gp(bfd) (elf_tdata(bfd) -> gp) |
2239 | 24 | #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 | 98.7k | #define elf_bad_symtab(bfd) (elf_tdata(bfd) -> bad_symtab) |
2248 | 194 | #define elf_flags_init(bfd) (elf_tdata(bfd) -> o->flags_init) |
2249 | 1.12M | #define elf_use_dt_symtab_p(bfd) (elf_tdata(bfd) -> dt_symtab_count != 0) |
2250 | 1.17M | #define elf_known_obj_attributes(bfd) (elf_tdata (bfd) -> known_obj_attributes) |
2251 | 291k | #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 | 1.51k | #define elf_properties(bfd) (elf_tdata (bfd) -> properties) |
2257 | | #define elf_has_no_copy_on_protected(bfd) \ |
2258 | 57 | (elf_tdata(bfd) -> has_no_copy_on_protected) |
2259 | | #define elf_has_indirect_extern_access(bfd) \ |
2260 | 19 | (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); |
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); |
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, unsigned char); |
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 bool _bfd_elf_write_section_build_attributes |
3074 | | (bfd *, struct bfd_link_info *); |
3075 | | extern char *_bfd_elf_attr_strdup (bfd *, const char *); |
3076 | | extern void _bfd_elf_copy_obj_attributes (bfd *, bfd *); |
3077 | | extern int _bfd_elf_obj_attrs_arg_type (bfd *, int, unsigned int); |
3078 | | extern void _bfd_elf_parse_attributes (bfd *, Elf_Internal_Shdr *); |
3079 | | extern bool _bfd_elf_merge_object_attributes |
3080 | | (bfd *, struct bfd_link_info *); |
3081 | | extern bool _bfd_elf_merge_unknown_attribute_low (bfd *, bfd *, int); |
3082 | | extern bool _bfd_elf_merge_unknown_attribute_list (bfd *, bfd *); |
3083 | | extern Elf_Internal_Shdr *_bfd_elf_single_rel_hdr (asection *sec); |
3084 | | extern bool elf_read_notes (bfd *, file_ptr, bfd_size_type, size_t); |
3085 | | |
3086 | | extern bool _bfd_elf_parse_gnu_properties |
3087 | | (bfd *, Elf_Internal_Note *); |
3088 | | extern elf_property_list * _bfd_elf_find_property |
3089 | | (elf_property_list *, unsigned int, elf_property_list **); |
3090 | | extern elf_property * _bfd_elf_get_property |
3091 | | (bfd *, unsigned int, unsigned int); |
3092 | | extern bfd *_bfd_elf_link_setup_gnu_properties |
3093 | | (struct bfd_link_info *); |
3094 | | extern bfd_size_type _bfd_elf_convert_gnu_property_size |
3095 | | (bfd *, bfd *); |
3096 | | extern bool _bfd_elf_convert_gnu_properties |
3097 | | (bfd *, asection *, bfd *, bfd_byte **, bfd_size_type *); |
3098 | | |
3099 | | /* The linker may need to keep track of the number of relocs that it |
3100 | | decides to copy as dynamic relocs in check_relocs for each symbol. |
3101 | | This is so that it can later discard them if they are found to be |
3102 | | unnecessary. We can store the information in a field extending the |
3103 | | regular ELF linker hash table. */ |
3104 | | |
3105 | | struct elf_dyn_relocs |
3106 | | { |
3107 | | struct elf_dyn_relocs *next; |
3108 | | |
3109 | | /* The input section of the reloc. */ |
3110 | | asection *sec; |
3111 | | |
3112 | | /* Total number of relocs copied for the input section. */ |
3113 | | bfd_size_type count; |
3114 | | |
3115 | | /* Number of pc-relative relocs copied for the input section. */ |
3116 | | bfd_size_type pc_count; |
3117 | | }; |
3118 | | |
3119 | | extern bool _bfd_elf_create_ifunc_sections |
3120 | | (bfd *, struct bfd_link_info *); |
3121 | | extern bool _bfd_elf_allocate_ifunc_dyn_relocs |
3122 | | (struct bfd_link_info *, struct elf_link_hash_entry *, |
3123 | | struct elf_dyn_relocs **, unsigned int, unsigned int, |
3124 | | unsigned int, bool); |
3125 | | |
3126 | | extern void elf_append_rela (bfd *, asection *, Elf_Internal_Rela *); |
3127 | | extern void elf_append_rel (bfd *, asection *, Elf_Internal_Rela *); |
3128 | | |
3129 | | extern bfd_vma elf64_r_info (bfd_vma, bfd_vma); |
3130 | | extern bfd_vma elf64_r_sym (bfd_vma); |
3131 | | extern bfd_vma elf32_r_info (bfd_vma, bfd_vma); |
3132 | | extern bfd_vma elf32_r_sym (bfd_vma); |
3133 | | |
3134 | | extern bool is_debuginfo_file (bfd *); |
3135 | | |
3136 | | |
3137 | | extern bool _bfd_elf_init_secondary_reloc_section |
3138 | | (bfd *, Elf_Internal_Shdr *, const char *, unsigned int); |
3139 | | extern bool _bfd_elf_slurp_secondary_reloc_section |
3140 | | (bfd *, asection *, asymbol **, bool); |
3141 | | extern bool _bfd_elf_copy_special_section_fields |
3142 | | (const bfd *, bfd *, const Elf_Internal_Shdr *, Elf_Internal_Shdr *); |
3143 | | extern bool _bfd_elf_write_secondary_reloc_section |
3144 | | (bfd *, asection *); |
3145 | | extern unsigned int _bfd_elf_symbol_section_index |
3146 | | (bfd *, elf_symbol_type *); |
3147 | | |
3148 | | extern asection *_bfd_elf_readonly_dynrelocs |
3149 | | (struct elf_link_hash_entry *); |
3150 | | extern bool _bfd_elf_maybe_set_textrel |
3151 | | (struct elf_link_hash_entry *, void *); |
3152 | | |
3153 | | extern bool _bfd_elf_add_dynamic_tags |
3154 | | (bfd *, struct bfd_link_info *, bool); |
3155 | | |
3156 | | extern bool _bfd_elf_mmap_section_contents |
3157 | | (bfd *abfd, asection *section, bfd_byte **buf); |
3158 | | extern void _bfd_elf_munmap_section_contents |
3159 | | (asection *, void *); |
3160 | | extern bool _bfd_elf_link_mmap_section_contents |
3161 | | (bfd *abfd, asection *section, bfd_byte **buf); |
3162 | | extern void _bfd_elf_link_munmap_section_contents |
3163 | | (asection *); |
3164 | | |
3165 | | extern struct elf_link_hash_entry * _bfd_elf_get_link_hash_entry |
3166 | | (struct elf_link_hash_entry **, unsigned int, Elf_Internal_Shdr *); |
3167 | | |
3168 | | /* Large common section. */ |
3169 | | extern asection _bfd_elf_large_com_section; |
3170 | | |
3171 | | /* Hash for local symbol with the first section id, ID, in the input |
3172 | | file and the local symbol index, SYM. */ |
3173 | | #define ELF_LOCAL_SYMBOL_HASH(ID, SYM) \ |
3174 | 0 | (((((ID) & 0xffU) << 24) | (((ID) & 0xff00) << 8)) \ |
3175 | 0 | ^ (SYM) ^ (((ID) & 0xffff0000U) >> 16)) |
3176 | | |
3177 | | /* This is the condition under which finish_dynamic_symbol will be called. |
3178 | | If our finish_dynamic_symbol isn't called, we'll need to do something |
3179 | | about initializing any .plt and .got entries in relocate_section. */ |
3180 | | #define WILL_CALL_FINISH_DYNAMIC_SYMBOL(DYN, SHARED, H) \ |
3181 | 0 | ((DYN) \ |
3182 | 0 | && ((SHARED) || !(H)->forced_local) \ |
3183 | 0 | && ((H)->dynindx != -1 || (H)->forced_local)) |
3184 | | |
3185 | | /* This macro is to avoid lots of duplicated code in the body |
3186 | | of xxx_relocate_section() in the various elfxx-xxxx.c files. */ |
3187 | | #define RELOC_FOR_GLOBAL_SYMBOL(info, input_bfd, input_section, rel, \ |
3188 | | r_symndx, symtab_hdr, sym_hashes, \ |
3189 | | h, sec, relocation, \ |
3190 | | unresolved_reloc, warned, ignored) \ |
3191 | 0 | do \ |
3192 | 0 | { \ |
3193 | 0 | /* It seems this can happen with erroneous or unsupported \ |
3194 | 0 | input (mixing a.out and elf in an archive, for example.) */ \ |
3195 | 0 | if (sym_hashes == NULL) \ |
3196 | 0 | return false; \ |
3197 | 0 | \ |
3198 | 0 | h = sym_hashes[r_symndx - symtab_hdr->sh_info]; \ |
3199 | 0 | \ |
3200 | 0 | if (info->wrap_hash != NULL \ |
3201 | 0 | && (input_section->flags & SEC_DEBUGGING) != 0) \ |
3202 | 0 | { \ |
3203 | 0 | struct bfd_link_hash_entry * new_h; \ |
3204 | 0 | new_h = unwrap_hash_lookup (info, input_bfd, &h->root); \ |
3205 | 0 | /* PR 31710: This lookup can fail if the input source has a \ |
3206 | 0 | symbol that starts with __wrap_. */ \ |
3207 | 0 | if (new_h != NULL) \ |
3208 | 0 | h = (struct elf_link_hash_entry *) new_h; \ |
3209 | 0 | } \ |
3210 | 0 | \ |
3211 | 0 | while (h->root.type == bfd_link_hash_indirect \ |
3212 | 0 | || h->root.type == bfd_link_hash_warning) \ |
3213 | 0 | h = (struct elf_link_hash_entry *) h->root.u.i.link; \ |
3214 | 0 | \ |
3215 | 0 | warned = false; \ |
3216 | 0 | ignored = false; \ |
3217 | 0 | unresolved_reloc = false; \ |
3218 | 0 | relocation = 0; \ |
3219 | 0 | if (h->root.type == bfd_link_hash_defined \ |
3220 | 0 | || h->root.type == bfd_link_hash_defweak) \ |
3221 | 0 | { \ |
3222 | 0 | sec = h->root.u.def.section; \ |
3223 | 0 | if (sec == NULL \ |
3224 | 0 | || sec->output_section == NULL) \ |
3225 | 0 | /* Set a flag that will be cleared later if we find a \ |
3226 | 0 | relocation value for this symbol. output_section \ |
3227 | 0 | is typically NULL for symbols satisfied by a shared \ |
3228 | 0 | library. */ \ |
3229 | 0 | unresolved_reloc = true; \ |
3230 | 0 | else \ |
3231 | 0 | relocation = (h->root.u.def.value \ |
3232 | 0 | + sec->output_section->vma \ |
3233 | 0 | + sec->output_offset); \ |
3234 | 0 | } \ |
3235 | 0 | else if (h->root.type == bfd_link_hash_undefweak) \ |
3236 | 0 | ; \ |
3237 | 0 | else if (info->unresolved_syms_in_objects == RM_IGNORE \ |
3238 | 0 | && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) \ |
3239 | 0 | ignored = true; \ |
3240 | 0 | else if (!bfd_link_relocatable (info)) \ |
3241 | 0 | { \ |
3242 | 0 | bool err = ((info->unresolved_syms_in_objects == RM_DIAGNOSE \ |
3243 | 0 | && !info->warn_unresolved_syms) \ |
3244 | 0 | || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT); \ |
3245 | 0 | (*info->callbacks->undefined_symbol) (info, \ |
3246 | 0 | h->root.root.string, \ |
3247 | 0 | input_bfd, \ |
3248 | 0 | input_section, \ |
3249 | 0 | rel->r_offset, err); \ |
3250 | 0 | warned = true; \ |
3251 | 0 | } \ |
3252 | 0 | (void) unresolved_reloc; \ |
3253 | 0 | (void) warned; \ |
3254 | 0 | (void) ignored; \ |
3255 | 0 | } \ |
3256 | 0 | while (0) |
3257 | | |
3258 | | /* This macro is to avoid lots of duplicated code in the body of the |
3259 | | loop over relocations in xxx_relocate_section() in the various |
3260 | | elfxx-xxxx.c files. |
3261 | | |
3262 | | Handle relocations against symbols from removed linkonce sections, |
3263 | | or sections discarded by a linker script. When doing a relocatable |
3264 | | link, we remove such relocations. Otherwise, we just want the |
3265 | | section contents zeroed and avoid any special processing. */ |
3266 | | #define RELOC_AGAINST_DISCARDED_SECTION(info, input_bfd, input_section, \ |
3267 | | rel, count, relend, \ |
3268 | | howto, index, contents) \ |
3269 | 0 | { \ |
3270 | 0 | int i_; \ |
3271 | 0 | _bfd_clear_contents (howto, input_bfd, input_section, \ |
3272 | 0 | contents, rel[index].r_offset); \ |
3273 | 0 | \ |
3274 | 0 | if (bfd_link_relocatable (info) \ |
3275 | 0 | && (input_section->flags & SEC_DEBUGGING)) \ |
3276 | 0 | { \ |
3277 | 0 | /* Only remove relocations in debug sections since other \ |
3278 | 0 | sections may require relocations. */ \ |
3279 | 0 | Elf_Internal_Shdr *rel_hdr; \ |
3280 | 0 | \ |
3281 | 0 | rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \ |
3282 | 0 | \ |
3283 | 0 | /* Avoid empty output section. */ \ |
3284 | 0 | if (rel_hdr->sh_size > rel_hdr->sh_entsize) \ |
3285 | 0 | { \ |
3286 | 0 | rel_hdr->sh_size -= rel_hdr->sh_entsize; \ |
3287 | 0 | rel_hdr = _bfd_elf_single_rel_hdr (input_section); \ |
3288 | 0 | rel_hdr->sh_size -= rel_hdr->sh_entsize; \ |
3289 | 0 | \ |
3290 | 0 | memmove (rel, rel + count, \ |
3291 | 0 | (relend - rel - count) * sizeof (*rel)); \ |
3292 | 0 | \ |
3293 | 0 | input_section->reloc_count -= count; \ |
3294 | 0 | relend -= count; \ |
3295 | 0 | rel--; \ |
3296 | 0 | continue; \ |
3297 | 0 | } \ |
3298 | 0 | } \ |
3299 | 0 | \ |
3300 | 0 | for (i_ = 0; i_ < count; i_++) \ |
3301 | 0 | { \ |
3302 | 0 | rel[i_].r_info = 0; \ |
3303 | 0 | rel[i_].r_addend = 0; \ |
3304 | 0 | } \ |
3305 | 0 | rel += count - 1; \ |
3306 | 0 | continue; \ |
3307 | 0 | } |
3308 | | |
3309 | | /* Will a symbol be bound to the definition within the shared |
3310 | | library, if any. A unique symbol can never be bound locally. */ |
3311 | | #define SYMBOLIC_BIND(INFO, H) \ |
3312 | 0 | (!(H)->unique_global \ |
3313 | 0 | && ((INFO)->symbolic \ |
3314 | 0 | || (H)->start_stop \ |
3315 | 0 | || ((INFO)->dynamic && !(H)->dynamic))) |
3316 | | |
3317 | | /* Determine if a section contains CTF data, using its name. */ |
3318 | | static inline bool |
3319 | | bfd_section_is_ctf (const asection *sec) |
3320 | 0 | { |
3321 | 0 | const char *name = bfd_section_name (sec); |
3322 | 0 | return startswith (name, ".ctf") && (name[4] == 0 || name[4] == '.'); |
3323 | 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: cofflink.c:bfd_section_is_ctf Unexecuted instantiation: coffgen.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-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_objdump.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: 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_addr2line.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_dwarf.c:bfd_section_is_ctf Unexecuted instantiation: fuzz_objcopy.c:bfd_section_is_ctf |
3324 | | |
3325 | | #ifdef __cplusplus |
3326 | | } |
3327 | | #endif |
3328 | | #endif /* _LIBELF_H_ */ |