Merge from vendor branch BZIP:
[dragonfly.git] / contrib / binutils-2.17 / bfd / elfcode.h
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 \f
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 \f
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 \f
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 \f
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 \f
1805 #include "elfcore.h"
1806 \f
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 };