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