1 /* ELF executable support for BFD.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
6 Written by Fred Fish @ Cygnus Support, from information published
7 in "UNIX System V Release 4, Programmers Guide: ANSI C and
8 Programming Support Tools". Sufficient support for gdb.
10 Rewritten by Mark Eichin @ Cygnus Support, from information
11 published in "System V Application Binary Interface", chapters 4
12 and 5, as well as the various "Processor Supplement" documents
13 derived from it. Added support for assembler and other object file
14 utilities. Further work done by Ken Raeburn (Cygnus Support), Michael
15 Meissner (Open Software Foundation), and Peter Hoogenboom (University
16 of Utah) to finish and extend this.
18 This file is part of BFD, the Binary File Descriptor library.
20 This program is free software; you can redistribute it and/or modify
21 it under the terms of the GNU General Public License as published by
22 the Free Software Foundation; either version 3 of the License, or
23 (at your option) any later version.
25 This program is distributed in the hope that it will be useful,
26 but WITHOUT ANY WARRANTY; without even the implied warranty of
27 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 GNU General Public License for more details.
30 You should have received a copy of the GNU General Public License
31 along with this program; if not, write to the Free Software
32 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
33 MA 02110-1301, USA. */
36 /* Problems and other issues to resolve.
38 (1) BFD expects there to be some fixed number of "sections" in
39 the object file. I.E. there is a "section_count" variable in the
40 bfd structure which contains the number of sections. However, ELF
41 supports multiple "views" of a file. In particular, with current
42 implementations, executable files typically have two tables, a
43 program header table and a section header table, both of which
44 partition the executable.
46 In ELF-speak, the "linking view" of the file uses the section header
47 table to access "sections" within the file, and the "execution view"
48 uses the program header table to access "segments" within the file.
49 "Segments" typically may contain all the data from one or more
52 Note that the section header table is optional in ELF executables,
53 but it is this information that is most useful to gdb. If the
54 section header table is missing, then gdb should probably try
55 to make do with the program header table. (FIXME)
57 (2) The code in this file is compiled twice, once in 32-bit mode and
58 once in 64-bit mode. More of it should be made size-independent
61 (3) ELF section symbols are handled rather sloppily now. This should
62 be cleaned up, and ELF section symbols reconciled with BFD section
65 (4) We need a published spec for 64-bit ELF. We've got some stuff here
66 that we're using for SPARC V9 64-bit chips, but don't assume that
72 #include "libiberty.h"
77 /* Renaming structures, typedefs, macros and functions to be size-specific. */
78 #define Elf_External_Ehdr NAME(Elf,External_Ehdr)
79 #define Elf_External_Sym NAME(Elf,External_Sym)
80 #define Elf_External_Shdr NAME(Elf,External_Shdr)
81 #define Elf_External_Phdr NAME(Elf,External_Phdr)
82 #define Elf_External_Rel NAME(Elf,External_Rel)
83 #define Elf_External_Rela NAME(Elf,External_Rela)
84 #define Elf_External_Dyn NAME(Elf,External_Dyn)
86 #define elf_core_file_failing_command NAME(bfd_elf,core_file_failing_command)
87 #define elf_core_file_failing_signal NAME(bfd_elf,core_file_failing_signal)
88 #define elf_core_file_matches_executable_p \
89 NAME(bfd_elf,core_file_matches_executable_p)
90 #define elf_object_p NAME(bfd_elf,object_p)
91 #define elf_core_file_p NAME(bfd_elf,core_file_p)
92 #define elf_get_symtab_upper_bound NAME(bfd_elf,get_symtab_upper_bound)
93 #define elf_get_dynamic_symtab_upper_bound \
94 NAME(bfd_elf,get_dynamic_symtab_upper_bound)
95 #define elf_swap_reloc_in NAME(bfd_elf,swap_reloc_in)
96 #define elf_swap_reloca_in NAME(bfd_elf,swap_reloca_in)
97 #define elf_swap_reloc_out NAME(bfd_elf,swap_reloc_out)
98 #define elf_swap_reloca_out NAME(bfd_elf,swap_reloca_out)
99 #define elf_swap_symbol_in NAME(bfd_elf,swap_symbol_in)
100 #define elf_swap_symbol_out NAME(bfd_elf,swap_symbol_out)
101 #define elf_swap_phdr_in NAME(bfd_elf,swap_phdr_in)
102 #define elf_swap_phdr_out NAME(bfd_elf,swap_phdr_out)
103 #define elf_swap_dyn_in NAME(bfd_elf,swap_dyn_in)
104 #define elf_swap_dyn_out NAME(bfd_elf,swap_dyn_out)
105 #define elf_get_reloc_upper_bound NAME(bfd_elf,get_reloc_upper_bound)
106 #define elf_canonicalize_reloc NAME(bfd_elf,canonicalize_reloc)
107 #define elf_slurp_symbol_table NAME(bfd_elf,slurp_symbol_table)
108 #define elf_canonicalize_symtab NAME(bfd_elf,canonicalize_symtab)
109 #define elf_canonicalize_dynamic_symtab \
110 NAME(bfd_elf,canonicalize_dynamic_symtab)
111 #define elf_get_synthetic_symtab \
112 NAME(bfd_elf,get_synthetic_symtab)
113 #define elf_make_empty_symbol NAME(bfd_elf,make_empty_symbol)
114 #define elf_get_symbol_info NAME(bfd_elf,get_symbol_info)
115 #define elf_get_lineno NAME(bfd_elf,get_lineno)
116 #define elf_set_arch_mach NAME(bfd_elf,set_arch_mach)
117 #define elf_find_nearest_line NAME(bfd_elf,find_nearest_line)
118 #define elf_sizeof_headers NAME(bfd_elf,sizeof_headers)
119 #define elf_set_section_contents NAME(bfd_elf,set_section_contents)
120 #define elf_no_info_to_howto NAME(bfd_elf,no_info_to_howto)
121 #define elf_no_info_to_howto_rel NAME(bfd_elf,no_info_to_howto_rel)
122 #define elf_find_section NAME(bfd_elf,find_section)
123 #define elf_write_shdrs_and_ehdr NAME(bfd_elf,write_shdrs_and_ehdr)
124 #define elf_write_out_phdrs NAME(bfd_elf,write_out_phdrs)
125 #define elf_checksum_contents NAME(bfd_elf,checksum_contents)
126 #define elf_write_relocs NAME(bfd_elf,write_relocs)
127 #define elf_slurp_reloc_table NAME(bfd_elf,slurp_reloc_table)
130 #define ELF_R_INFO(X,Y) ELF64_R_INFO(X,Y)
131 #define ELF_R_SYM(X) ELF64_R_SYM(X)
132 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
133 #define ELFCLASS ELFCLASS64
135 #define LOG_FILE_ALIGN 3
138 #define ELF_R_INFO(X,Y) ELF32_R_INFO(X,Y)
139 #define ELF_R_SYM(X) ELF32_R_SYM(X)
140 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
141 #define ELFCLASS ELFCLASS32
143 #define LOG_FILE_ALIGN 2
147 static void elf_debug_section (int, Elf_Internal_Shdr
*);
150 static void elf_debug_file (Elf_Internal_Ehdr
*);
153 /* Structure swapping routines */
155 /* Should perhaps use put_offset, put_word, etc. For now, the two versions
156 can be handled by explicitly specifying 32 bits or "the long type". */
158 #define H_PUT_WORD H_PUT_64
159 #define H_PUT_SIGNED_WORD H_PUT_S64
160 #define H_GET_WORD H_GET_64
161 #define H_GET_SIGNED_WORD H_GET_S64
164 #define H_PUT_WORD H_PUT_32
165 #define H_PUT_SIGNED_WORD H_PUT_S32
166 #define H_GET_WORD H_GET_32
167 #define H_GET_SIGNED_WORD H_GET_S32
170 /* Translate an ELF symbol in external format into an ELF symbol in internal
174 elf_swap_symbol_in (bfd
*abfd
,
177 Elf_Internal_Sym
*dst
)
179 const Elf_External_Sym
*src
= (const Elf_External_Sym
*) psrc
;
180 const Elf_External_Sym_Shndx
*shndx
= (const Elf_External_Sym_Shndx
*) pshn
;
181 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
183 dst
->st_name
= H_GET_32 (abfd
, src
->st_name
);
185 dst
->st_value
= H_GET_SIGNED_WORD (abfd
, src
->st_value
);
187 dst
->st_value
= H_GET_WORD (abfd
, src
->st_value
);
188 dst
->st_size
= H_GET_WORD (abfd
, src
->st_size
);
189 dst
->st_info
= H_GET_8 (abfd
, src
->st_info
);
190 dst
->st_other
= H_GET_8 (abfd
, src
->st_other
);
191 dst
->st_shndx
= H_GET_16 (abfd
, src
->st_shndx
);
192 if (dst
->st_shndx
== (SHN_XINDEX
& 0xffff))
196 dst
->st_shndx
= H_GET_32 (abfd
, shndx
->est_shndx
);
198 else if (dst
->st_shndx
>= (SHN_LORESERVE
& 0xffff))
199 dst
->st_shndx
+= SHN_LORESERVE
- (SHN_LORESERVE
& 0xffff);
203 /* Translate an ELF symbol in internal format into an ELF symbol in external
207 elf_swap_symbol_out (bfd
*abfd
,
208 const Elf_Internal_Sym
*src
,
213 Elf_External_Sym
*dst
= (Elf_External_Sym
*) cdst
;
214 H_PUT_32 (abfd
, src
->st_name
, dst
->st_name
);
215 H_PUT_WORD (abfd
, src
->st_value
, dst
->st_value
);
216 H_PUT_WORD (abfd
, src
->st_size
, dst
->st_size
);
217 H_PUT_8 (abfd
, src
->st_info
, dst
->st_info
);
218 H_PUT_8 (abfd
, src
->st_other
, dst
->st_other
);
220 if (tmp
>= (SHN_LORESERVE
& 0xffff) && tmp
< SHN_LORESERVE
)
224 H_PUT_32 (abfd
, tmp
, shndx
);
225 tmp
= SHN_XINDEX
& 0xffff;
227 H_PUT_16 (abfd
, tmp
, dst
->st_shndx
);
230 /* Translate an ELF file header in external format into an ELF file header in
234 elf_swap_ehdr_in (bfd
*abfd
,
235 const Elf_External_Ehdr
*src
,
236 Elf_Internal_Ehdr
*dst
)
238 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
239 memcpy (dst
->e_ident
, src
->e_ident
, EI_NIDENT
);
240 dst
->e_type
= H_GET_16 (abfd
, src
->e_type
);
241 dst
->e_machine
= H_GET_16 (abfd
, src
->e_machine
);
242 dst
->e_version
= H_GET_32 (abfd
, src
->e_version
);
244 dst
->e_entry
= H_GET_SIGNED_WORD (abfd
, src
->e_entry
);
246 dst
->e_entry
= H_GET_WORD (abfd
, src
->e_entry
);
247 dst
->e_phoff
= H_GET_WORD (abfd
, src
->e_phoff
);
248 dst
->e_shoff
= H_GET_WORD (abfd
, src
->e_shoff
);
249 dst
->e_flags
= H_GET_32 (abfd
, src
->e_flags
);
250 dst
->e_ehsize
= H_GET_16 (abfd
, src
->e_ehsize
);
251 dst
->e_phentsize
= H_GET_16 (abfd
, src
->e_phentsize
);
252 dst
->e_phnum
= H_GET_16 (abfd
, src
->e_phnum
);
253 dst
->e_shentsize
= H_GET_16 (abfd
, src
->e_shentsize
);
254 dst
->e_shnum
= H_GET_16 (abfd
, src
->e_shnum
);
255 dst
->e_shstrndx
= H_GET_16 (abfd
, src
->e_shstrndx
);
258 /* Translate an ELF file header in internal format into an ELF file header in
262 elf_swap_ehdr_out (bfd
*abfd
,
263 const Elf_Internal_Ehdr
*src
,
264 Elf_External_Ehdr
*dst
)
267 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
268 memcpy (dst
->e_ident
, src
->e_ident
, EI_NIDENT
);
269 /* note that all elements of dst are *arrays of unsigned char* already... */
270 H_PUT_16 (abfd
, src
->e_type
, dst
->e_type
);
271 H_PUT_16 (abfd
, src
->e_machine
, dst
->e_machine
);
272 H_PUT_32 (abfd
, src
->e_version
, dst
->e_version
);
274 H_PUT_SIGNED_WORD (abfd
, src
->e_entry
, dst
->e_entry
);
276 H_PUT_WORD (abfd
, src
->e_entry
, dst
->e_entry
);
277 H_PUT_WORD (abfd
, src
->e_phoff
, dst
->e_phoff
);
278 H_PUT_WORD (abfd
, src
->e_shoff
, dst
->e_shoff
);
279 H_PUT_32 (abfd
, src
->e_flags
, dst
->e_flags
);
280 H_PUT_16 (abfd
, src
->e_ehsize
, dst
->e_ehsize
);
281 H_PUT_16 (abfd
, src
->e_phentsize
, dst
->e_phentsize
);
285 H_PUT_16 (abfd
, tmp
, dst
->e_phnum
);
286 H_PUT_16 (abfd
, src
->e_shentsize
, dst
->e_shentsize
);
288 if (tmp
>= (SHN_LORESERVE
& 0xffff))
290 H_PUT_16 (abfd
, tmp
, dst
->e_shnum
);
291 tmp
= src
->e_shstrndx
;
292 if (tmp
>= (SHN_LORESERVE
& 0xffff))
293 tmp
= SHN_XINDEX
& 0xffff;
294 H_PUT_16 (abfd
, tmp
, dst
->e_shstrndx
);
297 /* Translate an ELF section header table entry in external format into an
298 ELF section header table entry in internal format. */
301 elf_swap_shdr_in (bfd
*abfd
,
302 const Elf_External_Shdr
*src
,
303 Elf_Internal_Shdr
*dst
)
305 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
307 dst
->sh_name
= H_GET_32 (abfd
, src
->sh_name
);
308 dst
->sh_type
= H_GET_32 (abfd
, src
->sh_type
);
309 dst
->sh_flags
= H_GET_WORD (abfd
, src
->sh_flags
);
311 dst
->sh_addr
= H_GET_SIGNED_WORD (abfd
, src
->sh_addr
);
313 dst
->sh_addr
= H_GET_WORD (abfd
, src
->sh_addr
);
314 dst
->sh_offset
= H_GET_WORD (abfd
, src
->sh_offset
);
315 dst
->sh_size
= H_GET_WORD (abfd
, src
->sh_size
);
316 dst
->sh_link
= H_GET_32 (abfd
, src
->sh_link
);
317 dst
->sh_info
= H_GET_32 (abfd
, src
->sh_info
);
318 dst
->sh_addralign
= H_GET_WORD (abfd
, src
->sh_addralign
);
319 dst
->sh_entsize
= H_GET_WORD (abfd
, src
->sh_entsize
);
320 dst
->bfd_section
= NULL
;
321 dst
->contents
= NULL
;
324 /* Translate an ELF section header table entry in internal format into an
325 ELF section header table entry in external format. */
328 elf_swap_shdr_out (bfd
*abfd
,
329 const Elf_Internal_Shdr
*src
,
330 Elf_External_Shdr
*dst
)
332 /* note that all elements of dst are *arrays of unsigned char* already... */
333 H_PUT_32 (abfd
, src
->sh_name
, dst
->sh_name
);
334 H_PUT_32 (abfd
, src
->sh_type
, dst
->sh_type
);
335 H_PUT_WORD (abfd
, src
->sh_flags
, dst
->sh_flags
);
336 H_PUT_WORD (abfd
, src
->sh_addr
, dst
->sh_addr
);
337 H_PUT_WORD (abfd
, src
->sh_offset
, dst
->sh_offset
);
338 H_PUT_WORD (abfd
, src
->sh_size
, dst
->sh_size
);
339 H_PUT_32 (abfd
, src
->sh_link
, dst
->sh_link
);
340 H_PUT_32 (abfd
, src
->sh_info
, dst
->sh_info
);
341 H_PUT_WORD (abfd
, src
->sh_addralign
, dst
->sh_addralign
);
342 H_PUT_WORD (abfd
, src
->sh_entsize
, dst
->sh_entsize
);
345 /* Translate an ELF program header table entry in external format into an
346 ELF program header table entry in internal format. */
349 elf_swap_phdr_in (bfd
*abfd
,
350 const Elf_External_Phdr
*src
,
351 Elf_Internal_Phdr
*dst
)
353 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
355 dst
->p_type
= H_GET_32 (abfd
, src
->p_type
);
356 dst
->p_flags
= H_GET_32 (abfd
, src
->p_flags
);
357 dst
->p_offset
= H_GET_WORD (abfd
, src
->p_offset
);
360 dst
->p_vaddr
= H_GET_SIGNED_WORD (abfd
, src
->p_vaddr
);
361 dst
->p_paddr
= H_GET_SIGNED_WORD (abfd
, src
->p_paddr
);
365 dst
->p_vaddr
= H_GET_WORD (abfd
, src
->p_vaddr
);
366 dst
->p_paddr
= H_GET_WORD (abfd
, src
->p_paddr
);
368 dst
->p_filesz
= H_GET_WORD (abfd
, src
->p_filesz
);
369 dst
->p_memsz
= H_GET_WORD (abfd
, src
->p_memsz
);
370 dst
->p_align
= H_GET_WORD (abfd
, src
->p_align
);
374 elf_swap_phdr_out (bfd
*abfd
,
375 const Elf_Internal_Phdr
*src
,
376 Elf_External_Phdr
*dst
)
378 const struct elf_backend_data
*bed
;
381 bed
= get_elf_backend_data (abfd
);
382 p_paddr
= bed
->want_p_paddr_set_to_zero
? 0 : src
->p_paddr
;
384 /* note that all elements of dst are *arrays of unsigned char* already... */
385 H_PUT_32 (abfd
, src
->p_type
, dst
->p_type
);
386 H_PUT_WORD (abfd
, src
->p_offset
, dst
->p_offset
);
387 H_PUT_WORD (abfd
, src
->p_vaddr
, dst
->p_vaddr
);
388 H_PUT_WORD (abfd
, p_paddr
, dst
->p_paddr
);
389 H_PUT_WORD (abfd
, src
->p_filesz
, dst
->p_filesz
);
390 H_PUT_WORD (abfd
, src
->p_memsz
, dst
->p_memsz
);
391 H_PUT_32 (abfd
, src
->p_flags
, dst
->p_flags
);
392 H_PUT_WORD (abfd
, src
->p_align
, dst
->p_align
);
395 /* Translate an ELF reloc from external format to internal format. */
397 elf_swap_reloc_in (bfd
*abfd
,
399 Elf_Internal_Rela
*dst
)
401 const Elf_External_Rel
*src
= (const Elf_External_Rel
*) s
;
402 dst
->r_offset
= H_GET_WORD (abfd
, src
->r_offset
);
403 dst
->r_info
= H_GET_WORD (abfd
, src
->r_info
);
408 elf_swap_reloca_in (bfd
*abfd
,
410 Elf_Internal_Rela
*dst
)
412 const Elf_External_Rela
*src
= (const Elf_External_Rela
*) s
;
413 dst
->r_offset
= H_GET_WORD (abfd
, src
->r_offset
);
414 dst
->r_info
= H_GET_WORD (abfd
, src
->r_info
);
415 dst
->r_addend
= H_GET_SIGNED_WORD (abfd
, src
->r_addend
);
418 /* Translate an ELF reloc from internal format to external format. */
420 elf_swap_reloc_out (bfd
*abfd
,
421 const Elf_Internal_Rela
*src
,
424 Elf_External_Rel
*dst
= (Elf_External_Rel
*) d
;
425 H_PUT_WORD (abfd
, src
->r_offset
, dst
->r_offset
);
426 H_PUT_WORD (abfd
, src
->r_info
, dst
->r_info
);
430 elf_swap_reloca_out (bfd
*abfd
,
431 const Elf_Internal_Rela
*src
,
434 Elf_External_Rela
*dst
= (Elf_External_Rela
*) d
;
435 H_PUT_WORD (abfd
, src
->r_offset
, dst
->r_offset
);
436 H_PUT_WORD (abfd
, src
->r_info
, dst
->r_info
);
437 H_PUT_SIGNED_WORD (abfd
, src
->r_addend
, dst
->r_addend
);
441 elf_swap_dyn_in (bfd
*abfd
,
443 Elf_Internal_Dyn
*dst
)
445 const Elf_External_Dyn
*src
= (const Elf_External_Dyn
*) p
;
447 dst
->d_tag
= H_GET_WORD (abfd
, src
->d_tag
);
448 dst
->d_un
.d_val
= H_GET_WORD (abfd
, src
->d_un
.d_val
);
452 elf_swap_dyn_out (bfd
*abfd
,
453 const Elf_Internal_Dyn
*src
,
456 Elf_External_Dyn
*dst
= (Elf_External_Dyn
*) p
;
458 H_PUT_WORD (abfd
, src
->d_tag
, dst
->d_tag
);
459 H_PUT_WORD (abfd
, src
->d_un
.d_val
, dst
->d_un
.d_val
);
462 /* ELF .o/exec file reading */
464 /* Begin processing a given object.
466 First we validate the file by reading in the ELF header and checking
469 static inline bfd_boolean
470 elf_file_p (Elf_External_Ehdr
*x_ehdrp
)
472 return ((x_ehdrp
->e_ident
[EI_MAG0
] == ELFMAG0
)
473 && (x_ehdrp
->e_ident
[EI_MAG1
] == ELFMAG1
)
474 && (x_ehdrp
->e_ident
[EI_MAG2
] == ELFMAG2
)
475 && (x_ehdrp
->e_ident
[EI_MAG3
] == ELFMAG3
));
478 /* Check to see if the file associated with ABFD matches the target vector
481 Note that we may be called several times with the same ABFD, but different
482 target vectors, most of which will not match. We have to avoid leaving
483 any side effects in ABFD, or any data it points to (like tdata), if the
484 file does not match the target vector. */
487 elf_object_p (bfd
*abfd
)
489 Elf_External_Ehdr x_ehdr
; /* Elf file header, external form */
490 Elf_Internal_Ehdr
*i_ehdrp
; /* Elf file header, internal form */
491 Elf_External_Shdr x_shdr
; /* Section header table entry, external form */
492 Elf_Internal_Shdr i_shdr
;
493 Elf_Internal_Shdr
*i_shdrp
; /* Section header table, internal form */
494 unsigned int shindex
;
495 const struct elf_backend_data
*ebd
;
496 struct bfd_preserve preserve
;
499 const bfd_target
*target
;
500 const bfd_target
* const *target_ptr
;
502 preserve
.marker
= NULL
;
504 /* Read in the ELF header in external format. */
506 if (bfd_bread (&x_ehdr
, sizeof (x_ehdr
), abfd
) != sizeof (x_ehdr
))
508 if (bfd_get_error () != bfd_error_system_call
)
509 goto got_wrong_format_error
;
514 /* Now check to see if we have a valid ELF file, and one that BFD can
515 make use of. The magic number must match, the address size ('class')
516 and byte-swapping must match our XVEC entry, and it must have a
517 section header table (FIXME: See comments re sections at top of this
520 if (! elf_file_p (&x_ehdr
)
521 || x_ehdr
.e_ident
[EI_VERSION
] != EV_CURRENT
522 || x_ehdr
.e_ident
[EI_CLASS
] != ELFCLASS
)
523 goto got_wrong_format_error
;
525 /* Check that file's byte order matches xvec's */
526 switch (x_ehdr
.e_ident
[EI_DATA
])
528 case ELFDATA2MSB
: /* Big-endian */
529 if (! bfd_header_big_endian (abfd
))
530 goto got_wrong_format_error
;
532 case ELFDATA2LSB
: /* Little-endian */
533 if (! bfd_header_little_endian (abfd
))
534 goto got_wrong_format_error
;
536 case ELFDATANONE
: /* No data encoding specified */
537 default: /* Unknown data encoding specified */
538 goto got_wrong_format_error
;
541 if (!bfd_preserve_save (abfd
, &preserve
))
546 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
547 the tdata pointer in the bfd. */
549 if (! (*target
->_bfd_set_format
[bfd_object
]) (abfd
))
551 preserve
.marker
= elf_tdata (abfd
);
553 /* Now that we know the byte order, swap in the rest of the header */
554 i_ehdrp
= elf_elfheader (abfd
);
555 elf_swap_ehdr_in (abfd
, &x_ehdr
, i_ehdrp
);
557 elf_debug_file (i_ehdrp
);
560 /* Reject ET_CORE (header indicates core file, not object file) */
561 if (i_ehdrp
->e_type
== ET_CORE
)
562 goto got_wrong_format_error
;
564 /* If this is a relocatable file and there is no section header
565 table, then we're hosed. */
566 if (i_ehdrp
->e_shoff
== 0 && i_ehdrp
->e_type
== ET_REL
)
567 goto got_wrong_format_error
;
569 /* As a simple sanity check, verify that what BFD thinks is the
570 size of each section header table entry actually matches the size
571 recorded in the file, but only if there are any sections. */
572 if (i_ehdrp
->e_shentsize
!= sizeof (x_shdr
) && i_ehdrp
->e_shnum
!= 0)
573 goto got_wrong_format_error
;
575 /* Further sanity check. */
576 if (i_ehdrp
->e_shoff
== 0 && i_ehdrp
->e_shnum
!= 0)
577 goto got_wrong_format_error
;
579 ebd
= get_elf_backend_data (abfd
);
580 if (ebd
->s
->arch_size
!= ARCH_SIZE
)
581 goto got_wrong_format_error
;
583 /* Check that the ELF e_machine field matches what this particular
584 BFD format expects. */
585 if (ebd
->elf_machine_code
!= i_ehdrp
->e_machine
586 && (ebd
->elf_machine_alt1
== 0
587 || i_ehdrp
->e_machine
!= ebd
->elf_machine_alt1
)
588 && (ebd
->elf_machine_alt2
== 0
589 || i_ehdrp
->e_machine
!= ebd
->elf_machine_alt2
))
591 if (ebd
->elf_machine_code
!= EM_NONE
)
592 goto got_wrong_format_error
;
594 /* This is the generic ELF target. Let it match any ELF target
595 for which we do not have a specific backend. */
596 for (target_ptr
= bfd_target_vector
; *target_ptr
!= NULL
; target_ptr
++)
598 const struct elf_backend_data
*back
;
600 if ((*target_ptr
)->flavour
!= bfd_target_elf_flavour
)
602 back
= xvec_get_elf_backend_data (*target_ptr
);
603 if (back
->s
->arch_size
!= ARCH_SIZE
)
605 if (back
->elf_machine_code
== i_ehdrp
->e_machine
606 || (back
->elf_machine_alt1
!= 0
607 && back
->elf_machine_alt1
== i_ehdrp
->e_machine
)
608 || (back
->elf_machine_alt2
!= 0
609 && back
->elf_machine_alt2
== i_ehdrp
->e_machine
))
611 /* target_ptr is an ELF backend which matches this
612 object file, so reject the generic ELF target. */
613 goto got_wrong_format_error
;
618 if (i_ehdrp
->e_type
== ET_EXEC
)
619 abfd
->flags
|= EXEC_P
;
620 else if (i_ehdrp
->e_type
== ET_DYN
)
621 abfd
->flags
|= DYNAMIC
;
623 if (i_ehdrp
->e_phnum
> 0)
624 abfd
->flags
|= D_PAGED
;
626 if (! bfd_default_set_arch_mach (abfd
, ebd
->arch
, 0))
628 /* It's OK if this fails for the generic target. */
629 if (ebd
->elf_machine_code
!= EM_NONE
)
633 if (ebd
->elf_machine_code
!= EM_NONE
634 && i_ehdrp
->e_ident
[EI_OSABI
] != ebd
->elf_osabi
)
636 if (ebd
->elf_osabi
!= ELFOSABI_NONE
)
637 goto got_wrong_format_error
;
639 /* This is an ELFOSABI_NONE ELF target. Let it match any ELF
640 target of the compatible machine for which we do not have a
641 backend with matching ELFOSABI. */
642 for (target_ptr
= bfd_target_vector
;
646 const struct elf_backend_data
*back
;
648 /* Skip this target and targets with incompatible byte
650 if (*target_ptr
== target
651 || (*target_ptr
)->flavour
!= bfd_target_elf_flavour
652 || (*target_ptr
)->byteorder
!= target
->byteorder
653 || ((*target_ptr
)->header_byteorder
654 != target
->header_byteorder
))
657 back
= xvec_get_elf_backend_data (*target_ptr
);
658 if (back
->elf_osabi
== i_ehdrp
->e_ident
[EI_OSABI
]
659 && (back
->elf_machine_code
== i_ehdrp
->e_machine
660 || (back
->elf_machine_alt1
!= 0
661 && back
->elf_machine_alt1
== i_ehdrp
->e_machine
)
662 || (back
->elf_machine_alt2
!= 0
663 && back
->elf_machine_alt2
== i_ehdrp
->e_machine
)))
665 /* target_ptr is an ELF backend which matches this
666 object file, so reject the ELFOSABI_NONE ELF target. */
667 goto got_wrong_format_error
;
672 if (i_ehdrp
->e_shoff
!= 0)
674 bfd_signed_vma where
= i_ehdrp
->e_shoff
;
676 if (where
!= (file_ptr
) where
)
677 goto got_wrong_format_error
;
679 /* Seek to the section header table in the file. */
680 if (bfd_seek (abfd
, (file_ptr
) where
, SEEK_SET
) != 0)
683 /* Read the first section header at index 0, and convert to internal
685 if (bfd_bread (&x_shdr
, sizeof x_shdr
, abfd
) != sizeof (x_shdr
))
687 elf_swap_shdr_in (abfd
, &x_shdr
, &i_shdr
);
689 /* If the section count is zero, the actual count is in the first
691 if (i_ehdrp
->e_shnum
== SHN_UNDEF
)
693 i_ehdrp
->e_shnum
= i_shdr
.sh_size
;
694 if (i_ehdrp
->e_shnum
!= i_shdr
.sh_size
695 || i_ehdrp
->e_shnum
== 0)
696 goto got_wrong_format_error
;
699 /* And similarly for the string table index. */
700 if (i_ehdrp
->e_shstrndx
== (SHN_XINDEX
& 0xffff))
702 i_ehdrp
->e_shstrndx
= i_shdr
.sh_link
;
703 if (i_ehdrp
->e_shstrndx
!= i_shdr
.sh_link
)
704 goto got_wrong_format_error
;
707 /* And program headers. */
708 if (i_ehdrp
->e_phnum
== PN_XNUM
&& i_shdr
.sh_info
!= 0)
710 i_ehdrp
->e_phnum
= i_shdr
.sh_info
;
711 if (i_ehdrp
->e_phnum
!= i_shdr
.sh_info
)
712 goto got_wrong_format_error
;
715 /* Sanity check that we can read all of the section headers.
716 It ought to be good enough to just read the last one. */
717 if (i_ehdrp
->e_shnum
!= 1)
719 /* Check that we don't have a totally silly number of sections. */
720 if (i_ehdrp
->e_shnum
> (unsigned int) -1 / sizeof (x_shdr
)
721 || i_ehdrp
->e_shnum
> (unsigned int) -1 / sizeof (i_shdr
))
722 goto got_wrong_format_error
;
724 where
+= (i_ehdrp
->e_shnum
- 1) * sizeof (x_shdr
);
725 if (where
!= (file_ptr
) where
)
726 goto got_wrong_format_error
;
727 if ((bfd_size_type
) where
<= i_ehdrp
->e_shoff
)
728 goto got_wrong_format_error
;
730 if (bfd_seek (abfd
, (file_ptr
) where
, SEEK_SET
) != 0)
732 if (bfd_bread (&x_shdr
, sizeof x_shdr
, abfd
) != sizeof (x_shdr
))
735 /* Back to where we were. */
736 where
= i_ehdrp
->e_shoff
+ sizeof (x_shdr
);
737 if (bfd_seek (abfd
, (file_ptr
) where
, SEEK_SET
) != 0)
742 /* Allocate space for a copy of the section header table in
744 if (i_ehdrp
->e_shnum
!= 0)
746 Elf_Internal_Shdr
*shdrp
;
747 unsigned int num_sec
;
749 amt
= sizeof (*i_shdrp
) * i_ehdrp
->e_shnum
;
750 i_shdrp
= (Elf_Internal_Shdr
*) bfd_alloc (abfd
, amt
);
753 num_sec
= i_ehdrp
->e_shnum
;
754 elf_numsections (abfd
) = num_sec
;
755 amt
= sizeof (i_shdrp
) * num_sec
;
756 elf_elfsections (abfd
) = (Elf_Internal_Shdr
**) bfd_alloc (abfd
, amt
);
757 if (!elf_elfsections (abfd
))
760 memcpy (i_shdrp
, &i_shdr
, sizeof (*i_shdrp
));
761 for (shdrp
= i_shdrp
, shindex
= 0; shindex
< num_sec
; shindex
++)
762 elf_elfsections (abfd
)[shindex
] = shdrp
++;
764 /* Read in the rest of the section header table and convert it
766 for (shindex
= 1; shindex
< i_ehdrp
->e_shnum
; shindex
++)
768 if (bfd_bread (&x_shdr
, sizeof x_shdr
, abfd
) != sizeof (x_shdr
))
770 elf_swap_shdr_in (abfd
, &x_shdr
, i_shdrp
+ shindex
);
772 /* Sanity check sh_link and sh_info. */
773 if (i_shdrp
[shindex
].sh_link
>= num_sec
)
775 /* PR 10478: Accept Solaris binaries with a sh_link
776 field set to SHN_BEFORE or SHN_AFTER. */
777 switch (ebd
->elf_machine_code
)
786 if (i_shdrp
[shindex
].sh_link
== (SHN_LORESERVE
& 0xffff) /* SHN_BEFORE */
787 || i_shdrp
[shindex
].sh_link
== ((SHN_LORESERVE
+ 1) & 0xffff) /* SHN_AFTER */)
789 /* Otherwise fall through. */
791 goto got_wrong_format_error
;
795 if (((i_shdrp
[shindex
].sh_flags
& SHF_INFO_LINK
)
796 || i_shdrp
[shindex
].sh_type
== SHT_RELA
797 || i_shdrp
[shindex
].sh_type
== SHT_REL
)
798 && i_shdrp
[shindex
].sh_info
>= num_sec
)
799 goto got_wrong_format_error
;
801 /* If the section is loaded, but not page aligned, clear
803 if (i_shdrp
[shindex
].sh_size
!= 0
804 && (i_shdrp
[shindex
].sh_flags
& SHF_ALLOC
) != 0
805 && i_shdrp
[shindex
].sh_type
!= SHT_NOBITS
806 && (((i_shdrp
[shindex
].sh_addr
- i_shdrp
[shindex
].sh_offset
)
809 abfd
->flags
&= ~D_PAGED
;
813 /* A further sanity check. */
814 if (i_ehdrp
->e_shnum
!= 0)
816 if (i_ehdrp
->e_shstrndx
>= elf_numsections (abfd
))
819 We used to just goto got_wrong_format_error here
820 but there are binaries in existance for which this test
821 will prevent the binutils from working with them at all.
822 So we are kind, and reset the string index value to 0
823 so that at least some processing can be done. */
824 i_ehdrp
->e_shstrndx
= SHN_UNDEF
;
825 _bfd_error_handler (_("warning: %s has a corrupt string table index - ignoring"), abfd
->filename
);
828 else if (i_ehdrp
->e_shstrndx
!= SHN_UNDEF
)
829 goto got_wrong_format_error
;
831 /* Read in the program headers. */
832 if (i_ehdrp
->e_phnum
== 0)
833 elf_tdata (abfd
)->phdr
= NULL
;
836 Elf_Internal_Phdr
*i_phdr
;
839 amt
= i_ehdrp
->e_phnum
* sizeof (Elf_Internal_Phdr
);
840 elf_tdata (abfd
)->phdr
= (Elf_Internal_Phdr
*) bfd_alloc (abfd
, amt
);
841 if (elf_tdata (abfd
)->phdr
== NULL
)
843 if (bfd_seek (abfd
, (file_ptr
) i_ehdrp
->e_phoff
, SEEK_SET
) != 0)
845 i_phdr
= elf_tdata (abfd
)->phdr
;
846 for (i
= 0; i
< i_ehdrp
->e_phnum
; i
++, i_phdr
++)
848 Elf_External_Phdr x_phdr
;
850 if (bfd_bread (&x_phdr
, sizeof x_phdr
, abfd
) != sizeof x_phdr
)
852 elf_swap_phdr_in (abfd
, &x_phdr
, i_phdr
);
856 if (i_ehdrp
->e_shstrndx
!= 0 && i_ehdrp
->e_shoff
!= 0)
858 unsigned int num_sec
;
860 /* Once all of the section headers have been read and converted, we
861 can start processing them. Note that the first section header is
862 a dummy placeholder entry, so we ignore it. */
863 num_sec
= elf_numsections (abfd
);
864 for (shindex
= 1; shindex
< num_sec
; shindex
++)
865 if (!bfd_section_from_shdr (abfd
, shindex
))
868 /* Set up ELF sections for SHF_GROUP and SHF_LINK_ORDER. */
869 if (! _bfd_elf_setup_sections (abfd
))
870 goto got_wrong_format_error
;
873 /* Let the backend double check the format and override global
875 if (ebd
->elf_backend_object_p
)
877 if (! (*ebd
->elf_backend_object_p
) (abfd
))
878 goto got_wrong_format_error
;
881 /* Remember the entry point specified in the ELF file header. */
882 bfd_set_start_address (abfd
, i_ehdrp
->e_entry
);
884 /* If we have created any reloc sections that are associated with
885 debugging sections, mark the reloc sections as debugging as well. */
886 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
888 if ((elf_section_data (s
)->this_hdr
.sh_type
== SHT_REL
889 || elf_section_data (s
)->this_hdr
.sh_type
== SHT_RELA
)
890 && elf_section_data (s
)->this_hdr
.sh_info
> 0)
892 unsigned long targ_index
;
895 targ_index
= elf_section_data (s
)->this_hdr
.sh_info
;
896 targ_sec
= bfd_section_from_elf_index (abfd
, targ_index
);
898 && (targ_sec
->flags
& SEC_DEBUGGING
) != 0)
899 s
->flags
|= SEC_DEBUGGING
;
903 bfd_preserve_finish (abfd
, &preserve
);
906 got_wrong_format_error
:
907 /* There is way too much undoing of half-known state here. The caller,
908 bfd_check_format_matches, really shouldn't iterate on live bfd's to
909 check match/no-match like it does. We have to rely on that a call to
910 bfd_default_set_arch_mach with the previously known mach, undoes what
911 was done by the first bfd_default_set_arch_mach (with mach 0) here.
912 For this to work, only elf-data and the mach may be changed by the
913 target-specific elf_backend_object_p function. Note that saving the
914 whole bfd here and restoring it would be even worse; the first thing
915 you notice is that the cached bfd file position gets out of sync. */
916 bfd_set_error (bfd_error_wrong_format
);
919 if (preserve
.marker
!= NULL
)
920 bfd_preserve_restore (abfd
, &preserve
);
924 /* ELF .o/exec file writing */
926 /* Write out the relocs. */
929 elf_write_relocs (bfd
*abfd
, asection
*sec
, void *data
)
931 bfd_boolean
*failedp
= (bfd_boolean
*) data
;
932 Elf_Internal_Shdr
*rela_hdr
;
934 void (*swap_out
) (bfd
*, const Elf_Internal_Rela
*, bfd_byte
*);
941 /* If we have already failed, don't do anything. */
945 if ((sec
->flags
& SEC_RELOC
) == 0)
948 /* The linker backend writes the relocs out itself, and sets the
949 reloc_count field to zero to inhibit writing them here. Also,
950 sometimes the SEC_RELOC flag gets set even when there aren't any
952 if (sec
->reloc_count
== 0)
955 /* If we have opened an existing file for update, reloc_count may be
956 set even though we are not linking. In that case we have nothing
958 if (sec
->orelocation
== NULL
)
961 rela_hdr
= &elf_section_data (sec
)->rel_hdr
;
963 rela_hdr
->sh_size
= rela_hdr
->sh_entsize
* sec
->reloc_count
;
964 rela_hdr
->contents
= (unsigned char *) bfd_alloc (abfd
, rela_hdr
->sh_size
);
965 if (rela_hdr
->contents
== NULL
)
971 /* Figure out whether the relocations are RELA or REL relocations. */
972 if (rela_hdr
->sh_type
== SHT_RELA
)
974 swap_out
= elf_swap_reloca_out
;
975 extsize
= sizeof (Elf_External_Rela
);
977 else if (rela_hdr
->sh_type
== SHT_REL
)
979 swap_out
= elf_swap_reloc_out
;
980 extsize
= sizeof (Elf_External_Rel
);
983 /* Every relocation section should be either an SHT_RELA or an
987 /* The address of an ELF reloc is section relative for an object
988 file, and absolute for an executable file or shared library.
989 The address of a BFD reloc is always section relative. */
991 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) != 0)
992 addr_offset
= sec
->vma
;
994 /* orelocation has the data, reloc_count has the count... */
997 dst_rela
= rela_hdr
->contents
;
999 for (idx
= 0; idx
< sec
->reloc_count
; idx
++, dst_rela
+= extsize
)
1001 Elf_Internal_Rela src_rela
;
1006 ptr
= sec
->orelocation
[idx
];
1007 sym
= *ptr
->sym_ptr_ptr
;
1008 if (sym
== last_sym
)
1010 else if (bfd_is_abs_section (sym
->section
) && sym
->value
== 0)
1015 n
= _bfd_elf_symbol_from_bfd_symbol (abfd
, &sym
);
1024 if ((*ptr
->sym_ptr_ptr
)->the_bfd
!= NULL
1025 && (*ptr
->sym_ptr_ptr
)->the_bfd
->xvec
!= abfd
->xvec
1026 && ! _bfd_elf_validate_reloc (abfd
, ptr
))
1032 src_rela
.r_offset
= ptr
->address
+ addr_offset
;
1033 src_rela
.r_info
= ELF_R_INFO (n
, ptr
->howto
->type
);
1034 src_rela
.r_addend
= ptr
->addend
;
1035 (*swap_out
) (abfd
, &src_rela
, dst_rela
);
1039 /* Write out the program headers. */
1042 elf_write_out_phdrs (bfd
*abfd
,
1043 const Elf_Internal_Phdr
*phdr
,
1048 Elf_External_Phdr extphdr
;
1049 elf_swap_phdr_out (abfd
, phdr
, &extphdr
);
1050 if (bfd_bwrite (&extphdr
, sizeof (Elf_External_Phdr
), abfd
)
1051 != sizeof (Elf_External_Phdr
))
1058 /* Write out the section headers and the ELF file header. */
1061 elf_write_shdrs_and_ehdr (bfd
*abfd
)
1063 Elf_External_Ehdr x_ehdr
; /* Elf file header, external form */
1064 Elf_Internal_Ehdr
*i_ehdrp
; /* Elf file header, internal form */
1065 Elf_External_Shdr
*x_shdrp
; /* Section header table, external form */
1066 Elf_Internal_Shdr
**i_shdrp
; /* Section header table, internal form */
1070 i_ehdrp
= elf_elfheader (abfd
);
1071 i_shdrp
= elf_elfsections (abfd
);
1073 /* swap the header before spitting it out... */
1076 elf_debug_file (i_ehdrp
);
1078 elf_swap_ehdr_out (abfd
, i_ehdrp
, &x_ehdr
);
1079 amt
= sizeof (x_ehdr
);
1080 if (bfd_seek (abfd
, (file_ptr
) 0, SEEK_SET
) != 0
1081 || bfd_bwrite (&x_ehdr
, amt
, abfd
) != amt
)
1084 /* Some fields in the first section header handle overflow of ehdr
1086 if (i_ehdrp
->e_phnum
>= PN_XNUM
)
1087 i_shdrp
[0]->sh_info
= i_ehdrp
->e_phnum
;
1088 if (i_ehdrp
->e_shnum
>= (SHN_LORESERVE
& 0xffff))
1089 i_shdrp
[0]->sh_size
= i_ehdrp
->e_shnum
;
1090 if (i_ehdrp
->e_shstrndx
>= (SHN_LORESERVE
& 0xffff))
1091 i_shdrp
[0]->sh_link
= i_ehdrp
->e_shstrndx
;
1093 /* at this point we've concocted all the ELF sections... */
1094 amt
= i_ehdrp
->e_shnum
;
1095 amt
*= sizeof (*x_shdrp
);
1096 x_shdrp
= (Elf_External_Shdr
*) bfd_alloc (abfd
, amt
);
1100 for (count
= 0; count
< i_ehdrp
->e_shnum
; i_shdrp
++, count
++)
1103 elf_debug_section (count
, *i_shdrp
);
1105 elf_swap_shdr_out (abfd
, *i_shdrp
, x_shdrp
+ count
);
1107 if (bfd_seek (abfd
, (file_ptr
) i_ehdrp
->e_shoff
, SEEK_SET
) != 0
1108 || bfd_bwrite (x_shdrp
, amt
, abfd
) != amt
)
1111 /* need to dump the string table too... */
1117 elf_checksum_contents (bfd
*abfd
,
1118 void (*process
) (const void *, size_t, void *),
1121 Elf_Internal_Ehdr
*i_ehdrp
= elf_elfheader (abfd
);
1122 Elf_Internal_Shdr
**i_shdrp
= elf_elfsections (abfd
);
1123 Elf_Internal_Phdr
*i_phdrp
= elf_tdata (abfd
)->phdr
;
1124 unsigned int count
, num
;
1127 Elf_External_Ehdr x_ehdr
;
1128 Elf_Internal_Ehdr i_ehdr
;
1131 i_ehdr
.e_phoff
= i_ehdr
.e_shoff
= 0;
1132 elf_swap_ehdr_out (abfd
, &i_ehdr
, &x_ehdr
);
1133 (*process
) (&x_ehdr
, sizeof x_ehdr
, arg
);
1136 num
= i_ehdrp
->e_phnum
;
1137 for (count
= 0; count
< num
; count
++)
1139 Elf_External_Phdr x_phdr
;
1140 elf_swap_phdr_out (abfd
, &i_phdrp
[count
], &x_phdr
);
1141 (*process
) (&x_phdr
, sizeof x_phdr
, arg
);
1144 num
= elf_numsections (abfd
);
1145 for (count
= 0; count
< num
; count
++)
1147 Elf_Internal_Shdr i_shdr
;
1148 Elf_External_Shdr x_shdr
;
1150 i_shdr
= *i_shdrp
[count
];
1151 i_shdr
.sh_offset
= 0;
1153 elf_swap_shdr_out (abfd
, &i_shdr
, &x_shdr
);
1154 (*process
) (&x_shdr
, sizeof x_shdr
, arg
);
1156 if (i_shdr
.contents
)
1157 (*process
) (i_shdr
.contents
, i_shdr
.sh_size
, arg
);
1164 elf_slurp_symbol_table (bfd
*abfd
, asymbol
**symptrs
, bfd_boolean dynamic
)
1166 Elf_Internal_Shdr
*hdr
;
1167 Elf_Internal_Shdr
*verhdr
;
1168 unsigned long symcount
; /* Number of external ELF symbols */
1169 elf_symbol_type
*sym
; /* Pointer to current bfd symbol */
1170 elf_symbol_type
*symbase
; /* Buffer for generated bfd symbols */
1171 Elf_Internal_Sym
*isym
;
1172 Elf_Internal_Sym
*isymend
;
1173 Elf_Internal_Sym
*isymbuf
= NULL
;
1174 Elf_External_Versym
*xver
;
1175 Elf_External_Versym
*xverbuf
= NULL
;
1176 const struct elf_backend_data
*ebd
;
1179 /* Read each raw ELF symbol, converting from external ELF form to
1180 internal ELF form, and then using the information to create a
1181 canonical bfd symbol table entry.
1183 Note that we allocate the initial bfd canonical symbol buffer
1184 based on a one-to-one mapping of the ELF symbols to canonical
1185 symbols. We actually use all the ELF symbols, so there will be no
1186 space left over at the end. When we have all the symbols, we
1187 build the caller's pointer vector. */
1191 hdr
= &elf_tdata (abfd
)->symtab_hdr
;
1196 hdr
= &elf_tdata (abfd
)->dynsymtab_hdr
;
1197 if (elf_dynversym (abfd
) == 0)
1200 verhdr
= &elf_tdata (abfd
)->dynversym_hdr
;
1201 if ((elf_tdata (abfd
)->dynverdef_section
!= 0
1202 && elf_tdata (abfd
)->verdef
== NULL
)
1203 || (elf_tdata (abfd
)->dynverref_section
!= 0
1204 && elf_tdata (abfd
)->verref
== NULL
))
1206 if (!_bfd_elf_slurp_version_tables (abfd
, FALSE
))
1211 ebd
= get_elf_backend_data (abfd
);
1212 symcount
= hdr
->sh_size
/ sizeof (Elf_External_Sym
);
1214 sym
= symbase
= NULL
;
1217 isymbuf
= bfd_elf_get_elf_syms (abfd
, hdr
, symcount
, 0,
1219 if (isymbuf
== NULL
)
1223 amt
*= sizeof (elf_symbol_type
);
1224 symbase
= (elf_symbol_type
*) bfd_zalloc (abfd
, amt
);
1225 if (symbase
== (elf_symbol_type
*) NULL
)
1228 /* Read the raw ELF version symbol information. */
1230 && verhdr
->sh_size
/ sizeof (Elf_External_Versym
) != symcount
)
1232 (*_bfd_error_handler
)
1233 (_("%s: version count (%ld) does not match symbol count (%ld)"),
1235 (long) (verhdr
->sh_size
/ sizeof (Elf_External_Versym
)),
1238 /* Slurp in the symbols without the version information,
1239 since that is more helpful than just quitting. */
1245 if (bfd_seek (abfd
, verhdr
->sh_offset
, SEEK_SET
) != 0)
1248 xverbuf
= (Elf_External_Versym
*) bfd_malloc (verhdr
->sh_size
);
1249 if (xverbuf
== NULL
&& verhdr
->sh_size
!= 0)
1252 if (bfd_bread (xverbuf
, verhdr
->sh_size
, abfd
) != verhdr
->sh_size
)
1256 /* Skip first symbol, which is a null dummy. */
1260 isymend
= isymbuf
+ symcount
;
1261 for (isym
= isymbuf
+ 1, sym
= symbase
; isym
< isymend
; isym
++, sym
++)
1263 memcpy (&sym
->internal_elf_sym
, isym
, sizeof (Elf_Internal_Sym
));
1264 sym
->symbol
.the_bfd
= abfd
;
1266 sym
->symbol
.name
= bfd_elf_sym_name (abfd
, hdr
, isym
, NULL
);
1268 sym
->symbol
.value
= isym
->st_value
;
1270 if (isym
->st_shndx
== SHN_UNDEF
)
1272 sym
->symbol
.section
= bfd_und_section_ptr
;
1274 else if (isym
->st_shndx
== SHN_ABS
)
1276 sym
->symbol
.section
= bfd_abs_section_ptr
;
1278 else if (isym
->st_shndx
== SHN_COMMON
)
1280 sym
->symbol
.section
= bfd_com_section_ptr
;
1281 /* Elf puts the alignment into the `value' field, and
1282 the size into the `size' field. BFD wants to see the
1283 size in the value field, and doesn't care (at the
1284 moment) about the alignment. */
1285 sym
->symbol
.value
= isym
->st_size
;
1290 = bfd_section_from_elf_index (abfd
, isym
->st_shndx
);
1291 if (sym
->symbol
.section
== NULL
)
1293 /* This symbol is in a section for which we did not
1294 create a BFD section. Just use bfd_abs_section,
1295 although it is wrong. FIXME. */
1296 sym
->symbol
.section
= bfd_abs_section_ptr
;
1300 /* If this is a relocatable file, then the symbol value is
1301 already section relative. */
1302 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) != 0)
1303 sym
->symbol
.value
-= sym
->symbol
.section
->vma
;
1305 switch (ELF_ST_BIND (isym
->st_info
))
1308 sym
->symbol
.flags
|= BSF_LOCAL
;
1311 if (isym
->st_shndx
!= SHN_UNDEF
&& isym
->st_shndx
!= SHN_COMMON
)
1312 sym
->symbol
.flags
|= BSF_GLOBAL
;
1315 sym
->symbol
.flags
|= BSF_WEAK
;
1317 case STB_GNU_UNIQUE
:
1318 sym
->symbol
.flags
|= BSF_GNU_UNIQUE
;
1322 switch (ELF_ST_TYPE (isym
->st_info
))
1325 sym
->symbol
.flags
|= BSF_SECTION_SYM
| BSF_DEBUGGING
;
1328 sym
->symbol
.flags
|= BSF_FILE
| BSF_DEBUGGING
;
1331 sym
->symbol
.flags
|= BSF_FUNCTION
;
1334 /* FIXME: Do we have to put the size field into the value field
1335 as we do with symbols in SHN_COMMON sections (see above) ? */
1338 sym
->symbol
.flags
|= BSF_OBJECT
;
1341 sym
->symbol
.flags
|= BSF_THREAD_LOCAL
;
1344 sym
->symbol
.flags
|= BSF_RELC
;
1347 sym
->symbol
.flags
|= BSF_SRELC
;
1350 sym
->symbol
.flags
|= BSF_GNU_INDIRECT_FUNCTION
;
1355 sym
->symbol
.flags
|= BSF_DYNAMIC
;
1359 Elf_Internal_Versym iversym
;
1361 _bfd_elf_swap_versym_in (abfd
, xver
, &iversym
);
1362 sym
->version
= iversym
.vs_vers
;
1366 /* Do some backend-specific processing on this symbol. */
1367 if (ebd
->elf_backend_symbol_processing
)
1368 (*ebd
->elf_backend_symbol_processing
) (abfd
, &sym
->symbol
);
1372 /* Do some backend-specific processing on this symbol table. */
1373 if (ebd
->elf_backend_symbol_table_processing
)
1374 (*ebd
->elf_backend_symbol_table_processing
) (abfd
, symbase
, symcount
);
1376 /* We rely on the zalloc to clear out the final symbol entry. */
1378 symcount
= sym
- symbase
;
1380 /* Fill in the user's symbol pointer vector if needed. */
1388 *symptrs
++ = &sym
->symbol
;
1391 *symptrs
= 0; /* Final null pointer */
1394 if (xverbuf
!= NULL
)
1396 if (isymbuf
!= NULL
&& hdr
->contents
!= (unsigned char *) isymbuf
)
1401 if (xverbuf
!= NULL
)
1403 if (isymbuf
!= NULL
&& hdr
->contents
!= (unsigned char *) isymbuf
)
1408 /* Read relocations for ASECT from REL_HDR. There are RELOC_COUNT of
1412 elf_slurp_reloc_table_from_section (bfd
*abfd
,
1414 Elf_Internal_Shdr
*rel_hdr
,
1415 bfd_size_type reloc_count
,
1418 bfd_boolean dynamic
)
1420 const struct elf_backend_data
* const ebd
= get_elf_backend_data (abfd
);
1421 void *allocated
= NULL
;
1422 bfd_byte
*native_relocs
;
1426 unsigned int symcount
;
1428 allocated
= bfd_malloc (rel_hdr
->sh_size
);
1429 if (allocated
== NULL
)
1432 if (bfd_seek (abfd
, rel_hdr
->sh_offset
, SEEK_SET
) != 0
1433 || (bfd_bread (allocated
, rel_hdr
->sh_size
, abfd
)
1434 != rel_hdr
->sh_size
))
1437 native_relocs
= (bfd_byte
*) allocated
;
1439 entsize
= rel_hdr
->sh_entsize
;
1440 BFD_ASSERT (entsize
== sizeof (Elf_External_Rel
)
1441 || entsize
== sizeof (Elf_External_Rela
));
1444 symcount
= bfd_get_dynamic_symcount (abfd
);
1446 symcount
= bfd_get_symcount (abfd
);
1448 for (i
= 0, relent
= relents
;
1450 i
++, relent
++, native_relocs
+= entsize
)
1452 Elf_Internal_Rela rela
;
1454 if (entsize
== sizeof (Elf_External_Rela
))
1455 elf_swap_reloca_in (abfd
, native_relocs
, &rela
);
1457 elf_swap_reloc_in (abfd
, native_relocs
, &rela
);
1459 /* The address of an ELF reloc is section relative for an object
1460 file, and absolute for an executable file or shared library.
1461 The address of a normal BFD reloc is always section relative,
1462 and the address of a dynamic reloc is absolute.. */
1463 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0 || dynamic
)
1464 relent
->address
= rela
.r_offset
;
1466 relent
->address
= rela
.r_offset
- asect
->vma
;
1468 if (ELF_R_SYM (rela
.r_info
) == 0)
1469 relent
->sym_ptr_ptr
= bfd_abs_section_ptr
->symbol_ptr_ptr
;
1470 else if (ELF_R_SYM (rela
.r_info
) > symcount
)
1472 (*_bfd_error_handler
)
1473 (_("%s(%s): relocation %d has invalid symbol index %ld"),
1474 abfd
->filename
, asect
->name
, i
, ELF_R_SYM (rela
.r_info
));
1475 relent
->sym_ptr_ptr
= bfd_abs_section
.symbol_ptr_ptr
;
1481 ps
= symbols
+ ELF_R_SYM (rela
.r_info
) - 1;
1483 relent
->sym_ptr_ptr
= ps
;
1486 relent
->addend
= rela
.r_addend
;
1488 if ((entsize
== sizeof (Elf_External_Rela
)
1489 && ebd
->elf_info_to_howto
!= NULL
)
1490 || ebd
->elf_info_to_howto_rel
== NULL
)
1491 (*ebd
->elf_info_to_howto
) (abfd
, relent
, &rela
);
1493 (*ebd
->elf_info_to_howto_rel
) (abfd
, relent
, &rela
);
1496 if (allocated
!= NULL
)
1502 if (allocated
!= NULL
)
1507 /* Read in and swap the external relocs. */
1510 elf_slurp_reloc_table (bfd
*abfd
,
1513 bfd_boolean dynamic
)
1515 struct bfd_elf_section_data
* const d
= elf_section_data (asect
);
1516 Elf_Internal_Shdr
*rel_hdr
;
1517 Elf_Internal_Shdr
*rel_hdr2
;
1518 bfd_size_type reloc_count
;
1519 bfd_size_type reloc_count2
;
1523 if (asect
->relocation
!= NULL
)
1528 if ((asect
->flags
& SEC_RELOC
) == 0
1529 || asect
->reloc_count
== 0)
1532 rel_hdr
= &d
->rel_hdr
;
1533 reloc_count
= NUM_SHDR_ENTRIES (rel_hdr
);
1534 rel_hdr2
= d
->rel_hdr2
;
1535 reloc_count2
= (rel_hdr2
? NUM_SHDR_ENTRIES (rel_hdr2
) : 0);
1537 BFD_ASSERT (asect
->reloc_count
== reloc_count
+ reloc_count2
);
1538 BFD_ASSERT (asect
->rel_filepos
== rel_hdr
->sh_offset
1539 || (rel_hdr2
&& asect
->rel_filepos
== rel_hdr2
->sh_offset
));
1544 /* Note that ASECT->RELOC_COUNT tends not to be accurate in this
1545 case because relocations against this section may use the
1546 dynamic symbol table, and in that case bfd_section_from_shdr
1547 in elf.c does not update the RELOC_COUNT. */
1548 if (asect
->size
== 0)
1551 rel_hdr
= &d
->this_hdr
;
1552 reloc_count
= NUM_SHDR_ENTRIES (rel_hdr
);
1557 amt
= (reloc_count
+ reloc_count2
) * sizeof (arelent
);
1558 relents
= (arelent
*) bfd_alloc (abfd
, amt
);
1559 if (relents
== NULL
)
1562 if (!elf_slurp_reloc_table_from_section (abfd
, asect
,
1563 rel_hdr
, reloc_count
,
1569 && !elf_slurp_reloc_table_from_section (abfd
, asect
,
1570 rel_hdr2
, reloc_count2
,
1571 relents
+ reloc_count
,
1575 asect
->relocation
= relents
;
1581 elf_debug_section (int num
, Elf_Internal_Shdr
*hdr
)
1583 fprintf (stderr
, "\nSection#%d '%s' 0x%.8lx\n", num
,
1584 hdr
->bfd_section
!= NULL
? hdr
->bfd_section
->name
: "",
1587 "sh_name = %ld\tsh_type = %ld\tsh_flags = %ld\n",
1588 (long) hdr
->sh_name
,
1589 (long) hdr
->sh_type
,
1590 (long) hdr
->sh_flags
);
1592 "sh_addr = %ld\tsh_offset = %ld\tsh_size = %ld\n",
1593 (long) hdr
->sh_addr
,
1594 (long) hdr
->sh_offset
,
1595 (long) hdr
->sh_size
);
1597 "sh_link = %ld\tsh_info = %ld\tsh_addralign = %ld\n",
1598 (long) hdr
->sh_link
,
1599 (long) hdr
->sh_info
,
1600 (long) hdr
->sh_addralign
);
1601 fprintf (stderr
, "sh_entsize = %ld\n",
1602 (long) hdr
->sh_entsize
);
1609 elf_debug_file (Elf_Internal_Ehdr
*ehdrp
)
1611 fprintf (stderr
, "e_entry = 0x%.8lx\n", (long) ehdrp
->e_entry
);
1612 fprintf (stderr
, "e_phoff = %ld\n", (long) ehdrp
->e_phoff
);
1613 fprintf (stderr
, "e_phnum = %ld\n", (long) ehdrp
->e_phnum
);
1614 fprintf (stderr
, "e_phentsize = %ld\n", (long) ehdrp
->e_phentsize
);
1615 fprintf (stderr
, "e_shoff = %ld\n", (long) ehdrp
->e_shoff
);
1616 fprintf (stderr
, "e_shnum = %ld\n", (long) ehdrp
->e_shnum
);
1617 fprintf (stderr
, "e_shentsize = %ld\n", (long) ehdrp
->e_shentsize
);
1621 /* Create a new BFD as if by bfd_openr. Rather than opening a file,
1622 reconstruct an ELF file by reading the segments out of remote memory
1623 based on the ELF file header at EHDR_VMA and the ELF program headers it
1624 points to. If not null, *LOADBASEP is filled in with the difference
1625 between the VMAs from which the segments were read, and the VMAs the
1626 file headers (and hence BFD's idea of each section's VMA) put them at.
1628 The function TARGET_READ_MEMORY is called to copy LEN bytes from the
1629 remote memory at target address VMA into the local buffer at MYADDR; it
1630 should return zero on success or an `errno' code on failure. TEMPL must
1631 be a BFD for a target with the word size and byte order found in the
1635 NAME(_bfd_elf
,bfd_from_remote_memory
)
1639 int (*target_read_memory
) (bfd_vma
, bfd_byte
*, int))
1641 Elf_External_Ehdr x_ehdr
; /* Elf file header, external form */
1642 Elf_Internal_Ehdr i_ehdr
; /* Elf file header, internal form */
1643 Elf_External_Phdr
*x_phdrs
;
1644 Elf_Internal_Phdr
*i_phdrs
, *last_phdr
;
1646 struct bfd_in_memory
*bim
;
1652 bfd_boolean loadbase_set
;
1654 /* Read in the ELF header in external format. */
1655 err
= target_read_memory (ehdr_vma
, (bfd_byte
*) &x_ehdr
, sizeof x_ehdr
);
1658 bfd_set_error (bfd_error_system_call
);
1663 /* Now check to see if we have a valid ELF file, and one that BFD can
1664 make use of. The magic number must match, the address size ('class')
1665 and byte-swapping must match our XVEC entry. */
1667 if (! elf_file_p (&x_ehdr
)
1668 || x_ehdr
.e_ident
[EI_VERSION
] != EV_CURRENT
1669 || x_ehdr
.e_ident
[EI_CLASS
] != ELFCLASS
)
1671 bfd_set_error (bfd_error_wrong_format
);
1675 /* Check that file's byte order matches xvec's */
1676 switch (x_ehdr
.e_ident
[EI_DATA
])
1678 case ELFDATA2MSB
: /* Big-endian */
1679 if (! bfd_header_big_endian (templ
))
1681 bfd_set_error (bfd_error_wrong_format
);
1685 case ELFDATA2LSB
: /* Little-endian */
1686 if (! bfd_header_little_endian (templ
))
1688 bfd_set_error (bfd_error_wrong_format
);
1692 case ELFDATANONE
: /* No data encoding specified */
1693 default: /* Unknown data encoding specified */
1694 bfd_set_error (bfd_error_wrong_format
);
1698 elf_swap_ehdr_in (templ
, &x_ehdr
, &i_ehdr
);
1700 /* The file header tells where to find the program headers.
1701 These are what we use to actually choose what to read. */
1703 if (i_ehdr
.e_phentsize
!= sizeof (Elf_External_Phdr
) || i_ehdr
.e_phnum
== 0)
1705 bfd_set_error (bfd_error_wrong_format
);
1709 x_phdrs
= (Elf_External_Phdr
*)
1710 bfd_malloc (i_ehdr
.e_phnum
* (sizeof *x_phdrs
+ sizeof *i_phdrs
));
1711 if (x_phdrs
== NULL
)
1713 bfd_set_error (bfd_error_no_memory
);
1716 err
= target_read_memory (ehdr_vma
+ i_ehdr
.e_phoff
, (bfd_byte
*) x_phdrs
,
1717 i_ehdr
.e_phnum
* sizeof x_phdrs
[0]);
1721 bfd_set_error (bfd_error_system_call
);
1725 i_phdrs
= (Elf_Internal_Phdr
*) &x_phdrs
[i_ehdr
.e_phnum
];
1729 loadbase
= ehdr_vma
;
1730 loadbase_set
= FALSE
;
1731 for (i
= 0; i
< i_ehdr
.e_phnum
; ++i
)
1733 elf_swap_phdr_in (templ
, &x_phdrs
[i
], &i_phdrs
[i
]);
1734 if (i_phdrs
[i
].p_type
== PT_LOAD
)
1736 bfd_vma segment_end
;
1737 segment_end
= (i_phdrs
[i
].p_offset
+ i_phdrs
[i
].p_filesz
1738 + i_phdrs
[i
].p_align
- 1) & -i_phdrs
[i
].p_align
;
1739 if (segment_end
> (bfd_vma
) contents_size
)
1740 contents_size
= segment_end
;
1742 /* LOADADDR is the `Base address' from the gELF specification:
1743 `lowest p_vaddr value for a PT_LOAD segment' is P_VADDR from the
1744 first PT_LOAD as PT_LOADs are ordered by P_VADDR. */
1745 if (!loadbase_set
&& (i_phdrs
[i
].p_offset
& -i_phdrs
[i
].p_align
) == 0)
1747 loadbase
= ehdr_vma
- (i_phdrs
[i
].p_vaddr
& -i_phdrs
[i
].p_align
);
1748 loadbase_set
= TRUE
;
1751 last_phdr
= &i_phdrs
[i
];
1754 if (last_phdr
== NULL
)
1756 /* There were no PT_LOAD segments, so we don't have anything to read. */
1758 bfd_set_error (bfd_error_wrong_format
);
1762 /* Trim the last segment so we don't bother with zeros in the last page
1763 that are off the end of the file. However, if the extra bit in that
1764 page includes the section headers, keep them. */
1765 if ((bfd_vma
) contents_size
> last_phdr
->p_offset
+ last_phdr
->p_filesz
1766 && (bfd_vma
) contents_size
>= (i_ehdr
.e_shoff
1767 + i_ehdr
.e_shnum
* i_ehdr
.e_shentsize
))
1769 contents_size
= last_phdr
->p_offset
+ last_phdr
->p_filesz
;
1770 if ((bfd_vma
) contents_size
< (i_ehdr
.e_shoff
1771 + i_ehdr
.e_shnum
* i_ehdr
.e_shentsize
))
1772 contents_size
= i_ehdr
.e_shoff
+ i_ehdr
.e_shnum
* i_ehdr
.e_shentsize
;
1775 contents_size
= last_phdr
->p_offset
+ last_phdr
->p_filesz
;
1777 /* Now we know the size of the whole image we want read in. */
1778 contents
= (bfd_byte
*) bfd_zmalloc (contents_size
);
1779 if (contents
== NULL
)
1782 bfd_set_error (bfd_error_no_memory
);
1786 for (i
= 0; i
< i_ehdr
.e_phnum
; ++i
)
1787 if (i_phdrs
[i
].p_type
== PT_LOAD
)
1789 bfd_vma start
= i_phdrs
[i
].p_offset
& -i_phdrs
[i
].p_align
;
1790 bfd_vma end
= (i_phdrs
[i
].p_offset
+ i_phdrs
[i
].p_filesz
1791 + i_phdrs
[i
].p_align
- 1) & -i_phdrs
[i
].p_align
;
1792 if (end
> (bfd_vma
) contents_size
)
1793 end
= contents_size
;
1794 err
= target_read_memory ((loadbase
+ i_phdrs
[i
].p_vaddr
)
1795 & -i_phdrs
[i
].p_align
,
1796 contents
+ start
, end
- start
);
1801 bfd_set_error (bfd_error_system_call
);
1808 /* If the segments visible in memory didn't include the section headers,
1809 then clear them from the file header. */
1810 if ((bfd_vma
) contents_size
< (i_ehdr
.e_shoff
1811 + i_ehdr
.e_shnum
* i_ehdr
.e_shentsize
))
1813 memset (&x_ehdr
.e_shoff
, 0, sizeof x_ehdr
.e_shoff
);
1814 memset (&x_ehdr
.e_shnum
, 0, sizeof x_ehdr
.e_shnum
);
1815 memset (&x_ehdr
.e_shstrndx
, 0, sizeof x_ehdr
.e_shstrndx
);
1818 /* This will normally have been in the first PT_LOAD segment. But it
1819 conceivably could be missing, and we might have just changed it. */
1820 memcpy (contents
, &x_ehdr
, sizeof x_ehdr
);
1822 /* Now we have a memory image of the ELF file contents. Make a BFD. */
1823 bim
= (struct bfd_in_memory
*) bfd_malloc (sizeof (struct bfd_in_memory
));
1827 bfd_set_error (bfd_error_no_memory
);
1830 nbfd
= _bfd_new_bfd ();
1835 bfd_set_error (bfd_error_no_memory
);
1838 nbfd
->filename
= "<in-memory>";
1839 nbfd
->xvec
= templ
->xvec
;
1840 bim
->size
= contents_size
;
1841 bim
->buffer
= contents
;
1842 nbfd
->iostream
= bim
;
1843 nbfd
->flags
= BFD_IN_MEMORY
;
1844 nbfd
->direction
= read_direction
;
1845 nbfd
->mtime
= time (NULL
);
1846 nbfd
->mtime_set
= TRUE
;
1849 *loadbasep
= loadbase
;
1853 #include "elfcore.h"
1855 /* Size-dependent data and functions. */
1856 const struct elf_size_info
NAME(_bfd_elf
,size_info
) = {
1857 sizeof (Elf_External_Ehdr
),
1858 sizeof (Elf_External_Phdr
),
1859 sizeof (Elf_External_Shdr
),
1860 sizeof (Elf_External_Rel
),
1861 sizeof (Elf_External_Rela
),
1862 sizeof (Elf_External_Sym
),
1863 sizeof (Elf_External_Dyn
),
1864 sizeof (Elf_External_Note
),
1867 ARCH_SIZE
, LOG_FILE_ALIGN
,
1868 ELFCLASS
, EV_CURRENT
,
1869 elf_write_out_phdrs
,
1870 elf_write_shdrs_and_ehdr
,
1871 elf_checksum_contents
,
1874 elf_swap_symbol_out
,
1875 elf_slurp_reloc_table
,
1876 elf_slurp_symbol_table
,