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