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