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