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
147static void elf_debug_section (int, Elf_Internal_Shdr *);
148#endif
149#if DEBUG & 1
150static 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
173bfd_boolean
174elf_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
207void
208elf_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
234static void
235elf_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
262static void
263elf_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
301static void
302elf_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
336static void
337elf_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
357void
358elf_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
382void
383elf_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.  */
405void
406elf_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
416void
417elf_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.  */
428void
429elf_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
438void
439elf_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
449void
450elf_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
460void
461elf_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
478static inline bfd_boolean
479elf_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
495const bfd_target *
496elf_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
865void
866elf_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
987int
988elf_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
1007bfd_boolean
1008elf_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
1063bfd_boolean
1064elf_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
1139long
1140elf_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
1390error_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
1401static bfd_boolean
1402elf_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
1506bfd_boolean
1507elf_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
1579static void
1580elf_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
1607static void
1608elf_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
1635bfd *
1636NAME(_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
1897bfd_vma
1898NAME(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
1905bfd_vma
1906NAME(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.  */
1914const 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