1 /* ELF executable support for BFD.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
5 Written by Fred Fish @ Cygnus Support, from information published
6 in "UNIX System V Release 4, Programmers Guide: ANSI C and
7 Programming Support Tools". Sufficient support for gdb.
9 Rewritten by Mark Eichin @ Cygnus Support, from information
10 published in "System V Application Binary Interface", chapters 4
11 and 5, as well as the various "Processor Supplement" documents
12 derived from it. Added support for assembler and other object file
13 utilities. Further work done by Ken Raeburn (Cygnus Support), Michael
14 Meissner (Open Software Foundation), and Peter Hoogenboom (University
15 of Utah) to finish and extend this.
17 This file is part of BFD, the Binary File Descriptor library.
19 This program is free software; you can redistribute it and/or modify
20 it under the terms of the GNU General Public License as published by
21 the Free Software Foundation; either version 2 of the License, or
22 (at your option) any later version.
24 This program is distributed in the hope that it will be useful,
25 but WITHOUT ANY WARRANTY; without even the implied warranty of
26 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 GNU General Public License for more details.
29 You should have received a copy of the GNU General Public License
30 along with this program; if not, write to the Free Software
31 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
33 /* Problems and other issues to resolve.
35 (1) BFD expects there to be some fixed number of "sections" in
36 the object file. I.E. there is a "section_count" variable in the
37 bfd structure which contains the number of sections. However, ELF
38 supports multiple "views" of a file. In particular, with current
39 implementations, executable files typically have two tables, a
40 program header table and a section header table, both of which
41 partition the executable.
43 In ELF-speak, the "linking view" of the file uses the section header
44 table to access "sections" within the file, and the "execution view"
45 uses the program header table to access "segments" within the file.
46 "Segments" typically may contain all the data from one or more
49 Note that the section header table is optional in ELF executables,
50 but it is this information that is most useful to gdb. If the
51 section header table is missing, then gdb should probably try
52 to make do with the program header table. (FIXME)
54 (2) The code in this file is compiled twice, once in 32-bit mode and
55 once in 64-bit mode. More of it should be made size-independent
58 (3) ELF section symbols are handled rather sloppily now. This should
59 be cleaned up, and ELF section symbols reconciled with BFD section
62 (4) We need a published spec for 64-bit ELF. We've got some stuff here
63 that we're using for SPARC V9 64-bit chips, but don't assume that
69 #include "libiberty.h"
74 /* Renaming structures, typedefs, macros and functions to be size-specific. */
75 #define Elf_External_Ehdr NAME(Elf,External_Ehdr)
76 #define Elf_External_Sym NAME(Elf,External_Sym)
77 #define Elf_External_Shdr NAME(Elf,External_Shdr)
78 #define Elf_External_Phdr NAME(Elf,External_Phdr)
79 #define Elf_External_Rel NAME(Elf,External_Rel)
80 #define Elf_External_Rela NAME(Elf,External_Rela)
81 #define Elf_External_Dyn NAME(Elf,External_Dyn)
83 #define elf_core_file_failing_command NAME(bfd_elf,core_file_failing_command)
84 #define elf_core_file_failing_signal NAME(bfd_elf,core_file_failing_signal)
85 #define elf_core_file_matches_executable_p \
86 NAME(bfd_elf,core_file_matches_executable_p)
87 #define elf_object_p NAME(bfd_elf,object_p)
88 #define elf_core_file_p NAME(bfd_elf,core_file_p)
89 #define elf_get_symtab_upper_bound NAME(bfd_elf,get_symtab_upper_bound)
90 #define elf_get_dynamic_symtab_upper_bound \
91 NAME(bfd_elf,get_dynamic_symtab_upper_bound)
92 #define elf_swap_reloc_in NAME(bfd_elf,swap_reloc_in)
93 #define elf_swap_reloca_in NAME(bfd_elf,swap_reloca_in)
94 #define elf_swap_reloc_out NAME(bfd_elf,swap_reloc_out)
95 #define elf_swap_reloca_out NAME(bfd_elf,swap_reloca_out)
96 #define elf_swap_symbol_in NAME(bfd_elf,swap_symbol_in)
97 #define elf_swap_symbol_out NAME(bfd_elf,swap_symbol_out)
98 #define elf_swap_phdr_in NAME(bfd_elf,swap_phdr_in)
99 #define elf_swap_phdr_out NAME(bfd_elf,swap_phdr_out)
100 #define elf_swap_dyn_in NAME(bfd_elf,swap_dyn_in)
101 #define elf_swap_dyn_out NAME(bfd_elf,swap_dyn_out)
102 #define elf_get_reloc_upper_bound NAME(bfd_elf,get_reloc_upper_bound)
103 #define elf_canonicalize_reloc NAME(bfd_elf,canonicalize_reloc)
104 #define elf_slurp_symbol_table NAME(bfd_elf,slurp_symbol_table)
105 #define elf_canonicalize_symtab NAME(bfd_elf,canonicalize_symtab)
106 #define elf_canonicalize_dynamic_symtab \
107 NAME(bfd_elf,canonicalize_dynamic_symtab)
108 #define elf_get_synthetic_symtab \
109 NAME(bfd_elf,get_synthetic_symtab)
110 #define elf_make_empty_symbol NAME(bfd_elf,make_empty_symbol)
111 #define elf_get_symbol_info NAME(bfd_elf,get_symbol_info)
112 #define elf_get_lineno NAME(bfd_elf,get_lineno)
113 #define elf_set_arch_mach NAME(bfd_elf,set_arch_mach)
114 #define elf_find_nearest_line NAME(bfd_elf,find_nearest_line)
115 #define elf_sizeof_headers NAME(bfd_elf,sizeof_headers)
116 #define elf_set_section_contents NAME(bfd_elf,set_section_contents)
117 #define elf_no_info_to_howto NAME(bfd_elf,no_info_to_howto)
118 #define elf_no_info_to_howto_rel NAME(bfd_elf,no_info_to_howto_rel)
119 #define elf_find_section NAME(bfd_elf,find_section)
120 #define elf_write_shdrs_and_ehdr NAME(bfd_elf,write_shdrs_and_ehdr)
121 #define elf_write_out_phdrs NAME(bfd_elf,write_out_phdrs)
122 #define elf_write_relocs NAME(bfd_elf,write_relocs)
123 #define elf_slurp_reloc_table NAME(bfd_elf,slurp_reloc_table)
126 #define ELF_R_INFO(X,Y) ELF64_R_INFO(X,Y)
127 #define ELF_R_SYM(X) ELF64_R_SYM(X)
128 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
129 #define ELFCLASS ELFCLASS64
131 #define LOG_FILE_ALIGN 3
134 #define ELF_R_INFO(X,Y) ELF32_R_INFO(X,Y)
135 #define ELF_R_SYM(X) ELF32_R_SYM(X)
136 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
137 #define ELFCLASS ELFCLASS32
139 #define LOG_FILE_ALIGN 2
143 static void elf_debug_section (int, Elf_Internal_Shdr
*);
144 static void elf_debug_file (Elf_Internal_Ehdr
*);
145 static char *elf_symbol_flags (flagword
);
148 /* Structure swapping routines */
150 /* Should perhaps use put_offset, put_word, etc. For now, the two versions
151 can be handled by explicitly specifying 32 bits or "the long type". */
153 #define H_PUT_WORD H_PUT_64
154 #define H_PUT_SIGNED_WORD H_PUT_S64
155 #define H_GET_WORD H_GET_64
156 #define H_GET_SIGNED_WORD H_GET_S64
159 #define H_PUT_WORD H_PUT_32
160 #define H_PUT_SIGNED_WORD H_PUT_S32
161 #define H_GET_WORD H_GET_32
162 #define H_GET_SIGNED_WORD H_GET_S32
165 /* Translate an ELF symbol in external format into an ELF symbol in internal
169 elf_swap_symbol_in (bfd
*abfd
,
172 Elf_Internal_Sym
*dst
)
174 const Elf_External_Sym
*src
= psrc
;
175 const Elf_External_Sym_Shndx
*shndx
= pshn
;
176 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
178 dst
->st_name
= H_GET_32 (abfd
, src
->st_name
);
180 dst
->st_value
= H_GET_SIGNED_WORD (abfd
, src
->st_value
);
182 dst
->st_value
= H_GET_WORD (abfd
, src
->st_value
);
183 dst
->st_size
= H_GET_WORD (abfd
, src
->st_size
);
184 dst
->st_info
= H_GET_8 (abfd
, src
->st_info
);
185 dst
->st_other
= H_GET_8 (abfd
, src
->st_other
);
186 dst
->st_shndx
= H_GET_16 (abfd
, src
->st_shndx
);
187 if (dst
->st_shndx
== SHN_XINDEX
)
191 dst
->st_shndx
= H_GET_32 (abfd
, shndx
->est_shndx
);
195 /* Translate an ELF symbol in internal format into an ELF symbol in external
199 elf_swap_symbol_out (bfd
*abfd
,
200 const Elf_Internal_Sym
*src
,
205 Elf_External_Sym
*dst
= cdst
;
206 H_PUT_32 (abfd
, src
->st_name
, dst
->st_name
);
207 H_PUT_WORD (abfd
, src
->st_value
, dst
->st_value
);
208 H_PUT_WORD (abfd
, src
->st_size
, dst
->st_size
);
209 H_PUT_8 (abfd
, src
->st_info
, dst
->st_info
);
210 H_PUT_8 (abfd
, src
->st_other
, dst
->st_other
);
212 if (tmp
> SHN_HIRESERVE
)
216 H_PUT_32 (abfd
, tmp
, shndx
);
219 H_PUT_16 (abfd
, tmp
, dst
->st_shndx
);
222 /* Translate an ELF file header in external format into an ELF file header in
226 elf_swap_ehdr_in (bfd
*abfd
,
227 const Elf_External_Ehdr
*src
,
228 Elf_Internal_Ehdr
*dst
)
230 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
231 memcpy (dst
->e_ident
, src
->e_ident
, EI_NIDENT
);
232 dst
->e_type
= H_GET_16 (abfd
, src
->e_type
);
233 dst
->e_machine
= H_GET_16 (abfd
, src
->e_machine
);
234 dst
->e_version
= H_GET_32 (abfd
, src
->e_version
);
236 dst
->e_entry
= H_GET_SIGNED_WORD (abfd
, src
->e_entry
);
238 dst
->e_entry
= H_GET_WORD (abfd
, src
->e_entry
);
239 dst
->e_phoff
= H_GET_WORD (abfd
, src
->e_phoff
);
240 dst
->e_shoff
= H_GET_WORD (abfd
, src
->e_shoff
);
241 dst
->e_flags
= H_GET_32 (abfd
, src
->e_flags
);
242 dst
->e_ehsize
= H_GET_16 (abfd
, src
->e_ehsize
);
243 dst
->e_phentsize
= H_GET_16 (abfd
, src
->e_phentsize
);
244 dst
->e_phnum
= H_GET_16 (abfd
, src
->e_phnum
);
245 dst
->e_shentsize
= H_GET_16 (abfd
, src
->e_shentsize
);
246 dst
->e_shnum
= H_GET_16 (abfd
, src
->e_shnum
);
247 dst
->e_shstrndx
= H_GET_16 (abfd
, src
->e_shstrndx
);
250 /* Translate an ELF file header in internal format into an ELF file header in
254 elf_swap_ehdr_out (bfd
*abfd
,
255 const Elf_Internal_Ehdr
*src
,
256 Elf_External_Ehdr
*dst
)
259 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
260 memcpy (dst
->e_ident
, src
->e_ident
, EI_NIDENT
);
261 /* note that all elements of dst are *arrays of unsigned char* already... */
262 H_PUT_16 (abfd
, src
->e_type
, dst
->e_type
);
263 H_PUT_16 (abfd
, src
->e_machine
, dst
->e_machine
);
264 H_PUT_32 (abfd
, src
->e_version
, dst
->e_version
);
266 H_PUT_SIGNED_WORD (abfd
, src
->e_entry
, dst
->e_entry
);
268 H_PUT_WORD (abfd
, src
->e_entry
, dst
->e_entry
);
269 H_PUT_WORD (abfd
, src
->e_phoff
, dst
->e_phoff
);
270 H_PUT_WORD (abfd
, src
->e_shoff
, dst
->e_shoff
);
271 H_PUT_32 (abfd
, src
->e_flags
, dst
->e_flags
);
272 H_PUT_16 (abfd
, src
->e_ehsize
, dst
->e_ehsize
);
273 H_PUT_16 (abfd
, src
->e_phentsize
, dst
->e_phentsize
);
274 H_PUT_16 (abfd
, src
->e_phnum
, dst
->e_phnum
);
275 H_PUT_16 (abfd
, src
->e_shentsize
, dst
->e_shentsize
);
277 if (tmp
>= SHN_LORESERVE
)
279 H_PUT_16 (abfd
, tmp
, dst
->e_shnum
);
280 tmp
= src
->e_shstrndx
;
281 if (tmp
>= SHN_LORESERVE
)
283 H_PUT_16 (abfd
, tmp
, dst
->e_shstrndx
);
286 /* Translate an ELF section header table entry in external format into an
287 ELF section header table entry in internal format. */
290 elf_swap_shdr_in (bfd
*abfd
,
291 const Elf_External_Shdr
*src
,
292 Elf_Internal_Shdr
*dst
)
294 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
296 dst
->sh_name
= H_GET_32 (abfd
, src
->sh_name
);
297 dst
->sh_type
= H_GET_32 (abfd
, src
->sh_type
);
298 dst
->sh_flags
= H_GET_WORD (abfd
, src
->sh_flags
);
300 dst
->sh_addr
= H_GET_SIGNED_WORD (abfd
, src
->sh_addr
);
302 dst
->sh_addr
= H_GET_WORD (abfd
, src
->sh_addr
);
303 dst
->sh_offset
= H_GET_WORD (abfd
, src
->sh_offset
);
304 dst
->sh_size
= H_GET_WORD (abfd
, src
->sh_size
);
305 dst
->sh_link
= H_GET_32 (abfd
, src
->sh_link
);
306 dst
->sh_info
= H_GET_32 (abfd
, src
->sh_info
);
307 dst
->sh_addralign
= H_GET_WORD (abfd
, src
->sh_addralign
);
308 dst
->sh_entsize
= H_GET_WORD (abfd
, src
->sh_entsize
);
309 dst
->bfd_section
= NULL
;
310 dst
->contents
= NULL
;
313 /* Translate an ELF section header table entry in internal format into an
314 ELF section header table entry in external format. */
317 elf_swap_shdr_out (bfd
*abfd
,
318 const Elf_Internal_Shdr
*src
,
319 Elf_External_Shdr
*dst
)
321 /* note that all elements of dst are *arrays of unsigned char* already... */
322 H_PUT_32 (abfd
, src
->sh_name
, dst
->sh_name
);
323 H_PUT_32 (abfd
, src
->sh_type
, dst
->sh_type
);
324 H_PUT_WORD (abfd
, src
->sh_flags
, dst
->sh_flags
);
325 H_PUT_WORD (abfd
, src
->sh_addr
, dst
->sh_addr
);
326 H_PUT_WORD (abfd
, src
->sh_offset
, dst
->sh_offset
);
327 H_PUT_WORD (abfd
, src
->sh_size
, dst
->sh_size
);
328 H_PUT_32 (abfd
, src
->sh_link
, dst
->sh_link
);
329 H_PUT_32 (abfd
, src
->sh_info
, dst
->sh_info
);
330 H_PUT_WORD (abfd
, src
->sh_addralign
, dst
->sh_addralign
);
331 H_PUT_WORD (abfd
, src
->sh_entsize
, dst
->sh_entsize
);
334 /* Translate an ELF program header table entry in external format into an
335 ELF program header table entry in internal format. */
338 elf_swap_phdr_in (bfd
*abfd
,
339 const Elf_External_Phdr
*src
,
340 Elf_Internal_Phdr
*dst
)
342 int signed_vma
= get_elf_backend_data (abfd
)->sign_extend_vma
;
344 dst
->p_type
= H_GET_32 (abfd
, src
->p_type
);
345 dst
->p_flags
= H_GET_32 (abfd
, src
->p_flags
);
346 dst
->p_offset
= H_GET_WORD (abfd
, src
->p_offset
);
349 dst
->p_vaddr
= H_GET_SIGNED_WORD (abfd
, src
->p_vaddr
);
350 dst
->p_paddr
= H_GET_SIGNED_WORD (abfd
, src
->p_paddr
);
354 dst
->p_vaddr
= H_GET_WORD (abfd
, src
->p_vaddr
);
355 dst
->p_paddr
= H_GET_WORD (abfd
, src
->p_paddr
);
357 dst
->p_filesz
= H_GET_WORD (abfd
, src
->p_filesz
);
358 dst
->p_memsz
= H_GET_WORD (abfd
, src
->p_memsz
);
359 dst
->p_align
= H_GET_WORD (abfd
, src
->p_align
);
363 elf_swap_phdr_out (bfd
*abfd
,
364 const Elf_Internal_Phdr
*src
,
365 Elf_External_Phdr
*dst
)
367 /* note that all elements of dst are *arrays of unsigned char* already... */
368 H_PUT_32 (abfd
, src
->p_type
, dst
->p_type
);
369 H_PUT_WORD (abfd
, src
->p_offset
, dst
->p_offset
);
370 H_PUT_WORD (abfd
, src
->p_vaddr
, dst
->p_vaddr
);
371 H_PUT_WORD (abfd
, src
->p_paddr
, dst
->p_paddr
);
372 H_PUT_WORD (abfd
, src
->p_filesz
, dst
->p_filesz
);
373 H_PUT_WORD (abfd
, src
->p_memsz
, dst
->p_memsz
);
374 H_PUT_32 (abfd
, src
->p_flags
, dst
->p_flags
);
375 H_PUT_WORD (abfd
, src
->p_align
, dst
->p_align
);
378 /* Translate an ELF reloc from external format to internal format. */
380 elf_swap_reloc_in (bfd
*abfd
,
382 Elf_Internal_Rela
*dst
)
384 const Elf_External_Rel
*src
= (const Elf_External_Rel
*) s
;
385 dst
->r_offset
= H_GET_WORD (abfd
, src
->r_offset
);
386 dst
->r_info
= H_GET_WORD (abfd
, src
->r_info
);
391 elf_swap_reloca_in (bfd
*abfd
,
393 Elf_Internal_Rela
*dst
)
395 const Elf_External_Rela
*src
= (const Elf_External_Rela
*) s
;
396 dst
->r_offset
= H_GET_WORD (abfd
, src
->r_offset
);
397 dst
->r_info
= H_GET_WORD (abfd
, src
->r_info
);
398 dst
->r_addend
= H_GET_SIGNED_WORD (abfd
, src
->r_addend
);
401 /* Translate an ELF reloc from internal format to external format. */
403 elf_swap_reloc_out (bfd
*abfd
,
404 const Elf_Internal_Rela
*src
,
407 Elf_External_Rel
*dst
= (Elf_External_Rel
*) d
;
408 H_PUT_WORD (abfd
, src
->r_offset
, dst
->r_offset
);
409 H_PUT_WORD (abfd
, src
->r_info
, dst
->r_info
);
413 elf_swap_reloca_out (bfd
*abfd
,
414 const Elf_Internal_Rela
*src
,
417 Elf_External_Rela
*dst
= (Elf_External_Rela
*) d
;
418 H_PUT_WORD (abfd
, src
->r_offset
, dst
->r_offset
);
419 H_PUT_WORD (abfd
, src
->r_info
, dst
->r_info
);
420 H_PUT_SIGNED_WORD (abfd
, src
->r_addend
, dst
->r_addend
);
424 elf_swap_dyn_in (bfd
*abfd
,
426 Elf_Internal_Dyn
*dst
)
428 const Elf_External_Dyn
*src
= p
;
430 dst
->d_tag
= H_GET_WORD (abfd
, src
->d_tag
);
431 dst
->d_un
.d_val
= H_GET_WORD (abfd
, src
->d_un
.d_val
);
435 elf_swap_dyn_out (bfd
*abfd
,
436 const Elf_Internal_Dyn
*src
,
439 Elf_External_Dyn
*dst
= p
;
441 H_PUT_WORD (abfd
, src
->d_tag
, dst
->d_tag
);
442 H_PUT_WORD (abfd
, src
->d_un
.d_val
, dst
->d_un
.d_val
);
445 /* ELF .o/exec file reading */
447 /* Begin processing a given object.
449 First we validate the file by reading in the ELF header and checking
452 static inline bfd_boolean
453 elf_file_p (Elf_External_Ehdr
*x_ehdrp
)
455 return ((x_ehdrp
->e_ident
[EI_MAG0
] == ELFMAG0
)
456 && (x_ehdrp
->e_ident
[EI_MAG1
] == ELFMAG1
)
457 && (x_ehdrp
->e_ident
[EI_MAG2
] == ELFMAG2
)
458 && (x_ehdrp
->e_ident
[EI_MAG3
] == ELFMAG3
));
461 /* Check to see if the file associated with ABFD matches the target vector
464 Note that we may be called several times with the same ABFD, but different
465 target vectors, most of which will not match. We have to avoid leaving
466 any side effects in ABFD, or any data it points to (like tdata), if the
467 file does not match the target vector. */
470 elf_object_p (bfd
*abfd
)
472 Elf_External_Ehdr x_ehdr
; /* Elf file header, external form */
473 Elf_Internal_Ehdr
*i_ehdrp
; /* Elf file header, internal form */
474 Elf_External_Shdr x_shdr
; /* Section header table entry, external form */
475 Elf_Internal_Shdr i_shdr
;
476 Elf_Internal_Shdr
*i_shdrp
; /* Section header table, internal form */
477 unsigned int shindex
;
478 const struct elf_backend_data
*ebd
;
479 struct bfd_preserve preserve
;
483 preserve
.marker
= NULL
;
485 /* Read in the ELF header in external format. */
487 if (bfd_bread (&x_ehdr
, sizeof (x_ehdr
), abfd
) != sizeof (x_ehdr
))
489 if (bfd_get_error () != bfd_error_system_call
)
490 goto got_wrong_format_error
;
495 /* Now check to see if we have a valid ELF file, and one that BFD can
496 make use of. The magic number must match, the address size ('class')
497 and byte-swapping must match our XVEC entry, and it must have a
498 section header table (FIXME: See comments re sections at top of this
501 if (! elf_file_p (&x_ehdr
)
502 || x_ehdr
.e_ident
[EI_VERSION
] != EV_CURRENT
503 || x_ehdr
.e_ident
[EI_CLASS
] != ELFCLASS
)
504 goto got_wrong_format_error
;
506 /* Check that file's byte order matches xvec's */
507 switch (x_ehdr
.e_ident
[EI_DATA
])
509 case ELFDATA2MSB
: /* Big-endian */
510 if (! bfd_header_big_endian (abfd
))
511 goto got_wrong_format_error
;
513 case ELFDATA2LSB
: /* Little-endian */
514 if (! bfd_header_little_endian (abfd
))
515 goto got_wrong_format_error
;
517 case ELFDATANONE
: /* No data encoding specified */
518 default: /* Unknown data encoding specified */
519 goto got_wrong_format_error
;
522 if (!bfd_preserve_save (abfd
, &preserve
))
525 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
526 the tdata pointer in the bfd. */
528 if (! (*abfd
->xvec
->_bfd_set_format
[bfd_object
]) (abfd
))
530 preserve
.marker
= elf_tdata (abfd
);
532 /* Now that we know the byte order, swap in the rest of the header */
533 i_ehdrp
= elf_elfheader (abfd
);
534 elf_swap_ehdr_in (abfd
, &x_ehdr
, i_ehdrp
);
536 elf_debug_file (i_ehdrp
);
539 /* Reject ET_CORE (header indicates core file, not object file) */
540 if (i_ehdrp
->e_type
== ET_CORE
)
541 goto got_wrong_format_error
;
543 /* If this is a relocatable file and there is no section header
544 table, then we're hosed. */
545 if (i_ehdrp
->e_shoff
== 0 && i_ehdrp
->e_type
== ET_REL
)
546 goto got_wrong_format_error
;
548 /* As a simple sanity check, verify that the what BFD thinks is the
549 size of each section header table entry actually matches the size
550 recorded in the file, but only if there are any sections. */
551 if (i_ehdrp
->e_shentsize
!= sizeof (x_shdr
) && i_ehdrp
->e_shnum
!= 0)
552 goto got_wrong_format_error
;
554 /* Further sanity check. */
555 if (i_ehdrp
->e_shoff
== 0 && i_ehdrp
->e_shnum
!= 0)
556 goto got_wrong_format_error
;
558 ebd
= get_elf_backend_data (abfd
);
560 /* Check that the ELF e_machine field matches what this particular
561 BFD format expects. */
562 if (ebd
->elf_machine_code
!= i_ehdrp
->e_machine
563 && (ebd
->elf_machine_alt1
== 0
564 || i_ehdrp
->e_machine
!= ebd
->elf_machine_alt1
)
565 && (ebd
->elf_machine_alt2
== 0
566 || i_ehdrp
->e_machine
!= ebd
->elf_machine_alt2
))
568 const bfd_target
* const *target_ptr
;
570 if (ebd
->elf_machine_code
!= EM_NONE
)
571 goto got_wrong_format_error
;
573 /* This is the generic ELF target. Let it match any ELF target
574 for which we do not have a specific backend. */
575 for (target_ptr
= bfd_target_vector
; *target_ptr
!= NULL
; target_ptr
++)
577 const struct elf_backend_data
*back
;
579 if ((*target_ptr
)->flavour
!= bfd_target_elf_flavour
)
581 back
= (const struct elf_backend_data
*) (*target_ptr
)->backend_data
;
582 if (back
->elf_machine_code
== i_ehdrp
->e_machine
583 || (back
->elf_machine_alt1
!= 0
584 && back
->elf_machine_alt1
== i_ehdrp
->e_machine
)
585 || (back
->elf_machine_alt2
!= 0
586 && back
->elf_machine_alt2
== i_ehdrp
->e_machine
))
588 /* target_ptr is an ELF backend which matches this
589 object file, so reject the generic ELF target. */
590 goto got_wrong_format_error
;
595 if (i_ehdrp
->e_type
== ET_EXEC
)
596 abfd
->flags
|= EXEC_P
;
597 else if (i_ehdrp
->e_type
== ET_DYN
)
598 abfd
->flags
|= DYNAMIC
;
600 if (i_ehdrp
->e_phnum
> 0)
601 abfd
->flags
|= D_PAGED
;
603 if (! bfd_default_set_arch_mach (abfd
, ebd
->arch
, 0))
605 /* It's OK if this fails for the generic target. */
606 if (ebd
->elf_machine_code
!= EM_NONE
)
610 /* Remember the entry point specified in the ELF file header. */
611 bfd_set_start_address (abfd
, i_ehdrp
->e_entry
);
613 if (i_ehdrp
->e_shoff
!= 0)
615 /* Seek to the section header table in the file. */
616 if (bfd_seek (abfd
, (file_ptr
) i_ehdrp
->e_shoff
, SEEK_SET
) != 0)
619 /* Read the first section header at index 0, and convert to internal
621 if (bfd_bread (&x_shdr
, sizeof x_shdr
, abfd
) != sizeof (x_shdr
))
623 elf_swap_shdr_in (abfd
, &x_shdr
, &i_shdr
);
625 /* If the section count is zero, the actual count is in the first
627 if (i_ehdrp
->e_shnum
== SHN_UNDEF
)
628 i_ehdrp
->e_shnum
= i_shdr
.sh_size
;
630 /* And similarly for the string table index. */
631 if (i_ehdrp
->e_shstrndx
== SHN_XINDEX
)
632 i_ehdrp
->e_shstrndx
= i_shdr
.sh_link
;
635 /* Allocate space for a copy of the section header table in
637 if (i_ehdrp
->e_shnum
!= 0)
639 Elf_Internal_Shdr
*shdrp
;
640 unsigned int num_sec
;
642 amt
= sizeof (*i_shdrp
) * i_ehdrp
->e_shnum
;
643 i_shdrp
= bfd_alloc (abfd
, amt
);
646 num_sec
= i_ehdrp
->e_shnum
;
647 if (num_sec
> SHN_LORESERVE
)
648 num_sec
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
649 elf_numsections (abfd
) = num_sec
;
650 amt
= sizeof (i_shdrp
) * num_sec
;
651 elf_elfsections (abfd
) = bfd_alloc (abfd
, amt
);
652 if (!elf_elfsections (abfd
))
655 memcpy (i_shdrp
, &i_shdr
, sizeof (*i_shdrp
));
658 if (num_sec
> SHN_LORESERVE
)
660 for ( ; shindex
< SHN_LORESERVE
; shindex
++)
661 elf_elfsections (abfd
)[shindex
] = shdrp
++;
662 for ( ; shindex
< SHN_HIRESERVE
+ 1; shindex
++)
663 elf_elfsections (abfd
)[shindex
] = i_shdrp
;
665 for ( ; shindex
< num_sec
; shindex
++)
666 elf_elfsections (abfd
)[shindex
] = shdrp
++;
668 /* Read in the rest of the section header table and convert it
670 for (shindex
= 1; shindex
< i_ehdrp
->e_shnum
; shindex
++)
672 if (bfd_bread (&x_shdr
, sizeof x_shdr
, abfd
) != sizeof (x_shdr
))
674 elf_swap_shdr_in (abfd
, &x_shdr
, i_shdrp
+ shindex
);
676 /* If the section is loaded, but not page aligned, clear
678 if (i_shdrp
[shindex
].sh_size
!= 0
679 && (i_shdrp
[shindex
].sh_flags
& SHF_ALLOC
) != 0
680 && i_shdrp
[shindex
].sh_type
!= SHT_NOBITS
681 && (((i_shdrp
[shindex
].sh_addr
- i_shdrp
[shindex
].sh_offset
)
684 abfd
->flags
&= ~D_PAGED
;
688 /* Read in the program headers. */
689 if (i_ehdrp
->e_phnum
== 0)
690 elf_tdata (abfd
)->phdr
= NULL
;
693 Elf_Internal_Phdr
*i_phdr
;
696 amt
= i_ehdrp
->e_phnum
* sizeof (Elf_Internal_Phdr
);
697 elf_tdata (abfd
)->phdr
= bfd_alloc (abfd
, amt
);
698 if (elf_tdata (abfd
)->phdr
== NULL
)
700 if (bfd_seek (abfd
, (file_ptr
) i_ehdrp
->e_phoff
, SEEK_SET
) != 0)
702 i_phdr
= elf_tdata (abfd
)->phdr
;
703 for (i
= 0; i
< i_ehdrp
->e_phnum
; i
++, i_phdr
++)
705 Elf_External_Phdr x_phdr
;
707 if (bfd_bread (&x_phdr
, sizeof x_phdr
, abfd
) != sizeof x_phdr
)
709 elf_swap_phdr_in (abfd
, &x_phdr
, i_phdr
);
713 if (i_ehdrp
->e_shstrndx
!= 0 && i_ehdrp
->e_shoff
!= 0)
715 unsigned int num_sec
;
717 /* Once all of the section headers have been read and converted, we
718 can start processing them. Note that the first section header is
719 a dummy placeholder entry, so we ignore it. */
720 num_sec
= elf_numsections (abfd
);
721 for (shindex
= 1; shindex
< num_sec
; shindex
++)
723 if (! bfd_section_from_shdr (abfd
, shindex
))
725 if (shindex
== SHN_LORESERVE
- 1)
726 shindex
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
729 /* Set up group pointers. */
730 if (! _bfd_elf_setup_group_pointers (abfd
))
731 goto got_wrong_format_error
;
734 /* Let the backend double check the format and override global
736 if (ebd
->elf_backend_object_p
)
738 if (! (*ebd
->elf_backend_object_p
) (abfd
))
739 goto got_wrong_format_error
;
742 /* If we have created any reloc sections that are associated with
743 debugging sections, mark the reloc sections as debugging as well. */
744 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
746 if ((elf_section_data (s
)->this_hdr
.sh_type
== SHT_REL
747 || elf_section_data (s
)->this_hdr
.sh_type
== SHT_RELA
)
748 && elf_section_data (s
)->this_hdr
.sh_info
> 0)
750 unsigned long targ_index
;
753 targ_index
= elf_section_data (s
)->this_hdr
.sh_info
;
754 targ_sec
= bfd_section_from_elf_index (abfd
, targ_index
);
756 && (targ_sec
->flags
& SEC_DEBUGGING
) != 0)
757 s
->flags
|= SEC_DEBUGGING
;
761 bfd_preserve_finish (abfd
, &preserve
);
764 got_wrong_format_error
:
765 /* There is way too much undoing of half-known state here. The caller,
766 bfd_check_format_matches, really shouldn't iterate on live bfd's to
767 check match/no-match like it does. We have to rely on that a call to
768 bfd_default_set_arch_mach with the previously known mach, undoes what
769 was done by the first bfd_default_set_arch_mach (with mach 0) here.
770 For this to work, only elf-data and the mach may be changed by the
771 target-specific elf_backend_object_p function. Note that saving the
772 whole bfd here and restoring it would be even worse; the first thing
773 you notice is that the cached bfd file position gets out of sync. */
774 bfd_set_error (bfd_error_wrong_format
);
777 if (preserve
.marker
!= NULL
)
778 bfd_preserve_restore (abfd
, &preserve
);
782 /* ELF .o/exec file writing */
784 /* Write out the relocs. */
787 elf_write_relocs (bfd
*abfd
, asection
*sec
, void *data
)
789 bfd_boolean
*failedp
= data
;
790 Elf_Internal_Shdr
*rela_hdr
;
792 void (*swap_out
) (bfd
*, const Elf_Internal_Rela
*, bfd_byte
*);
799 /* If we have already failed, don't do anything. */
803 if ((sec
->flags
& SEC_RELOC
) == 0)
806 /* The linker backend writes the relocs out itself, and sets the
807 reloc_count field to zero to inhibit writing them here. Also,
808 sometimes the SEC_RELOC flag gets set even when there aren't any
810 if (sec
->reloc_count
== 0)
813 rela_hdr
= &elf_section_data (sec
)->rel_hdr
;
815 rela_hdr
->sh_size
= rela_hdr
->sh_entsize
* sec
->reloc_count
;
816 rela_hdr
->contents
= bfd_alloc (abfd
, rela_hdr
->sh_size
);
817 if (rela_hdr
->contents
== NULL
)
823 /* Figure out whether the relocations are RELA or REL relocations. */
824 if (rela_hdr
->sh_type
== SHT_RELA
)
826 swap_out
= elf_swap_reloca_out
;
827 extsize
= sizeof (Elf_External_Rela
);
829 else if (rela_hdr
->sh_type
== SHT_REL
)
831 swap_out
= elf_swap_reloc_out
;
832 extsize
= sizeof (Elf_External_Rel
);
835 /* Every relocation section should be either an SHT_RELA or an
839 /* The address of an ELF reloc is section relative for an object
840 file, and absolute for an executable file or shared library.
841 The address of a BFD reloc is always section relative. */
843 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) != 0)
844 addr_offset
= sec
->vma
;
846 /* orelocation has the data, reloc_count has the count... */
849 dst_rela
= rela_hdr
->contents
;
851 for (idx
= 0; idx
< sec
->reloc_count
; idx
++, dst_rela
+= extsize
)
853 Elf_Internal_Rela src_rela
;
858 ptr
= sec
->orelocation
[idx
];
859 sym
= *ptr
->sym_ptr_ptr
;
862 else if (bfd_is_abs_section (sym
->section
) && sym
->value
== 0)
867 n
= _bfd_elf_symbol_from_bfd_symbol (abfd
, &sym
);
876 if ((*ptr
->sym_ptr_ptr
)->the_bfd
!= NULL
877 && (*ptr
->sym_ptr_ptr
)->the_bfd
->xvec
!= abfd
->xvec
878 && ! _bfd_elf_validate_reloc (abfd
, ptr
))
884 src_rela
.r_offset
= ptr
->address
+ addr_offset
;
885 src_rela
.r_info
= ELF_R_INFO (n
, ptr
->howto
->type
);
886 src_rela
.r_addend
= ptr
->addend
;
887 (*swap_out
) (abfd
, &src_rela
, dst_rela
);
891 /* Write out the program headers. */
894 elf_write_out_phdrs (bfd
*abfd
,
895 const Elf_Internal_Phdr
*phdr
,
900 Elf_External_Phdr extphdr
;
901 elf_swap_phdr_out (abfd
, phdr
, &extphdr
);
902 if (bfd_bwrite (&extphdr
, sizeof (Elf_External_Phdr
), abfd
)
903 != sizeof (Elf_External_Phdr
))
910 /* Write out the section headers and the ELF file header. */
913 elf_write_shdrs_and_ehdr (bfd
*abfd
)
915 Elf_External_Ehdr x_ehdr
; /* Elf file header, external form */
916 Elf_Internal_Ehdr
*i_ehdrp
; /* Elf file header, internal form */
917 Elf_External_Shdr
*x_shdrp
; /* Section header table, external form */
918 Elf_Internal_Shdr
**i_shdrp
; /* Section header table, internal form */
922 i_ehdrp
= elf_elfheader (abfd
);
923 i_shdrp
= elf_elfsections (abfd
);
925 /* swap the header before spitting it out... */
928 elf_debug_file (i_ehdrp
);
930 elf_swap_ehdr_out (abfd
, i_ehdrp
, &x_ehdr
);
931 amt
= sizeof (x_ehdr
);
932 if (bfd_seek (abfd
, (file_ptr
) 0, SEEK_SET
) != 0
933 || bfd_bwrite (&x_ehdr
, amt
, abfd
) != amt
)
936 /* Some fields in the first section header handle overflow of ehdr
938 if (i_ehdrp
->e_shnum
>= SHN_LORESERVE
)
939 i_shdrp
[0]->sh_size
= i_ehdrp
->e_shnum
;
940 if (i_ehdrp
->e_shstrndx
>= SHN_LORESERVE
)
941 i_shdrp
[0]->sh_link
= i_ehdrp
->e_shstrndx
;
943 /* at this point we've concocted all the ELF sections... */
944 amt
= i_ehdrp
->e_shnum
;
945 amt
*= sizeof (*x_shdrp
);
946 x_shdrp
= bfd_alloc (abfd
, amt
);
950 for (count
= 0; count
< i_ehdrp
->e_shnum
; i_shdrp
++, count
++)
953 elf_debug_section (count
, *i_shdrp
);
955 elf_swap_shdr_out (abfd
, *i_shdrp
, x_shdrp
+ count
);
957 if (count
== SHN_LORESERVE
- 1)
958 i_shdrp
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
960 if (bfd_seek (abfd
, (file_ptr
) i_ehdrp
->e_shoff
, SEEK_SET
) != 0
961 || bfd_bwrite (x_shdrp
, amt
, abfd
) != amt
)
964 /* need to dump the string table too... */
970 elf_slurp_symbol_table (bfd
*abfd
, asymbol
**symptrs
, bfd_boolean dynamic
)
972 Elf_Internal_Shdr
*hdr
;
973 Elf_Internal_Shdr
*verhdr
;
974 unsigned long symcount
; /* Number of external ELF symbols */
975 elf_symbol_type
*sym
; /* Pointer to current bfd symbol */
976 elf_symbol_type
*symbase
; /* Buffer for generated bfd symbols */
977 Elf_Internal_Sym
*isym
;
978 Elf_Internal_Sym
*isymend
;
979 Elf_Internal_Sym
*isymbuf
= NULL
;
980 Elf_External_Versym
*xver
;
981 Elf_External_Versym
*xverbuf
= NULL
;
982 const struct elf_backend_data
*ebd
;
985 /* Read each raw ELF symbol, converting from external ELF form to
986 internal ELF form, and then using the information to create a
987 canonical bfd symbol table entry.
989 Note that we allocate the initial bfd canonical symbol buffer
990 based on a one-to-one mapping of the ELF symbols to canonical
991 symbols. We actually use all the ELF symbols, so there will be no
992 space left over at the end. When we have all the symbols, we
993 build the caller's pointer vector. */
997 hdr
= &elf_tdata (abfd
)->symtab_hdr
;
1002 hdr
= &elf_tdata (abfd
)->dynsymtab_hdr
;
1003 if (elf_dynversym (abfd
) == 0)
1006 verhdr
= &elf_tdata (abfd
)->dynversym_hdr
;
1007 if ((elf_tdata (abfd
)->dynverdef_section
!= 0
1008 && elf_tdata (abfd
)->verdef
== NULL
)
1009 || (elf_tdata (abfd
)->dynverref_section
!= 0
1010 && elf_tdata (abfd
)->verref
== NULL
))
1012 if (!_bfd_elf_slurp_version_tables (abfd
, FALSE
))
1017 ebd
= get_elf_backend_data (abfd
);
1018 symcount
= hdr
->sh_size
/ sizeof (Elf_External_Sym
);
1020 sym
= symbase
= NULL
;
1023 isymbuf
= bfd_elf_get_elf_syms (abfd
, hdr
, symcount
, 0,
1025 if (isymbuf
== NULL
)
1029 amt
*= sizeof (elf_symbol_type
);
1030 symbase
= bfd_zalloc (abfd
, amt
);
1031 if (symbase
== (elf_symbol_type
*) NULL
)
1034 /* Read the raw ELF version symbol information. */
1036 && verhdr
->sh_size
/ sizeof (Elf_External_Versym
) != symcount
)
1038 (*_bfd_error_handler
)
1039 (_("%s: version count (%ld) does not match symbol count (%ld)"),
1041 (long) (verhdr
->sh_size
/ sizeof (Elf_External_Versym
)),
1044 /* Slurp in the symbols without the version information,
1045 since that is more helpful than just quitting. */
1051 if (bfd_seek (abfd
, verhdr
->sh_offset
, SEEK_SET
) != 0)
1054 xverbuf
= bfd_malloc (verhdr
->sh_size
);
1055 if (xverbuf
== NULL
&& verhdr
->sh_size
!= 0)
1058 if (bfd_bread (xverbuf
, verhdr
->sh_size
, abfd
) != verhdr
->sh_size
)
1062 /* Skip first symbol, which is a null dummy. */
1066 isymend
= isymbuf
+ symcount
;
1067 for (isym
= isymbuf
+ 1, sym
= symbase
; isym
< isymend
; isym
++, sym
++)
1069 memcpy (&sym
->internal_elf_sym
, isym
, sizeof (Elf_Internal_Sym
));
1070 sym
->symbol
.the_bfd
= abfd
;
1072 sym
->symbol
.name
= bfd_elf_sym_name (abfd
, hdr
, isym
);
1074 sym
->symbol
.value
= isym
->st_value
;
1076 if (isym
->st_shndx
== SHN_UNDEF
)
1078 sym
->symbol
.section
= bfd_und_section_ptr
;
1080 else if (isym
->st_shndx
< SHN_LORESERVE
1081 || isym
->st_shndx
> SHN_HIRESERVE
)
1083 sym
->symbol
.section
= bfd_section_from_elf_index (abfd
,
1085 if (sym
->symbol
.section
== NULL
)
1087 /* This symbol is in a section for which we did not
1088 create a BFD section. Just use bfd_abs_section,
1089 although it is wrong. FIXME. */
1090 sym
->symbol
.section
= bfd_abs_section_ptr
;
1093 else if (isym
->st_shndx
== SHN_ABS
)
1095 sym
->symbol
.section
= bfd_abs_section_ptr
;
1097 else if (isym
->st_shndx
== SHN_COMMON
)
1099 sym
->symbol
.section
= bfd_com_section_ptr
;
1100 /* Elf puts the alignment into the `value' field, and
1101 the size into the `size' field. BFD wants to see the
1102 size in the value field, and doesn't care (at the
1103 moment) about the alignment. */
1104 sym
->symbol
.value
= isym
->st_size
;
1107 sym
->symbol
.section
= bfd_abs_section_ptr
;
1109 /* If this is a relocatable file, then the symbol value is
1110 already section relative. */
1111 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) != 0)
1112 sym
->symbol
.value
-= sym
->symbol
.section
->vma
;
1114 switch (ELF_ST_BIND (isym
->st_info
))
1117 sym
->symbol
.flags
|= BSF_LOCAL
;
1120 if (isym
->st_shndx
!= SHN_UNDEF
&& isym
->st_shndx
!= SHN_COMMON
)
1121 sym
->symbol
.flags
|= BSF_GLOBAL
;
1124 sym
->symbol
.flags
|= BSF_WEAK
;
1128 switch (ELF_ST_TYPE (isym
->st_info
))
1131 sym
->symbol
.flags
|= BSF_SECTION_SYM
| BSF_DEBUGGING
;
1134 sym
->symbol
.flags
|= BSF_FILE
| BSF_DEBUGGING
;
1137 sym
->symbol
.flags
|= BSF_FUNCTION
;
1140 sym
->symbol
.flags
|= BSF_OBJECT
;
1143 sym
->symbol
.flags
|= BSF_THREAD_LOCAL
;
1148 sym
->symbol
.flags
|= BSF_DYNAMIC
;
1152 Elf_Internal_Versym iversym
;
1154 _bfd_elf_swap_versym_in (abfd
, xver
, &iversym
);
1155 sym
->version
= iversym
.vs_vers
;
1159 /* Do some backend-specific processing on this symbol. */
1160 if (ebd
->elf_backend_symbol_processing
)
1161 (*ebd
->elf_backend_symbol_processing
) (abfd
, &sym
->symbol
);
1165 /* Do some backend-specific processing on this symbol table. */
1166 if (ebd
->elf_backend_symbol_table_processing
)
1167 (*ebd
->elf_backend_symbol_table_processing
) (abfd
, symbase
, symcount
);
1169 /* We rely on the zalloc to clear out the final symbol entry. */
1171 symcount
= sym
- symbase
;
1173 /* Fill in the user's symbol pointer vector if needed. */
1181 *symptrs
++ = &sym
->symbol
;
1184 *symptrs
= 0; /* Final null pointer */
1187 if (xverbuf
!= NULL
)
1189 if (isymbuf
!= NULL
&& hdr
->contents
!= (unsigned char *) isymbuf
)
1194 if (xverbuf
!= NULL
)
1196 if (isymbuf
!= NULL
&& hdr
->contents
!= (unsigned char *) isymbuf
)
1201 /* Read relocations for ASECT from REL_HDR. There are RELOC_COUNT of
1205 elf_slurp_reloc_table_from_section (bfd
*abfd
,
1207 Elf_Internal_Shdr
*rel_hdr
,
1208 bfd_size_type reloc_count
,
1211 bfd_boolean dynamic
)
1213 const struct elf_backend_data
* const ebd
= get_elf_backend_data (abfd
);
1214 void *allocated
= NULL
;
1215 bfd_byte
*native_relocs
;
1219 unsigned int symcount
;
1221 allocated
= bfd_malloc (rel_hdr
->sh_size
);
1222 if (allocated
== NULL
)
1225 if (bfd_seek (abfd
, rel_hdr
->sh_offset
, SEEK_SET
) != 0
1226 || (bfd_bread (allocated
, rel_hdr
->sh_size
, abfd
)
1227 != rel_hdr
->sh_size
))
1230 native_relocs
= allocated
;
1232 entsize
= rel_hdr
->sh_entsize
;
1233 BFD_ASSERT (entsize
== sizeof (Elf_External_Rel
)
1234 || entsize
== sizeof (Elf_External_Rela
));
1237 symcount
= bfd_get_dynamic_symcount (abfd
);
1239 symcount
= bfd_get_symcount (abfd
);
1241 for (i
= 0, relent
= relents
;
1243 i
++, relent
++, native_relocs
+= entsize
)
1245 Elf_Internal_Rela rela
;
1247 if (entsize
== sizeof (Elf_External_Rela
))
1248 elf_swap_reloca_in (abfd
, native_relocs
, &rela
);
1250 elf_swap_reloc_in (abfd
, native_relocs
, &rela
);
1252 /* The address of an ELF reloc is section relative for an object
1253 file, and absolute for an executable file or shared library.
1254 The address of a normal BFD reloc is always section relative,
1255 and the address of a dynamic reloc is absolute.. */
1256 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0 || dynamic
)
1257 relent
->address
= rela
.r_offset
;
1259 relent
->address
= rela
.r_offset
- asect
->vma
;
1261 if (ELF_R_SYM (rela
.r_info
) == 0)
1262 relent
->sym_ptr_ptr
= bfd_abs_section_ptr
->symbol_ptr_ptr
;
1263 else if (ELF_R_SYM (rela
.r_info
) > symcount
)
1265 (*_bfd_error_handler
)
1266 (_("%s(%s): relocation %d has invalid symbol index %ld"),
1267 abfd
->filename
, asect
->name
, i
, ELF_R_SYM (rela
.r_info
));
1268 relent
->sym_ptr_ptr
= bfd_abs_section
.symbol_ptr_ptr
;
1274 ps
= symbols
+ ELF_R_SYM (rela
.r_info
) - 1;
1277 relent
->sym_ptr_ptr
= ps
;
1280 relent
->addend
= rela
.r_addend
;
1282 if ((entsize
== sizeof (Elf_External_Rela
)
1283 && ebd
->elf_info_to_howto
!= NULL
)
1284 || ebd
->elf_info_to_howto_rel
== NULL
)
1285 (*ebd
->elf_info_to_howto
) (abfd
, relent
, &rela
);
1287 (*ebd
->elf_info_to_howto_rel
) (abfd
, relent
, &rela
);
1290 if (allocated
!= NULL
)
1296 if (allocated
!= NULL
)
1301 /* Read in and swap the external relocs. */
1304 elf_slurp_reloc_table (bfd
*abfd
,
1307 bfd_boolean dynamic
)
1309 struct bfd_elf_section_data
* const d
= elf_section_data (asect
);
1310 Elf_Internal_Shdr
*rel_hdr
;
1311 Elf_Internal_Shdr
*rel_hdr2
;
1312 bfd_size_type reloc_count
;
1313 bfd_size_type reloc_count2
;
1317 if (asect
->relocation
!= NULL
)
1322 if ((asect
->flags
& SEC_RELOC
) == 0
1323 || asect
->reloc_count
== 0)
1326 rel_hdr
= &d
->rel_hdr
;
1327 reloc_count
= NUM_SHDR_ENTRIES (rel_hdr
);
1328 rel_hdr2
= d
->rel_hdr2
;
1329 reloc_count2
= (rel_hdr2
? NUM_SHDR_ENTRIES (rel_hdr2
) : 0);
1331 BFD_ASSERT (asect
->reloc_count
== reloc_count
+ reloc_count2
);
1332 BFD_ASSERT (asect
->rel_filepos
== rel_hdr
->sh_offset
1333 || (rel_hdr2
&& asect
->rel_filepos
== rel_hdr2
->sh_offset
));
1338 /* Note that ASECT->RELOC_COUNT tends not to be accurate in this
1339 case because relocations against this section may use the
1340 dynamic symbol table, and in that case bfd_section_from_shdr
1341 in elf.c does not update the RELOC_COUNT. */
1342 if (asect
->size
== 0)
1345 rel_hdr
= &d
->this_hdr
;
1346 reloc_count
= NUM_SHDR_ENTRIES (rel_hdr
);
1351 amt
= (reloc_count
+ reloc_count2
) * sizeof (arelent
);
1352 relents
= bfd_alloc (abfd
, amt
);
1353 if (relents
== NULL
)
1356 if (!elf_slurp_reloc_table_from_section (abfd
, asect
,
1357 rel_hdr
, reloc_count
,
1363 && !elf_slurp_reloc_table_from_section (abfd
, asect
,
1364 rel_hdr2
, reloc_count2
,
1365 relents
+ reloc_count
,
1369 asect
->relocation
= relents
;
1375 elf_debug_section (int num
, Elf_Internal_Shdr
*hdr
)
1377 fprintf (stderr
, "\nSection#%d '%s' 0x%.8lx\n", num
,
1378 hdr
->bfd_section
!= NULL
? hdr
->bfd_section
->name
: "",
1381 "sh_name = %ld\tsh_type = %ld\tsh_flags = %ld\n",
1382 (long) hdr
->sh_name
,
1383 (long) hdr
->sh_type
,
1384 (long) hdr
->sh_flags
);
1386 "sh_addr = %ld\tsh_offset = %ld\tsh_size = %ld\n",
1387 (long) hdr
->sh_addr
,
1388 (long) hdr
->sh_offset
,
1389 (long) hdr
->sh_size
);
1391 "sh_link = %ld\tsh_info = %ld\tsh_addralign = %ld\n",
1392 (long) hdr
->sh_link
,
1393 (long) hdr
->sh_info
,
1394 (long) hdr
->sh_addralign
);
1395 fprintf (stderr
, "sh_entsize = %ld\n",
1396 (long) hdr
->sh_entsize
);
1401 elf_debug_file (Elf_Internal_Ehdr
*ehdrp
)
1403 fprintf (stderr
, "e_entry = 0x%.8lx\n", (long) ehdrp
->e_entry
);
1404 fprintf (stderr
, "e_phoff = %ld\n", (long) ehdrp
->e_phoff
);
1405 fprintf (stderr
, "e_phnum = %ld\n", (long) ehdrp
->e_phnum
);
1406 fprintf (stderr
, "e_phentsize = %ld\n", (long) ehdrp
->e_phentsize
);
1407 fprintf (stderr
, "e_shoff = %ld\n", (long) ehdrp
->e_shoff
);
1408 fprintf (stderr
, "e_shnum = %ld\n", (long) ehdrp
->e_shnum
);
1409 fprintf (stderr
, "e_shentsize = %ld\n", (long) ehdrp
->e_shentsize
);
1413 elf_symbol_flags (flagword flags
)
1415 static char buffer
[1024];
1418 if (flags
& BSF_LOCAL
)
1419 strcat (buffer
, " local");
1421 if (flags
& BSF_GLOBAL
)
1422 strcat (buffer
, " global");
1424 if (flags
& BSF_DEBUGGING
)
1425 strcat (buffer
, " debug");
1427 if (flags
& BSF_FUNCTION
)
1428 strcat (buffer
, " function");
1430 if (flags
& BSF_KEEP
)
1431 strcat (buffer
, " keep");
1433 if (flags
& BSF_KEEP_G
)
1434 strcat (buffer
, " keep_g");
1436 if (flags
& BSF_WEAK
)
1437 strcat (buffer
, " weak");
1439 if (flags
& BSF_SECTION_SYM
)
1440 strcat (buffer
, " section-sym");
1442 if (flags
& BSF_OLD_COMMON
)
1443 strcat (buffer
, " old-common");
1445 if (flags
& BSF_NOT_AT_END
)
1446 strcat (buffer
, " not-at-end");
1448 if (flags
& BSF_CONSTRUCTOR
)
1449 strcat (buffer
, " constructor");
1451 if (flags
& BSF_WARNING
)
1452 strcat (buffer
, " warning");
1454 if (flags
& BSF_INDIRECT
)
1455 strcat (buffer
, " indirect");
1457 if (flags
& BSF_FILE
)
1458 strcat (buffer
, " file");
1460 if (flags
& DYNAMIC
)
1461 strcat (buffer
, " dynamic");
1463 if (flags
& ~(BSF_LOCAL
1478 strcat (buffer
, " unknown-bits");
1484 /* Create a new BFD as if by bfd_openr. Rather than opening a file,
1485 reconstruct an ELF file by reading the segments out of remote memory
1486 based on the ELF file header at EHDR_VMA and the ELF program headers it
1487 points to. If not null, *LOADBASEP is filled in with the difference
1488 between the VMAs from which the segments were read, and the VMAs the
1489 file headers (and hence BFD's idea of each section's VMA) put them at.
1491 The function TARGET_READ_MEMORY is called to copy LEN bytes from the
1492 remote memory at target address VMA into the local buffer at MYADDR; it
1493 should return zero on success or an `errno' code on failure. TEMPL must
1494 be a BFD for a target with the word size and byte order found in the
1498 NAME(_bfd_elf
,bfd_from_remote_memory
)
1502 int (*target_read_memory
) (bfd_vma
, bfd_byte
*, int))
1504 Elf_External_Ehdr x_ehdr
; /* Elf file header, external form */
1505 Elf_Internal_Ehdr i_ehdr
; /* Elf file header, internal form */
1506 Elf_External_Phdr
*x_phdrs
;
1507 Elf_Internal_Phdr
*i_phdrs
, *last_phdr
;
1509 struct bfd_in_memory
*bim
;
1516 /* Read in the ELF header in external format. */
1517 err
= target_read_memory (ehdr_vma
, (bfd_byte
*) &x_ehdr
, sizeof x_ehdr
);
1520 bfd_set_error (bfd_error_system_call
);
1525 /* Now check to see if we have a valid ELF file, and one that BFD can
1526 make use of. The magic number must match, the address size ('class')
1527 and byte-swapping must match our XVEC entry. */
1529 if (! elf_file_p (&x_ehdr
)
1530 || x_ehdr
.e_ident
[EI_VERSION
] != EV_CURRENT
1531 || x_ehdr
.e_ident
[EI_CLASS
] != ELFCLASS
)
1533 bfd_set_error (bfd_error_wrong_format
);
1537 /* Check that file's byte order matches xvec's */
1538 switch (x_ehdr
.e_ident
[EI_DATA
])
1540 case ELFDATA2MSB
: /* Big-endian */
1541 if (! bfd_header_big_endian (templ
))
1543 bfd_set_error (bfd_error_wrong_format
);
1547 case ELFDATA2LSB
: /* Little-endian */
1548 if (! bfd_header_little_endian (templ
))
1550 bfd_set_error (bfd_error_wrong_format
);
1554 case ELFDATANONE
: /* No data encoding specified */
1555 default: /* Unknown data encoding specified */
1556 bfd_set_error (bfd_error_wrong_format
);
1560 elf_swap_ehdr_in (templ
, &x_ehdr
, &i_ehdr
);
1562 /* The file header tells where to find the program headers.
1563 These are what we use to actually choose what to read. */
1565 if (i_ehdr
.e_phentsize
!= sizeof (Elf_External_Phdr
) || i_ehdr
.e_phnum
== 0)
1567 bfd_set_error (bfd_error_wrong_format
);
1571 x_phdrs
= bfd_malloc (i_ehdr
.e_phnum
* (sizeof *x_phdrs
+ sizeof *i_phdrs
));
1572 if (x_phdrs
== NULL
)
1574 bfd_set_error (bfd_error_no_memory
);
1577 err
= target_read_memory (ehdr_vma
+ i_ehdr
.e_phoff
, (bfd_byte
*) x_phdrs
,
1578 i_ehdr
.e_phnum
* sizeof x_phdrs
[0]);
1582 bfd_set_error (bfd_error_system_call
);
1586 i_phdrs
= (Elf_Internal_Phdr
*) &x_phdrs
[i_ehdr
.e_phnum
];
1590 loadbase
= ehdr_vma
;
1591 for (i
= 0; i
< i_ehdr
.e_phnum
; ++i
)
1593 elf_swap_phdr_in (templ
, &x_phdrs
[i
], &i_phdrs
[i
]);
1594 if (i_phdrs
[i
].p_type
== PT_LOAD
)
1596 bfd_vma segment_end
;
1597 segment_end
= (i_phdrs
[i
].p_offset
+ i_phdrs
[i
].p_filesz
1598 + i_phdrs
[i
].p_align
- 1) & -i_phdrs
[i
].p_align
;
1599 if (segment_end
> (bfd_vma
) contents_size
)
1600 contents_size
= segment_end
;
1602 if ((i_phdrs
[i
].p_offset
& -i_phdrs
[i
].p_align
) == 0)
1603 loadbase
= ehdr_vma
- (i_phdrs
[i
].p_vaddr
& -i_phdrs
[i
].p_align
);
1605 last_phdr
= &i_phdrs
[i
];
1608 if (last_phdr
== NULL
)
1610 /* There were no PT_LOAD segments, so we don't have anything to read. */
1612 bfd_set_error (bfd_error_wrong_format
);
1616 /* Trim the last segment so we don't bother with zeros in the last page
1617 that are off the end of the file. However, if the extra bit in that
1618 page includes the section headers, keep them. */
1619 if ((bfd_vma
) contents_size
> last_phdr
->p_offset
+ last_phdr
->p_filesz
1620 && (bfd_vma
) contents_size
>= (i_ehdr
.e_shoff
1621 + i_ehdr
.e_shnum
* i_ehdr
.e_shentsize
))
1623 contents_size
= last_phdr
->p_offset
+ last_phdr
->p_filesz
;
1624 if ((bfd_vma
) contents_size
< (i_ehdr
.e_shoff
1625 + i_ehdr
.e_shnum
* i_ehdr
.e_shentsize
))
1626 contents_size
= i_ehdr
.e_shoff
+ i_ehdr
.e_shnum
* i_ehdr
.e_shentsize
;
1629 contents_size
= last_phdr
->p_offset
+ last_phdr
->p_filesz
;
1631 /* Now we know the size of the whole image we want read in. */
1632 contents
= bfd_zmalloc (contents_size
);
1633 if (contents
== NULL
)
1636 bfd_set_error (bfd_error_no_memory
);
1640 for (i
= 0; i
< i_ehdr
.e_phnum
; ++i
)
1641 if (i_phdrs
[i
].p_type
== PT_LOAD
)
1643 bfd_vma start
= i_phdrs
[i
].p_offset
& -i_phdrs
[i
].p_align
;
1644 bfd_vma end
= (i_phdrs
[i
].p_offset
+ i_phdrs
[i
].p_filesz
1645 + i_phdrs
[i
].p_align
- 1) & -i_phdrs
[i
].p_align
;
1646 if (end
> (bfd_vma
) contents_size
)
1647 end
= contents_size
;
1648 err
= target_read_memory ((loadbase
+ i_phdrs
[i
].p_vaddr
)
1649 & -i_phdrs
[i
].p_align
,
1650 contents
+ start
, end
- start
);
1655 bfd_set_error (bfd_error_system_call
);
1662 /* If the segments visible in memory didn't include the section headers,
1663 then clear them from the file header. */
1664 if ((bfd_vma
) contents_size
< (i_ehdr
.e_shoff
1665 + i_ehdr
.e_shnum
* i_ehdr
.e_shentsize
))
1667 memset (&x_ehdr
.e_shoff
, 0, sizeof x_ehdr
.e_shoff
);
1668 memset (&x_ehdr
.e_shnum
, 0, sizeof x_ehdr
.e_shnum
);
1669 memset (&x_ehdr
.e_shstrndx
, 0, sizeof x_ehdr
.e_shstrndx
);
1672 /* This will normally have been in the first PT_LOAD segment. But it
1673 conceivably could be missing, and we might have just changed it. */
1674 memcpy (contents
, &x_ehdr
, sizeof x_ehdr
);
1676 /* Now we have a memory image of the ELF file contents. Make a BFD. */
1677 bim
= bfd_malloc (sizeof (struct bfd_in_memory
));
1681 bfd_set_error (bfd_error_no_memory
);
1684 nbfd
= _bfd_new_bfd ();
1689 bfd_set_error (bfd_error_no_memory
);
1692 nbfd
->filename
= "<in-memory>";
1693 nbfd
->xvec
= templ
->xvec
;
1694 bim
->size
= contents_size
;
1695 bim
->buffer
= contents
;
1696 nbfd
->iostream
= bim
;
1697 nbfd
->flags
= BFD_IN_MEMORY
;
1698 nbfd
->direction
= read_direction
;
1699 nbfd
->mtime
= time (NULL
);
1700 nbfd
->mtime_set
= TRUE
;
1703 *loadbasep
= loadbase
;
1707 #include "elfcore.h"
1709 /* Size-dependent data and functions. */
1710 const struct elf_size_info
NAME(_bfd_elf
,size_info
) = {
1711 sizeof (Elf_External_Ehdr
),
1712 sizeof (Elf_External_Phdr
),
1713 sizeof (Elf_External_Shdr
),
1714 sizeof (Elf_External_Rel
),
1715 sizeof (Elf_External_Rela
),
1716 sizeof (Elf_External_Sym
),
1717 sizeof (Elf_External_Dyn
),
1718 sizeof (Elf_External_Note
),
1721 ARCH_SIZE
, LOG_FILE_ALIGN
,
1722 ELFCLASS
, EV_CURRENT
,
1723 elf_write_out_phdrs
,
1724 elf_write_shdrs_and_ehdr
,
1727 elf_swap_symbol_out
,
1728 elf_slurp_reloc_table
,
1729 elf_slurp_symbol_table
,