1 /* ELF executable support for BFD.
2    Copyright (C) 1991-2020 Free Software Foundation, Inc.
3 
4    Written by Fred Fish @ Cygnus Support, from information published
5    in "UNIX System V Release 4, Programmers Guide: ANSI C and
6    Programming Support Tools".  Sufficient support for gdb.
7 
8    Rewritten by Mark Eichin @ Cygnus Support, from information
9    published in "System V Application Binary Interface", chapters 4
10    and 5, as well as the various "Processor Supplement" documents
11    derived from it. Added support for assembler and other object file
12    utilities.  Further work done by Ken Raeburn (Cygnus Support), Michael
13    Meissner (Open Software Foundation), and Peter Hoogenboom (University
14    of Utah) to finish and extend this.
15 
16    This file is part of BFD, the Binary File Descriptor library.
17 
18    This program is free software; you can redistribute it and/or modify
19    it under the terms of the GNU General Public License as published by
20    the Free Software Foundation; either version 3 of the License, or
21    (at your option) any later version.
22 
23    This program is distributed in the hope that it will be useful,
24    but WITHOUT ANY WARRANTY; without even the implied warranty of
25    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26    GNU General Public License for more details.
27 
28    You should have received a copy of the GNU General Public License
29    along with this program; if not, write to the Free Software
30    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
31    MA 02110-1301, USA.  */
32 
33 
34 /* Problems and other issues to resolve.
35 
36    (1)	BFD expects there to be some fixed number of "sections" in
37 	the object file.  I.E. there is a "section_count" variable in the
38 	bfd structure which contains the number of sections.  However, ELF
39 	supports multiple "views" of a file.  In particular, with current
40 	implementations, executable files typically have two tables, a
41 	program header table and a section header table, both of which
42 	partition the executable.
43 
44 	In ELF-speak, the "linking view" of the file uses the section header
45 	table to access "sections" within the file, and the "execution view"
46 	uses the program header table to access "segments" within the file.
47 	"Segments" typically may contain all the data from one or more
48 	"sections".
49 
50 	Note that the section header table is optional in ELF executables,
51 	but it is this information that is most useful to gdb.  If the
52 	section header table is missing, then gdb should probably try
53 	to make do with the program header table.  (FIXME)
54 
55    (2)  The code in this file is compiled twice, once in 32-bit mode and
56 	once in 64-bit mode.  More of it should be made size-independent
57 	and moved into elf.c.
58 
59    (3)	ELF section symbols are handled rather sloppily now.  This should
60 	be cleaned up, and ELF section symbols reconciled with BFD section
61 	symbols.
62 
63    (4)  We need a published spec for 64-bit ELF.  We've got some stuff here
64 	that we're using for SPARC V9 64-bit chips, but don't assume that
65 	it's cast in stone.
66  */
67 
68 #include "sysdep.h"
69 #include "bfd.h"
70 #include "libiberty.h"
71 #include "bfdlink.h"
72 #include "libbfd.h"
73 #include "elf-bfd.h"
74 #include "libiberty.h"
75 
76 /* Renaming structures, typedefs, macros and functions to be size-specific.  */
77 #define Elf_External_Ehdr	NAME(Elf,External_Ehdr)
78 #define Elf_External_Sym	NAME(Elf,External_Sym)
79 #define Elf_External_Shdr	NAME(Elf,External_Shdr)
80 #define Elf_External_Phdr	NAME(Elf,External_Phdr)
81 #define Elf_External_Rel	NAME(Elf,External_Rel)
82 #define Elf_External_Rela	NAME(Elf,External_Rela)
83 #define Elf_External_Dyn	NAME(Elf,External_Dyn)
84 
85 #define elf_core_file_failing_command	NAME(bfd_elf,core_file_failing_command)
86 #define elf_core_file_failing_signal	NAME(bfd_elf,core_file_failing_signal)
87 #define elf_core_file_matches_executable_p \
88   NAME(bfd_elf,core_file_matches_executable_p)
89 #define elf_core_file_pid		NAME(bfd_elf,core_file_pid)
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)
128 
129 #if ARCH_SIZE == 64
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
134 #define FILE_ALIGN	8
135 #define LOG_FILE_ALIGN	3
136 #endif
137 #if ARCH_SIZE == 32
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
142 #define FILE_ALIGN	4
143 #define LOG_FILE_ALIGN	2
144 #endif
145 
146 #if DEBUG & 2
147 static void elf_debug_section (int, Elf_Internal_Shdr *);
148 #endif
149 #if DEBUG & 1
150 static void elf_debug_file (Elf_Internal_Ehdr *);
151 #endif
152 
153 /* Structure swapping routines */
154 
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".  */
157 #if ARCH_SIZE == 64
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
162 #endif
163 #if ARCH_SIZE == 32
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
168 #endif
169 
170 /* Translate an ELF symbol in external format into an ELF symbol in internal
171    format.  */
172 
173 bfd_boolean
174 elf_swap_symbol_in (bfd *abfd,
175 		    const void *psrc,
176 		    const void *pshn,
177 		    Elf_Internal_Sym *dst)
178 {
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;
182 
183   dst->st_name = H_GET_32 (abfd, src->st_name);
184   if (signed_vma)
185     dst->st_value = H_GET_SIGNED_WORD (abfd, src->st_value);
186   else
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))
193     {
194       if (shndx == NULL)
195 	return FALSE;
196       dst->st_shndx = H_GET_32 (abfd, shndx->est_shndx);
197     }
198   else if (dst->st_shndx >= (SHN_LORESERVE & 0xffff))
199     dst->st_shndx += SHN_LORESERVE - (SHN_LORESERVE & 0xffff);
200   dst->st_target_internal = 0;
201   return TRUE;
202 }
203 
204 /* Translate an ELF symbol in internal format into an ELF symbol in external
205    format.  */
206 
207 void
208 elf_swap_symbol_out (bfd *abfd,
209 		     const Elf_Internal_Sym *src,
210 		     void *cdst,
211 		     void *shndx)
212 {
213   unsigned int tmp;
214   Elf_External_Sym *dst = (Elf_External_Sym *) cdst;
215   H_PUT_32 (abfd, src->st_name, dst->st_name);
216   H_PUT_WORD (abfd, src->st_value, dst->st_value);
217   H_PUT_WORD (abfd, src->st_size, dst->st_size);
218   H_PUT_8 (abfd, src->st_info, dst->st_info);
219   H_PUT_8 (abfd, src->st_other, dst->st_other);
220   tmp = src->st_shndx;
221   if (tmp >= (SHN_LORESERVE & 0xffff) && tmp < SHN_LORESERVE)
222     {
223       if (shndx == NULL)
224 	abort ();
225       H_PUT_32 (abfd, tmp, shndx);
226       tmp = SHN_XINDEX & 0xffff;
227     }
228   H_PUT_16 (abfd, tmp, dst->st_shndx);
229 }
230 
231 /* Translate an ELF file header in external format into an ELF file header in
232    internal format.  */
233 
234 static void
235 elf_swap_ehdr_in (bfd *abfd,
236 		  const Elf_External_Ehdr *src,
237 		  Elf_Internal_Ehdr *dst)
238 {
239   int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
240   memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
241   dst->e_type = H_GET_16 (abfd, src->e_type);
242   dst->e_machine = H_GET_16 (abfd, src->e_machine);
243   dst->e_version = H_GET_32 (abfd, src->e_version);
244   if (signed_vma)
245     dst->e_entry = H_GET_SIGNED_WORD (abfd, src->e_entry);
246   else
247     dst->e_entry = H_GET_WORD (abfd, src->e_entry);
248   dst->e_phoff = H_GET_WORD (abfd, src->e_phoff);
249   dst->e_shoff = H_GET_WORD (abfd, src->e_shoff);
250   dst->e_flags = H_GET_32 (abfd, src->e_flags);
251   dst->e_ehsize = H_GET_16 (abfd, src->e_ehsize);
252   dst->e_phentsize = H_GET_16 (abfd, src->e_phentsize);
253   dst->e_phnum = H_GET_16 (abfd, src->e_phnum);
254   dst->e_shentsize = H_GET_16 (abfd, src->e_shentsize);
255   dst->e_shnum = H_GET_16 (abfd, src->e_shnum);
256   dst->e_shstrndx = H_GET_16 (abfd, src->e_shstrndx);
257 }
258 
259 /* Translate an ELF file header in internal format into an ELF file header in
260    external format.  */
261 
262 static void
263 elf_swap_ehdr_out (bfd *abfd,
264 		   const Elf_Internal_Ehdr *src,
265 		   Elf_External_Ehdr *dst)
266 {
267   unsigned int tmp;
268   int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
269   memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
270   /* note that all elements of dst are *arrays of unsigned char* already...  */
271   H_PUT_16 (abfd, src->e_type, dst->e_type);
272   H_PUT_16 (abfd, src->e_machine, dst->e_machine);
273   H_PUT_32 (abfd, src->e_version, dst->e_version);
274   if (signed_vma)
275     H_PUT_SIGNED_WORD (abfd, src->e_entry, dst->e_entry);
276   else
277     H_PUT_WORD (abfd, src->e_entry, dst->e_entry);
278   H_PUT_WORD (abfd, src->e_phoff, dst->e_phoff);
279   H_PUT_WORD (abfd, src->e_shoff, dst->e_shoff);
280   H_PUT_32 (abfd, src->e_flags, dst->e_flags);
281   H_PUT_16 (abfd, src->e_ehsize, dst->e_ehsize);
282   H_PUT_16 (abfd, src->e_phentsize, dst->e_phentsize);
283   tmp = src->e_phnum;
284   if (tmp > PN_XNUM)
285     tmp = PN_XNUM;
286   H_PUT_16 (abfd, tmp, dst->e_phnum);
287   H_PUT_16 (abfd, src->e_shentsize, dst->e_shentsize);
288   tmp = src->e_shnum;
289   if (tmp >= (SHN_LORESERVE & 0xffff))
290     tmp = SHN_UNDEF;
291   H_PUT_16 (abfd, tmp, dst->e_shnum);
292   tmp = src->e_shstrndx;
293   if (tmp >= (SHN_LORESERVE & 0xffff))
294     tmp = SHN_XINDEX & 0xffff;
295   H_PUT_16 (abfd, tmp, dst->e_shstrndx);
296 }
297 
298 /* Translate an ELF section header table entry in external format into an
299    ELF section header table entry in internal format.  */
300 
301 static void
302 elf_swap_shdr_in (bfd *abfd,
303 		  const Elf_External_Shdr *src,
304 		  Elf_Internal_Shdr *dst)
305 {
306   int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
307 
308   dst->sh_name = H_GET_32 (abfd, src->sh_name);
309   dst->sh_type = H_GET_32 (abfd, src->sh_type);
310   dst->sh_flags = H_GET_WORD (abfd, src->sh_flags);
311   if (signed_vma)
312     dst->sh_addr = H_GET_SIGNED_WORD (abfd, src->sh_addr);
313   else
314     dst->sh_addr = H_GET_WORD (abfd, src->sh_addr);
315   dst->sh_offset = H_GET_WORD (abfd, src->sh_offset);
316   dst->sh_size = H_GET_WORD (abfd, src->sh_size);
317   /* PR 23657.  Check for invalid section size, in sections with contents.
318      Note - we do not set an error value here because the contents
319      of this particular section might not be needed by the consumer.  */
320   if (dst->sh_type != SHT_NOBITS
321       && dst->sh_size > bfd_get_file_size (abfd))
322     _bfd_error_handler
323       (_("warning: %pB has a corrupt section with a size (%" BFD_VMA_FMT "x) larger than the file size"),
324        abfd, dst->sh_size);
325   dst->sh_link = H_GET_32 (abfd, src->sh_link);
326   dst->sh_info = H_GET_32 (abfd, src->sh_info);
327   dst->sh_addralign = H_GET_WORD (abfd, src->sh_addralign);
328   dst->sh_entsize = H_GET_WORD (abfd, src->sh_entsize);
329   dst->bfd_section = NULL;
330   dst->contents = NULL;
331 }
332 
333 /* Translate an ELF section header table entry in internal format into an
334    ELF section header table entry in external format.  */
335 
336 static void
337 elf_swap_shdr_out (bfd *abfd,
338 		   const Elf_Internal_Shdr *src,
339 		   Elf_External_Shdr *dst)
340 {
341   /* note that all elements of dst are *arrays of unsigned char* already...  */
342   H_PUT_32 (abfd, src->sh_name, dst->sh_name);
343   H_PUT_32 (abfd, src->sh_type, dst->sh_type);
344   H_PUT_WORD (abfd, src->sh_flags, dst->sh_flags);
345   H_PUT_WORD (abfd, src->sh_addr, dst->sh_addr);
346   H_PUT_WORD (abfd, src->sh_offset, dst->sh_offset);
347   H_PUT_WORD (abfd, src->sh_size, dst->sh_size);
348   H_PUT_32 (abfd, src->sh_link, dst->sh_link);
349   H_PUT_32 (abfd, src->sh_info, dst->sh_info);
350   H_PUT_WORD (abfd, src->sh_addralign, dst->sh_addralign);
351   H_PUT_WORD (abfd, src->sh_entsize, dst->sh_entsize);
352 }
353 
354 /* Translate an ELF program header table entry in external format into an
355    ELF program header table entry in internal format.  */
356 
357 void
358 elf_swap_phdr_in (bfd *abfd,
359 		  const Elf_External_Phdr *src,
360 		  Elf_Internal_Phdr *dst)
361 {
362   int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
363 
364   dst->p_type = H_GET_32 (abfd, src->p_type);
365   dst->p_flags = H_GET_32 (abfd, src->p_flags);
366   dst->p_offset = H_GET_WORD (abfd, src->p_offset);
367   if (signed_vma)
368     {
369       dst->p_vaddr = H_GET_SIGNED_WORD (abfd, src->p_vaddr);
370       dst->p_paddr = H_GET_SIGNED_WORD (abfd, src->p_paddr);
371     }
372   else
373     {
374       dst->p_vaddr = H_GET_WORD (abfd, src->p_vaddr);
375       dst->p_paddr = H_GET_WORD (abfd, src->p_paddr);
376     }
377   dst->p_filesz = H_GET_WORD (abfd, src->p_filesz);
378   dst->p_memsz = H_GET_WORD (abfd, src->p_memsz);
379   dst->p_align = H_GET_WORD (abfd, src->p_align);
380 }
381 
382 void
383 elf_swap_phdr_out (bfd *abfd,
384 		   const Elf_Internal_Phdr *src,
385 		   Elf_External_Phdr *dst)
386 {
387   const struct elf_backend_data *bed;
388   bfd_vma p_paddr;
389 
390   bed = get_elf_backend_data (abfd);
391   p_paddr = bed->want_p_paddr_set_to_zero ? 0 : src->p_paddr;
392 
393   /* note that all elements of dst are *arrays of unsigned char* already...  */
394   H_PUT_32 (abfd, src->p_type, dst->p_type);
395   H_PUT_WORD (abfd, src->p_offset, dst->p_offset);
396   H_PUT_WORD (abfd, src->p_vaddr, dst->p_vaddr);
397   H_PUT_WORD (abfd, p_paddr, dst->p_paddr);
398   H_PUT_WORD (abfd, src->p_filesz, dst->p_filesz);
399   H_PUT_WORD (abfd, src->p_memsz, dst->p_memsz);
400   H_PUT_32 (abfd, src->p_flags, dst->p_flags);
401   H_PUT_WORD (abfd, src->p_align, dst->p_align);
402 }
403 
404 /* Translate an ELF reloc from external format to internal format.  */
405 void
406 elf_swap_reloc_in (bfd *abfd,
407 		   const bfd_byte *s,
408 		   Elf_Internal_Rela *dst)
409 {
410   const Elf_External_Rel *src = (const Elf_External_Rel *) s;
411   dst->r_offset = H_GET_WORD (abfd, src->r_offset);
412   dst->r_info = H_GET_WORD (abfd, src->r_info);
413   dst->r_addend = 0;
414 }
415 
416 void
417 elf_swap_reloca_in (bfd *abfd,
418 		    const bfd_byte *s,
419 		    Elf_Internal_Rela *dst)
420 {
421   const Elf_External_Rela *src = (const Elf_External_Rela *) s;
422   dst->r_offset = H_GET_WORD (abfd, src->r_offset);
423   dst->r_info = H_GET_WORD (abfd, src->r_info);
424   dst->r_addend = H_GET_SIGNED_WORD (abfd, src->r_addend);
425 }
426 
427 /* Translate an ELF reloc from internal format to external format.  */
428 void
429 elf_swap_reloc_out (bfd *abfd,
430 		    const Elf_Internal_Rela *src,
431 		    bfd_byte *d)
432 {
433   Elf_External_Rel *dst = (Elf_External_Rel *) d;
434   H_PUT_WORD (abfd, src->r_offset, dst->r_offset);
435   H_PUT_WORD (abfd, src->r_info, dst->r_info);
436 }
437 
438 void
439 elf_swap_reloca_out (bfd *abfd,
440 		     const Elf_Internal_Rela *src,
441 		     bfd_byte *d)
442 {
443   Elf_External_Rela *dst = (Elf_External_Rela *) d;
444   H_PUT_WORD (abfd, src->r_offset, dst->r_offset);
445   H_PUT_WORD (abfd, src->r_info, dst->r_info);
446   H_PUT_SIGNED_WORD (abfd, src->r_addend, dst->r_addend);
447 }
448 
449 void
450 elf_swap_dyn_in (bfd *abfd,
451 		 const void *p,
452 		 Elf_Internal_Dyn *dst)
453 {
454   const Elf_External_Dyn *src = (const Elf_External_Dyn *) p;
455 
456   dst->d_tag = H_GET_WORD (abfd, src->d_tag);
457   dst->d_un.d_val = H_GET_WORD (abfd, src->d_un.d_val);
458 }
459 
460 void
461 elf_swap_dyn_out (bfd *abfd,
462 		  const Elf_Internal_Dyn *src,
463 		  void *p)
464 {
465   Elf_External_Dyn *dst = (Elf_External_Dyn *) p;
466 
467   H_PUT_WORD (abfd, src->d_tag, dst->d_tag);
468   H_PUT_WORD (abfd, src->d_un.d_val, dst->d_un.d_val);
469 }
470 
471 /* ELF .o/exec file reading */
472 
473 /* Begin processing a given object.
474 
475    First we validate the file by reading in the ELF header and checking
476    the magic number.  */
477 
478 static inline bfd_boolean
479 elf_file_p (Elf_External_Ehdr *x_ehdrp)
480 {
481   return ((x_ehdrp->e_ident[EI_MAG0] == ELFMAG0)
482 	  && (x_ehdrp->e_ident[EI_MAG1] == ELFMAG1)
483 	  && (x_ehdrp->e_ident[EI_MAG2] == ELFMAG2)
484 	  && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3));
485 }
486 
487 /* Check to see if the file associated with ABFD matches the target vector
488    that ABFD points to.
489 
490    Note that we may be called several times with the same ABFD, but different
491    target vectors, most of which will not match.  We have to avoid leaving
492    any side effects in ABFD, or any data it points to (like tdata), if the
493    file does not match the target vector.  */
494 
495 const bfd_target *
496 elf_object_p (bfd *abfd)
497 {
498   Elf_External_Ehdr x_ehdr;	/* Elf file header, external form */
499   Elf_Internal_Ehdr *i_ehdrp;	/* Elf file header, internal form */
500   Elf_External_Shdr x_shdr;	/* Section header table entry, external form */
501   Elf_Internal_Shdr i_shdr;
502   Elf_Internal_Shdr *i_shdrp;	/* Section header table, internal form */
503   unsigned int shindex;
504   const struct elf_backend_data *ebd;
505   asection *s;
506   const bfd_target *target;
507 
508   /* Read in the ELF header in external format.  */
509 
510   if (bfd_bread (&x_ehdr, sizeof (x_ehdr), abfd) != sizeof (x_ehdr))
511     {
512       if (bfd_get_error () != bfd_error_system_call)
513 	goto got_wrong_format_error;
514       else
515 	goto got_no_match;
516     }
517 
518   /* Now check to see if we have a valid ELF file, and one that BFD can
519      make use of.  The magic number must match, the address size ('class')
520      and byte-swapping must match our XVEC entry, and it must have a
521      section header table (FIXME: See comments re sections at top of this
522      file).  */
523 
524   if (! elf_file_p (&x_ehdr)
525       || x_ehdr.e_ident[EI_VERSION] != EV_CURRENT
526       || x_ehdr.e_ident[EI_CLASS] != ELFCLASS)
527     goto got_wrong_format_error;
528 
529   /* Check that file's byte order matches xvec's */
530   switch (x_ehdr.e_ident[EI_DATA])
531     {
532     case ELFDATA2MSB:		/* Big-endian */
533       if (! bfd_header_big_endian (abfd))
534 	goto got_wrong_format_error;
535       break;
536     case ELFDATA2LSB:		/* Little-endian */
537       if (! bfd_header_little_endian (abfd))
538 	goto got_wrong_format_error;
539       break;
540     case ELFDATANONE:		/* No data encoding specified */
541     default:			/* Unknown data encoding specified */
542       goto got_wrong_format_error;
543     }
544 
545   target = abfd->xvec;
546 
547   /* Allocate an instance of the elf_obj_tdata structure and hook it up to
548      the tdata pointer in the bfd.  */
549 
550   if (! (*target->_bfd_set_format[bfd_object]) (abfd))
551     goto got_no_match;
552 
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);
556 #if DEBUG & 1
557   elf_debug_file (i_ehdrp);
558 #endif
559 
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;
563 
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;
568 
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;
574 
575   /* Further sanity check.  */
576   if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_shnum != 0)
577     goto got_wrong_format_error;
578 
579   ebd = get_elf_backend_data (abfd);
580   if (ebd->s->arch_size != ARCH_SIZE)
581     goto got_wrong_format_error;
582 
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)
590       && ebd->elf_machine_code != EM_NONE)
591     goto got_wrong_format_error;
592 
593   if (i_ehdrp->e_type == ET_EXEC)
594     abfd->flags |= EXEC_P;
595   else if (i_ehdrp->e_type == ET_DYN)
596     abfd->flags |= DYNAMIC;
597 
598   if (i_ehdrp->e_phnum > 0)
599     abfd->flags |= D_PAGED;
600 
601   if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
602     {
603       /* It's OK if this fails for the generic target.  */
604       if (ebd->elf_machine_code != EM_NONE)
605 	goto got_no_match;
606     }
607 
608   if (ebd->elf_machine_code != EM_NONE
609       && i_ehdrp->e_ident[EI_OSABI] != ebd->elf_osabi
610       && ebd->elf_osabi != ELFOSABI_NONE)
611     goto got_wrong_format_error;
612 
613   if (i_ehdrp->e_shoff != 0)
614     {
615       file_ptr where = (file_ptr) i_ehdrp->e_shoff;
616 
617       /* Seek to the section header table in the file.  */
618       if (bfd_seek (abfd, where, SEEK_SET) != 0)
619 	goto got_no_match;
620 
621       /* Read the first section header at index 0, and convert to internal
622 	 form.  */
623       if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
624 	goto got_no_match;
625       elf_swap_shdr_in (abfd, &x_shdr, &i_shdr);
626 
627       /* If the section count is zero, the actual count is in the first
628 	 section header.  */
629       if (i_ehdrp->e_shnum == SHN_UNDEF)
630 	{
631 	  i_ehdrp->e_shnum = i_shdr.sh_size;
632 	  if (i_ehdrp->e_shnum >= SHN_LORESERVE
633 	      || i_ehdrp->e_shnum != i_shdr.sh_size
634 	      || i_ehdrp->e_shnum  == 0)
635 	    goto got_wrong_format_error;
636 	}
637 
638       /* And similarly for the string table index.  */
639       if (i_ehdrp->e_shstrndx == (SHN_XINDEX & 0xffff))
640 	{
641 	  i_ehdrp->e_shstrndx = i_shdr.sh_link;
642 	  if (i_ehdrp->e_shstrndx != i_shdr.sh_link)
643 	    goto got_wrong_format_error;
644 	}
645 
646       /* And program headers.  */
647       if (i_ehdrp->e_phnum == PN_XNUM && i_shdr.sh_info != 0)
648 	{
649 	  i_ehdrp->e_phnum = i_shdr.sh_info;
650 	  if (i_ehdrp->e_phnum != i_shdr.sh_info)
651 	    goto got_wrong_format_error;
652 	}
653 
654       /* Sanity check that we can read all of the section headers.
655 	 It ought to be good enough to just read the last one.  */
656       if (i_ehdrp->e_shnum != 1)
657 	{
658 	  /* Check that we don't have a totally silly number of sections.  */
659 	  if (i_ehdrp->e_shnum > (unsigned int) -1 / sizeof (x_shdr)
660 	      || i_ehdrp->e_shnum > (unsigned int) -1 / sizeof (i_shdr))
661 	    goto got_wrong_format_error;
662 
663 	  where += (i_ehdrp->e_shnum - 1) * sizeof (x_shdr);
664 	  if ((bfd_size_type) where <= i_ehdrp->e_shoff)
665 	    goto got_wrong_format_error;
666 
667 	  if (bfd_seek (abfd, where, SEEK_SET) != 0)
668 	    goto got_no_match;
669 	  if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
670 	    goto got_no_match;
671 
672 	  /* Back to where we were.  */
673 	  where = i_ehdrp->e_shoff + sizeof (x_shdr);
674 	  if (bfd_seek (abfd, where, SEEK_SET) != 0)
675 	    goto got_no_match;
676 	}
677     }
678 
679   /* Allocate space for a copy of the section header table in
680      internal form.  */
681   if (i_ehdrp->e_shnum != 0)
682     {
683       Elf_Internal_Shdr *shdrp;
684       unsigned int num_sec;
685 
686 #ifndef BFD64
687       if (i_ehdrp->e_shnum > ((bfd_size_type) -1) / sizeof (*i_shdrp))
688 	goto got_wrong_format_error;
689 #endif
690       i_shdrp = (Elf_Internal_Shdr *) bfd_alloc2 (abfd, i_ehdrp->e_shnum,
691 						  sizeof (*i_shdrp));
692       if (!i_shdrp)
693 	goto got_no_match;
694       num_sec = i_ehdrp->e_shnum;
695       elf_numsections (abfd) = num_sec;
696       elf_elfsections (abfd)
697 	= (Elf_Internal_Shdr **) bfd_alloc2 (abfd, num_sec, sizeof (i_shdrp));
698       if (!elf_elfsections (abfd))
699 	goto got_no_match;
700 
701       memcpy (i_shdrp, &i_shdr, sizeof (*i_shdrp));
702       for (shdrp = i_shdrp, shindex = 0; shindex < num_sec; shindex++)
703 	elf_elfsections (abfd)[shindex] = shdrp++;
704 
705       /* Read in the rest of the section header table and convert it
706 	 to internal form.  */
707       for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
708 	{
709 	  if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
710 	    goto got_no_match;
711 	  elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
712 
713 	  /* Sanity check sh_link and sh_info.  */
714 	  if (i_shdrp[shindex].sh_link >= num_sec)
715 	    {
716 	      /* PR 10478: Accept Solaris binaries with a sh_link
717 		 field set to SHN_BEFORE or SHN_AFTER.  */
718 	      switch (ebd->elf_machine_code)
719 		{
720 		case EM_386:
721 		case EM_IAMCU:
722 		case EM_X86_64:
723 		case EM_OLD_SPARCV9:
724 		case EM_SPARC32PLUS:
725 		case EM_SPARCV9:
726 		case EM_SPARC:
727 		  if (i_shdrp[shindex].sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
728 		      || i_shdrp[shindex].sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
729 		    break;
730 		  /* Otherwise fall through.  */
731 		default:
732 		  goto got_wrong_format_error;
733 		}
734 	    }
735 
736 	  if (((i_shdrp[shindex].sh_flags & SHF_INFO_LINK)
737 	       || i_shdrp[shindex].sh_type == SHT_RELA
738 	       || i_shdrp[shindex].sh_type == SHT_REL)
739 	      && i_shdrp[shindex].sh_info >= num_sec)
740 	    goto got_wrong_format_error;
741 
742 	  /* If the section is loaded, but not page aligned, clear
743 	     D_PAGED.  */
744 	  if (i_shdrp[shindex].sh_size != 0
745 	      && (i_shdrp[shindex].sh_flags & SHF_ALLOC) != 0
746 	      && i_shdrp[shindex].sh_type != SHT_NOBITS
747 	      && (((i_shdrp[shindex].sh_addr - i_shdrp[shindex].sh_offset)
748 		   % ebd->minpagesize)
749 		  != 0))
750 	    abfd->flags &= ~D_PAGED;
751 	}
752 
753       if (i_ehdrp->e_shstrndx >= elf_numsections (abfd)
754 	  || i_shdrp[i_ehdrp->e_shstrndx].sh_type != SHT_STRTAB)
755 	{
756 	  /* PR 2257:
757 	     We used to just goto got_wrong_format_error here
758 	     but there are binaries in existance for which this test
759 	     will prevent the binutils from working with them at all.
760 	     So we are kind, and reset the string index value to 0
761 	     so that at least some processing can be done.  */
762 	  i_ehdrp->e_shstrndx = SHN_UNDEF;
763 	  _bfd_error_handler
764 	    (_("warning: %pB has a corrupt string table index - ignoring"),
765 	     abfd);
766 	}
767     }
768   else if (i_ehdrp->e_shstrndx != SHN_UNDEF)
769     goto got_wrong_format_error;
770 
771   /* Read in the program headers.  */
772   if (i_ehdrp->e_phnum == 0)
773     elf_tdata (abfd)->phdr = NULL;
774   else
775     {
776       Elf_Internal_Phdr *i_phdr;
777       unsigned int i;
778 
779 #ifndef BFD64
780       if (i_ehdrp->e_phnum > ((bfd_size_type) -1) / sizeof (*i_phdr))
781 	goto got_wrong_format_error;
782 #endif
783       /* Check for a corrupt input file with an impossibly large number
784 	 of program headers.  */
785       if (bfd_get_file_size (abfd) > 0
786 	  && i_ehdrp->e_phnum > bfd_get_file_size (abfd))
787 	goto got_no_match;
788       elf_tdata (abfd)->phdr
789 	= (Elf_Internal_Phdr *) bfd_alloc2 (abfd, i_ehdrp->e_phnum,
790 					    sizeof (*i_phdr));
791       if (elf_tdata (abfd)->phdr == NULL)
792 	goto got_no_match;
793       if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_phoff, SEEK_SET) != 0)
794 	goto got_no_match;
795       i_phdr = elf_tdata (abfd)->phdr;
796       for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++)
797 	{
798 	  Elf_External_Phdr x_phdr;
799 
800 	  if (bfd_bread (&x_phdr, sizeof x_phdr, abfd) != sizeof x_phdr)
801 	    goto got_no_match;
802 	  elf_swap_phdr_in (abfd, &x_phdr, i_phdr);
803 	}
804     }
805 
806   if (i_ehdrp->e_shstrndx != 0 && i_ehdrp->e_shoff != 0)
807     {
808       unsigned int num_sec;
809 
810       /* Once all of the section headers have been read and converted, we
811 	 can start processing them.  Note that the first section header is
812 	 a dummy placeholder entry, so we ignore it.  */
813       num_sec = elf_numsections (abfd);
814       for (shindex = 1; shindex < num_sec; shindex++)
815 	if (!bfd_section_from_shdr (abfd, shindex))
816 	  goto got_no_match;
817 
818       /* Set up ELF sections for SHF_GROUP and SHF_LINK_ORDER.  */
819       if (! _bfd_elf_setup_sections (abfd))
820 	goto got_wrong_format_error;
821     }
822 
823   /* Let the backend double check the format and override global
824      information.  */
825   if (ebd->elf_backend_object_p)
826     {
827       if (! (*ebd->elf_backend_object_p) (abfd))
828 	goto got_wrong_format_error;
829     }
830 
831   /* Remember the entry point specified in the ELF file header.  */
832   bfd_set_start_address (abfd, i_ehdrp->e_entry);
833 
834   /* If we have created any reloc sections that are associated with
835      debugging sections, mark the reloc sections as debugging as well.  */
836   for (s = abfd->sections; s != NULL; s = s->next)
837     {
838       if ((elf_section_data (s)->this_hdr.sh_type == SHT_REL
839 	   || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)
840 	  && elf_section_data (s)->this_hdr.sh_info > 0)
841 	{
842 	  unsigned long targ_index;
843 	  asection *targ_sec;
844 
845 	  targ_index = elf_section_data (s)->this_hdr.sh_info;
846 	  targ_sec = bfd_section_from_elf_index (abfd, targ_index);
847 	  if (targ_sec != NULL
848 	      && (targ_sec->flags & SEC_DEBUGGING) != 0)
849 	    s->flags |= SEC_DEBUGGING;
850 	}
851     }
852   return target;
853 
854  got_wrong_format_error:
855   bfd_set_error (bfd_error_wrong_format);
856 
857  got_no_match:
858   return NULL;
859 }
860 
861 /* ELF .o/exec file writing */
862 
863 /* Write out the relocs.  */
864 
865 void
866 elf_write_relocs (bfd *abfd, asection *sec, void *data)
867 {
868   bfd_boolean *failedp = (bfd_boolean *) data;
869   Elf_Internal_Shdr *rela_hdr;
870   bfd_vma addr_offset;
871   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
872   size_t extsize;
873   bfd_byte *dst_rela;
874   unsigned int idx;
875   asymbol *last_sym;
876   int last_sym_idx;
877 
878   /* If we have already failed, don't do anything.  */
879   if (*failedp)
880     return;
881 
882   if ((sec->flags & SEC_RELOC) == 0)
883     return;
884 
885   /* The linker backend writes the relocs out itself, and sets the
886      reloc_count field to zero to inhibit writing them here.  Also,
887      sometimes the SEC_RELOC flag gets set even when there aren't any
888      relocs.  */
889   if (sec->reloc_count == 0)
890     return;
891 
892   /* If we have opened an existing file for update, reloc_count may be
893      set even though we are not linking.  In that case we have nothing
894      to do.  */
895   if (sec->orelocation == NULL)
896     return;
897 
898   rela_hdr = elf_section_data (sec)->rela.hdr;
899   if (rela_hdr == NULL)
900     rela_hdr = elf_section_data (sec)->rel.hdr;
901 
902   rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count;
903   rela_hdr->contents = (unsigned char *) bfd_alloc2 (abfd, sec->reloc_count,
904 						     rela_hdr->sh_entsize);
905   if (rela_hdr->contents == NULL)
906     {
907       *failedp = TRUE;
908       return;
909     }
910 
911   /* Figure out whether the relocations are RELA or REL relocations.  */
912   if (rela_hdr->sh_type == SHT_RELA)
913     {
914       swap_out = elf_swap_reloca_out;
915       extsize = sizeof (Elf_External_Rela);
916     }
917   else if (rela_hdr->sh_type == SHT_REL)
918     {
919       swap_out = elf_swap_reloc_out;
920       extsize = sizeof (Elf_External_Rel);
921     }
922   else
923     /* Every relocation section should be either an SHT_RELA or an
924        SHT_REL section.  */
925     abort ();
926 
927   /* The address of an ELF reloc is section relative for an object
928      file, and absolute for an executable file or shared library.
929      The address of a BFD reloc is always section relative.  */
930   addr_offset = 0;
931   if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
932     addr_offset = sec->vma;
933 
934   /* orelocation has the data, reloc_count has the count...  */
935   last_sym = 0;
936   last_sym_idx = 0;
937   dst_rela = rela_hdr->contents;
938 
939   for (idx = 0; idx < sec->reloc_count; idx++, dst_rela += extsize)
940     {
941       Elf_Internal_Rela src_rela;
942       arelent *ptr;
943       asymbol *sym;
944       int n;
945 
946       ptr = sec->orelocation[idx];
947       sym = *ptr->sym_ptr_ptr;
948       if (sym == last_sym)
949 	n = last_sym_idx;
950       else if (bfd_is_abs_section (sym->section) && sym->value == 0)
951 	n = STN_UNDEF;
952       else
953 	{
954 	  last_sym = sym;
955 	  n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
956 	  if (n < 0)
957 	    {
958 	      *failedp = TRUE;
959 	      return;
960 	    }
961 	  last_sym_idx = n;
962 	}
963 
964       if ((*ptr->sym_ptr_ptr)->the_bfd != NULL
965 	  && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
966 	  && ! _bfd_elf_validate_reloc (abfd, ptr))
967 	{
968 	  *failedp = TRUE;
969 	  return;
970 	}
971 
972       if (ptr->howto == NULL)
973 	{
974 	  *failedp = TRUE;
975 	  return;
976 	}
977 
978       src_rela.r_offset = ptr->address + addr_offset;
979       src_rela.r_info = ELF_R_INFO (n, ptr->howto->type);
980       src_rela.r_addend = ptr->addend;
981       (*swap_out) (abfd, &src_rela, dst_rela);
982     }
983 }
984 
985 /* Write out the program headers.  */
986 
987 int
988 elf_write_out_phdrs (bfd *abfd,
989 		     const Elf_Internal_Phdr *phdr,
990 		     unsigned int count)
991 {
992   while (count--)
993     {
994       Elf_External_Phdr extphdr;
995 
996       elf_swap_phdr_out (abfd, phdr, &extphdr);
997       if (bfd_bwrite (&extphdr, sizeof (Elf_External_Phdr), abfd)
998 	  != sizeof (Elf_External_Phdr))
999 	return -1;
1000       phdr++;
1001     }
1002   return 0;
1003 }
1004 
1005 /* Write out the section headers and the ELF file header.  */
1006 
1007 bfd_boolean
1008 elf_write_shdrs_and_ehdr (bfd *abfd)
1009 {
1010   Elf_External_Ehdr x_ehdr;	/* Elf file header, external form */
1011   Elf_Internal_Ehdr *i_ehdrp;	/* Elf file header, internal form */
1012   Elf_External_Shdr *x_shdrp;	/* Section header table, external form */
1013   Elf_Internal_Shdr **i_shdrp;	/* Section header table, internal form */
1014   unsigned int count;
1015   bfd_size_type amt;
1016 
1017   i_ehdrp = elf_elfheader (abfd);
1018   i_shdrp = elf_elfsections (abfd);
1019 
1020   /* swap the header before spitting it out...  */
1021 
1022 #if DEBUG & 1
1023   elf_debug_file (i_ehdrp);
1024 #endif
1025   elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr);
1026   amt = sizeof (x_ehdr);
1027   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
1028       || bfd_bwrite (&x_ehdr, amt, abfd) != amt)
1029     return FALSE;
1030 
1031   /* Some fields in the first section header handle overflow of ehdr
1032      fields.  */
1033   if (i_ehdrp->e_phnum >= PN_XNUM)
1034     i_shdrp[0]->sh_info = i_ehdrp->e_phnum;
1035   if (i_ehdrp->e_shnum >= (SHN_LORESERVE & 0xffff))
1036     i_shdrp[0]->sh_size = i_ehdrp->e_shnum;
1037   if (i_ehdrp->e_shstrndx >= (SHN_LORESERVE & 0xffff))
1038     i_shdrp[0]->sh_link = i_ehdrp->e_shstrndx;
1039 
1040   /* at this point we've concocted all the ELF sections...  */
1041   x_shdrp = (Elf_External_Shdr *) bfd_alloc2 (abfd, i_ehdrp->e_shnum,
1042 					      sizeof (*x_shdrp));
1043   if (!x_shdrp)
1044     return FALSE;
1045 
1046   for (count = 0; count < i_ehdrp->e_shnum; i_shdrp++, count++)
1047     {
1048 #if DEBUG & 2
1049       elf_debug_section (count, *i_shdrp);
1050 #endif
1051       elf_swap_shdr_out (abfd, *i_shdrp, x_shdrp + count);
1052     }
1053   amt = (bfd_size_type) i_ehdrp->e_shnum * sizeof (*x_shdrp);
1054   if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET) != 0
1055       || bfd_bwrite (x_shdrp, amt, abfd) != amt)
1056     return FALSE;
1057 
1058   /* need to dump the string table too...  */
1059 
1060   return TRUE;
1061 }
1062 
1063 bfd_boolean
1064 elf_checksum_contents (bfd *abfd,
1065 		       void (*process) (const void *, size_t, void *),
1066 		       void *arg)
1067 {
1068   Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
1069   Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
1070   Elf_Internal_Phdr *i_phdrp = elf_tdata (abfd)->phdr;
1071   unsigned int count, num;
1072 
1073   {
1074     Elf_External_Ehdr x_ehdr;
1075     Elf_Internal_Ehdr i_ehdr;
1076 
1077     i_ehdr = *i_ehdrp;
1078     i_ehdr.e_phoff = i_ehdr.e_shoff = 0;
1079     elf_swap_ehdr_out (abfd, &i_ehdr, &x_ehdr);
1080     (*process) (&x_ehdr, sizeof x_ehdr, arg);
1081   }
1082 
1083   num = i_ehdrp->e_phnum;
1084   for (count = 0; count < num; count++)
1085     {
1086       Elf_External_Phdr x_phdr;
1087       elf_swap_phdr_out (abfd, &i_phdrp[count], &x_phdr);
1088       (*process) (&x_phdr, sizeof x_phdr, arg);
1089     }
1090 
1091   num = elf_numsections (abfd);
1092   for (count = 0; count < num; count++)
1093     {
1094       Elf_Internal_Shdr i_shdr;
1095       Elf_External_Shdr x_shdr;
1096       bfd_byte *contents, *free_contents;
1097 
1098       i_shdr = *i_shdrp[count];
1099       i_shdr.sh_offset = 0;
1100 
1101       elf_swap_shdr_out (abfd, &i_shdr, &x_shdr);
1102       (*process) (&x_shdr, sizeof x_shdr, arg);
1103 
1104       /* Process the section's contents, if it has some.
1105 	 PR ld/12451: Read them in if necessary.  */
1106       if (i_shdr.sh_type == SHT_NOBITS)
1107 	continue;
1108       free_contents = NULL;
1109       contents = i_shdr.contents;
1110       if (contents == NULL)
1111 	{
1112 	  asection *sec;
1113 
1114 	  sec = bfd_section_from_elf_index (abfd, count);
1115 	  if (sec != NULL)
1116 	    {
1117 	      contents = sec->contents;
1118 	      if (contents == NULL)
1119 		{
1120 		  /* Force rereading from file.  */
1121 		  sec->flags &= ~SEC_IN_MEMORY;
1122 		  if (!bfd_malloc_and_get_section (abfd, sec, &free_contents))
1123 		    continue;
1124 		  contents = free_contents;
1125 		}
1126 	    }
1127 	}
1128       if (contents != NULL)
1129 	{
1130 	  (*process) (contents, i_shdr.sh_size, arg);
1131 	  if (free_contents != NULL)
1132 	    free (free_contents);
1133 	}
1134     }
1135 
1136   return TRUE;
1137 }
1138 
1139 long
1140 elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic)
1141 {
1142   Elf_Internal_Shdr *hdr;
1143   Elf_Internal_Shdr *verhdr;
1144   unsigned long symcount;	/* Number of external ELF symbols */
1145   elf_symbol_type *sym;		/* Pointer to current bfd symbol */
1146   elf_symbol_type *symbase;	/* Buffer for generated bfd symbols */
1147   Elf_Internal_Sym *isym;
1148   Elf_Internal_Sym *isymend;
1149   Elf_Internal_Sym *isymbuf = NULL;
1150   Elf_External_Versym *xver;
1151   Elf_External_Versym *xverbuf = NULL;
1152   const struct elf_backend_data *ebd;
1153 
1154   /* Read each raw ELF symbol, converting from external ELF form to
1155      internal ELF form, and then using the information to create a
1156      canonical bfd symbol table entry.
1157 
1158      Note that we allocate the initial bfd canonical symbol buffer
1159      based on a one-to-one mapping of the ELF symbols to canonical
1160      symbols.  We actually use all the ELF symbols, so there will be no
1161      space left over at the end.  When we have all the symbols, we
1162      build the caller's pointer vector.  */
1163 
1164   if (! dynamic)
1165     {
1166       hdr = &elf_tdata (abfd)->symtab_hdr;
1167       verhdr = NULL;
1168     }
1169   else
1170     {
1171       hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1172       if (elf_dynversym (abfd) == 0)
1173 	verhdr = NULL;
1174       else
1175 	verhdr = &elf_tdata (abfd)->dynversym_hdr;
1176       if ((elf_dynverdef (abfd) != 0
1177 	   && elf_tdata (abfd)->verdef == NULL)
1178 	  || (elf_dynverref (abfd) != 0
1179 	      && elf_tdata (abfd)->verref == NULL))
1180 	{
1181 	  if (!_bfd_elf_slurp_version_tables (abfd, FALSE))
1182 	    return -1;
1183 	}
1184     }
1185 
1186   ebd = get_elf_backend_data (abfd);
1187   symcount = hdr->sh_size / sizeof (Elf_External_Sym);
1188   if (symcount == 0)
1189     sym = symbase = NULL;
1190   else
1191     {
1192       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, symcount, 0,
1193 				      NULL, NULL, NULL);
1194       if (isymbuf == NULL)
1195 	return -1;
1196 
1197       symbase = (elf_symbol_type *) bfd_zalloc2 (abfd, symcount,
1198 						 sizeof (elf_symbol_type));
1199       if (symbase == (elf_symbol_type *) NULL)
1200 	goto error_return;
1201 
1202       /* Read the raw ELF version symbol information.  */
1203       if (verhdr != NULL
1204 	  && verhdr->sh_size / sizeof (Elf_External_Versym) != symcount)
1205 	{
1206 	  _bfd_error_handler
1207 	    /* xgettext:c-format */
1208 	    (_("%pB: version count (%" PRId64 ")"
1209 	       " does not match symbol count (%ld)"),
1210 	     abfd,
1211 	     (int64_t) (verhdr->sh_size / sizeof (Elf_External_Versym)),
1212 	     symcount);
1213 
1214 	  /* Slurp in the symbols without the version information,
1215 	     since that is more helpful than just quitting.  */
1216 	  verhdr = NULL;
1217 	}
1218 
1219       if (verhdr != NULL)
1220 	{
1221 	  if (bfd_seek (abfd, verhdr->sh_offset, SEEK_SET) != 0)
1222 	    goto error_return;
1223 
1224 	  xverbuf = (Elf_External_Versym *) bfd_malloc (verhdr->sh_size);
1225 	  if (xverbuf == NULL && verhdr->sh_size != 0)
1226 	    goto error_return;
1227 
1228 	  if (bfd_bread (xverbuf, verhdr->sh_size, abfd) != verhdr->sh_size)
1229 	    goto error_return;
1230 	}
1231 
1232       /* Skip first symbol, which is a null dummy.  */
1233       xver = xverbuf;
1234       if (xver != NULL)
1235 	++xver;
1236       isymend = isymbuf + symcount;
1237       for (isym = isymbuf + 1, sym = symbase; isym < isymend; isym++, sym++)
1238 	{
1239 	  memcpy (&sym->internal_elf_sym, isym, sizeof (Elf_Internal_Sym));
1240 
1241 	  sym->symbol.the_bfd = abfd;
1242 	  sym->symbol.name = bfd_elf_sym_name (abfd, hdr, isym, NULL);
1243 	  sym->symbol.value = isym->st_value;
1244 
1245 	  if (isym->st_shndx == SHN_UNDEF)
1246 	    {
1247 	      sym->symbol.section = bfd_und_section_ptr;
1248 	    }
1249 	  else if (isym->st_shndx == SHN_ABS)
1250 	    {
1251 	      sym->symbol.section = bfd_abs_section_ptr;
1252 	    }
1253 	  else if (isym->st_shndx == SHN_COMMON)
1254 	    {
1255 	      sym->symbol.section = bfd_com_section_ptr;
1256 	      if ((abfd->flags & BFD_PLUGIN) != 0)
1257 		{
1258 		  asection *xc = bfd_get_section_by_name (abfd, "COMMON");
1259 
1260 		  if (xc == NULL)
1261 		    {
1262 		      flagword flags = (SEC_ALLOC | SEC_IS_COMMON | SEC_KEEP
1263 					| SEC_EXCLUDE);
1264 		      xc = bfd_make_section_with_flags (abfd, "COMMON", flags);
1265 		      if (xc == NULL)
1266 			goto error_return;
1267 		    }
1268 		  sym->symbol.section = xc;
1269 		}
1270 	      /* Elf puts the alignment into the `value' field, and
1271 		 the size into the `size' field.  BFD wants to see the
1272 		 size in the value field, and doesn't care (at the
1273 		 moment) about the alignment.  */
1274 	      sym->symbol.value = isym->st_size;
1275 	    }
1276 	  else
1277 	    {
1278 	      sym->symbol.section
1279 		= bfd_section_from_elf_index (abfd, isym->st_shndx);
1280 	      if (sym->symbol.section == NULL)
1281 		{
1282 		  /* This symbol is in a section for which we did not
1283 		     create a BFD section.  Just use bfd_abs_section,
1284 		     although it is wrong.  FIXME.  */
1285 		  sym->symbol.section = bfd_abs_section_ptr;
1286 		}
1287 	    }
1288 
1289 	  /* If this is a relocatable file, then the symbol value is
1290 	     already section relative.  */
1291 	  if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
1292 	    sym->symbol.value -= sym->symbol.section->vma;
1293 
1294 	  switch (ELF_ST_BIND (isym->st_info))
1295 	    {
1296 	    case STB_LOCAL:
1297 	      sym->symbol.flags |= BSF_LOCAL;
1298 	      break;
1299 	    case STB_GLOBAL:
1300 	      if (isym->st_shndx != SHN_UNDEF && isym->st_shndx != SHN_COMMON)
1301 		sym->symbol.flags |= BSF_GLOBAL;
1302 	      break;
1303 	    case STB_WEAK:
1304 	      sym->symbol.flags |= BSF_WEAK;
1305 	      break;
1306 	    case STB_GNU_UNIQUE:
1307 	      sym->symbol.flags |= BSF_GNU_UNIQUE;
1308 	      break;
1309 	    }
1310 
1311 	  switch (ELF_ST_TYPE (isym->st_info))
1312 	    {
1313 	    case STT_SECTION:
1314 	      sym->symbol.flags |= BSF_SECTION_SYM | BSF_DEBUGGING;
1315 	      break;
1316 	    case STT_FILE:
1317 	      sym->symbol.flags |= BSF_FILE | BSF_DEBUGGING;
1318 	      break;
1319 	    case STT_FUNC:
1320 	      sym->symbol.flags |= BSF_FUNCTION;
1321 	      break;
1322 	    case STT_COMMON:
1323 	      /* FIXME: Do we have to put the size field into the value field
1324 		 as we do with symbols in SHN_COMMON sections (see above) ?  */
1325 	      sym->symbol.flags |= BSF_ELF_COMMON;
1326 	      /* Fall through.  */
1327 	    case STT_OBJECT:
1328 	      sym->symbol.flags |= BSF_OBJECT;
1329 	      break;
1330 	    case STT_TLS:
1331 	      sym->symbol.flags |= BSF_THREAD_LOCAL;
1332 	      break;
1333 	    case STT_RELC:
1334 	      sym->symbol.flags |= BSF_RELC;
1335 	      break;
1336 	    case STT_SRELC:
1337 	      sym->symbol.flags |= BSF_SRELC;
1338 	      break;
1339 	    case STT_GNU_IFUNC:
1340 	      sym->symbol.flags |= BSF_GNU_INDIRECT_FUNCTION;
1341 	      break;
1342 	    }
1343 
1344 	  if (dynamic)
1345 	    sym->symbol.flags |= BSF_DYNAMIC;
1346 
1347 	  if (xver != NULL)
1348 	    {
1349 	      Elf_Internal_Versym iversym;
1350 
1351 	      _bfd_elf_swap_versym_in (abfd, xver, &iversym);
1352 	      sym->version = iversym.vs_vers;
1353 	      xver++;
1354 	    }
1355 
1356 	  /* Do some backend-specific processing on this symbol.  */
1357 	  if (ebd->elf_backend_symbol_processing)
1358 	    (*ebd->elf_backend_symbol_processing) (abfd, &sym->symbol);
1359 	}
1360     }
1361 
1362   /* Do some backend-specific processing on this symbol table.  */
1363   if (ebd->elf_backend_symbol_table_processing)
1364     (*ebd->elf_backend_symbol_table_processing) (abfd, symbase, symcount);
1365 
1366   /* We rely on the zalloc to clear out the final symbol entry.  */
1367 
1368   symcount = sym - symbase;
1369 
1370   /* Fill in the user's symbol pointer vector if needed.  */
1371   if (symptrs)
1372     {
1373       long l = symcount;
1374 
1375       sym = symbase;
1376       while (l-- > 0)
1377 	{
1378 	  *symptrs++ = &sym->symbol;
1379 	  sym++;
1380 	}
1381       *symptrs = 0;		/* Final null pointer */
1382     }
1383 
1384   if (xverbuf != NULL)
1385     free (xverbuf);
1386   if (isymbuf != NULL && hdr->contents != (unsigned char *) isymbuf)
1387     free (isymbuf);
1388   return symcount;
1389 
1390 error_return:
1391   if (xverbuf != NULL)
1392     free (xverbuf);
1393   if (isymbuf != NULL && hdr->contents != (unsigned char *) isymbuf)
1394     free (isymbuf);
1395   return -1;
1396 }
1397 
1398 /* Read relocations for ASECT from REL_HDR.  There are RELOC_COUNT of
1399    them.  */
1400 
1401 static bfd_boolean
1402 elf_slurp_reloc_table_from_section (bfd *abfd,
1403 				    asection *asect,
1404 				    Elf_Internal_Shdr *rel_hdr,
1405 				    bfd_size_type reloc_count,
1406 				    arelent *relents,
1407 				    asymbol **symbols,
1408 				    bfd_boolean dynamic)
1409 {
1410   const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
1411   void *allocated = NULL;
1412   bfd_byte *native_relocs;
1413   arelent *relent;
1414   unsigned int i;
1415   int entsize;
1416   unsigned int symcount;
1417 
1418   allocated = bfd_malloc (rel_hdr->sh_size);
1419   if (allocated == NULL)
1420     goto error_return;
1421 
1422   if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0
1423       || (bfd_bread (allocated, rel_hdr->sh_size, abfd)
1424 	  != rel_hdr->sh_size))
1425     goto error_return;
1426 
1427   native_relocs = (bfd_byte *) allocated;
1428 
1429   entsize = rel_hdr->sh_entsize;
1430   BFD_ASSERT (entsize == sizeof (Elf_External_Rel)
1431 	      || entsize == sizeof (Elf_External_Rela));
1432 
1433   if (dynamic)
1434     symcount = bfd_get_dynamic_symcount (abfd);
1435   else
1436     symcount = bfd_get_symcount (abfd);
1437 
1438   for (i = 0, relent = relents;
1439        i < reloc_count;
1440        i++, relent++, native_relocs += entsize)
1441     {
1442       bfd_boolean res;
1443       Elf_Internal_Rela rela;
1444 
1445       if (entsize == sizeof (Elf_External_Rela))
1446 	elf_swap_reloca_in (abfd, native_relocs, &rela);
1447       else
1448 	elf_swap_reloc_in (abfd, native_relocs, &rela);
1449 
1450       /* The address of an ELF reloc is section relative for an object
1451 	 file, and absolute for an executable file or shared library.
1452 	 The address of a normal BFD reloc is always section relative,
1453 	 and the address of a dynamic reloc is absolute..  */
1454       if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0 || dynamic)
1455 	relent->address = rela.r_offset;
1456       else
1457 	relent->address = rela.r_offset - asect->vma;
1458 
1459       if (ELF_R_SYM (rela.r_info) == STN_UNDEF)
1460 	/* FIXME: This and the error case below mean that we have a
1461 	   symbol on relocs that is not elf_symbol_type.  */
1462 	relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
1463       else if (ELF_R_SYM (rela.r_info) > symcount)
1464 	{
1465 	  _bfd_error_handler
1466 	    /* xgettext:c-format */
1467 	    (_("%pB(%pA): relocation %d has invalid symbol index %ld"),
1468 	     abfd, asect, i, (long) ELF_R_SYM (rela.r_info));
1469 	  bfd_set_error (bfd_error_bad_value);
1470 	  relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
1471 	}
1472       else
1473 	{
1474 	  asymbol **ps;
1475 
1476 	  ps = symbols + ELF_R_SYM (rela.r_info) - 1;
1477 
1478 	  relent->sym_ptr_ptr = ps;
1479 	}
1480 
1481       relent->addend = rela.r_addend;
1482 
1483       if ((entsize == sizeof (Elf_External_Rela)
1484 	   && ebd->elf_info_to_howto != NULL)
1485 	  || ebd->elf_info_to_howto_rel == NULL)
1486 	res = ebd->elf_info_to_howto (abfd, relent, &rela);
1487       else
1488 	res = ebd->elf_info_to_howto_rel (abfd, relent, &rela);
1489 
1490       if (! res || relent->howto == NULL)
1491 	goto error_return;
1492     }
1493 
1494   if (allocated != NULL)
1495     free (allocated);
1496   return TRUE;
1497 
1498  error_return:
1499   if (allocated != NULL)
1500     free (allocated);
1501   return FALSE;
1502 }
1503 
1504 /* Read in and swap the external relocs.  */
1505 
1506 bfd_boolean
1507 elf_slurp_reloc_table (bfd *abfd,
1508 		       asection *asect,
1509 		       asymbol **symbols,
1510 		       bfd_boolean dynamic)
1511 {
1512   struct bfd_elf_section_data * const d = elf_section_data (asect);
1513   Elf_Internal_Shdr *rel_hdr;
1514   Elf_Internal_Shdr *rel_hdr2;
1515   bfd_size_type reloc_count;
1516   bfd_size_type reloc_count2;
1517   arelent *relents;
1518 
1519   if (asect->relocation != NULL)
1520     return TRUE;
1521 
1522   if (! dynamic)
1523     {
1524       if ((asect->flags & SEC_RELOC) == 0
1525 	  || asect->reloc_count == 0)
1526 	return TRUE;
1527 
1528       rel_hdr = d->rel.hdr;
1529       reloc_count = rel_hdr ? NUM_SHDR_ENTRIES (rel_hdr) : 0;
1530       rel_hdr2 = d->rela.hdr;
1531       reloc_count2 = rel_hdr2 ? NUM_SHDR_ENTRIES (rel_hdr2) : 0;
1532 
1533       /* PR 17512: file: 0b4f81b7.  */
1534       if (asect->reloc_count != reloc_count + reloc_count2)
1535 	return FALSE;
1536       BFD_ASSERT ((rel_hdr && asect->rel_filepos == rel_hdr->sh_offset)
1537 		  || (rel_hdr2 && asect->rel_filepos == rel_hdr2->sh_offset));
1538 
1539     }
1540   else
1541     {
1542       /* Note that ASECT->RELOC_COUNT tends not to be accurate in this
1543 	 case because relocations against this section may use the
1544 	 dynamic symbol table, and in that case bfd_section_from_shdr
1545 	 in elf.c does not update the RELOC_COUNT.  */
1546       if (asect->size == 0)
1547 	return TRUE;
1548 
1549       rel_hdr = &d->this_hdr;
1550       reloc_count = NUM_SHDR_ENTRIES (rel_hdr);
1551       rel_hdr2 = NULL;
1552       reloc_count2 = 0;
1553     }
1554 
1555   relents = (arelent *) bfd_alloc2 (abfd, reloc_count + reloc_count2,
1556 				    sizeof (arelent));
1557   if (relents == NULL)
1558     return FALSE;
1559 
1560   if (rel_hdr
1561       && !elf_slurp_reloc_table_from_section (abfd, asect,
1562 					      rel_hdr, reloc_count,
1563 					      relents,
1564 					      symbols, dynamic))
1565     return FALSE;
1566 
1567   if (rel_hdr2
1568       && !elf_slurp_reloc_table_from_section (abfd, asect,
1569 					      rel_hdr2, reloc_count2,
1570 					      relents + reloc_count,
1571 					      symbols, dynamic))
1572     return FALSE;
1573 
1574   asect->relocation = relents;
1575   return TRUE;
1576 }
1577 
1578 #if DEBUG & 2
1579 static void
1580 elf_debug_section (int num, Elf_Internal_Shdr *hdr)
1581 {
1582   fprintf (stderr, "\nSection#%d '%s' 0x%.8lx\n", num,
1583 	   hdr->bfd_section != NULL ? hdr->bfd_section->name : "",
1584 	   (long) hdr);
1585   fprintf (stderr,
1586 	   "sh_name      = %ld\tsh_type      = %ld\tsh_flags     = %ld\n",
1587 	   (long) hdr->sh_name,
1588 	   (long) hdr->sh_type,
1589 	   (long) hdr->sh_flags);
1590   fprintf (stderr,
1591 	   "sh_addr      = %ld\tsh_offset    = %ld\tsh_size      = %ld\n",
1592 	   (long) hdr->sh_addr,
1593 	   (long) hdr->sh_offset,
1594 	   (long) hdr->sh_size);
1595   fprintf (stderr,
1596 	   "sh_link      = %ld\tsh_info      = %ld\tsh_addralign = %ld\n",
1597 	   (long) hdr->sh_link,
1598 	   (long) hdr->sh_info,
1599 	   (long) hdr->sh_addralign);
1600   fprintf (stderr, "sh_entsize   = %ld\n",
1601 	   (long) hdr->sh_entsize);
1602   fflush (stderr);
1603 }
1604 #endif
1605 
1606 #if DEBUG & 1
1607 static void
1608 elf_debug_file (Elf_Internal_Ehdr *ehdrp)
1609 {
1610   fprintf (stderr, "e_entry      = 0x%.8lx\n", (long) ehdrp->e_entry);
1611   fprintf (stderr, "e_phoff      = %ld\n", (long) ehdrp->e_phoff);
1612   fprintf (stderr, "e_phnum      = %ld\n", (long) ehdrp->e_phnum);
1613   fprintf (stderr, "e_phentsize  = %ld\n", (long) ehdrp->e_phentsize);
1614   fprintf (stderr, "e_shoff      = %ld\n", (long) ehdrp->e_shoff);
1615   fprintf (stderr, "e_shnum      = %ld\n", (long) ehdrp->e_shnum);
1616   fprintf (stderr, "e_shentsize  = %ld\n", (long) ehdrp->e_shentsize);
1617 }
1618 #endif
1619 
1620 /* Create a new BFD as if by bfd_openr.  Rather than opening a file,
1621    reconstruct an ELF file by reading the segments out of remote
1622    memory based on the ELF file header at EHDR_VMA and the ELF program
1623    headers it points to.  If non-zero, SIZE is the known extent of the
1624    object.  If not null, *LOADBASEP is filled in with the difference
1625    between the VMAs from which the segments were read, and the VMAs
1626    the file headers (and hence BFD's idea of each section's VMA) put
1627    them at.
1628 
1629    The function TARGET_READ_MEMORY is called to copy LEN bytes from
1630    the remote memory at target address VMA into the local buffer at
1631    MYADDR; it should return zero on success or an `errno' code on
1632    failure.  TEMPL must be a BFD for a target with the word size and
1633    byte order found in the remote memory.  */
1634 
1635 bfd *
1636 NAME(_bfd_elf,bfd_from_remote_memory)
1637   (bfd *templ,
1638    bfd_vma ehdr_vma,
1639    bfd_size_type size,
1640    bfd_vma *loadbasep,
1641    int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
1642 {
1643   Elf_External_Ehdr x_ehdr;	/* Elf file header, external form */
1644   Elf_Internal_Ehdr i_ehdr;	/* Elf file header, internal form */
1645   Elf_External_Phdr *x_phdrs;
1646   Elf_Internal_Phdr *i_phdrs, *last_phdr, *first_phdr;
1647   bfd *nbfd;
1648   struct bfd_in_memory *bim;
1649   bfd_byte *contents;
1650   int err;
1651   unsigned int i;
1652   bfd_vma high_offset;
1653   bfd_vma shdr_end;
1654   bfd_vma loadbase;
1655   char *filename;
1656 
1657   /* Read in the ELF header in external format.  */
1658   err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr, sizeof x_ehdr);
1659   if (err)
1660     {
1661       bfd_set_error (bfd_error_system_call);
1662       errno = err;
1663       return NULL;
1664     }
1665 
1666   /* Now check to see if we have a valid ELF file, and one that BFD can
1667      make use of.  The magic number must match, the address size ('class')
1668      and byte-swapping must match our XVEC entry.  */
1669 
1670   if (! elf_file_p (&x_ehdr)
1671       || x_ehdr.e_ident[EI_VERSION] != EV_CURRENT
1672       || x_ehdr.e_ident[EI_CLASS] != ELFCLASS)
1673     {
1674       bfd_set_error (bfd_error_wrong_format);
1675       return NULL;
1676     }
1677 
1678   /* Check that file's byte order matches xvec's */
1679   switch (x_ehdr.e_ident[EI_DATA])
1680     {
1681     case ELFDATA2MSB:		/* Big-endian */
1682       if (! bfd_header_big_endian (templ))
1683 	{
1684 	  bfd_set_error (bfd_error_wrong_format);
1685 	  return NULL;
1686 	}
1687       break;
1688     case ELFDATA2LSB:		/* Little-endian */
1689       if (! bfd_header_little_endian (templ))
1690 	{
1691 	  bfd_set_error (bfd_error_wrong_format);
1692 	  return NULL;
1693 	}
1694       break;
1695     case ELFDATANONE:		/* No data encoding specified */
1696     default:			/* Unknown data encoding specified */
1697       bfd_set_error (bfd_error_wrong_format);
1698       return NULL;
1699     }
1700 
1701   elf_swap_ehdr_in (templ, &x_ehdr, &i_ehdr);
1702 
1703   /* The file header tells where to find the program headers.
1704      These are what we use to actually choose what to read.  */
1705 
1706   if (i_ehdr.e_phentsize != sizeof (Elf_External_Phdr) || i_ehdr.e_phnum == 0)
1707     {
1708       bfd_set_error (bfd_error_wrong_format);
1709       return NULL;
1710     }
1711 
1712   x_phdrs
1713     = (Elf_External_Phdr *) bfd_malloc2 (i_ehdr.e_phnum,
1714 					 sizeof (*x_phdrs) + sizeof (*i_phdrs));
1715   if (x_phdrs == NULL)
1716     return NULL;
1717   err = target_read_memory (ehdr_vma + i_ehdr.e_phoff, (bfd_byte *) x_phdrs,
1718 			    i_ehdr.e_phnum * sizeof x_phdrs[0]);
1719   if (err)
1720     {
1721       free (x_phdrs);
1722       bfd_set_error (bfd_error_system_call);
1723       errno = err;
1724       return NULL;
1725     }
1726   i_phdrs = (Elf_Internal_Phdr *) &x_phdrs[i_ehdr.e_phnum];
1727 
1728   high_offset = 0;
1729   loadbase = 0;
1730   first_phdr = NULL;
1731   last_phdr = NULL;
1732   for (i = 0; i < i_ehdr.e_phnum; ++i)
1733     {
1734       elf_swap_phdr_in (templ, &x_phdrs[i], &i_phdrs[i]);
1735       if (i_phdrs[i].p_type == PT_LOAD)
1736 	{
1737 	  bfd_vma segment_end = i_phdrs[i].p_offset + i_phdrs[i].p_filesz;
1738 
1739 	  if (segment_end > high_offset)
1740 	    {
1741 	      high_offset = segment_end;
1742 	      last_phdr = &i_phdrs[i];
1743 	    }
1744 
1745 	  /* If this program header covers offset zero, where the file
1746 	     header sits, then we can figure out the loadbase.  */
1747 	  if (first_phdr == NULL)
1748 	    {
1749 	      bfd_vma p_offset = i_phdrs[i].p_offset;
1750 	      bfd_vma p_vaddr = i_phdrs[i].p_vaddr;
1751 
1752 	      if (i_phdrs[i].p_align > 1)
1753 		{
1754 		  p_offset &= -i_phdrs[i].p_align;
1755 		  p_vaddr &= -i_phdrs[i].p_align;
1756 		}
1757 	      if (p_offset == 0)
1758 		{
1759 		  loadbase = ehdr_vma - p_vaddr;
1760 		  first_phdr = &i_phdrs[i];
1761 		}
1762 	    }
1763 	}
1764     }
1765   if (high_offset == 0)
1766     {
1767       /* There were no PT_LOAD segments, so we don't have anything to read.  */
1768       free (x_phdrs);
1769       bfd_set_error (bfd_error_wrong_format);
1770       return NULL;
1771     }
1772 
1773   shdr_end = 0;
1774   if (i_ehdr.e_shoff != 0 && i_ehdr.e_shnum != 0 && i_ehdr.e_shentsize != 0)
1775     {
1776       shdr_end = i_ehdr.e_shoff + i_ehdr.e_shnum * i_ehdr.e_shentsize;
1777 
1778       if (last_phdr->p_filesz != last_phdr->p_memsz)
1779 	{
1780 	  /* If the last PT_LOAD header has a bss area then ld.so will
1781 	     have cleared anything past p_filesz, zapping the section
1782 	     headers.  */
1783 	}
1784       else if (size >= shdr_end)
1785 	high_offset = size;
1786       else
1787 	{
1788 	  bfd_vma page_size = get_elf_backend_data (templ)->minpagesize;
1789 	  bfd_vma segment_end = last_phdr->p_offset + last_phdr->p_filesz;
1790 
1791 	  /* Assume we loaded full pages, allowing us to sometimes see
1792 	     section headers.  */
1793 	  if (page_size > 1 && shdr_end > segment_end)
1794 	    {
1795 	      bfd_vma page_end = (segment_end + page_size - 1) & -page_size;
1796 
1797 	      if (page_end >= shdr_end)
1798 		/* Whee, section headers covered.  */
1799 		high_offset = shdr_end;
1800 	    }
1801 	}
1802     }
1803 
1804   /* Now we know the size of the whole image we want read in.  */
1805   contents = (bfd_byte *) bfd_zmalloc (high_offset);
1806   if (contents == NULL)
1807     {
1808       free (x_phdrs);
1809       return NULL;
1810     }
1811 
1812   for (i = 0; i < i_ehdr.e_phnum; ++i)
1813     if (i_phdrs[i].p_type == PT_LOAD)
1814       {
1815 	bfd_vma start = i_phdrs[i].p_offset;
1816 	bfd_vma end = start + i_phdrs[i].p_filesz;
1817 	bfd_vma vaddr = i_phdrs[i].p_vaddr;
1818 
1819 	/* Extend the beginning of the first pt_load to cover file
1820 	   header and program headers, if we proved earlier that its
1821 	   aligned offset is 0.  */
1822 	if (first_phdr == &i_phdrs[i])
1823 	  {
1824 	    vaddr -= start;
1825 	    start = 0;
1826 	  }
1827 	/* Extend the end of the last pt_load to cover section headers.  */
1828 	if (last_phdr == &i_phdrs[i])
1829 	  end = high_offset;
1830 	err = target_read_memory (loadbase + vaddr,
1831 				  contents + start, end - start);
1832 	if (err)
1833 	  {
1834 	    free (x_phdrs);
1835 	    free (contents);
1836 	    bfd_set_error (bfd_error_system_call);
1837 	    errno = err;
1838 	    return NULL;
1839 	  }
1840       }
1841   free (x_phdrs);
1842 
1843   /* If the segments visible in memory didn't include the section headers,
1844      then clear them from the file header.  */
1845   if (high_offset < shdr_end)
1846     {
1847       memset (&x_ehdr.e_shoff, 0, sizeof x_ehdr.e_shoff);
1848       memset (&x_ehdr.e_shnum, 0, sizeof x_ehdr.e_shnum);
1849       memset (&x_ehdr.e_shstrndx, 0, sizeof x_ehdr.e_shstrndx);
1850     }
1851 
1852   /* This will normally have been in the first PT_LOAD segment.  But it
1853      conceivably could be missing, and we might have just changed it.  */
1854   memcpy (contents, &x_ehdr, sizeof x_ehdr);
1855 
1856   /* Now we have a memory image of the ELF file contents.  Make a BFD.  */
1857   bim = (struct bfd_in_memory *) bfd_malloc (sizeof (struct bfd_in_memory));
1858   if (bim == NULL)
1859     {
1860       free (contents);
1861       return NULL;
1862     }
1863   filename = bfd_strdup ("<in-memory>");
1864   if (filename == NULL)
1865     {
1866       free (bim);
1867       free (contents);
1868       return NULL;
1869     }
1870   nbfd = _bfd_new_bfd ();
1871   if (nbfd == NULL)
1872     {
1873       free (filename);
1874       free (bim);
1875       free (contents);
1876       return NULL;
1877     }
1878   nbfd->filename = filename;
1879   nbfd->xvec = templ->xvec;
1880   bim->size = high_offset;
1881   bim->buffer = contents;
1882   nbfd->iostream = bim;
1883   nbfd->flags = BFD_IN_MEMORY;
1884   nbfd->iovec = &_bfd_memory_iovec;
1885   nbfd->origin = 0;
1886   nbfd->direction = read_direction;
1887   nbfd->mtime = time (NULL);
1888   nbfd->mtime_set = TRUE;
1889 
1890   if (loadbasep)
1891     *loadbasep = loadbase;
1892   return nbfd;
1893 }
1894 
1895 /* Function for ELF_R_INFO.  */
1896 
1897 bfd_vma
1898 NAME(elf,r_info) (bfd_vma sym, bfd_vma type)
1899 {
1900   return ELF_R_INFO (sym, type);
1901 }
1902 
1903 /* Function for ELF_R_SYM.  */
1904 
1905 bfd_vma
1906 NAME(elf,r_sym) (bfd_vma r_info)
1907 {
1908   return ELF_R_SYM (r_info);
1909 }
1910 
1911 #include "elfcore.h"
1912 
1913 /* Size-dependent data and functions.  */
1914 const struct elf_size_info NAME(_bfd_elf,size_info) = {
1915   sizeof (Elf_External_Ehdr),
1916   sizeof (Elf_External_Phdr),
1917   sizeof (Elf_External_Shdr),
1918   sizeof (Elf_External_Rel),
1919   sizeof (Elf_External_Rela),
1920   sizeof (Elf_External_Sym),
1921   sizeof (Elf_External_Dyn),
1922   sizeof (Elf_External_Note),
1923   4,
1924   1,
1925   ARCH_SIZE, LOG_FILE_ALIGN,
1926   ELFCLASS, EV_CURRENT,
1927   elf_write_out_phdrs,
1928   elf_write_shdrs_and_ehdr,
1929   elf_checksum_contents,
1930   elf_write_relocs,
1931   elf_swap_symbol_in,
1932   elf_swap_symbol_out,
1933   elf_slurp_reloc_table,
1934   elf_slurp_symbol_table,
1935   elf_swap_dyn_in,
1936   elf_swap_dyn_out,
1937   elf_swap_reloc_in,
1938   elf_swap_reloc_out,
1939   elf_swap_reloca_in,
1940   elf_swap_reloca_out
1941 };
1942