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