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 
17 This file is part of BFD, the Binary File Descriptor library.
18 
19 This program is free software; you can redistribute it and/or modify
20 it under the terms of the GNU General Public License as published by
21 the Free Software Foundation; either version 2 of the License, or
22 (at your option) any later version.
23 
24 This program is distributed in the hope that it will be useful,
25 but WITHOUT ANY WARRANTY; without even the implied warranty of
26 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27 GNU General Public License for more details.
28 
29 You should have received a copy of the GNU General Public License
30 along with this program; if not, write to the Free Software
31 Foundation, Inc., 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
143 static void elf_debug_section (int, Elf_Internal_Shdr *);
144 static void elf_debug_file (Elf_Internal_Ehdr *);
145 static char *elf_symbol_flags (flagword);
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 
168 void
169 elf_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 
198 void
199 elf_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 
225 static void
226 elf_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 
253 static void
254 elf_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 
289 static void
290 elf_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 
316 static void
317 elf_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 
337 void
338 elf_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 
362 void
363 elf_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.  */
379 void
380 elf_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 
390 void
391 elf_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.  */
402 void
403 elf_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 
412 void
413 elf_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 
423 void
424 elf_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 
434 void
435 elf_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 
452 static inline bfd_boolean
453 elf_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 
463 static inline bfd_boolean
464 valid_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 
488 const bfd_target *
489 elf_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 
873 void
874 elf_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 
986 int
987 elf_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 
1005 bfd_boolean
1006 elf_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 
1062 long
1063 elf_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 
1286 error_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 
1297 static bfd_boolean
1298 elf_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 
1395 bfd_boolean
1396 elf_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
1466 static void
1467 elf_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 
1492 static void
1493 elf_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 
1504 static char *
1505 elf_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 
1589 bfd *
1590 NAME(_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.  */
1808 const 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