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