]> Git Repo - binutils.git/blob - bfd/elfcode.h
Comment change.
[binutils.git] / bfd / elfcode.h
1 /* ELF executable support for BFD.
2    Copyright 1991, 1992, 1993, 1994 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 2 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
31
32 /* Problems and other issues to resolve.
33
34    (1)  BFD expects there to be some fixed number of "sections" in
35         the object file.  I.E. there is a "section_count" variable in the
36         bfd structure which contains the number of sections.  However, ELF
37         supports multiple "views" of a file.  In particular, with current
38         implementations, executable files typically have two tables, a
39         program header table and a section header table, both of which
40         partition the executable.
41
42         In ELF-speak, the "linking view" of the file uses the section header
43         table to access "sections" within the file, and the "execution view"
44         uses the program header table to access "segments" within the file.
45         "Segments" typically may contain all the data from one or more
46         "sections".
47
48         Note that the section header table is optional in ELF executables,
49         but it is this information that is most useful to gdb.  If the
50         section header table is missing, then gdb should probably try
51         to make do with the program header table.  (FIXME)
52
53    (2)  The code in this file is compiled twice, once in 32-bit mode and
54         once in 64-bit mode.  More of it should be made size-independent
55         and moved into elf.c.
56
57    (3)  ELF section symbols are handled rather sloppily now.  This should
58         be cleaned up, and ELF section symbols reconciled with BFD section
59         symbols.
60  */
61
62 #include <string.h>             /* For strrchr and friends */
63 #include "bfd.h"
64 #include "sysdep.h"
65 #include "bfdlink.h"
66 #include "libbfd.h"
67 #include "libelf.h"
68
69 /* Renaming structures, typedefs, macros and functions to be size-specific.  */
70 #define Elf_External_Ehdr       NAME(Elf,External_Ehdr)
71 #define Elf_External_Sym        NAME(Elf,External_Sym)
72 #define Elf_External_Shdr       NAME(Elf,External_Shdr)
73 #define Elf_External_Phdr       NAME(Elf,External_Phdr)
74 #define Elf_External_Rel        NAME(Elf,External_Rel)
75 #define Elf_External_Rela       NAME(Elf,External_Rela)
76 #define Elf_External_Dyn        NAME(Elf,External_Dyn)
77
78 #define elf_core_file_failing_command   NAME(bfd_elf,core_file_failing_command)
79 #define elf_core_file_failing_signal    NAME(bfd_elf,core_file_failing_signal)
80 #define elf_core_file_matches_executable_p \
81   NAME(bfd_elf,core_file_matches_executable_p)
82 #define elf_object_p                    NAME(bfd_elf,object_p)
83 #define elf_core_file_p                 NAME(bfd_elf,core_file_p)
84 #define elf_get_symtab_upper_bound      NAME(bfd_elf,get_symtab_upper_bound)
85 #define elf_get_dynamic_symtab_upper_bound \
86   NAME(bfd_elf,get_dynamic_symtab_upper_bound)
87 #define elf_swap_reloc_in               NAME(bfd_elf,swap_reloc_in)
88 #define elf_swap_reloca_in              NAME(bfd_elf,swap_reloca_in)
89 #define elf_swap_reloc_out              NAME(bfd_elf,swap_reloc_out)
90 #define elf_swap_reloca_out             NAME(bfd_elf,swap_reloca_out)
91 #define elf_swap_dyn_in                 NAME(bfd_elf,swap_dyn_in)
92 #define elf_swap_dyn_out                NAME(bfd_elf,swap_dyn_out)
93 #define elf_get_reloc_upper_bound       NAME(bfd_elf,get_reloc_upper_bound)
94 #define elf_canonicalize_reloc          NAME(bfd_elf,canonicalize_reloc)
95 #define elf_get_symtab                  NAME(bfd_elf,get_symtab)
96 #define elf_canonicalize_dynamic_symtab \
97   NAME(bfd_elf,canonicalize_dynamic_symtab)
98 #define elf_make_empty_symbol           NAME(bfd_elf,make_empty_symbol)
99 #define elf_get_symbol_info             NAME(bfd_elf,get_symbol_info)
100 #define elf_print_symbol                NAME(bfd_elf,print_symbol)
101 #define elf_get_lineno                  NAME(bfd_elf,get_lineno)
102 #define elf_set_arch_mach               NAME(bfd_elf,set_arch_mach)
103 #define elf_find_nearest_line           NAME(bfd_elf,find_nearest_line)
104 #define elf_sizeof_headers              NAME(bfd_elf,sizeof_headers)
105 #define elf_set_section_contents        NAME(bfd_elf,set_section_contents)
106 #define elf_no_info_to_howto            NAME(bfd_elf,no_info_to_howto)
107 #define elf_no_info_to_howto_rel        NAME(bfd_elf,no_info_to_howto_rel)
108 #define elf_new_section_hook            NAME(bfd_elf,new_section_hook)
109 #define write_relocs                    NAME(bfd_elf,_write_relocs)
110 #define elf_find_section                NAME(bfd_elf,find_section)
111 #define elf_bfd_link_add_symbols        NAME(bfd_elf,bfd_link_add_symbols)
112 #define elf_add_dynamic_entry           NAME(bfd_elf,add_dynamic_entry)
113 #define elf_bfd_final_link              NAME(bfd_elf,bfd_final_link)
114
115 #if ARCH_SIZE == 64
116 #define ELF_R_INFO(X,Y) ELF64_R_INFO(X,Y)
117 #define ELF_R_SYM(X)    ELF64_R_SYM(X)
118 #define ELF_R_TYPE(X)   ELF64_R_TYPE(X)
119 #define ELFCLASS        ELFCLASS64
120 #define FILE_ALIGN      8
121 #define LOG_FILE_ALIGN  3
122 #endif
123 #if ARCH_SIZE == 32
124 #define ELF_R_INFO(X,Y) ELF32_R_INFO(X,Y)
125 #define ELF_R_SYM(X)    ELF32_R_SYM(X)
126 #define ELF_R_TYPE(X)   ELF32_R_TYPE(X)
127 #define ELFCLASS        ELFCLASS32
128 #define FILE_ALIGN      4
129 #define LOG_FILE_ALIGN  2
130 #endif
131
132 /* Forward declarations of static functions */
133
134 static unsigned long bfd_add_to_strtab
135   PARAMS ((bfd *, struct strtab *, const char *));
136 static asection *section_from_elf_index PARAMS ((bfd *, unsigned int));
137
138 static int elf_section_from_bfd_section PARAMS ((bfd *, struct sec *));
139
140 static long elf_slurp_symbol_table PARAMS ((bfd *, asymbol **, boolean));
141
142 static int elf_symbol_from_bfd_symbol PARAMS ((bfd *,
143                                              struct symbol_cache_entry **));
144
145 static boolean elf_compute_section_file_positions
146   PARAMS ((bfd *, struct bfd_link_info *));
147 static boolean prep_headers PARAMS ((bfd *));
148 static void elf_fake_sections PARAMS ((bfd *, asection *, PTR));
149 static boolean assign_section_numbers PARAMS ((bfd *));
150 static file_ptr align_file_position PARAMS ((file_ptr));
151 static file_ptr assign_file_position_for_section
152   PARAMS ((Elf_Internal_Shdr *, file_ptr, boolean));
153 static boolean assign_file_positions_except_relocs PARAMS ((bfd *, boolean));
154 static void assign_file_positions_for_relocs PARAMS ((bfd *));
155 static bfd_size_type get_program_header_size PARAMS ((bfd *));
156 static file_ptr map_program_segments
157   PARAMS ((bfd *, file_ptr, Elf_Internal_Shdr *, bfd_size_type));
158
159 static boolean elf_map_symbols PARAMS ((bfd *));
160 static boolean swap_out_syms PARAMS ((bfd *));
161
162 static boolean bfd_section_from_shdr PARAMS ((bfd *, unsigned int shindex));
163
164 #ifdef DEBUG
165 static void elf_debug_section PARAMS ((char *, int, Elf_Internal_Shdr *));
166 static void elf_debug_file PARAMS ((Elf_Internal_Ehdr *));
167 #endif
168
169 #define elf_string_from_elf_strtab(abfd,strindex) \
170      elf_string_from_elf_section(abfd,elf_elfheader(abfd)->e_shstrndx,strindex)
171 \f
172
173 /* Structure swapping routines */
174
175 /* Should perhaps use put_offset, put_word, etc.  For now, the two versions
176    can be handled by explicitly specifying 32 bits or "the long type".  */
177 #if ARCH_SIZE == 64
178 #define put_word        bfd_h_put_64
179 #define get_word        bfd_h_get_64
180 #endif
181 #if ARCH_SIZE == 32
182 #define put_word        bfd_h_put_32
183 #define get_word        bfd_h_get_32
184 #endif
185
186 /* Translate an ELF symbol in external format into an ELF symbol in internal
187    format. */
188
189 static void
190 elf_swap_symbol_in (abfd, src, dst)
191      bfd *abfd;
192      Elf_External_Sym *src;
193      Elf_Internal_Sym *dst;
194 {
195   dst->st_name = bfd_h_get_32 (abfd, (bfd_byte *) src->st_name);
196   dst->st_value = get_word (abfd, (bfd_byte *) src->st_value);
197   dst->st_size = get_word (abfd, (bfd_byte *) src->st_size);
198   dst->st_info = bfd_h_get_8 (abfd, (bfd_byte *) src->st_info);
199   dst->st_other = bfd_h_get_8 (abfd, (bfd_byte *) src->st_other);
200   dst->st_shndx = bfd_h_get_16 (abfd, (bfd_byte *) src->st_shndx);
201 }
202
203 /* Translate an ELF symbol in internal format into an ELF symbol in external
204    format. */
205
206 static void
207 elf_swap_symbol_out (abfd, src, dst)
208      bfd *abfd;
209      Elf_Internal_Sym *src;
210      Elf_External_Sym *dst;
211 {
212   bfd_h_put_32 (abfd, src->st_name, dst->st_name);
213   put_word (abfd, src->st_value, dst->st_value);
214   put_word (abfd, src->st_size, dst->st_size);
215   bfd_h_put_8 (abfd, src->st_info, dst->st_info);
216   bfd_h_put_8 (abfd, src->st_other, dst->st_other);
217   bfd_h_put_16 (abfd, src->st_shndx, dst->st_shndx);
218 }
219
220
221 /* Translate an ELF file header in external format into an ELF file header in
222    internal format. */
223
224 static void
225 elf_swap_ehdr_in (abfd, src, dst)
226      bfd *abfd;
227      Elf_External_Ehdr *src;
228      Elf_Internal_Ehdr *dst;
229 {
230   memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
231   dst->e_type = bfd_h_get_16 (abfd, (bfd_byte *) src->e_type);
232   dst->e_machine = bfd_h_get_16 (abfd, (bfd_byte *) src->e_machine);
233   dst->e_version = bfd_h_get_32 (abfd, (bfd_byte *) src->e_version);
234   dst->e_entry = get_word (abfd, (bfd_byte *) src->e_entry);
235   dst->e_phoff = get_word (abfd, (bfd_byte *) src->e_phoff);
236   dst->e_shoff = get_word (abfd, (bfd_byte *) src->e_shoff);
237   dst->e_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->e_flags);
238   dst->e_ehsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_ehsize);
239   dst->e_phentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phentsize);
240   dst->e_phnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phnum);
241   dst->e_shentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shentsize);
242   dst->e_shnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shnum);
243   dst->e_shstrndx = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shstrndx);
244 }
245
246 /* Translate an ELF file header in internal format into an ELF file header in
247    external format. */
248
249 static void
250 elf_swap_ehdr_out (abfd, src, dst)
251      bfd *abfd;
252      Elf_Internal_Ehdr *src;
253      Elf_External_Ehdr *dst;
254 {
255   memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
256   /* note that all elements of dst are *arrays of unsigned char* already... */
257   bfd_h_put_16 (abfd, src->e_type, dst->e_type);
258   bfd_h_put_16 (abfd, src->e_machine, dst->e_machine);
259   bfd_h_put_32 (abfd, src->e_version, dst->e_version);
260   put_word (abfd, src->e_entry, dst->e_entry);
261   put_word (abfd, src->e_phoff, dst->e_phoff);
262   put_word (abfd, src->e_shoff, dst->e_shoff);
263   bfd_h_put_32 (abfd, src->e_flags, dst->e_flags);
264   bfd_h_put_16 (abfd, src->e_ehsize, dst->e_ehsize);
265   bfd_h_put_16 (abfd, src->e_phentsize, dst->e_phentsize);
266   bfd_h_put_16 (abfd, src->e_phnum, dst->e_phnum);
267   bfd_h_put_16 (abfd, src->e_shentsize, dst->e_shentsize);
268   bfd_h_put_16 (abfd, src->e_shnum, dst->e_shnum);
269   bfd_h_put_16 (abfd, src->e_shstrndx, dst->e_shstrndx);
270 }
271
272
273 /* Translate an ELF section header table entry in external format into an
274    ELF section header table entry in internal format. */
275
276 static void
277 elf_swap_shdr_in (abfd, src, dst)
278      bfd *abfd;
279      Elf_External_Shdr *src;
280      Elf_Internal_Shdr *dst;
281 {
282   dst->sh_name = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_name);
283   dst->sh_type = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_type);
284   dst->sh_flags = get_word (abfd, (bfd_byte *) src->sh_flags);
285   dst->sh_addr = get_word (abfd, (bfd_byte *) src->sh_addr);
286   dst->sh_offset = get_word (abfd, (bfd_byte *) src->sh_offset);
287   dst->sh_size = get_word (abfd, (bfd_byte *) src->sh_size);
288   dst->sh_link = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_link);
289   dst->sh_info = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_info);
290   dst->sh_addralign = get_word (abfd, (bfd_byte *) src->sh_addralign);
291   dst->sh_entsize = get_word (abfd, (bfd_byte *) src->sh_entsize);
292   /* we haven't done any processing on it yet, so... */
293   dst->rawdata = (void *) 0;
294 }
295
296 /* Translate an ELF section header table entry in internal format into an
297    ELF section header table entry in external format. */
298
299 static void
300 elf_swap_shdr_out (abfd, src, dst)
301      bfd *abfd;
302      Elf_Internal_Shdr *src;
303      Elf_External_Shdr *dst;
304 {
305   /* note that all elements of dst are *arrays of unsigned char* already... */
306   bfd_h_put_32 (abfd, src->sh_name, dst->sh_name);
307   bfd_h_put_32 (abfd, src->sh_type, dst->sh_type);
308   put_word (abfd, src->sh_flags, dst->sh_flags);
309   put_word (abfd, src->sh_addr, dst->sh_addr);
310   put_word (abfd, src->sh_offset, dst->sh_offset);
311   put_word (abfd, src->sh_size, dst->sh_size);
312   bfd_h_put_32 (abfd, src->sh_link, dst->sh_link);
313   bfd_h_put_32 (abfd, src->sh_info, dst->sh_info);
314   put_word (abfd, src->sh_addralign, dst->sh_addralign);
315   put_word (abfd, src->sh_entsize, dst->sh_entsize);
316 }
317
318
319 /* Translate an ELF program header table entry in external format into an
320    ELF program header table entry in internal format. */
321
322 static void
323 elf_swap_phdr_in (abfd, src, dst)
324      bfd *abfd;
325      Elf_External_Phdr *src;
326      Elf_Internal_Phdr *dst;
327 {
328   dst->p_type = bfd_h_get_32 (abfd, (bfd_byte *) src->p_type);
329   dst->p_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->p_flags);
330   dst->p_offset = get_word (abfd, (bfd_byte *) src->p_offset);
331   dst->p_vaddr = get_word (abfd, (bfd_byte *) src->p_vaddr);
332   dst->p_paddr = get_word (abfd, (bfd_byte *) src->p_paddr);
333   dst->p_filesz = get_word (abfd, (bfd_byte *) src->p_filesz);
334   dst->p_memsz = get_word (abfd, (bfd_byte *) src->p_memsz);
335   dst->p_align = get_word (abfd, (bfd_byte *) src->p_align);
336 }
337
338 static void
339 elf_swap_phdr_out (abfd, src, dst)
340      bfd *abfd;
341      Elf_Internal_Phdr *src;
342      Elf_External_Phdr *dst;
343 {
344   /* note that all elements of dst are *arrays of unsigned char* already... */
345   bfd_h_put_32 (abfd, src->p_type, dst->p_type);
346   put_word (abfd, src->p_offset, dst->p_offset);
347   put_word (abfd, src->p_vaddr, dst->p_vaddr);
348   put_word (abfd, src->p_paddr, dst->p_paddr);
349   put_word (abfd, src->p_filesz, dst->p_filesz);
350   put_word (abfd, src->p_memsz, dst->p_memsz);
351   bfd_h_put_32 (abfd, src->p_flags, dst->p_flags);
352   put_word (abfd, src->p_align, dst->p_align);
353 }
354
355 /* Translate an ELF reloc from external format to internal format. */
356 INLINE void
357 elf_swap_reloc_in (abfd, src, dst)
358      bfd *abfd;
359      Elf_External_Rel *src;
360      Elf_Internal_Rel *dst;
361 {
362   dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
363   dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
364 }
365
366 INLINE void
367 elf_swap_reloca_in (abfd, src, dst)
368      bfd *abfd;
369      Elf_External_Rela *src;
370      Elf_Internal_Rela *dst;
371 {
372   dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
373   dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
374   dst->r_addend = get_word (abfd, (bfd_byte *) src->r_addend);
375 }
376
377 /* Translate an ELF reloc from internal format to external format. */
378 INLINE void
379 elf_swap_reloc_out (abfd, src, dst)
380      bfd *abfd;
381      Elf_Internal_Rel *src;
382      Elf_External_Rel *dst;
383 {
384   put_word (abfd, src->r_offset, dst->r_offset);
385   put_word (abfd, src->r_info, dst->r_info);
386 }
387
388 INLINE void
389 elf_swap_reloca_out (abfd, src, dst)
390      bfd *abfd;
391      Elf_Internal_Rela *src;
392      Elf_External_Rela *dst;
393 {
394   put_word (abfd, src->r_offset, dst->r_offset);
395   put_word (abfd, src->r_info, dst->r_info);
396   put_word (abfd, src->r_addend, dst->r_addend);
397 }
398
399 INLINE void
400 elf_swap_dyn_in (abfd, src, dst)
401      bfd *abfd;
402      const Elf_External_Dyn *src;
403      Elf_Internal_Dyn *dst;
404 {
405   dst->d_tag = get_word (abfd, src->d_tag);
406   dst->d_un.d_val = get_word (abfd, src->d_un.d_val);
407 }
408
409 INLINE void
410 elf_swap_dyn_out (abfd, src, dst)
411      bfd *abfd;
412      const Elf_Internal_Dyn *src;
413      Elf_External_Dyn *dst;
414 {
415   put_word (abfd, src->d_tag, dst->d_tag);
416   put_word (abfd, src->d_un.d_val, dst->d_un.d_val);
417 }
418 \f
419 /* String table creation/manipulation routines */
420
421 static struct strtab *
422 bfd_new_strtab (abfd)
423      bfd *abfd;
424 {
425   struct strtab *ss;
426
427   ss = (struct strtab *) malloc (sizeof (struct strtab));
428   if (!ss)
429     {
430       bfd_set_error (bfd_error_no_memory);
431       return NULL;
432     }
433   ss->tab = malloc (1);
434   if (!ss->tab)
435     {
436       bfd_set_error (bfd_error_no_memory);
437       return NULL;
438     }
439   *ss->tab = 0;
440   ss->nentries = 0;
441   ss->length = 1;
442
443   return ss;
444 }
445
446 static unsigned long
447 bfd_add_to_strtab (abfd, ss, str)
448      bfd *abfd;
449      struct strtab *ss;
450      const char *str;
451 {
452   /* should search first, but for now: */
453   /* include the trailing NUL */
454   int ln = strlen (str) + 1;
455
456   /* FIXME: This is slow.  Also, we could combine this with the a.out
457      string table building and use a hash table, although it might not
458      be worth it since ELF symbols don't include debugging information
459      and thus have much less overlap.  */
460   ss->tab = realloc (ss->tab, ss->length + ln);
461   if (ss->tab == NULL)
462     {
463       bfd_set_error (bfd_error_no_memory);
464       return (unsigned long) -1;
465     }
466
467   strcpy (ss->tab + ss->length, str);
468   ss->nentries++;
469   ss->length += ln;
470
471   return ss->length - ln;
472 }
473
474 static int
475 bfd_add_2_to_strtab (abfd, ss, str, str2)
476      bfd *abfd;
477      struct strtab *ss;
478      char *str;
479      CONST char *str2;
480 {
481   /* should search first, but for now: */
482   /* include the trailing NUL */
483   int ln = strlen (str) + strlen (str2) + 1;
484
485   /* should this be using obstacks? */
486   if (ss->length)
487     ss->tab = realloc (ss->tab, ss->length + ln);
488   else
489     ss->tab = malloc (ln);
490
491   BFD_ASSERT (ss->tab != 0);    /* FIXME */
492   strcpy (ss->tab + ss->length, str);
493   strcpy (ss->tab + ss->length + strlen (str), str2);
494   ss->nentries++;
495   ss->length += ln;
496
497   return ss->length - ln;
498 }
499 \f
500 /* ELF .o/exec file reading */
501
502 /* Create a new bfd section from an ELF section header. */
503
504 static boolean
505 bfd_section_from_shdr (abfd, shindex)
506      bfd *abfd;
507      unsigned int shindex;
508 {
509   Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
510   Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
511   char *name;
512
513   name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
514
515   switch (hdr->sh_type)
516     {
517     case SHT_NULL:
518       /* Inactive section. Throw it away.  */
519       return true;
520
521     case SHT_PROGBITS:  /* Normal section with contents.  */
522     case SHT_DYNAMIC:   /* Dynamic linking information.  */
523     case SHT_NOBITS:    /* .bss section.  */
524     case SHT_HASH:      /* .hash section.  */
525       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
526
527     case SHT_SYMTAB:            /* A symbol table */
528       if (elf_onesymtab (abfd) == shindex)
529         return true;
530
531       BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
532       BFD_ASSERT (elf_onesymtab (abfd) == 0);
533       elf_onesymtab (abfd) = shindex;
534       elf_tdata (abfd)->symtab_hdr = *hdr;
535       elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_hdr;
536       abfd->flags |= HAS_SYMS;
537       return true;
538
539     case SHT_DYNSYM:            /* A dynamic symbol table */
540       if (elf_dynsymtab (abfd) == shindex)
541         return true;
542
543       BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
544       BFD_ASSERT (elf_dynsymtab (abfd) == 0);
545       elf_dynsymtab (abfd) = shindex;
546       elf_tdata (abfd)->dynsymtab_hdr = *hdr;
547       elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->dynsymtab_hdr;
548       abfd->flags |= HAS_SYMS;
549
550       /* Besides being a symbol table, we also treat this as a regular
551          section, so that objcopy can handle it.  */
552       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
553
554     case SHT_STRTAB:            /* A string table */
555       if (hdr->rawdata != NULL)
556         return true;
557       if (ehdr->e_shstrndx == shindex)
558         {
559           elf_tdata (abfd)->shstrtab_hdr = *hdr;
560           elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
561           hdr->rawdata = (PTR) & elf_tdata (abfd)->shstrtab_hdr;
562           return true;
563         }
564       {
565         unsigned int i;
566
567         for (i = 1; i < ehdr->e_shnum; i++)
568           {
569             Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
570             if (hdr2->sh_link == shindex)
571               {
572                 if (! bfd_section_from_shdr (abfd, i))
573                   return false;
574                 if (elf_onesymtab (abfd) == i)
575                   {
576                     elf_tdata (abfd)->strtab_hdr = *hdr;
577                     elf_elfsections (abfd)[shindex] =
578                       &elf_tdata (abfd)->strtab_hdr;
579                     return true;
580                   }
581                 if (elf_dynsymtab (abfd) == i)
582                   {
583                     elf_tdata (abfd)->dynstrtab_hdr = *hdr;
584                     elf_elfsections (abfd)[shindex] =
585                       &elf_tdata (abfd)->dynstrtab_hdr;
586                     /* We also treat this as a regular section, so
587                        that objcopy can handle it.  */
588                     break;
589                   }
590 #if 0 /* Not handling other string tables specially right now.  */
591                 hdr2 = elf_elfsections (abfd)[i];       /* in case it moved */
592                 /* We have a strtab for some random other section.  */
593                 newsect = (asection *) hdr2->rawdata;
594                 if (!newsect)
595                   break;
596                 hdr->rawdata = (PTR) newsect;
597                 hdr2 = &elf_section_data (newsect)->str_hdr;
598                 *hdr2 = *hdr;
599                 elf_elfsections (abfd)[shindex] = hdr2;
600 #endif
601               }
602           }
603       }
604
605       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
606
607     case SHT_REL:
608     case SHT_RELA:
609       /* *These* do a lot of work -- but build no sections!  */
610       {
611         asection *target_sect;
612         Elf_Internal_Shdr *hdr2;
613         int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
614
615         /* Get the symbol table.  */
616         if (! bfd_section_from_shdr (abfd, hdr->sh_link))
617           return false;
618
619         /* If this reloc section does not use the main symbol table,
620            or if it is in the process image, we don't treat it as a
621            reloc section.  BFD can't adequately represent such a
622            section, so at least for now, we don't try.  We just
623            present it as a normal section.  */
624         if ((hdr->sh_flags & SHF_ALLOC) != 0
625             || hdr->sh_link != elf_onesymtab (abfd))
626           return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
627
628         /* Don't allow REL relocations on a machine that uses RELA and
629            vice versa.  */
630         /* @@ Actually, the generic ABI does suggest that both might be
631            used in one file.  But the four ABI Processor Supplements I
632            have access to right now all specify that only one is used on
633            each of those architectures.  It's conceivable that, e.g., a
634            bunch of absolute 32-bit relocs might be more compact in REL
635            form even on a RELA machine...  */
636         BFD_ASSERT (use_rela_p
637                     ? (hdr->sh_type == SHT_RELA
638                        && hdr->sh_entsize == sizeof (Elf_External_Rela))
639                     : (hdr->sh_type == SHT_REL
640                        && hdr->sh_entsize == sizeof (Elf_External_Rel)));
641
642         if (! bfd_section_from_shdr (abfd, hdr->sh_info))
643           return false;
644         target_sect = section_from_elf_index (abfd, hdr->sh_info);
645         if (target_sect == NULL
646             || elf_section_data (target_sect) == NULL)
647           return false;
648
649         hdr2 = &elf_section_data (target_sect)->rel_hdr;
650         *hdr2 = *hdr;
651         elf_elfsections (abfd)[shindex] = hdr2;
652         target_sect->reloc_count = hdr->sh_size / hdr->sh_entsize;
653         target_sect->flags |= SEC_RELOC;
654         target_sect->relocation = NULL;
655         target_sect->rel_filepos = hdr->sh_offset;
656         abfd->flags |= HAS_RELOC;
657         return true;
658       }
659       break;
660
661     case SHT_NOTE:
662 #if 0
663       fprintf (stderr, "Note Sections not yet supported.\n");
664       BFD_FAIL ();
665 #endif
666       break;
667
668     case SHT_SHLIB:
669 #if 0
670       fprintf (stderr, "SHLIB Sections not supported (and non conforming.)\n");
671 #endif
672       return true;
673
674     default:
675       /* Check for any processor-specific section types.  */
676       {
677         struct elf_backend_data *bed = get_elf_backend_data (abfd);
678
679         if (bed->elf_backend_section_from_shdr)
680           (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
681       }
682       break;
683     }
684
685   return true;
686 }
687
688 boolean
689 elf_new_section_hook (abfd, sec)
690      bfd *abfd
691       ;
692      asection *sec;
693 {
694   struct bfd_elf_section_data *sdata;
695
696   sdata = (struct bfd_elf_section_data *) bfd_alloc (abfd, sizeof (*sdata));
697   if (!sdata)
698     {
699       bfd_set_error (bfd_error_no_memory);
700       return false;
701     }
702   sec->used_by_bfd = (PTR) sdata;
703   memset (sdata, 0, sizeof (*sdata));
704   return true;
705 }
706
707 /* Create a new bfd section from an ELF program header.
708
709    Since program segments have no names, we generate a synthetic name
710    of the form segment<NUM>, where NUM is generally the index in the
711    program header table.  For segments that are split (see below) we
712    generate the names segment<NUM>a and segment<NUM>b.
713
714    Note that some program segments may have a file size that is different than
715    (less than) the memory size.  All this means is that at execution the
716    system must allocate the amount of memory specified by the memory size,
717    but only initialize it with the first "file size" bytes read from the
718    file.  This would occur for example, with program segments consisting
719    of combined data+bss.
720
721    To handle the above situation, this routine generates TWO bfd sections
722    for the single program segment.  The first has the length specified by
723    the file size of the segment, and the second has the length specified
724    by the difference between the two sizes.  In effect, the segment is split
725    into it's initialized and uninitialized parts.
726
727  */
728
729 static boolean
730 bfd_section_from_phdr (abfd, hdr, index)
731      bfd *abfd;
732      Elf_Internal_Phdr *hdr;
733      int index;
734 {
735   asection *newsect;
736   char *name;
737   char namebuf[64];
738   int split;
739
740   split = ((hdr->p_memsz > 0) &&
741            (hdr->p_filesz > 0) &&
742            (hdr->p_memsz > hdr->p_filesz));
743   sprintf (namebuf, split ? "segment%da" : "segment%d", index);
744   name = bfd_alloc (abfd, strlen (namebuf) + 1);
745   if (!name)
746     {
747       bfd_set_error (bfd_error_no_memory);
748       return false;
749     }
750   strcpy (name, namebuf);
751   newsect = bfd_make_section (abfd, name);
752   if (newsect == NULL)
753     return false;
754   newsect->vma = hdr->p_vaddr;
755   newsect->_raw_size = hdr->p_filesz;
756   newsect->filepos = hdr->p_offset;
757   newsect->flags |= SEC_HAS_CONTENTS;
758   if (hdr->p_type == PT_LOAD)
759     {
760       newsect->flags |= SEC_ALLOC;
761       newsect->flags |= SEC_LOAD;
762       if (hdr->p_flags & PF_X)
763         {
764           /* FIXME: all we known is that it has execute PERMISSION,
765              may be data. */
766           newsect->flags |= SEC_CODE;
767         }
768     }
769   if (!(hdr->p_flags & PF_W))
770     {
771       newsect->flags |= SEC_READONLY;
772     }
773
774   if (split)
775     {
776       sprintf (namebuf, "segment%db", index);
777       name = bfd_alloc (abfd, strlen (namebuf) + 1);
778       if (!name)
779         {
780           bfd_set_error (bfd_error_no_memory);
781           return false;
782         }
783       strcpy (name, namebuf);
784       newsect = bfd_make_section (abfd, name);
785       if (newsect == NULL)
786         return false;
787       newsect->vma = hdr->p_vaddr + hdr->p_filesz;
788       newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
789       if (hdr->p_type == PT_LOAD)
790         {
791           newsect->flags |= SEC_ALLOC;
792           if (hdr->p_flags & PF_X)
793             newsect->flags |= SEC_CODE;
794         }
795       if (!(hdr->p_flags & PF_W))
796         newsect->flags |= SEC_READONLY;
797     }
798
799   return true;
800 }
801
802 /* Begin processing a given object.
803
804    First we validate the file by reading in the ELF header and checking
805    the magic number.  */
806
807 static INLINE boolean
808 elf_file_p (x_ehdrp)
809      Elf_External_Ehdr *x_ehdrp;
810 {
811   return ((x_ehdrp->e_ident[EI_MAG0] == ELFMAG0)
812           && (x_ehdrp->e_ident[EI_MAG1] == ELFMAG1)
813           && (x_ehdrp->e_ident[EI_MAG2] == ELFMAG2)
814           && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3));
815 }
816
817 /* Check to see if the file associated with ABFD matches the target vector
818    that ABFD points to.
819
820    Note that we may be called several times with the same ABFD, but different
821    target vectors, most of which will not match.  We have to avoid leaving
822    any side effects in ABFD, or any data it points to (like tdata), if the
823    file does not match the target vector.  */
824
825 bfd_target *
826 elf_object_p (abfd)
827      bfd *abfd;
828 {
829   Elf_External_Ehdr x_ehdr;     /* Elf file header, external form */
830   Elf_Internal_Ehdr *i_ehdrp;   /* Elf file header, internal form */
831   Elf_External_Shdr x_shdr;     /* Section header table entry, external form */
832   Elf_Internal_Shdr *i_shdrp = NULL; /* Section header table, internal form */
833   unsigned int shindex;
834   char *shstrtab;               /* Internal copy of section header stringtab */
835   struct elf_backend_data *ebd;
836   struct elf_obj_tdata *preserved_tdata = elf_tdata (abfd);
837   struct elf_obj_tdata *new_tdata = NULL;
838
839   /* Read in the ELF header in external format.  */
840
841   if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
842     {
843       if (bfd_get_error () != bfd_error_system_call)
844         goto got_wrong_format_error;
845       else
846         goto got_no_match;
847     }
848
849   /* Now check to see if we have a valid ELF file, and one that BFD can
850      make use of.  The magic number must match, the address size ('class')
851      and byte-swapping must match our XVEC entry, and it must have a
852      section header table (FIXME: See comments re sections at top of this
853      file). */
854
855   if ((elf_file_p (&x_ehdr) == false) ||
856       (x_ehdr.e_ident[EI_VERSION] != EV_CURRENT) ||
857       (x_ehdr.e_ident[EI_CLASS] != ELFCLASS))
858     goto got_wrong_format_error;
859
860   /* Check that file's byte order matches xvec's */
861   switch (x_ehdr.e_ident[EI_DATA])
862     {
863     case ELFDATA2MSB:           /* Big-endian */
864       if (!abfd->xvec->header_byteorder_big_p)
865         goto got_wrong_format_error;
866       break;
867     case ELFDATA2LSB:           /* Little-endian */
868       if (abfd->xvec->header_byteorder_big_p)
869         goto got_wrong_format_error;
870       break;
871     case ELFDATANONE:           /* No data encoding specified */
872     default:                    /* Unknown data encoding specified */
873       goto got_wrong_format_error;
874     }
875
876   /* Allocate an instance of the elf_obj_tdata structure and hook it up to
877      the tdata pointer in the bfd.  */
878
879   new_tdata = ((struct elf_obj_tdata *)
880                bfd_zalloc (abfd, sizeof (struct elf_obj_tdata)));
881   if (new_tdata == NULL)
882     goto got_no_memory_error;
883   elf_tdata (abfd) = new_tdata;
884
885   /* Now that we know the byte order, swap in the rest of the header */
886   i_ehdrp = elf_elfheader (abfd);
887   elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
888 #if DEBUG & 1
889   elf_debug_file (i_ehdrp);
890 #endif
891
892   /* If there is no section header table, we're hosed. */
893   if (i_ehdrp->e_shoff == 0)
894     goto got_wrong_format_error;
895
896   /* As a simple sanity check, verify that the what BFD thinks is the
897      size of each section header table entry actually matches the size
898      recorded in the file. */
899   if (i_ehdrp->e_shentsize != sizeof (x_shdr))
900     goto got_wrong_format_error;
901
902   ebd = get_elf_backend_data (abfd);
903
904   /* Check that the ELF e_machine field matches what this particular
905      BFD format expects.  */
906   if (ebd->elf_machine_code != i_ehdrp->e_machine)
907     {
908       bfd_target **target_ptr;
909
910       if (ebd->elf_machine_code != EM_NONE)
911         goto got_wrong_format_error;
912
913       /* This is the generic ELF target.  Let it match any ELF target
914          for which we do not have a specific backend.  */
915       for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
916         {
917           struct elf_backend_data *back;
918
919           if ((*target_ptr)->flavour != bfd_target_elf_flavour)
920             continue;
921           back = (struct elf_backend_data *) (*target_ptr)->backend_data;
922           if (back->elf_machine_code == i_ehdrp->e_machine)
923             {
924               /* target_ptr is an ELF backend which matches this
925                  object file, so reject the generic ELF target.  */
926               goto got_wrong_format_error;
927             }
928         }
929     }
930
931   if (i_ehdrp->e_type == ET_EXEC)
932     abfd->flags |= EXEC_P;
933   else if (i_ehdrp->e_type == ET_DYN)
934     abfd->flags |= DYNAMIC;
935
936   if (i_ehdrp->e_phnum > 0)
937     abfd->flags |= D_PAGED;
938
939   if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
940     goto got_no_match;
941
942   /* Remember the entry point specified in the ELF file header. */
943   bfd_get_start_address (abfd) = i_ehdrp->e_entry;
944
945   /* Allocate space for a copy of the section header table in
946      internal form, seek to the section header table in the file,
947      read it in, and convert it to internal form.  */
948   i_shdrp = ((Elf_Internal_Shdr *)
949              bfd_alloc (abfd, sizeof (*i_shdrp) * i_ehdrp->e_shnum));
950   elf_elfsections (abfd) = ((Elf_Internal_Shdr **)
951                             bfd_alloc (abfd,
952                                        sizeof (i_shdrp) * i_ehdrp->e_shnum));
953   if (!i_shdrp || !elf_elfsections (abfd))
954     goto got_no_memory_error;
955   if (bfd_seek (abfd, i_ehdrp->e_shoff, SEEK_SET) != 0)
956     goto got_no_match;
957   for (shindex = 0; shindex < i_ehdrp->e_shnum; shindex++)
958     {
959       if (bfd_read ((PTR) & x_shdr, sizeof x_shdr, 1, abfd) != sizeof (x_shdr))
960         goto got_no_match;
961       elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
962       elf_elfsections (abfd)[shindex] = i_shdrp + shindex;
963
964       /* If this is a .dynamic section, mark the object file as being
965          dynamically linked.  */
966       if (i_shdrp[shindex].sh_type == SHT_DYNAMIC)
967         abfd->flags |= DYNAMIC;
968     }
969   if (i_ehdrp->e_shstrndx)
970     {
971       if (! bfd_section_from_shdr (abfd, i_ehdrp->e_shstrndx))
972         goto got_no_match;
973     }
974
975   /* Read in the string table containing the names of the sections.  We
976      will need the base pointer to this table later. */
977   /* We read this inline now, so that we don't have to go through
978      bfd_section_from_shdr with it (since this particular strtab is
979      used to find all of the ELF section names.) */
980
981   shstrtab = elf_get_str_section (abfd, i_ehdrp->e_shstrndx);
982   if (!shstrtab)
983     goto got_no_match;
984
985   /* Once all of the section headers have been read and converted, we
986      can start processing them.  Note that the first section header is
987      a dummy placeholder entry, so we ignore it.  */
988
989   for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
990     {
991       if (! bfd_section_from_shdr (abfd, shindex))
992         goto got_no_match;
993     }
994
995   /* Let the backend double check the format and override global
996      information.  */
997   if (ebd->elf_backend_object_p)
998     {
999       if ((*ebd->elf_backend_object_p) (abfd) == false)
1000         goto got_wrong_format_error;
1001     }
1002
1003   return (abfd->xvec);
1004
1005 got_wrong_format_error:
1006   bfd_set_error (bfd_error_wrong_format);
1007   goto got_no_match;
1008 got_no_memory_error:
1009   bfd_set_error (bfd_error_no_memory);
1010   goto got_no_match;
1011 got_no_match:
1012   if (new_tdata != NULL
1013       && new_tdata->elf_sect_ptr != NULL)
1014     bfd_release (abfd, new_tdata->elf_sect_ptr);
1015   if (i_shdrp != NULL)
1016     bfd_release (abfd, i_shdrp);
1017   if (new_tdata != NULL)
1018     bfd_release (abfd, new_tdata);
1019   elf_tdata (abfd) = preserved_tdata;
1020   return (NULL);
1021 }
1022 \f
1023
1024 /* ELF .o/exec file writing */
1025
1026 /* Takes a bfd and a symbol, returns a pointer to the elf specific area
1027    of the symbol if there is one.  */
1028 static INLINE elf_symbol_type *
1029 elf_symbol_from (ignore_abfd, symbol)
1030      bfd *ignore_abfd;
1031      asymbol *symbol;
1032 {
1033   if (symbol->the_bfd->xvec->flavour != bfd_target_elf_flavour)
1034     return 0;
1035
1036   if (symbol->the_bfd->tdata.elf_obj_data == (struct elf_obj_tdata *) NULL)
1037     return 0;
1038
1039   return (elf_symbol_type *) symbol;
1040 }
1041
1042 void
1043 write_relocs (abfd, sec, xxx)
1044      bfd *abfd;
1045      asection *sec;
1046      PTR xxx;
1047 {
1048   Elf_Internal_Shdr *rela_hdr;
1049   Elf_External_Rela *outbound_relocas;
1050   Elf_External_Rel *outbound_relocs;
1051   int idx;
1052   int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1053   asymbol *last_sym = 0;
1054   int last_sym_idx = 9999999;   /* should always be written before use */
1055
1056   if ((sec->flags & SEC_RELOC) == 0)
1057     return;
1058
1059   /* The linker backend writes the relocs out itself, and sets the
1060      reloc_count field to zero to inhibit writing them here.  Also,
1061      sometimes the SEC_RELOC flag gets set even when there aren't any
1062      relocs.  */
1063   if (sec->reloc_count == 0)
1064     return;
1065
1066   rela_hdr = &elf_section_data (sec)->rel_hdr;
1067
1068   rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count;
1069   rela_hdr->contents = (void *) bfd_alloc (abfd, rela_hdr->sh_size);
1070   if (!rela_hdr->contents)
1071     {
1072       bfd_set_error (bfd_error_no_memory);
1073       abort ();                 /* FIXME */
1074     }
1075
1076   /* orelocation has the data, reloc_count has the count... */
1077   if (use_rela_p)
1078     {
1079       outbound_relocas = (Elf_External_Rela *) rela_hdr->contents;
1080
1081       for (idx = 0; idx < sec->reloc_count; idx++)
1082         {
1083           Elf_Internal_Rela dst_rela;
1084           Elf_External_Rela *src_rela;
1085           arelent *ptr;
1086           asymbol *sym;
1087           int n;
1088
1089           ptr = sec->orelocation[idx];
1090           src_rela = outbound_relocas + idx;
1091           if (!(abfd->flags & EXEC_P))
1092             dst_rela.r_offset = ptr->address - sec->vma;
1093           else
1094             dst_rela.r_offset = ptr->address;
1095
1096           sym = *ptr->sym_ptr_ptr;
1097           if (sym == last_sym)
1098             n = last_sym_idx;
1099           else
1100             {
1101               last_sym = sym;
1102               last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1103             }
1104           dst_rela.r_info = ELF_R_INFO (n, ptr->howto->type);
1105
1106           dst_rela.r_addend = ptr->addend;
1107           elf_swap_reloca_out (abfd, &dst_rela, src_rela);
1108         }
1109     }
1110   else
1111     /* REL relocations */
1112     {
1113       outbound_relocs = (Elf_External_Rel *) rela_hdr->contents;
1114
1115       for (idx = 0; idx < sec->reloc_count; idx++)
1116         {
1117           Elf_Internal_Rel dst_rel;
1118           Elf_External_Rel *src_rel;
1119           arelent *ptr;
1120           int n;
1121           asymbol *sym;
1122
1123           ptr = sec->orelocation[idx];
1124           sym = *ptr->sym_ptr_ptr;
1125           src_rel = outbound_relocs + idx;
1126           if (!(abfd->flags & EXEC_P))
1127             dst_rel.r_offset = ptr->address - sec->vma;
1128           else
1129             dst_rel.r_offset = ptr->address;
1130
1131           if (sym == last_sym)
1132             n = last_sym_idx;
1133           else
1134             {
1135               last_sym = sym;
1136               last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1137             }
1138           dst_rel.r_info = ELF_R_INFO (n, ptr->howto->type);
1139
1140           elf_swap_reloc_out (abfd, &dst_rel, src_rel);
1141         }
1142     }
1143 }
1144
1145 /* Set up an ELF internal section header for a section.  */
1146
1147 /*ARGSUSED*/
1148 static void
1149 elf_fake_sections (abfd, asect, ignore)
1150      bfd *abfd;
1151      asection *asect;
1152      PTR ignore;
1153 {
1154   Elf_Internal_Shdr *this_hdr;
1155
1156   this_hdr = &elf_section_data (asect)->this_hdr;
1157
1158   this_hdr->sh_name = bfd_add_to_strtab (abfd, elf_shstrtab (abfd),
1159                                          asect->name);
1160   if (this_hdr->sh_name == (unsigned long) -1)
1161     abort (); /* FIXME */
1162
1163   this_hdr->sh_flags = 0;
1164   if ((asect->flags & SEC_ALLOC) != 0)
1165     this_hdr->sh_addr = asect->vma;
1166   else
1167     this_hdr->sh_addr = 0;
1168   this_hdr->sh_offset = 0;
1169   this_hdr->sh_size = asect->_raw_size;
1170   this_hdr->sh_link = 0;
1171   this_hdr->sh_info = 0;
1172   this_hdr->sh_addralign = 1 << asect->alignment_power;
1173   this_hdr->sh_entsize = 0;
1174
1175   this_hdr->rawdata = (PTR) asect;
1176   this_hdr->contents = NULL;
1177   this_hdr->size = 0;
1178
1179   /* FIXME: This should not be based on section names.  */
1180   if (strcmp (asect->name, ".dynstr") == 0)
1181     this_hdr->sh_type = SHT_STRTAB;
1182   else if (strcmp (asect->name, ".hash") == 0)
1183     {
1184       this_hdr->sh_type = SHT_HASH;
1185       this_hdr->sh_entsize = ARCH_SIZE / 8;
1186     }
1187   else if (strcmp (asect->name, ".dynsym") == 0)
1188     {
1189       this_hdr->sh_type = SHT_DYNSYM;
1190       this_hdr->sh_entsize = sizeof (Elf_External_Sym);
1191     }
1192   else if (strcmp (asect->name, ".dynamic") == 0)
1193     {
1194       this_hdr->sh_type = SHT_DYNAMIC;
1195       this_hdr->sh_entsize = sizeof (Elf_External_Dyn);
1196     }
1197   else if (strncmp (asect->name, ".rel.", 5) == 0)
1198     {
1199       this_hdr->sh_type = SHT_REL;
1200       this_hdr->sh_entsize = sizeof (Elf_External_Rel);
1201     }
1202   else if (strncmp (asect->name, ".rela.", 6) == 0)
1203     {
1204       this_hdr->sh_type = SHT_RELA;
1205       this_hdr->sh_entsize = sizeof (Elf_External_Rela);
1206     }
1207   else if (strcmp (asect->name, ".note") == 0)
1208     this_hdr->sh_type = SHT_NOTE;
1209   else if (strncmp (asect->name, ".stab", 5) == 0
1210            && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1211     this_hdr->sh_type = SHT_STRTAB;
1212   else if ((asect->flags & SEC_ALLOC) != 0
1213            && (asect->flags & SEC_LOAD) != 0)
1214     this_hdr->sh_type = SHT_PROGBITS;
1215   else if ((asect->flags & SEC_ALLOC) != 0
1216            && ((asect->flags & SEC_LOAD) == 0))
1217     {
1218       BFD_ASSERT (strcmp (asect->name, ".bss") == 0
1219                   || strcmp (asect->name, ".sbss") == 0);
1220       this_hdr->sh_type = SHT_NOBITS;
1221     }
1222   else
1223     {
1224       /* Who knows?  */
1225       this_hdr->sh_type = SHT_PROGBITS;
1226     }
1227
1228   if ((asect->flags & SEC_ALLOC) != 0)
1229     this_hdr->sh_flags |= SHF_ALLOC;
1230   if ((asect->flags & SEC_READONLY) == 0)
1231     this_hdr->sh_flags |= SHF_WRITE;
1232   if ((asect->flags & SEC_CODE) != 0)
1233     this_hdr->sh_flags |= SHF_EXECINSTR;
1234
1235   /* Check for processor-specific section types.  */
1236   {
1237     struct elf_backend_data *bed = get_elf_backend_data (abfd);
1238
1239     if (bed->elf_backend_fake_sections)
1240       (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1241   }
1242
1243   /* If the section has relocs, set up a section header for the
1244      SHT_REL[A] section.  */
1245   if ((asect->flags & SEC_RELOC) != 0)
1246     {
1247       Elf_Internal_Shdr *rela_hdr;
1248       int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1249
1250       rela_hdr = &elf_section_data (asect)->rel_hdr;
1251       rela_hdr->sh_name =
1252         bfd_add_2_to_strtab (abfd, elf_shstrtab (abfd),
1253                              use_rela_p ? ".rela" : ".rel",
1254                              asect->name);
1255       rela_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1256       rela_hdr->sh_entsize = (use_rela_p
1257                               ? sizeof (Elf_External_Rela)
1258                               : sizeof (Elf_External_Rel));
1259       rela_hdr->sh_addralign = FILE_ALIGN;
1260       rela_hdr->sh_flags = 0;
1261       rela_hdr->sh_addr = 0;
1262       rela_hdr->sh_size = 0;
1263       rela_hdr->sh_offset = 0;
1264       rela_hdr->size = 0;
1265     }
1266 }
1267
1268 /* Assign all ELF section numbers.  The dummy first section is handled here
1269    too.  The link/info pointers for the standard section types are filled
1270    in here too, while we're at it.  (Link pointers for .stab sections are
1271    not filled in here.)  */
1272
1273 static boolean
1274 assign_section_numbers (abfd)
1275      bfd *abfd;
1276 {
1277   struct elf_obj_tdata *t = elf_tdata (abfd);
1278   asection *sec;
1279   unsigned int section_number;
1280   Elf_Internal_Shdr **i_shdrp;
1281
1282   section_number = 1;
1283
1284   t->shstrtab_section = section_number++;
1285   elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
1286   t->shstrtab_hdr.sh_size = elf_shstrtab (abfd)->length;
1287   t->shstrtab_hdr.contents = (PTR) elf_shstrtab (abfd)->tab;
1288
1289   if (abfd->symcount > 0)
1290     {
1291       t->symtab_section = section_number++;
1292       t->strtab_section = section_number++;
1293     }
1294
1295   for (sec = abfd->sections; sec; sec = sec->next)
1296     {
1297       struct bfd_elf_section_data *d = elf_section_data (sec);
1298
1299       d->this_idx = section_number++;
1300       if ((sec->flags & SEC_RELOC) == 0)
1301         d->rel_idx = 0;
1302       else
1303         d->rel_idx = section_number++;
1304     }
1305
1306   elf_elfheader (abfd)->e_shnum = section_number;
1307
1308   /* Set up the list of section header pointers, in agreement with the
1309      indices.  */
1310   i_shdrp = ((Elf_Internal_Shdr **)
1311              bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *)));
1312   if (i_shdrp == NULL)
1313     {
1314       bfd_set_error (bfd_error_no_memory);
1315       return false;
1316     }
1317
1318   i_shdrp[0] = ((Elf_Internal_Shdr *)
1319                 bfd_alloc (abfd, sizeof (Elf_Internal_Shdr)));
1320   if (i_shdrp[0] == NULL)
1321     {
1322       bfd_release (abfd, i_shdrp);
1323       bfd_set_error (bfd_error_no_memory);
1324       return false;
1325     }
1326   memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
1327
1328   elf_elfsections (abfd) = i_shdrp;
1329
1330   i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1331   if (abfd->symcount > 0)
1332     {
1333       i_shdrp[t->symtab_section] = &t->symtab_hdr;
1334       i_shdrp[t->strtab_section] = &t->strtab_hdr;
1335       t->symtab_hdr.sh_link = t->strtab_section;
1336     }
1337   for (sec = abfd->sections; sec; sec = sec->next)
1338     {
1339       struct bfd_elf_section_data *d = elf_section_data (sec);
1340       asection *s;
1341       const char *name;
1342
1343       i_shdrp[d->this_idx] = &d->this_hdr;
1344       if (d->rel_idx != 0)
1345         i_shdrp[d->rel_idx] = &d->rel_hdr;
1346
1347       /* Fill in the sh_link and sh_info fields while we're at it.  */
1348
1349       /* sh_link of a reloc section is the section index of the symbol
1350          table.  sh_info is the section index of the section to which
1351          the relocation entries apply.  */
1352       if (d->rel_idx != 0)
1353         {
1354           d->rel_hdr.sh_link = t->symtab_section;
1355           d->rel_hdr.sh_info = d->this_idx;
1356         }
1357
1358       switch (d->this_hdr.sh_type)
1359         {
1360         case SHT_REL:
1361         case SHT_RELA:
1362           /* A reloc section which we are treating as a normal BFD
1363              section.  sh_link is the section index of the symbol
1364              table.  sh_info is the section index of the section to
1365              which the relocation entries apply.  We assume that an
1366              allocated reloc section uses the dynamic symbol table.
1367              FIXME: How can we be sure?  */
1368           s = bfd_get_section_by_name (abfd, ".dynsym");
1369           if (s != NULL)
1370             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1371
1372           /* We look up the section the relocs apply to by name.  */
1373           name = sec->name;
1374           if (d->this_hdr.sh_type == SHT_REL)
1375             name += 4;
1376           else
1377             name += 5;
1378           s = bfd_get_section_by_name (abfd, name);
1379           if (s != NULL)
1380             d->this_hdr.sh_info = elf_section_data (s)->this_idx;
1381           break;
1382
1383         case SHT_STRTAB:
1384           /* We assume that a section named .stab*str is a stabs
1385              string section.  We look for a section with the same name
1386              but without the trailing ``str'', and set its sh_link
1387              field to point to this section.  */
1388           if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
1389               && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
1390             {
1391               size_t len;
1392               char *alc;
1393
1394               len = strlen (sec->name);
1395               alc = (char *) malloc (len - 2);
1396               if (alc == NULL)
1397                 {
1398                   bfd_set_error (bfd_error_no_memory);
1399                   return false;
1400                 }
1401               strncpy (alc, sec->name, len - 3);
1402               alc[len - 3] = '\0';
1403               s = bfd_get_section_by_name (abfd, alc);
1404               free (alc);
1405               if (s != NULL)
1406                 {
1407                   elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1408
1409                   /* This is a .stab section.  */
1410                   elf_section_data (s)->this_hdr.sh_entsize =
1411                     4 + 2 * (ARCH_SIZE / 8);
1412                 }
1413             }
1414           break;
1415
1416         case SHT_DYNAMIC:
1417         case SHT_DYNSYM:
1418           /* sh_link is the section header index of the string table
1419              used for the dynamic entries or symbol table.  */
1420           s = bfd_get_section_by_name (abfd, ".dynstr");
1421           if (s != NULL)
1422             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1423           break;
1424
1425         case SHT_HASH:
1426           /* sh_link is the section header index of the symbol table
1427              this hash table is for.  */
1428           s = bfd_get_section_by_name (abfd, ".dynsym");
1429           if (s != NULL)
1430             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1431           break;
1432         }
1433     }
1434
1435   return true;
1436 }
1437
1438 /* Map symbol from it's internal number to the external number, moving
1439    all local symbols to be at the head of the list.  */
1440
1441 static INLINE int
1442 sym_is_global (abfd, sym)
1443      bfd *abfd;
1444      asymbol *sym;
1445 {
1446   /* If the backend has a special mapping, use it.  */
1447   if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1448     return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1449             (abfd, sym));
1450
1451   if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
1452     {
1453       if (sym->flags & BSF_LOCAL)
1454         abort ();
1455       return 1;
1456     }
1457   if (sym->section == 0)
1458     {
1459       /* Is this valid?  */
1460       abort ();
1461
1462       return 1;
1463     }
1464   if (sym->section == &bfd_und_section)
1465     return 1;
1466   if (bfd_is_com_section (sym->section))
1467     return 1;
1468   if (sym->flags & (BSF_LOCAL | BSF_SECTION_SYM | BSF_FILE))
1469     return 0;
1470   return 0;
1471 }
1472
1473 static boolean
1474 elf_map_symbols (abfd)
1475      bfd *abfd;
1476 {
1477   int symcount = bfd_get_symcount (abfd);
1478   asymbol **syms = bfd_get_outsymbols (abfd);
1479   asymbol **sect_syms;
1480   int num_locals = 0;
1481   int num_globals = 0;
1482   int num_locals2 = 0;
1483   int num_globals2 = 0;
1484   int max_index = 0;
1485   int num_sections = 0;
1486   Elf_Sym_Extra *sym_extra;
1487   int idx;
1488   asection *asect;
1489
1490 #ifdef DEBUG
1491   fprintf (stderr, "elf_map_symbols\n");
1492   fflush (stderr);
1493 #endif
1494
1495   /* Add local symbols for each section for which there are relocs.
1496      FIXME: How can we tell which sections have relocs at this point?
1497      Will reloc_count always be accurate?  Actually, I think most ELF
1498      targets create section symbols for all sections anyhow.  */
1499   for (asect = abfd->sections; asect; asect = asect->next)
1500     {
1501       if (max_index < asect->index)
1502         max_index = asect->index;
1503     }
1504
1505   max_index++;
1506   elf_num_section_syms (abfd) = max_index;
1507   sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1508   elf_section_syms (abfd) = sect_syms;
1509
1510   if (sect_syms == 0)
1511     {
1512       bfd_set_error (bfd_error_no_memory);
1513       return false;
1514     }
1515
1516   for (asect = abfd->sections; asect; asect = asect->next)
1517     {
1518       asymbol *sym = bfd_make_empty_symbol (abfd);
1519       if (!sym)
1520         {
1521           bfd_set_error (bfd_error_no_memory);
1522           return false;
1523         }
1524       sym->the_bfd = abfd;
1525       sym->name = asect->name;
1526       sym->value = asect->vma;
1527       sym->flags = BSF_SECTION_SYM;
1528       sym->section = asect;
1529       sect_syms[asect->index] = sym;
1530       num_sections++;
1531 #ifdef DEBUG
1532       fprintf (stderr,
1533                "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n",
1534                asect->name, (long) asect->vma, asect->index, (long) asect);
1535 #endif
1536     }
1537
1538   if (num_sections)
1539     {
1540       if (syms)
1541         syms = (asymbol **) bfd_realloc (abfd, syms,
1542                                          ((symcount + num_sections + 1)
1543                                           * sizeof (asymbol *)));
1544       else
1545         syms = (asymbol **) bfd_alloc (abfd,
1546                                    (num_sections + 1) * sizeof (asymbol *));
1547       if (!syms)
1548         {
1549           bfd_set_error (bfd_error_no_memory);
1550           return false;
1551         }
1552
1553       for (asect = abfd->sections; asect; asect = asect->next)
1554         {
1555           if (sect_syms[asect->index])
1556             syms[symcount++] = sect_syms[asect->index];
1557         }
1558
1559       syms[symcount] = (asymbol *) 0;
1560       bfd_set_symtab (abfd, syms, symcount);
1561     }
1562
1563   elf_sym_extra (abfd) = sym_extra
1564     = (Elf_Sym_Extra *) bfd_alloc (abfd, symcount * sizeof (Elf_Sym_Extra));
1565   if (!sym_extra)
1566     {
1567       bfd_set_error (bfd_error_no_memory);
1568       return false;
1569     }
1570
1571   /* Identify and classify all of the symbols.  */
1572   for (idx = 0; idx < symcount; idx++)
1573     {
1574       if (!sym_is_global (abfd, syms[idx]))
1575         num_locals++;
1576       else
1577         num_globals++;
1578     }
1579
1580   /* Now provide mapping information.  Add +1 for skipping over the
1581      dummy symbol.  */
1582   for (idx = 0; idx < symcount; idx++)
1583     {
1584       syms[idx]->udata = (PTR) & sym_extra[idx];
1585       if (!sym_is_global (abfd, syms[idx]))
1586         sym_extra[idx].elf_sym_num = 1 + num_locals2++;
1587       else
1588         sym_extra[idx].elf_sym_num = 1 + num_locals + num_globals2++;
1589     }
1590
1591   elf_num_locals (abfd) = num_locals;
1592   elf_num_globals (abfd) = num_globals;
1593   return true;
1594 }
1595
1596 /* Compute the file positions we are going to put the sections at, and
1597    otherwise prepare to begin writing out the ELF file.  If LINK_INFO
1598    is not NULL, this is being called by the ELF backend linker.  */
1599
1600 static boolean
1601 elf_compute_section_file_positions (abfd, link_info)
1602      bfd *abfd;
1603      struct bfd_link_info *link_info;
1604 {
1605   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1606   Elf_Internal_Shdr *shstrtab_hdr;
1607
1608   if (abfd->output_has_begun)
1609     return true;
1610
1611   /* Do any elf backend specific processing first.  */
1612   if (bed->elf_backend_begin_write_processing)
1613     (*bed->elf_backend_begin_write_processing) (abfd);
1614
1615   if (! prep_headers (abfd))
1616     return false;
1617
1618   bfd_map_over_sections (abfd, elf_fake_sections, 0);
1619
1620   if (!assign_section_numbers (abfd))
1621     return false;
1622
1623   /* The backend linker builds symbol table information itself.  */
1624   if (link_info == NULL)
1625     {
1626       if (! swap_out_syms (abfd))
1627         return false;
1628     }
1629
1630   shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
1631   /* sh_name was set in prep_headers.  */
1632   shstrtab_hdr->sh_type = SHT_STRTAB;
1633   shstrtab_hdr->sh_flags = 0;
1634   shstrtab_hdr->sh_addr = 0;
1635   shstrtab_hdr->sh_size = elf_shstrtab (abfd)->length;
1636   shstrtab_hdr->sh_entsize = 0;
1637   shstrtab_hdr->sh_link = 0;
1638   shstrtab_hdr->sh_info = 0;
1639   /* sh_offset is set in assign_file_positions_for_symtabs_and_strtabs.  */
1640   shstrtab_hdr->sh_addralign = 1;
1641   shstrtab_hdr->contents = (PTR) elf_shstrtab (abfd)->tab;
1642
1643   if (!assign_file_positions_except_relocs (abfd,
1644                                             link_info == NULL ? true : false))
1645     return false;
1646
1647   abfd->output_has_begun = true;
1648
1649   return true;
1650 }
1651
1652
1653 /* Align to the maximum file alignment that could be required for any
1654    ELF data structure.  */
1655
1656 static INLINE file_ptr
1657 align_file_position (off)
1658      file_ptr off;
1659 {
1660   return (off + FILE_ALIGN - 1) & ~(FILE_ALIGN - 1);
1661 }
1662
1663 /* Assign a file position to a section, optionally aligning to the
1664    required section alignment.  */
1665
1666 static INLINE file_ptr
1667 assign_file_position_for_section (i_shdrp, offset, align)
1668      Elf_Internal_Shdr *i_shdrp;
1669      file_ptr offset;
1670      boolean align;
1671 {
1672   if (align)
1673     {
1674       unsigned int al;
1675
1676       al = i_shdrp->sh_addralign;
1677       if (al > 1)
1678         offset = BFD_ALIGN (offset, al);
1679     }
1680   i_shdrp->sh_offset = offset;
1681   if (i_shdrp->rawdata != NULL)
1682     ((asection *) i_shdrp->rawdata)->filepos = offset;
1683   if (i_shdrp->sh_type != SHT_NOBITS)
1684     offset += i_shdrp->sh_size;
1685   return offset;
1686 }
1687
1688 /* Get the size of the program header.  This is called by the linker
1689    before any of the section VMA's are set, so it can't calculate the
1690    correct value for a strange memory layout.  */
1691
1692 static bfd_size_type
1693 get_program_header_size (abfd)
1694      bfd *abfd;
1695 {
1696   size_t segs;
1697   asection *s;
1698
1699   /* Assume we will need exactly two PT_LOAD segments: one for text
1700      and one for data.  */
1701   segs = 2;
1702
1703   s = bfd_get_section_by_name (abfd, ".interp");
1704   if (s != NULL && (s->flags & SEC_LOAD) != 0)
1705     {
1706       /* If we have a loadable interpreter section, we need a
1707          PT_INTERP segment.  In this case, assume we also need a
1708          PT_PHDR segment, although that may not be true for all
1709          targets.  */
1710       segs += 2;
1711     }
1712
1713   if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
1714     {
1715       /* We need a PT_DYNAMIC segment.  */
1716       ++segs;
1717     }
1718
1719   return segs * sizeof (Elf_External_Phdr);
1720 }
1721
1722 /* Create the program header.  OFF is the file offset where the
1723    program header should be written.  FIRST is the first loadable ELF
1724    section.  PHDR_SIZE is the size of the program header as returned
1725    by get_program_header_size.  */
1726
1727 static file_ptr
1728 map_program_segments (abfd, off, first, phdr_size)
1729      bfd *abfd;
1730      file_ptr off;
1731      Elf_Internal_Shdr *first;
1732      bfd_size_type phdr_size;
1733 {
1734   Elf_Internal_Phdr phdrs[10];
1735   unsigned int phdr_count;
1736   Elf_Internal_Phdr *phdr;
1737   int phdr_size_adjust;
1738   unsigned int i;
1739   Elf_Internal_Shdr **hdrpp;
1740   asection *sinterp, *sdyn;
1741   unsigned int last_type;
1742   Elf_Internal_Ehdr *i_ehdrp;
1743
1744   BFD_ASSERT ((abfd->flags & EXEC_P) != 0);
1745   BFD_ASSERT (phdr_size / sizeof (Elf_Internal_Phdr)
1746               <= sizeof phdrs / sizeof (phdrs[0]));
1747
1748   phdr_count = 0;
1749   phdr = phdrs;
1750
1751   phdr_size_adjust = 0;
1752
1753   /* If we have a loadable .interp section, we must create a PT_INTERP
1754      segment which must precede all PT_LOAD segments.  We assume that
1755      we must also create a PT_PHDR segment, although that may not be
1756      true for all targets.  */
1757   sinterp = bfd_get_section_by_name (abfd, ".interp");
1758   if (sinterp != NULL && (sinterp->flags & SEC_LOAD) != 0)
1759     {
1760       BFD_ASSERT (first != NULL);
1761
1762       phdr->p_type = PT_PHDR;
1763
1764       phdr->p_offset = off;
1765
1766       /* Account for any adjustment made because of the alignment of
1767          the first loadable section.  */
1768       phdr_size_adjust = (first->sh_offset - phdr_size) - off;
1769       BFD_ASSERT (phdr_size_adjust >= 0 && phdr_size_adjust < 128);
1770
1771       /* The program header precedes all loadable sections.  This lets
1772          us compute its loadable address.  This depends on the linker
1773          script.  */
1774       phdr->p_vaddr = first->sh_addr - (phdr_size + phdr_size_adjust);
1775
1776       phdr->p_paddr = 0;
1777       phdr->p_filesz = phdr_size;
1778       phdr->p_memsz = phdr_size;
1779
1780       /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not.  */
1781       phdr->p_flags = PF_R | PF_X;
1782
1783       phdr->p_align = FILE_ALIGN;
1784       BFD_ASSERT ((phdr->p_vaddr - phdr->p_offset) % FILE_ALIGN == 0);
1785
1786       /* Include the ELF header in the first loadable segment.  */
1787       phdr_size_adjust += off;
1788
1789       ++phdr_count;
1790       ++phdr;
1791
1792       phdr->p_type = PT_INTERP;
1793       phdr->p_offset = sinterp->filepos;
1794       phdr->p_vaddr = sinterp->vma;
1795       phdr->p_paddr = 0;
1796       phdr->p_filesz = sinterp->_raw_size;
1797       phdr->p_memsz = sinterp->_raw_size;
1798       phdr->p_flags = PF_R;
1799       phdr->p_align = 1 << bfd_get_section_alignment (abfd, sinterp);
1800
1801       ++phdr_count;
1802       ++phdr;
1803     }
1804
1805   /* Look through the sections to see how they will be divided into
1806      program segments.  The sections must be arranged in order by
1807      sh_addr for this to work correctly.  */
1808   phdr->p_type = PT_NULL;
1809   last_type = SHT_PROGBITS;
1810   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
1811        i < elf_elfheader (abfd)->e_shnum;
1812        i++, hdrpp++)
1813     {
1814       Elf_Internal_Shdr *hdr;
1815
1816       hdr = *hdrpp;
1817
1818       /* Ignore any section which will not be part of the process
1819          image.  */
1820       if ((hdr->sh_flags & SHF_ALLOC) == 0)
1821         continue;
1822
1823       /* If this section fits in the segment we are constructing, add
1824          it in.  */
1825       if (phdr->p_type != PT_NULL
1826           && (hdr->sh_offset - (phdr->p_offset + phdr->p_memsz)
1827               == hdr->sh_addr - (phdr->p_vaddr + phdr->p_memsz))
1828           && (last_type != SHT_NOBITS || hdr->sh_type == SHT_NOBITS))
1829         {
1830           bfd_size_type adjust;
1831
1832           adjust = hdr->sh_addr - (phdr->p_vaddr + phdr->p_memsz);
1833           phdr->p_memsz += hdr->sh_size + adjust;
1834           if (hdr->sh_type != SHT_NOBITS)
1835             phdr->p_filesz += hdr->sh_size + adjust;
1836           if ((hdr->sh_flags & SHF_WRITE) != 0)
1837             phdr->p_flags |= PF_W;
1838           if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1839             phdr->p_flags |= PF_X;
1840           last_type = hdr->sh_type;
1841           continue;
1842         }
1843
1844       /* If we have a segment, move to the next one.  */
1845       if (phdr->p_type != PT_NULL)
1846         {
1847           ++phdr;
1848           ++phdr_count;
1849         }
1850
1851       /* Start a new segment.  */
1852       phdr->p_type = PT_LOAD;
1853       phdr->p_offset = hdr->sh_offset;
1854       phdr->p_vaddr = hdr->sh_addr;
1855       phdr->p_paddr = 0;
1856       if (hdr->sh_type == SHT_NOBITS)
1857         phdr->p_filesz = 0;
1858       else
1859         phdr->p_filesz = hdr->sh_size;
1860       phdr->p_memsz = hdr->sh_size;
1861       phdr->p_flags = PF_R;
1862       if ((hdr->sh_flags & SHF_WRITE) != 0)
1863         phdr->p_flags |= PF_W;
1864       if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1865         phdr->p_flags |= PF_X;
1866       phdr->p_align = get_elf_backend_data (abfd)->maxpagesize;
1867
1868       if (hdr == first
1869           && sinterp != NULL
1870           && (sinterp->flags & SEC_LOAD) != 0)
1871         {
1872           phdr->p_offset -= phdr_size + phdr_size_adjust;
1873           phdr->p_vaddr -= phdr_size + phdr_size_adjust;
1874           phdr->p_filesz += phdr_size + phdr_size_adjust;
1875           phdr->p_memsz += phdr_size + phdr_size_adjust;
1876         }
1877
1878       last_type = hdr->sh_type;
1879     }
1880
1881   if (phdr->p_type != PT_NULL)
1882     {
1883       ++phdr;
1884       ++phdr_count;
1885     }
1886
1887   /* If we have a .dynamic section, create a PT_DYNAMIC segment.  */
1888   sdyn = bfd_get_section_by_name (abfd, ".dynamic");
1889   if (sdyn != NULL && (sdyn->flags & SEC_LOAD) != 0)
1890     {
1891       phdr->p_type = PT_DYNAMIC;
1892       phdr->p_offset = sdyn->filepos;
1893       phdr->p_vaddr = sdyn->vma;
1894       phdr->p_paddr = 0;
1895       phdr->p_filesz = sdyn->_raw_size;
1896       phdr->p_memsz = sdyn->_raw_size;
1897       phdr->p_flags = PF_R;
1898       if ((sdyn->flags & SEC_READONLY) == 0)
1899         phdr->p_flags |= PF_W;
1900       if ((sdyn->flags & SEC_CODE) != 0)
1901         phdr->p_flags |= PF_X;
1902       phdr->p_align = 1 << bfd_get_section_alignment (abfd, sdyn);
1903
1904       ++phdr;
1905       ++phdr_count;
1906     }
1907
1908   /* Make sure the return value from get_program_header_size matches
1909      what we computed here.  */
1910   if (phdr_count != phdr_size / sizeof (Elf_External_Phdr))
1911     abort ();
1912
1913   /* Set up program header information.  */
1914   i_ehdrp = elf_elfheader (abfd);
1915   i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
1916   i_ehdrp->e_phoff = off;
1917   i_ehdrp->e_phnum = phdr_count;
1918
1919   /* Save the program headers away.  I don't think anybody uses this
1920      information right now.  */
1921   elf_tdata (abfd)->phdr = ((Elf_Internal_Phdr *)
1922                             bfd_alloc (abfd,
1923                                        (phdr_count
1924                                         * sizeof (Elf_Internal_Phdr))));
1925   if (elf_tdata (abfd)->phdr == NULL && phdr_count != 0)
1926     {
1927       bfd_set_error (bfd_error_no_memory);
1928       return (file_ptr) -1;
1929     }
1930   memcpy (elf_tdata (abfd)->phdr, phdrs,
1931           phdr_count * sizeof (Elf_Internal_Phdr));
1932
1933   /* Write out the program headers.  */
1934   if (bfd_seek (abfd, off, SEEK_SET) != 0)
1935     return (file_ptr) -1;
1936
1937   for (i = 0, phdr = phdrs; i < phdr_count; i++, phdr++)
1938     {
1939       Elf_External_Phdr extphdr;
1940
1941       elf_swap_phdr_out (abfd, phdr, &extphdr);
1942       if (bfd_write (&extphdr, sizeof (Elf_External_Phdr), 1, abfd)
1943           != sizeof (Elf_External_Phdr))
1944         return (file_ptr) -1;
1945     }
1946
1947   return off + phdr_count * sizeof (Elf_External_Phdr);
1948 }
1949
1950 /* Work out the file positions of all the sections.  This is called by
1951    elf_compute_section_file_positions.  All the section sizes and VMAs
1952    must be known before this is called.
1953
1954    We do not consider reloc sections at this point, unless they form
1955    part of the loadable image.  Reloc sections are assigned file
1956    positions in assign_file_positions_for_relocs, which is called by
1957    write_object_contents and final_link.
1958
1959    If DOSYMS is false, we do not assign file positions for the symbol
1960    table or the string table.  */
1961
1962 static boolean
1963 assign_file_positions_except_relocs (abfd, dosyms)
1964      bfd *abfd;
1965      boolean dosyms;
1966 {
1967   struct elf_obj_tdata * const tdata = elf_tdata (abfd);
1968   Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
1969   Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
1970   file_ptr off;
1971
1972   /* Start after the ELF header.  */
1973   off = i_ehdrp->e_ehsize;
1974
1975   if ((abfd->flags & EXEC_P) == 0)
1976     {
1977       Elf_Internal_Shdr **hdrpp;
1978       unsigned int i;
1979
1980       /* We are not creating an executable, which means that we are
1981          not creating a program header, and that the actual order of
1982          the sections in the file is unimportant.  */
1983       for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
1984         {
1985           Elf_Internal_Shdr *hdr;
1986
1987           hdr = *hdrpp;
1988           if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
1989             {
1990               hdr->sh_offset = -1;
1991               continue;
1992             }
1993           if (! dosyms
1994               && (i == tdata->symtab_section
1995                   || i == tdata->strtab_section))
1996             {
1997               hdr->sh_offset = -1;
1998               continue;
1999             }
2000           
2001           off = assign_file_position_for_section (hdr, off, true);
2002         }
2003     }
2004   else
2005     {
2006       file_ptr phdr_off;
2007       bfd_size_type phdr_size;
2008       bfd_vma maxpagesize;
2009       Elf_Internal_Shdr **hdrpp;
2010       unsigned int i;
2011       Elf_Internal_Shdr *first;
2012       file_ptr phdr_map;
2013
2014       /* We are creating an executable.  We must create a program
2015          header.  We can't actually create the program header until we
2016          have set the file positions for the sections, but we can
2017          figure out how big it is going to be.  */
2018       off = align_file_position (off);
2019       phdr_size = get_program_header_size (abfd);
2020       if (phdr_size == (file_ptr) -1)
2021         return false;
2022       phdr_off = off;
2023       off += phdr_size;
2024
2025       maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
2026       if (maxpagesize == 0)
2027         maxpagesize = 1;
2028
2029       /* FIXME: We might want to sort the sections on the sh_addr
2030          field here.  For now, we just assume that the linker will
2031          create the sections in an appropriate order.  */
2032
2033       /* Assign file positions in two passes.  In the first pass, we
2034          assign a file position to every section which forms part of
2035          the executable image.  */
2036       first = NULL;
2037       for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2038         {
2039           Elf_Internal_Shdr *hdr;
2040
2041           hdr = *hdrpp;
2042           if ((hdr->sh_flags & SHF_ALLOC) == 0)
2043             continue;
2044
2045           if (first == NULL)
2046             first = hdr;
2047
2048           if ((abfd->flags & D_PAGED) != 0)
2049             {
2050               /* The section VMA must equal the file position modulo
2051                  the page size.  This is required by the program
2052                  header.  */
2053               off += (hdr->sh_addr - off) % maxpagesize;
2054             }
2055
2056           off = assign_file_position_for_section (hdr, off, false);
2057         }
2058
2059       /* Assign file positions to all the sections which do not form
2060          part of the loadable image, except for the relocs.  */
2061       for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2062         {
2063           Elf_Internal_Shdr *hdr;
2064
2065           hdr = *hdrpp;
2066           if ((hdr->sh_flags & SHF_ALLOC) != 0)
2067             continue;
2068           if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2069             {
2070               hdr->sh_offset = -1;
2071               continue;
2072             }
2073           if (! dosyms
2074               && (i == tdata->symtab_section
2075                   || i == tdata->strtab_section))
2076             {
2077               hdr->sh_offset = -1;
2078               continue;
2079             }
2080
2081           off = assign_file_position_for_section (hdr, off, true);
2082         }
2083
2084       phdr_map = map_program_segments (abfd, phdr_off, first, phdr_size);
2085       if (phdr_map == (file_ptr) -1)
2086         return false;
2087       BFD_ASSERT (phdr_map == phdr_off + phdr_size);
2088     }
2089
2090   /* Place the section headers.  */
2091   off = align_file_position (off);
2092   i_ehdrp->e_shoff = off;
2093   off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
2094
2095   elf_tdata (abfd)->next_file_pos = off;
2096
2097   return true;
2098 }
2099
2100 static boolean
2101 prep_headers (abfd)
2102      bfd *abfd;
2103 {
2104   Elf_Internal_Ehdr *i_ehdrp;   /* Elf file header, internal form */
2105   Elf_Internal_Phdr *i_phdrp = 0;       /* Program header table, internal form */
2106   Elf_Internal_Shdr **i_shdrp;  /* Section header table, internal form */
2107   int count;
2108   struct strtab *shstrtab;
2109
2110   i_ehdrp = elf_elfheader (abfd);
2111   i_shdrp = elf_elfsections (abfd);
2112
2113   shstrtab = bfd_new_strtab (abfd);
2114   if (!shstrtab)
2115     return false;
2116
2117   elf_shstrtab (abfd) = shstrtab;
2118
2119   i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
2120   i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
2121   i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
2122   i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
2123
2124   i_ehdrp->e_ident[EI_CLASS] = ELFCLASS;
2125   i_ehdrp->e_ident[EI_DATA] =
2126     abfd->xvec->byteorder_big_p ? ELFDATA2MSB : ELFDATA2LSB;
2127   i_ehdrp->e_ident[EI_VERSION] = EV_CURRENT;
2128
2129   for (count = EI_PAD; count < EI_NIDENT; count++)
2130     i_ehdrp->e_ident[count] = 0;
2131
2132   i_ehdrp->e_type = (abfd->flags & EXEC_P) ? ET_EXEC : ET_REL;
2133   switch (bfd_get_arch (abfd))
2134     {
2135     case bfd_arch_unknown:
2136       i_ehdrp->e_machine = EM_NONE;
2137       break;
2138     case bfd_arch_sparc:
2139       i_ehdrp->e_machine = EM_SPARC;
2140       /* start-sanitize-v9 */
2141 #if ARCH_SIZE == 64
2142       i_ehdrp->e_machine = EM_SPARC64;
2143 #endif
2144       /* end-sanitize-v9 */
2145       break;
2146     case bfd_arch_i386:
2147       i_ehdrp->e_machine = EM_386;
2148       break;
2149     case bfd_arch_m68k:
2150       i_ehdrp->e_machine = EM_68K;
2151       break;
2152     case bfd_arch_m88k:
2153       i_ehdrp->e_machine = EM_88K;
2154       break;
2155     case bfd_arch_i860:
2156       i_ehdrp->e_machine = EM_860;
2157       break;
2158     case bfd_arch_mips: /* MIPS Rxxxx */
2159       i_ehdrp->e_machine = EM_MIPS;     /* only MIPS R3000 */
2160       break;
2161     case bfd_arch_hppa:
2162       i_ehdrp->e_machine = EM_PARISC;
2163       break;
2164     case bfd_arch_powerpc:
2165       i_ehdrp->e_machine = EM_CYGNUS_POWERPC;
2166       break;
2167       /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
2168     default:
2169       i_ehdrp->e_machine = EM_NONE;
2170     }
2171   i_ehdrp->e_version = EV_CURRENT;
2172   i_ehdrp->e_ehsize = sizeof (Elf_External_Ehdr);
2173
2174   /* no program header, for now. */
2175   i_ehdrp->e_phoff = 0;
2176   i_ehdrp->e_phentsize = 0;
2177   i_ehdrp->e_phnum = 0;
2178
2179   /* each bfd section is section header entry */
2180   i_ehdrp->e_entry = bfd_get_start_address (abfd);
2181   i_ehdrp->e_shentsize = sizeof (Elf_External_Shdr);
2182
2183   /* if we're building an executable, we'll need a program header table */
2184   if (abfd->flags & EXEC_P)
2185     {
2186       /* it all happens later */
2187 #if 0
2188       i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2189
2190       /* elf_build_phdrs() returns a (NULL-terminated) array of
2191          Elf_Internal_Phdrs */
2192       i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
2193       i_ehdrp->e_phoff = outbase;
2194       outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
2195 #endif
2196     }
2197   else
2198     {
2199       i_ehdrp->e_phentsize = 0;
2200       i_phdrp = 0;
2201       i_ehdrp->e_phoff = 0;
2202     }
2203
2204   elf_tdata (abfd)->symtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2205                                                             ".symtab");
2206   elf_tdata (abfd)->strtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2207                                                             ".strtab");
2208   elf_tdata (abfd)->shstrtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2209                                                               ".shstrtab");
2210   if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2211       || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2212       || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
2213     return false;
2214
2215   return true;
2216 }
2217
2218 static boolean
2219 swap_out_syms (abfd)
2220      bfd *abfd;
2221 {
2222   if (!elf_map_symbols (abfd))
2223     return false;
2224
2225   /* Dump out the symtabs. */
2226   {
2227     int symcount = bfd_get_symcount (abfd);
2228     asymbol **syms = bfd_get_outsymbols (abfd);
2229     struct strtab *stt = bfd_new_strtab (abfd);
2230     Elf_Internal_Shdr *symtab_hdr;
2231     Elf_Internal_Shdr *symstrtab_hdr;
2232     Elf_External_Sym *outbound_syms;
2233     int idx;
2234
2235     if (!stt)
2236       return false;
2237     symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2238     symtab_hdr->sh_type = SHT_SYMTAB;
2239     symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
2240     symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
2241     symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
2242     symtab_hdr->sh_addralign = FILE_ALIGN;
2243
2244     symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2245     symstrtab_hdr->sh_type = SHT_STRTAB;
2246
2247     outbound_syms = (Elf_External_Sym *)
2248       bfd_alloc (abfd, (1 + symcount) * sizeof (Elf_External_Sym));
2249     if (!outbound_syms)
2250       {
2251         bfd_set_error (bfd_error_no_memory);
2252         return false;
2253       }
2254     /* now generate the data (for "contents") */
2255     {
2256       /* Fill in zeroth symbol and swap it out.  */
2257       Elf_Internal_Sym sym;
2258       sym.st_name = 0;
2259       sym.st_value = 0;
2260       sym.st_size = 0;
2261       sym.st_info = 0;
2262       sym.st_other = 0;
2263       sym.st_shndx = SHN_UNDEF;
2264       elf_swap_symbol_out (abfd, &sym, outbound_syms);
2265     }
2266     for (idx = 0; idx < symcount; idx++)
2267       {
2268         Elf_Internal_Sym sym;
2269         bfd_vma value = syms[idx]->value;
2270
2271         if (syms[idx]->flags & BSF_SECTION_SYM)
2272           /* Section symbols have no names.  */
2273           sym.st_name = 0;
2274         else
2275           {
2276             sym.st_name = bfd_add_to_strtab (abfd, stt, syms[idx]->name);
2277             if (sym.st_name == (unsigned long) -1)
2278               return false;
2279           }
2280
2281         if (bfd_is_com_section (syms[idx]->section))
2282           {
2283             /* ELF common symbols put the alignment into the `value' field,
2284                and the size into the `size' field.  This is backwards from
2285                how BFD handles it, so reverse it here.  */
2286             sym.st_size = value;
2287             /* Should retrieve this from somewhere... */
2288             sym.st_value = 16;
2289             sym.st_shndx = elf_section_from_bfd_section (abfd,
2290                                                          syms[idx]->section);
2291           }
2292         else
2293           {
2294             asection *sec = syms[idx]->section;
2295             elf_symbol_type *type_ptr;
2296             int shndx;
2297
2298             if (sec->output_section)
2299               {
2300                 value += sec->output_offset;
2301                 sec = sec->output_section;
2302               }
2303             value += sec->vma;
2304             sym.st_value = value;
2305             type_ptr = elf_symbol_from (abfd, syms[idx]);
2306             sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
2307             sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec);
2308             if (shndx == -1)
2309               {
2310                 asection *sec2;
2311                 /* Writing this would be a hell of a lot easier if we had
2312                    some decent documentation on bfd, and knew what to expect
2313                    of the library, and what to demand of applications.  For
2314                    example, it appears that `objcopy' might not set the
2315                    section of a symbol to be a section that is actually in
2316                    the output file.  */
2317                 sec2 = bfd_get_section_by_name (abfd, sec->name);
2318                 BFD_ASSERT (sec2 != 0);
2319                 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec2);
2320                 BFD_ASSERT (shndx != -1);
2321               }
2322           }
2323
2324         if (bfd_is_com_section (syms[idx]->section))
2325           sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_OBJECT);
2326         else if (syms[idx]->section == &bfd_und_section)
2327           sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_NOTYPE);
2328         else if (syms[idx]->flags & BSF_SECTION_SYM)
2329           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
2330         else if (syms[idx]->flags & BSF_FILE)
2331           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
2332         else
2333           {
2334             int bind = STB_LOCAL;
2335             int type = STT_OBJECT;
2336             unsigned int flags = syms[idx]->flags;
2337
2338             if (flags & BSF_LOCAL)
2339               bind = STB_LOCAL;
2340             else if (flags & BSF_WEAK)
2341               bind = STB_WEAK;
2342             else if (flags & BSF_GLOBAL)
2343               bind = STB_GLOBAL;
2344
2345             if (flags & BSF_FUNCTION)
2346               type = STT_FUNC;
2347
2348             sym.st_info = ELF_ST_INFO (bind, type);
2349           }
2350
2351         sym.st_other = 0;
2352         elf_swap_symbol_out (abfd, &sym,
2353                              (outbound_syms
2354                               + elf_sym_extra (abfd)[idx].elf_sym_num));
2355       }
2356
2357     symtab_hdr->contents = (PTR) outbound_syms;
2358     symstrtab_hdr->contents = (PTR) stt->tab;
2359     symstrtab_hdr->sh_size = stt->length;
2360     symstrtab_hdr->sh_type = SHT_STRTAB;
2361
2362     symstrtab_hdr->sh_flags = 0;
2363     symstrtab_hdr->sh_addr = 0;
2364     symstrtab_hdr->sh_entsize = 0;
2365     symstrtab_hdr->sh_link = 0;
2366     symstrtab_hdr->sh_info = 0;
2367     symstrtab_hdr->sh_addralign = 1;
2368     symstrtab_hdr->size = 0;
2369   }
2370
2371   return true;
2372 }
2373
2374 static boolean
2375 write_shdrs_and_ehdr (abfd)
2376      bfd *abfd;
2377 {
2378   Elf_External_Ehdr x_ehdr;     /* Elf file header, external form */
2379   Elf_Internal_Ehdr *i_ehdrp;   /* Elf file header, internal form */
2380   Elf_External_Shdr *x_shdrp;   /* Section header table, external form */
2381   Elf_Internal_Shdr **i_shdrp;  /* Section header table, internal form */
2382   unsigned int count;
2383   struct strtab *shstrtab;
2384
2385   i_ehdrp = elf_elfheader (abfd);
2386   i_shdrp = elf_elfsections (abfd);
2387   shstrtab = elf_shstrtab (abfd);
2388
2389   /* swap the header before spitting it out... */
2390
2391 #if DEBUG & 1
2392   elf_debug_file (i_ehdrp);
2393 #endif
2394   elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr);
2395   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
2396       || (bfd_write ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd)
2397           != sizeof (x_ehdr)))
2398     return false;
2399
2400   /* at this point we've concocted all the ELF sections... */
2401   x_shdrp = (Elf_External_Shdr *)
2402     bfd_alloc (abfd, sizeof (*x_shdrp) * (i_ehdrp->e_shnum));
2403   if (!x_shdrp)
2404     {
2405       bfd_set_error (bfd_error_no_memory);
2406       return false;
2407     }
2408
2409   for (count = 0; count < i_ehdrp->e_shnum; count++)
2410     {
2411 #if DEBUG & 2
2412       elf_debug_section (shstrtab->tab + i_shdrp[count]->sh_name, count,
2413                          i_shdrp[count]);
2414 #endif
2415       elf_swap_shdr_out (abfd, i_shdrp[count], x_shdrp + count);
2416     }
2417   if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET) != 0
2418       || (bfd_write ((PTR) x_shdrp, sizeof (*x_shdrp), i_ehdrp->e_shnum, abfd)
2419           != sizeof (*x_shdrp) * i_ehdrp->e_shnum))
2420     return false;
2421
2422   /* need to dump the string table too... */
2423
2424   return true;
2425 }
2426
2427 /* Assign file positions for all the reloc sections which are not part
2428    of the loadable file image.  */
2429
2430 static void
2431 assign_file_positions_for_relocs (abfd)
2432      bfd *abfd;
2433 {
2434   file_ptr off;
2435   unsigned int i;
2436   Elf_Internal_Shdr **shdrpp;
2437
2438   off = elf_tdata (abfd)->next_file_pos;
2439
2440   for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
2441        i < elf_elfheader (abfd)->e_shnum;
2442        i++, shdrpp++)
2443     {
2444       Elf_Internal_Shdr *shdrp;
2445
2446       shdrp = *shdrpp;
2447       if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
2448           && shdrp->sh_offset == -1)
2449         off = assign_file_position_for_section (shdrp, off, true);
2450     }
2451
2452   elf_tdata (abfd)->next_file_pos = off;
2453 }
2454
2455 boolean
2456 NAME(bfd_elf,write_object_contents) (abfd)
2457      bfd *abfd;
2458 {
2459   struct elf_backend_data *bed = get_elf_backend_data (abfd);
2460   Elf_Internal_Ehdr *i_ehdrp;
2461   Elf_Internal_Shdr **i_shdrp;
2462   unsigned int count;
2463
2464   if (! abfd->output_has_begun
2465       && ! elf_compute_section_file_positions (abfd,
2466                                                (struct bfd_link_info *) NULL))
2467     return false;
2468
2469   i_shdrp = elf_elfsections (abfd);
2470   i_ehdrp = elf_elfheader (abfd);
2471
2472   bfd_map_over_sections (abfd, write_relocs, (PTR) 0);
2473   assign_file_positions_for_relocs (abfd);
2474
2475   /* After writing the headers, we need to write the sections too... */
2476   for (count = 1; count < i_ehdrp->e_shnum; count++)
2477     {
2478       if (bed->elf_backend_section_processing)
2479         (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
2480       if (i_shdrp[count]->contents)
2481         {
2482           if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
2483               || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
2484                              1, abfd)
2485                   != i_shdrp[count]->sh_size))
2486             return false;
2487         }
2488     }
2489
2490   if (bed->elf_backend_final_write_processing)
2491     (*bed->elf_backend_final_write_processing) (abfd);
2492
2493   return write_shdrs_and_ehdr (abfd);
2494 }
2495
2496 /* Given an index of a section, retrieve a pointer to it.  Note
2497    that for our purposes, sections are indexed by {1, 2, ...} with
2498    0 being an illegal index. */
2499
2500 /* In the original, each ELF section went into exactly one BFD
2501    section. This doesn't really make sense, so we need a real mapping.
2502    The mapping has to hide in the Elf_Internal_Shdr since asection
2503    doesn't have anything like a tdata field... */
2504
2505 static asection *
2506 section_from_elf_index (abfd, index)
2507      bfd *abfd;
2508      unsigned int index;
2509 {
2510   /* @@ Is bfd_com_section really correct in all the places it could
2511      be returned from this routine?  */
2512
2513   if (index == SHN_ABS)
2514     return &bfd_com_section;    /* not abs? */
2515   if (index == SHN_COMMON)
2516     return &bfd_com_section;
2517
2518   if (index > elf_elfheader (abfd)->e_shnum)
2519     return NULL;
2520
2521   {
2522     Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[index];
2523
2524     switch (hdr->sh_type)
2525       {
2526         /* ELF sections that map to BFD sections */
2527       case SHT_PROGBITS:
2528       case SHT_NOBITS:
2529       case SHT_HASH:
2530       case SHT_DYNAMIC:
2531         if (hdr->rawdata == NULL)
2532           {
2533             if (! bfd_section_from_shdr (abfd, index))
2534               return NULL;
2535           }
2536         return (struct sec *) hdr->rawdata;
2537
2538       default:
2539         return (struct sec *) &bfd_abs_section;
2540       }
2541   }
2542 }
2543
2544 /* given a section, search the header to find them... */
2545 static int
2546 elf_section_from_bfd_section (abfd, asect)
2547      bfd *abfd;
2548      struct sec *asect;
2549 {
2550   Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
2551   int index;
2552   Elf_Internal_Shdr *hdr;
2553   int maxindex = elf_elfheader (abfd)->e_shnum;
2554
2555   if (asect == &bfd_abs_section)
2556     return SHN_ABS;
2557   if (asect == &bfd_com_section)
2558     return SHN_COMMON;
2559   if (asect == &bfd_und_section)
2560     return SHN_UNDEF;
2561
2562   for (index = 0; index < maxindex; index++)
2563     {
2564       hdr = i_shdrp[index];
2565       switch (hdr->sh_type)
2566         {
2567           /* ELF sections that map to BFD sections */
2568         case SHT_PROGBITS:
2569         case SHT_NOBITS:
2570         case SHT_NOTE:
2571         case SHT_HASH:
2572         case SHT_DYNAMIC:
2573         case SHT_DYNSYM:
2574           if (hdr->rawdata)
2575             {
2576               if (((struct sec *) (hdr->rawdata)) == asect)
2577                 return index;
2578             }
2579           break;
2580
2581         case SHT_REL:
2582         case SHT_RELA:
2583           /* We sometimes map a reloc section to a BFD section.  */
2584           if (((hdr->sh_flags & SHF_ALLOC) != 0
2585                || hdr->sh_link != elf_onesymtab (abfd))
2586               && (asection *) hdr->rawdata == asect)
2587             return index;
2588           break;
2589
2590         case SHT_STRTAB:
2591           /* We map most string tables to BFD sections.  */
2592           if (index != elf_elfheader (abfd)->e_shstrndx
2593               && index != elf_onesymtab (abfd)
2594               && (asection *) hdr->rawdata == asect)
2595             return index;
2596
2597           /* FALL THROUGH */
2598         default:
2599           {
2600             struct elf_backend_data *bed = get_elf_backend_data (abfd);
2601
2602             if (bed->elf_backend_section_from_bfd_section)
2603               {
2604                 int retval;
2605
2606                 retval = index;
2607                 if ((*bed->elf_backend_section_from_bfd_section)
2608                     (abfd, hdr, asect, &retval))
2609                   return retval;
2610               }
2611           }
2612           break;
2613         }
2614     }
2615   return -1;
2616 }
2617
2618 /* given a symbol, return the bfd index for that symbol.  */
2619 static int
2620 elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
2621      bfd *abfd;
2622      struct symbol_cache_entry **asym_ptr_ptr;
2623 {
2624   struct symbol_cache_entry *asym_ptr = *asym_ptr_ptr;
2625   int idx;
2626   flagword flags = asym_ptr->flags;
2627
2628   /* When gas creates relocations against local labels, it creates its
2629      own symbol for the section, but does put the symbol into the
2630      symbol chain, so udata is 0.  When the linker is generating
2631      relocatable output, this section symbol may be for one of the
2632      input sections rather than the output section.  */
2633   if (asym_ptr->udata == (PTR) 0
2634       && (flags & BSF_SECTION_SYM)
2635       && asym_ptr->section)
2636     {
2637       int indx;
2638
2639       if (asym_ptr->section->output_section != NULL)
2640         indx = asym_ptr->section->output_section->index;
2641       else
2642         indx = asym_ptr->section->index;
2643       if (elf_section_syms (abfd)[indx])
2644         asym_ptr->udata = elf_section_syms (abfd)[indx]->udata;
2645     }
2646
2647   if (asym_ptr->udata)
2648     idx = ((Elf_Sym_Extra *) asym_ptr->udata)->elf_sym_num;
2649   else
2650     {
2651       abort ();
2652     }
2653
2654 #if DEBUG & 4
2655   {
2656
2657     fprintf (stderr,
2658              "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx %s\n",
2659      (long) asym_ptr, asym_ptr->name, idx, flags, elf_symbol_flags (flags));
2660     fflush (stderr);
2661   }
2662 #endif
2663
2664   return idx;
2665 }
2666
2667 static long
2668 elf_slurp_symbol_table (abfd, symptrs, dynamic)
2669      bfd *abfd;
2670      asymbol **symptrs;         /* Buffer for generated bfd symbols */
2671      boolean dynamic;
2672 {
2673   Elf_Internal_Shdr *hdr;
2674   long symcount;                /* Number of external ELF symbols */
2675   elf_symbol_type *sym;         /* Pointer to current bfd symbol */
2676   elf_symbol_type *symbase;     /* Buffer for generated bfd symbols */
2677   Elf_Internal_Sym i_sym;
2678   Elf_External_Sym *x_symp = NULL;
2679
2680   /* Read each raw ELF symbol, converting from external ELF form to
2681      internal ELF form, and then using the information to create a
2682      canonical bfd symbol table entry.
2683
2684      Note that we allocate the initial bfd canonical symbol buffer
2685      based on a one-to-one mapping of the ELF symbols to canonical
2686      symbols.  We actually use all the ELF symbols, so there will be no
2687      space left over at the end.  When we have all the symbols, we
2688      build the caller's pointer vector. */
2689
2690   if (dynamic)
2691     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2692   else
2693     hdr = &elf_tdata (abfd)->symtab_hdr;
2694   if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2695     return -1;
2696
2697   symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2698
2699   if (symcount == 0)
2700     sym = symbase = NULL;
2701   else
2702     {
2703       long i;
2704
2705       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2706         return -1;
2707
2708       symbase = ((elf_symbol_type *)
2709                  bfd_zalloc (abfd, symcount * sizeof (elf_symbol_type)));
2710       if (symbase == (elf_symbol_type *) NULL)
2711         {
2712           bfd_set_error (bfd_error_no_memory);
2713           return -1;
2714         }
2715       sym = symbase;
2716
2717       /* Temporarily allocate room for the raw ELF symbols.  */
2718       x_symp = ((Elf_External_Sym *)
2719                 malloc (symcount * sizeof (Elf_External_Sym)));
2720       if (x_symp == NULL && symcount != 0)
2721         {
2722           bfd_set_error (bfd_error_no_memory);
2723           goto error_return;
2724         }
2725
2726       if (bfd_read ((PTR) x_symp, sizeof (Elf_External_Sym), symcount, abfd)
2727           != symcount * sizeof (Elf_External_Sym))
2728         goto error_return;
2729       /* Skip first symbol, which is a null dummy.  */
2730       for (i = 1; i < symcount; i++)
2731         {
2732           elf_swap_symbol_in (abfd, x_symp + i, &i_sym);
2733           memcpy (&sym->internal_elf_sym, &i_sym, sizeof (Elf_Internal_Sym));
2734 #ifdef ELF_KEEP_EXTSYM
2735           memcpy (&sym->native_elf_sym, x_symp + i, sizeof (Elf_External_Sym));
2736 #endif
2737           sym->symbol.the_bfd = abfd;
2738
2739           sym->symbol.name = elf_string_from_elf_section (abfd, hdr->sh_link,
2740                                                           i_sym.st_name);
2741
2742           sym->symbol.value = i_sym.st_value;
2743
2744           if (i_sym.st_shndx > 0 && i_sym.st_shndx < SHN_LORESERVE)
2745             {
2746               sym->symbol.section = section_from_elf_index (abfd,
2747                                                             i_sym.st_shndx);
2748               if (sym->symbol.section == NULL)
2749                 {
2750                   /* This symbol is in a section for which we did not
2751                      create a BFD section.  Just use bfd_abs_section,
2752                      although it is wrong.  FIXME.  */
2753                   sym->symbol.section = &bfd_abs_section;
2754                 }
2755             }
2756           else if (i_sym.st_shndx == SHN_ABS)
2757             {
2758               sym->symbol.section = &bfd_abs_section;
2759             }
2760           else if (i_sym.st_shndx == SHN_COMMON)
2761             {
2762               sym->symbol.section = &bfd_com_section;
2763               /* Elf puts the alignment into the `value' field, and
2764                  the size into the `size' field.  BFD wants to see the
2765                  size in the value field, and doesn't care (at the
2766                  moment) about the alignment.  */
2767               sym->symbol.value = i_sym.st_size;
2768             }
2769           else if (i_sym.st_shndx == SHN_UNDEF)
2770             {
2771               sym->symbol.section = &bfd_und_section;
2772             }
2773           else
2774             sym->symbol.section = &bfd_abs_section;
2775
2776           sym->symbol.value -= sym->symbol.section->vma;
2777
2778           switch (ELF_ST_BIND (i_sym.st_info))
2779             {
2780             case STB_LOCAL:
2781               sym->symbol.flags |= BSF_LOCAL;
2782               break;
2783             case STB_GLOBAL:
2784               sym->symbol.flags |= BSF_GLOBAL;
2785               break;
2786             case STB_WEAK:
2787               sym->symbol.flags |= BSF_WEAK;
2788               break;
2789             }
2790
2791           switch (ELF_ST_TYPE (i_sym.st_info))
2792             {
2793             case STT_SECTION:
2794               sym->symbol.flags |= BSF_SECTION_SYM | BSF_DEBUGGING;
2795               break;
2796             case STT_FILE:
2797               sym->symbol.flags |= BSF_FILE | BSF_DEBUGGING;
2798               break;
2799             case STT_FUNC:
2800               sym->symbol.flags |= BSF_FUNCTION;
2801               break;
2802             }
2803
2804           if (dynamic)
2805             sym->symbol.flags |= BSF_DYNAMIC;
2806
2807           /* Do some backend-specific processing on this symbol.  */
2808           {
2809             struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2810             if (ebd->elf_backend_symbol_processing)
2811               (*ebd->elf_backend_symbol_processing) (abfd, &sym->symbol);
2812           }
2813
2814           sym++;
2815         }
2816     }
2817
2818   /* Do some backend-specific processing on this symbol table.  */
2819   {
2820     struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2821     if (ebd->elf_backend_symbol_table_processing)
2822       (*ebd->elf_backend_symbol_table_processing) (abfd, symbase, symcount);
2823   }
2824
2825   /* We rely on the zalloc to clear out the final symbol entry.  */
2826
2827   symcount = sym - symbase;
2828
2829   /* Fill in the user's symbol pointer vector if needed.  */
2830   if (symptrs)
2831     {
2832       long l = symcount;
2833
2834       sym = symbase;
2835       while (l-- > 0)
2836         {
2837           *symptrs++ = &sym->symbol;
2838           sym++;
2839         }
2840       *symptrs = 0;             /* Final null pointer */
2841     }
2842
2843   if (x_symp != NULL)
2844     free (x_symp);
2845   return symcount;
2846 error_return:
2847   if (x_symp != NULL)
2848     free (x_symp);
2849   return -1;
2850 }
2851
2852 /* Return the number of bytes required to hold the symtab vector.
2853
2854    Note that we base it on the count plus 1, since we will null terminate
2855    the vector allocated based on this size.  However, the ELF symbol table
2856    always has a dummy entry as symbol #0, so it ends up even.  */
2857
2858 long
2859 elf_get_symtab_upper_bound (abfd)
2860      bfd *abfd;
2861 {
2862   long symcount;
2863   long symtab_size;
2864   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
2865
2866   symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2867   symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
2868
2869   return symtab_size;
2870 }
2871
2872 long
2873 elf_get_dynamic_symtab_upper_bound (abfd)
2874      bfd *abfd;
2875 {
2876   long symcount;
2877   long symtab_size;
2878   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2879
2880   symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2881   symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
2882
2883   return symtab_size;
2884 }
2885
2886 /*
2887         This function return the number of bytes required to store the
2888         relocation information associated with section <<sect>>
2889         attached to bfd <<abfd>>
2890
2891 */
2892 long
2893 elf_get_reloc_upper_bound (abfd, asect)
2894      bfd *abfd;
2895      sec_ptr asect;
2896 {
2897   if (asect->flags & SEC_RELOC)
2898     {
2899       /* either rel or rela */
2900       return elf_section_data (asect)->rel_hdr.sh_size;
2901     }
2902   else
2903     return 0;
2904 }
2905
2906 static boolean
2907 elf_slurp_reloca_table (abfd, asect, symbols)
2908      bfd *abfd;
2909      sec_ptr asect;
2910      asymbol **symbols;
2911 {
2912   Elf_External_Rela *native_relocs;
2913   arelent *reloc_cache;
2914   arelent *cache_ptr;
2915
2916   unsigned int idx;
2917
2918   if (asect->relocation)
2919     return true;
2920   if (asect->reloc_count == 0)
2921     return true;
2922   if (asect->flags & SEC_CONSTRUCTOR)
2923     return true;
2924
2925   if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
2926     return false;
2927   native_relocs = (Elf_External_Rela *)
2928     bfd_alloc (abfd, asect->reloc_count * sizeof (Elf_External_Rela));
2929   if (!native_relocs)
2930     {
2931       bfd_set_error (bfd_error_no_memory);
2932       return false;
2933     }
2934   if (bfd_read ((PTR) native_relocs,
2935                 sizeof (Elf_External_Rela), asect->reloc_count, abfd)
2936       != sizeof (Elf_External_Rela) * asect->reloc_count)
2937     return false;
2938
2939   reloc_cache = (arelent *)
2940     bfd_alloc (abfd, (size_t) (asect->reloc_count * sizeof (arelent)));
2941
2942   if (!reloc_cache)
2943     {
2944       bfd_set_error (bfd_error_no_memory);
2945       return false;
2946     }
2947
2948   for (idx = 0; idx < asect->reloc_count; idx++)
2949     {
2950       Elf_Internal_Rela dst;
2951       Elf_External_Rela *src;
2952
2953       cache_ptr = reloc_cache + idx;
2954       src = native_relocs + idx;
2955       elf_swap_reloca_in (abfd, src, &dst);
2956
2957 #ifdef RELOC_PROCESSING
2958       RELOC_PROCESSING (cache_ptr, &dst, symbols, abfd, asect);
2959 #else
2960       if (asect->flags & SEC_RELOC)
2961         {
2962           /* relocatable, so the offset is off of the section */
2963           cache_ptr->address = dst.r_offset + asect->vma;
2964         }
2965       else
2966         {
2967           /* non-relocatable, so the offset a virtual address */
2968           cache_ptr->address = dst.r_offset;
2969         }
2970
2971       /* ELF_R_SYM(dst.r_info) is the symbol table offset.  An offset
2972          of zero points to the dummy symbol, which was not read into
2973          the symbol table SYMBOLS.  */
2974       if (ELF_R_SYM (dst.r_info) == 0)
2975         cache_ptr->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
2976       else
2977         {
2978           asymbol *s;
2979
2980           cache_ptr->sym_ptr_ptr = symbols + ELF_R_SYM (dst.r_info) - 1;
2981
2982           /* Translate any ELF section symbol into a BFD section
2983              symbol.  */
2984           s = *(cache_ptr->sym_ptr_ptr);
2985           if (s->flags & BSF_SECTION_SYM)
2986             {
2987               cache_ptr->sym_ptr_ptr = s->section->symbol_ptr_ptr;
2988               s = *cache_ptr->sym_ptr_ptr;
2989               if (s->name == 0 || s->name[0] == 0)
2990                 abort ();
2991             }
2992         }
2993       cache_ptr->addend = dst.r_addend;
2994
2995       /* Fill in the cache_ptr->howto field from dst.r_type */
2996       {
2997         struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2998         (*ebd->elf_info_to_howto) (abfd, cache_ptr, &dst);
2999       }
3000 #endif
3001     }
3002
3003   asect->relocation = reloc_cache;
3004   return true;
3005 }
3006
3007 #ifdef DEBUG
3008 static void
3009 elf_debug_section (str, num, hdr)
3010      char *str;
3011      int num;
3012      Elf_Internal_Shdr *hdr;
3013 {
3014   fprintf (stderr, "\nSection#%d '%s' 0x%.8lx\n", num, str, (long) hdr);
3015   fprintf (stderr,
3016            "sh_name      = %ld\tsh_type      = %ld\tsh_flags     = %ld\n",
3017            (long) hdr->sh_name,
3018            (long) hdr->sh_type,
3019            (long) hdr->sh_flags);
3020   fprintf (stderr,
3021            "sh_addr      = %ld\tsh_offset    = %ld\tsh_size      = %ld\n",
3022            (long) hdr->sh_addr,
3023            (long) hdr->sh_offset,
3024            (long) hdr->sh_size);
3025   fprintf (stderr,
3026            "sh_link      = %ld\tsh_info      = %ld\tsh_addralign = %ld\n",
3027            (long) hdr->sh_link,
3028            (long) hdr->sh_info,
3029            (long) hdr->sh_addralign);
3030   fprintf (stderr, "sh_entsize   = %ld\n",
3031            (long) hdr->sh_entsize);
3032   fprintf (stderr, "rawdata      = 0x%.8lx\n", (long) hdr->rawdata);
3033   fprintf (stderr, "contents     = 0x%.8lx\n", (long) hdr->contents);
3034   fprintf (stderr, "size         = %ld\n", (long) hdr->size);
3035   fflush (stderr);
3036 }
3037
3038 static void
3039 elf_debug_file (ehdrp)
3040      Elf_Internal_Ehdr *ehdrp;
3041 {
3042   fprintf (stderr, "e_entry      = 0x%.8lx\n", (long) ehdrp->e_entry);
3043   fprintf (stderr, "e_phoff      = %ld\n", (long) ehdrp->e_phoff);
3044   fprintf (stderr, "e_phnum      = %ld\n", (long) ehdrp->e_phnum);
3045   fprintf (stderr, "e_phentsize  = %ld\n", (long) ehdrp->e_phentsize);
3046   fprintf (stderr, "e_shoff      = %ld\n", (long) ehdrp->e_shoff);
3047   fprintf (stderr, "e_shnum      = %ld\n", (long) ehdrp->e_shnum);
3048   fprintf (stderr, "e_shentsize  = %ld\n", (long) ehdrp->e_shentsize);
3049 }
3050 #endif
3051
3052 static boolean
3053 elf_slurp_reloc_table (abfd, asect, symbols)
3054      bfd *abfd;
3055      sec_ptr asect;
3056      asymbol **symbols;
3057 {
3058   Elf_External_Rel *native_relocs;
3059   arelent *reloc_cache;
3060   arelent *cache_ptr;
3061   Elf_Internal_Shdr *data_hdr;
3062   bfd_vma data_off;
3063   unsigned long data_max;
3064   char buf[4];                  /* FIXME -- might be elf64 */
3065
3066   unsigned int idx;
3067
3068   if (asect->relocation)
3069     return true;
3070   if (asect->reloc_count == 0)
3071     return true;
3072   if (asect->flags & SEC_CONSTRUCTOR)
3073     return true;
3074
3075   if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
3076     return false;
3077   native_relocs = (Elf_External_Rel *)
3078     bfd_alloc (abfd, asect->reloc_count * sizeof (Elf_External_Rel));
3079   if (!native_relocs)
3080     {
3081       bfd_set_error (bfd_error_no_memory);
3082       return false;
3083     }
3084   if (bfd_read ((PTR) native_relocs,
3085                 sizeof (Elf_External_Rel), asect->reloc_count, abfd)
3086       != sizeof (Elf_External_Rel) * asect->reloc_count)
3087     return false;
3088
3089   reloc_cache = (arelent *)
3090     bfd_alloc (abfd, (size_t) (asect->reloc_count * sizeof (arelent)));
3091
3092   if (!reloc_cache)
3093     {
3094       bfd_set_error (bfd_error_no_memory);
3095       return false;
3096     }
3097
3098   /* Get the offset of the start of the segment we are relocating to read in
3099      the implicit addend.  */
3100   data_hdr = &elf_section_data (asect)->this_hdr;
3101   data_off = data_hdr->sh_offset;
3102   data_max = data_hdr->sh_size - sizeof (buf) + 1;
3103
3104 #if DEBUG & 2
3105   elf_debug_section ("data section", -1, data_hdr);
3106 #endif
3107
3108   for (idx = 0; idx < asect->reloc_count; idx++)
3109     {
3110 #ifdef RELOC_PROCESSING
3111       Elf_Internal_Rel dst;
3112       Elf_External_Rel *src;
3113
3114       cache_ptr = reloc_cache + idx;
3115       src = native_relocs + idx;
3116       elf_swap_reloc_in (abfd, src, &dst);
3117
3118       RELOC_PROCESSING (cache_ptr, &dst, symbols, abfd, asect);
3119 #else
3120       Elf_Internal_Rel dst;
3121       Elf_External_Rel *src;
3122
3123       cache_ptr = reloc_cache + idx;
3124       src = native_relocs + idx;
3125
3126       elf_swap_reloc_in (abfd, src, &dst);
3127
3128       if (asect->flags & SEC_RELOC)
3129         {
3130           /* relocatable, so the offset is off of the section */
3131           cache_ptr->address = dst.r_offset + asect->vma;
3132         }
3133       else
3134         {
3135           /* non-relocatable, so the offset a virtual address */
3136           cache_ptr->address = dst.r_offset;
3137         }
3138
3139       /* ELF_R_SYM(dst.r_info) is the symbol table offset.  An offset
3140          of zero points to the dummy symbol, which was not read into
3141          the symbol table SYMBOLS.  */
3142       if (ELF_R_SYM (dst.r_info) == 0)
3143         cache_ptr->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
3144       else
3145         {
3146           asymbol *s;
3147
3148           cache_ptr->sym_ptr_ptr = symbols + ELF_R_SYM (dst.r_info) - 1;
3149
3150           /* Translate any ELF section symbol into a BFD section
3151              symbol.  */
3152           s = *(cache_ptr->sym_ptr_ptr);
3153           if (s->flags & BSF_SECTION_SYM)
3154             {
3155               cache_ptr->sym_ptr_ptr = s->section->symbol_ptr_ptr;
3156               s = *cache_ptr->sym_ptr_ptr;
3157               if (s->name == 0 || s->name[0] == 0)
3158                 abort ();
3159             }
3160         }
3161       BFD_ASSERT (dst.r_offset <= data_max);
3162       cache_ptr->addend = 0;
3163
3164       /* Fill in the cache_ptr->howto field from dst.r_type */
3165       {
3166         struct elf_backend_data *ebd = get_elf_backend_data (abfd);
3167         (*ebd->elf_info_to_howto_rel) (abfd, cache_ptr, &dst);
3168       }
3169 #endif
3170     }
3171
3172   asect->relocation = reloc_cache;
3173   return true;
3174 }
3175
3176 long
3177 elf_canonicalize_reloc (abfd, section, relptr, symbols)
3178      bfd *abfd;
3179      sec_ptr section;
3180      arelent **relptr;
3181      asymbol **symbols;
3182 {
3183   arelent *tblptr = section->relocation;
3184   unsigned int count = 0;
3185   int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
3186
3187   /* snarfed from coffcode.h */
3188   if (use_rela_p)
3189     {
3190       if (! elf_slurp_reloca_table (abfd, section, symbols))
3191         return -1;
3192     }
3193   else
3194     {
3195       if (! elf_slurp_reloc_table (abfd, section, symbols))
3196         return -1;
3197     }
3198
3199   tblptr = section->relocation;
3200
3201   for (; count++ < section->reloc_count;)
3202     *relptr++ = tblptr++;
3203
3204   *relptr = 0;
3205   return section->reloc_count;
3206 }
3207
3208 long
3209 elf_get_symtab (abfd, alocation)
3210      bfd *abfd;
3211      asymbol **alocation;
3212 {
3213   long symcount = elf_slurp_symbol_table (abfd, alocation, false);
3214
3215   if (symcount >= 0)
3216     bfd_get_symcount (abfd) = symcount;
3217   return symcount;
3218 }
3219
3220 long
3221 elf_canonicalize_dynamic_symtab (abfd, alocation)
3222      bfd *abfd;
3223      asymbol **alocation;
3224 {
3225   return elf_slurp_symbol_table (abfd, alocation, true);
3226 }
3227
3228 asymbol *
3229 elf_make_empty_symbol (abfd)
3230      bfd *abfd;
3231 {
3232   elf_symbol_type *newsym;
3233
3234   newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
3235   if (!newsym)
3236     {
3237       bfd_set_error (bfd_error_no_memory);
3238       return NULL;
3239     }
3240   else
3241     {
3242       newsym->symbol.the_bfd = abfd;
3243       return &newsym->symbol;
3244     }
3245 }
3246
3247 void
3248 elf_get_symbol_info (ignore_abfd, symbol, ret)
3249      bfd *ignore_abfd;
3250      asymbol *symbol;
3251      symbol_info *ret;
3252 {
3253   bfd_symbol_info (symbol, ret);
3254 }
3255
3256 void
3257 elf_print_symbol (ignore_abfd, filep, symbol, how)
3258      bfd *ignore_abfd;
3259      PTR filep;
3260      asymbol *symbol;
3261      bfd_print_symbol_type how;
3262 {
3263   FILE *file = (FILE *) filep;
3264   switch (how)
3265     {
3266     case bfd_print_symbol_name:
3267       fprintf (file, "%s", symbol->name);
3268       break;
3269     case bfd_print_symbol_more:
3270       fprintf (file, "elf ");
3271       fprintf_vma (file, symbol->value);
3272       fprintf (file, " %lx", (long) symbol->flags);
3273       break;
3274     case bfd_print_symbol_all:
3275       {
3276         CONST char *section_name;
3277         section_name = symbol->section ? symbol->section->name : "(*none*)";
3278         bfd_print_symbol_vandf ((PTR) file, symbol);
3279         fprintf (file, " %s\t%s",
3280                  section_name,
3281                  symbol->name);
3282       }
3283       break;
3284     }
3285
3286 }
3287
3288 alent *
3289 elf_get_lineno (ignore_abfd, symbol)
3290      bfd *ignore_abfd;
3291      asymbol *symbol;
3292 {
3293   fprintf (stderr, "elf_get_lineno unimplemented\n");
3294   fflush (stderr);
3295   BFD_FAIL ();
3296   return NULL;
3297 }
3298
3299 boolean
3300 elf_set_arch_mach (abfd, arch, machine)
3301      bfd *abfd;
3302      enum bfd_architecture arch;
3303      unsigned long machine;
3304 {
3305   /* If this isn't the right architecture for this backend, and this
3306      isn't the generic backend, fail.  */
3307   if (arch != get_elf_backend_data (abfd)->arch
3308       && arch != bfd_arch_unknown
3309       && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
3310     return false;
3311
3312   return bfd_default_set_arch_mach (abfd, arch, machine);
3313 }
3314
3315 boolean
3316 elf_find_nearest_line (abfd,
3317                        section,
3318                        symbols,
3319                        offset,
3320                        filename_ptr,
3321                        functionname_ptr,
3322                        line_ptr)
3323      bfd *abfd;
3324      asection *section;
3325      asymbol **symbols;
3326      bfd_vma offset;
3327      CONST char **filename_ptr;
3328      CONST char **functionname_ptr;
3329      unsigned int *line_ptr;
3330 {
3331   return false;
3332 }
3333
3334 int
3335 elf_sizeof_headers (abfd, reloc)
3336      bfd *abfd;
3337      boolean reloc;
3338 {
3339   int ret;
3340
3341   ret = sizeof (Elf_External_Ehdr);
3342   if (! reloc)
3343     ret += get_program_header_size (abfd);
3344   return ret;
3345 }
3346
3347 boolean
3348 elf_set_section_contents (abfd, section, location, offset, count)
3349      bfd *abfd;
3350      sec_ptr section;
3351      PTR location;
3352      file_ptr offset;
3353      bfd_size_type count;
3354 {
3355   Elf_Internal_Shdr *hdr;
3356
3357   if (! abfd->output_has_begun
3358       && ! elf_compute_section_file_positions (abfd,
3359                                                (struct bfd_link_info *) NULL))
3360     return false;
3361
3362   hdr = &elf_section_data (section)->this_hdr;
3363
3364   if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
3365     return false;
3366   if (bfd_write (location, 1, count, abfd) != count)
3367     return false;
3368
3369   return true;
3370 }
3371
3372 void
3373 elf_no_info_to_howto (abfd, cache_ptr, dst)
3374      bfd *abfd;
3375      arelent *cache_ptr;
3376      Elf_Internal_Rela *dst;
3377 {
3378   fprintf (stderr, "elf RELA relocation support for target machine unimplemented\n");
3379   fflush (stderr);
3380   BFD_FAIL ();
3381 }
3382
3383 void
3384 elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
3385      bfd *abfd;
3386      arelent *cache_ptr;
3387      Elf_Internal_Rel *dst;
3388 {
3389   fprintf (stderr, "elf REL relocation support for target machine unimplemented\n");
3390   fflush (stderr);
3391   BFD_FAIL ();
3392 }
3393 \f
3394
3395 /* Core file support */
3396
3397 #ifdef HAVE_PROCFS              /* Some core file support requires host /proc files */
3398 #include <sys/procfs.h>
3399 #else
3400 #define bfd_prstatus(abfd, descdata, descsz, filepos) true
3401 #define bfd_fpregset(abfd, descdata, descsz, filepos) true
3402 #define bfd_prpsinfo(abfd, descdata, descsz, filepos) true
3403 #endif
3404
3405 #ifdef HAVE_PROCFS
3406
3407 static boolean
3408 bfd_prstatus (abfd, descdata, descsz, filepos)
3409      bfd *abfd;
3410      char *descdata;
3411      int descsz;
3412      long filepos;
3413 {
3414   asection *newsect;
3415   prstatus_t *status = (prstatus_t *) 0;
3416
3417   if (descsz == sizeof (prstatus_t))
3418     {
3419       newsect = bfd_make_section (abfd, ".reg");
3420       if (newsect == NULL)
3421         return false;
3422       newsect->_raw_size = sizeof (status->pr_reg);
3423       newsect->filepos = filepos + (long) &status->pr_reg;
3424       newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3425       newsect->alignment_power = 2;
3426       if ((core_prstatus (abfd) = bfd_alloc (abfd, descsz)) != NULL)
3427         {
3428           memcpy (core_prstatus (abfd), descdata, descsz);
3429         }
3430     }
3431   return true;
3432 }
3433
3434 /* Stash a copy of the prpsinfo structure away for future use. */
3435
3436 static boolean
3437 bfd_prpsinfo (abfd, descdata, descsz, filepos)
3438      bfd *abfd;
3439      char *descdata;
3440      int descsz;
3441      long filepos;
3442 {
3443   if (descsz == sizeof (prpsinfo_t))
3444     {
3445       if ((core_prpsinfo (abfd) = bfd_alloc (abfd, descsz)) == NULL)
3446         {
3447           bfd_set_error (bfd_error_no_memory);
3448           return false;
3449         }
3450       memcpy (core_prpsinfo (abfd), descdata, descsz);
3451     }
3452   return true;
3453 }
3454
3455 static boolean
3456 bfd_fpregset (abfd, descdata, descsz, filepos)
3457      bfd *abfd;
3458      char *descdata;
3459      int descsz;
3460      long filepos;
3461 {
3462   asection *newsect;
3463
3464   newsect = bfd_make_section (abfd, ".reg2");
3465   if (newsect == NULL)
3466     return false;
3467   newsect->_raw_size = descsz;
3468   newsect->filepos = filepos;
3469   newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3470   newsect->alignment_power = 2;
3471   return true;
3472 }
3473
3474 #endif /* HAVE_PROCFS */
3475
3476 /* Return a pointer to the args (including the command name) that were
3477    seen by the program that generated the core dump.  Note that for
3478    some reason, a spurious space is tacked onto the end of the args
3479    in some (at least one anyway) implementations, so strip it off if
3480    it exists. */
3481
3482 char *
3483 elf_core_file_failing_command (abfd)
3484      bfd *abfd;
3485 {
3486 #ifdef HAVE_PROCFS
3487   if (core_prpsinfo (abfd))
3488     {
3489       prpsinfo_t *p = core_prpsinfo (abfd);
3490       char *scan = p->pr_psargs;
3491       while (*scan++)
3492         {;
3493         }
3494       scan -= 2;
3495       if ((scan > p->pr_psargs) && (*scan == ' '))
3496         {
3497           *scan = '\000';
3498         }
3499       return p->pr_psargs;
3500     }
3501 #endif
3502   return NULL;
3503 }
3504
3505 /* Return the number of the signal that caused the core dump.  Presumably,
3506    since we have a core file, we got a signal of some kind, so don't bother
3507    checking the other process status fields, just return the signal number.
3508    */
3509
3510 int
3511 elf_core_file_failing_signal (abfd)
3512      bfd *abfd;
3513 {
3514 #ifdef HAVE_PROCFS
3515   if (core_prstatus (abfd))
3516     {
3517       return ((prstatus_t *) (core_prstatus (abfd)))->pr_cursig;
3518     }
3519 #endif
3520   return -1;
3521 }
3522
3523 /* Check to see if the core file could reasonably be expected to have
3524    come for the current executable file.  Note that by default we return
3525    true unless we find something that indicates that there might be a
3526    problem.
3527    */
3528
3529 boolean
3530 elf_core_file_matches_executable_p (core_bfd, exec_bfd)
3531      bfd *core_bfd;
3532      bfd *exec_bfd;
3533 {
3534 #ifdef HAVE_PROCFS
3535   char *corename;
3536   char *execname;
3537 #endif
3538
3539   /* First, xvecs must match since both are ELF files for the same target. */
3540
3541   if (core_bfd->xvec != exec_bfd->xvec)
3542     {
3543       bfd_set_error (bfd_error_system_call);
3544       return false;
3545     }
3546
3547 #ifdef HAVE_PROCFS
3548
3549   /* If no prpsinfo, just return true.  Otherwise, grab the last component
3550      of the exec'd pathname from the prpsinfo. */
3551
3552   if (core_prpsinfo (core_bfd))
3553     {
3554       corename = (((struct prpsinfo *) core_prpsinfo (core_bfd))->pr_fname);
3555     }
3556   else
3557     {
3558       return true;
3559     }
3560
3561   /* Find the last component of the executable pathname. */
3562
3563   if ((execname = strrchr (exec_bfd->filename, '/')) != NULL)
3564     {
3565       execname++;
3566     }
3567   else
3568     {
3569       execname = (char *) exec_bfd->filename;
3570     }
3571
3572   /* See if they match */
3573
3574   return strcmp (execname, corename) ? false : true;
3575
3576 #else
3577
3578   return true;
3579
3580 #endif /* HAVE_PROCFS */
3581 }
3582
3583 /* ELF core files contain a segment of type PT_NOTE, that holds much of
3584    the information that would normally be available from the /proc interface
3585    for the process, at the time the process dumped core.  Currently this
3586    includes copies of the prstatus, prpsinfo, and fpregset structures.
3587
3588    Since these structures are potentially machine dependent in size and
3589    ordering, bfd provides two levels of support for them.  The first level,
3590    available on all machines since it does not require that the host
3591    have /proc support or the relevant include files, is to create a bfd
3592    section for each of the prstatus, prpsinfo, and fpregset structures,
3593    without any interpretation of their contents.  With just this support,
3594    the bfd client will have to interpret the structures itself.  Even with
3595    /proc support, it might want these full structures for it's own reasons.
3596
3597    In the second level of support, where HAVE_PROCFS is defined, bfd will
3598    pick apart the structures to gather some additional information that
3599    clients may want, such as the general register set, the name of the
3600    exec'ed file and its arguments, the signal (if any) that caused the
3601    core dump, etc.
3602
3603    */
3604
3605 static boolean
3606 elf_corefile_note (abfd, hdr)
3607      bfd *abfd;
3608      Elf_Internal_Phdr *hdr;
3609 {
3610   Elf_External_Note *x_note_p;  /* Elf note, external form */
3611   Elf_Internal_Note i_note;     /* Elf note, internal form */
3612   char *buf = NULL;             /* Entire note segment contents */
3613   char *namedata;               /* Name portion of the note */
3614   char *descdata;               /* Descriptor portion of the note */
3615   char *sectname;               /* Name to use for new section */
3616   long filepos;                 /* File offset to descriptor data */
3617   asection *newsect;
3618
3619   if (hdr->p_filesz > 0
3620       && (buf = (char *) malloc (hdr->p_filesz)) != NULL
3621       && bfd_seek (abfd, hdr->p_offset, SEEK_SET) != -1
3622       && bfd_read ((PTR) buf, hdr->p_filesz, 1, abfd) == hdr->p_filesz)
3623     {
3624       x_note_p = (Elf_External_Note *) buf;
3625       while ((char *) x_note_p < (buf + hdr->p_filesz))
3626         {
3627           i_note.namesz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->namesz);
3628           i_note.descsz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->descsz);
3629           i_note.type = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->type);
3630           namedata = x_note_p->name;
3631           descdata = namedata + BFD_ALIGN (i_note.namesz, 4);
3632           filepos = hdr->p_offset + (descdata - buf);
3633           switch (i_note.type)
3634             {
3635             case NT_PRSTATUS:
3636               /* process descdata as prstatus info */
3637               if (! bfd_prstatus (abfd, descdata, i_note.descsz, filepos))
3638                 return false;
3639               sectname = ".prstatus";
3640               break;
3641             case NT_FPREGSET:
3642               /* process descdata as fpregset info */
3643               if (! bfd_fpregset (abfd, descdata, i_note.descsz, filepos))
3644                 return false;
3645               sectname = ".fpregset";
3646               break;
3647             case NT_PRPSINFO:
3648               /* process descdata as prpsinfo */
3649               if (! bfd_prpsinfo (abfd, descdata, i_note.descsz, filepos))
3650                 return false;
3651               sectname = ".prpsinfo";
3652               break;
3653             default:
3654               /* Unknown descriptor, just ignore it. */
3655               sectname = NULL;
3656               break;
3657             }
3658           if (sectname != NULL)
3659             {
3660               newsect = bfd_make_section (abfd, sectname);
3661               if (newsect == NULL)
3662                 return false;
3663               newsect->_raw_size = i_note.descsz;
3664               newsect->filepos = filepos;
3665               newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3666               newsect->alignment_power = 2;
3667             }
3668           x_note_p = (Elf_External_Note *)
3669             (descdata + BFD_ALIGN (i_note.descsz, 4));
3670         }
3671     }
3672   if (buf != NULL)
3673     {
3674       free (buf);
3675     }
3676   else if (hdr->p_filesz > 0)
3677     {
3678       bfd_set_error (bfd_error_no_memory);
3679       return false;
3680     }
3681   return true;
3682
3683 }
3684
3685 /*  Core files are simply standard ELF formatted files that partition
3686     the file using the execution view of the file (program header table)
3687     rather than the linking view.  In fact, there is no section header
3688     table in a core file.
3689
3690     The process status information (including the contents of the general
3691     register set) and the floating point register set are stored in a
3692     segment of type PT_NOTE.  We handcraft a couple of extra bfd sections
3693     that allow standard bfd access to the general registers (.reg) and the
3694     floating point registers (.reg2).
3695
3696  */
3697
3698 bfd_target *
3699 elf_core_file_p (abfd)
3700      bfd *abfd;
3701 {
3702   Elf_External_Ehdr x_ehdr;     /* Elf file header, external form */
3703   Elf_Internal_Ehdr *i_ehdrp;   /* Elf file header, internal form */
3704   Elf_External_Phdr x_phdr;     /* Program header table entry, external form */
3705   Elf_Internal_Phdr *i_phdrp;   /* Program header table, internal form */
3706   unsigned int phindex;
3707   struct elf_backend_data *ebd;
3708
3709   /* Read in the ELF header in external format.  */
3710
3711   if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
3712     {
3713       if (bfd_get_error () != bfd_error_system_call)
3714         bfd_set_error (bfd_error_wrong_format);
3715       return NULL;
3716     }
3717
3718   /* Now check to see if we have a valid ELF file, and one that BFD can
3719      make use of.  The magic number must match, the address size ('class')
3720      and byte-swapping must match our XVEC entry, and it must have a
3721      program header table (FIXME: See comments re segments at top of this
3722      file). */
3723
3724   if (elf_file_p (&x_ehdr) == false)
3725     {
3726     wrong:
3727       bfd_set_error (bfd_error_wrong_format);
3728       return NULL;
3729     }
3730
3731   /* FIXME, Check EI_VERSION here !  */
3732
3733   {
3734 #if ARCH_SIZE == 32
3735     int desired_address_size = ELFCLASS32;
3736 #endif
3737 #if ARCH_SIZE == 64
3738     int desired_address_size = ELFCLASS64;
3739 #endif
3740
3741     if (x_ehdr.e_ident[EI_CLASS] != desired_address_size)
3742       goto wrong;
3743   }
3744
3745   /* Switch xvec to match the specified byte order.  */
3746   switch (x_ehdr.e_ident[EI_DATA])
3747     {
3748     case ELFDATA2MSB:           /* Big-endian */
3749       if (abfd->xvec->byteorder_big_p == false)
3750         goto wrong;
3751       break;
3752     case ELFDATA2LSB:           /* Little-endian */
3753       if (abfd->xvec->byteorder_big_p == true)
3754         goto wrong;
3755       break;
3756     case ELFDATANONE:           /* No data encoding specified */
3757     default:                    /* Unknown data encoding specified */
3758       goto wrong;
3759     }
3760
3761   /* Allocate an instance of the elf_obj_tdata structure and hook it up to
3762      the tdata pointer in the bfd. */
3763
3764   elf_tdata (abfd) =
3765     (struct elf_obj_tdata *) bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
3766   if (elf_tdata (abfd) == NULL)
3767     {
3768       bfd_set_error (bfd_error_no_memory);
3769       return NULL;
3770     }
3771
3772   /* FIXME, `wrong' returns from this point onward, leak memory.  */
3773
3774   /* Now that we know the byte order, swap in the rest of the header */
3775   i_ehdrp = elf_elfheader (abfd);
3776   elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
3777 #if DEBUG & 1
3778   elf_debug_file (i_ehdrp);
3779 #endif
3780
3781   ebd = get_elf_backend_data (abfd);
3782
3783   /* Check that the ELF e_machine field matches what this particular
3784      BFD format expects.  */
3785   if (ebd->elf_machine_code != i_ehdrp->e_machine)
3786     {
3787       bfd_target **target_ptr;
3788
3789       if (ebd->elf_machine_code != EM_NONE)
3790         goto wrong;
3791
3792       /* This is the generic ELF target.  Let it match any ELF target
3793          for which we do not have a specific backend.  */
3794       for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
3795         {
3796           struct elf_backend_data *back;
3797
3798           if ((*target_ptr)->flavour != bfd_target_elf_flavour)
3799             continue;
3800           back = (struct elf_backend_data *) (*target_ptr)->backend_data;
3801           if (back->elf_machine_code == i_ehdrp->e_machine)
3802             {
3803               /* target_ptr is an ELF backend which matches this
3804                  object file, so reject the generic ELF target.  */
3805               goto wrong;
3806             }
3807         }
3808     }
3809
3810   /* If there is no program header, or the type is not a core file, then
3811      we are hosed. */
3812   if (i_ehdrp->e_phoff == 0 || i_ehdrp->e_type != ET_CORE)
3813     goto wrong;
3814
3815   /* Allocate space for a copy of the program header table in
3816      internal form, seek to the program header table in the file,
3817      read it in, and convert it to internal form.  As a simple sanity
3818      check, verify that the what BFD thinks is the size of each program
3819      header table entry actually matches the size recorded in the file. */
3820
3821   if (i_ehdrp->e_phentsize != sizeof (x_phdr))
3822     goto wrong;
3823   i_phdrp = (Elf_Internal_Phdr *)
3824     bfd_alloc (abfd, sizeof (*i_phdrp) * i_ehdrp->e_phnum);
3825   if (!i_phdrp)
3826     {
3827       bfd_set_error (bfd_error_no_memory);
3828       return NULL;
3829     }
3830   if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) == -1)
3831     return NULL;
3832   for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3833     {
3834       if (bfd_read ((PTR) & x_phdr, sizeof (x_phdr), 1, abfd)
3835           != sizeof (x_phdr))
3836         return NULL;
3837       elf_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
3838     }
3839
3840   /* Once all of the program headers have been read and converted, we
3841      can start processing them. */
3842
3843   for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3844     {
3845       bfd_section_from_phdr (abfd, i_phdrp + phindex, phindex);
3846       if ((i_phdrp + phindex)->p_type == PT_NOTE)
3847         {
3848           if (! elf_corefile_note (abfd, i_phdrp + phindex))
3849             return NULL;
3850         }
3851     }
3852
3853   /* Remember the entry point specified in the ELF file header. */
3854
3855   bfd_get_start_address (abfd) = i_ehdrp->e_entry;
3856
3857   return abfd->xvec;
3858 }
3859 \f
3860 /* ELF linker code.  */
3861
3862 static boolean elf_link_add_object_symbols
3863   PARAMS ((bfd *, struct bfd_link_info *));
3864 static boolean elf_link_add_archive_symbols
3865   PARAMS ((bfd *, struct bfd_link_info *));
3866 static INLINE boolean elf_link_record_dynamic_symbol
3867   PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
3868 static boolean elf_link_create_dynamic_sections
3869   PARAMS ((bfd *, struct bfd_link_info *));
3870 static boolean elf_adjust_dynamic_symbol
3871   PARAMS ((struct elf_link_hash_entry *, PTR));
3872
3873 /* Given an ELF BFD, add symbols to the global hash table as
3874    appropriate.  */
3875
3876 boolean
3877 elf_bfd_link_add_symbols (abfd, info)
3878      bfd *abfd;
3879      struct bfd_link_info *info;
3880 {
3881   switch (bfd_get_format (abfd))
3882     {
3883     case bfd_object:
3884       return elf_link_add_object_symbols (abfd, info);
3885     case bfd_archive:
3886       return elf_link_add_archive_symbols (abfd, info);
3887     default:
3888       bfd_set_error (bfd_error_wrong_format);
3889       return false;
3890     }
3891 }
3892
3893 /* Add symbols from an ELF archive file to the linker hash table.  We
3894    don't use _bfd_generic_link_add_archive_symbols because of a
3895    problem which arises on UnixWare.  The UnixWare libc.so is an
3896    archive which includes an entry libc.so.1 which defines a bunch of
3897    symbols.  The libc.so archive also includes a number of other
3898    object files, which also define symbols, some of which are the same
3899    as those defined in libc.so.1.  Correct linking requires that we
3900    consider each object file in turn, and include it if it defines any
3901    symbols we need.  _bfd_generic_link_add_archive_symbols does not do
3902    this; it looks through the list of undefined symbols, and includes
3903    any object file which defines them.  When this algorithm is used on
3904    UnixWare, it winds up pulling in libc.so.1 early and defining a
3905    bunch of symbols.  This means that some of the other objects in the
3906    archive are not included in the link, which is incorrect since they
3907    precede libc.so.1 in the archive.
3908
3909    Fortunately, ELF archive handling is simpler than that done by
3910    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
3911    oddities.  In ELF, if we find a symbol in the archive map, and the
3912    symbol is currently undefined, we know that we must pull in that
3913    object file.
3914
3915    Unfortunately, we do have to make multiple passes over the symbol
3916    table until nothing further is resolved.  */
3917
3918 static boolean
3919 elf_link_add_archive_symbols (abfd, info)
3920      bfd *abfd;
3921      struct bfd_link_info *info;
3922 {
3923   symindex c;
3924   boolean *defined = NULL;
3925   boolean *included = NULL;
3926   carsym *symdefs;
3927   boolean loop;
3928
3929   if (! bfd_has_map (abfd))
3930     {
3931       bfd_set_error (bfd_error_no_symbols);
3932       return false;
3933     }
3934
3935   /* Keep track of all symbols we know to be already defined, and all
3936      files we know to be already included.  This is to speed up the
3937      second and subsequent passes.  */
3938   c = bfd_ardata (abfd)->symdef_count;
3939   if (c == 0)
3940     return true;
3941   defined = (boolean *) malloc (c * sizeof (boolean));
3942   included = (boolean *) malloc (c * sizeof (boolean));
3943   if (defined == (boolean *) NULL || included == (boolean *) NULL)
3944     {
3945       bfd_set_error (bfd_error_no_memory);
3946       goto error_return;
3947     }
3948   memset (defined, 0, c * sizeof (boolean));
3949   memset (included, 0, c * sizeof (boolean));
3950
3951   symdefs = bfd_ardata (abfd)->symdefs;
3952
3953   do
3954     {
3955       file_ptr last;
3956       symindex i;
3957       carsym *symdef;
3958       carsym *symdefend;
3959
3960       loop = false;
3961       last = -1;
3962
3963       symdef = symdefs;
3964       symdefend = symdef + c;
3965       for (i = 0; symdef < symdefend; symdef++, i++)
3966         {
3967           struct elf_link_hash_entry *h;
3968           bfd *element;
3969           struct bfd_link_hash_entry *undefs_tail;
3970           symindex mark;
3971
3972           if (defined[i] || included[i])
3973             continue;
3974           if (symdef->file_offset == last)
3975             {
3976               included[i] = true;
3977               continue;
3978             }
3979
3980           h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
3981                                     false, false, false);
3982           if (h == (struct elf_link_hash_entry *) NULL)
3983             continue;
3984           if (h->root.type != bfd_link_hash_undefined)
3985             {
3986               defined[i] = true;
3987               continue;
3988             }
3989
3990           /* We need to include this archive member.  */
3991
3992           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
3993           if (element == (bfd *) NULL)
3994             goto error_return;
3995
3996           if (! bfd_check_format (element, bfd_object))
3997             goto error_return;
3998
3999           /* Doublecheck that we have not included this object
4000              already--it should be impossible, but there may be
4001              something wrong with the archive.  */
4002           if (element->archive_pass != 0)
4003             {
4004               bfd_set_error (bfd_error_bad_value);
4005               goto error_return;
4006             }
4007           element->archive_pass = 1;
4008
4009           undefs_tail = info->hash->undefs_tail;
4010
4011           if (! (*info->callbacks->add_archive_element) (info, element,
4012                                                          symdef->name))
4013             goto error_return;
4014           if (! elf_link_add_object_symbols (element, info))
4015             goto error_return;
4016
4017           /* If there are any new undefined symbols, we need to make
4018              another pass through the archive in order to see whether
4019              they can be defined.  FIXME: This isn't perfect, because
4020              common symbols wind up on undefs_tail and because an
4021              undefined symbol which is defined later on in this pass
4022              does not require another pass.  This isn't a bug, but it
4023              does make the code less efficient than it could be.  */
4024           if (undefs_tail != info->hash->undefs_tail)
4025             loop = true;
4026
4027           /* Look backward to mark all symbols from this object file
4028              which we have already seen in this pass.  */
4029           mark = i;
4030           do
4031             {
4032               included[mark] = true;
4033               if (mark == 0)
4034                 break;
4035               --mark;
4036             }
4037           while (symdefs[mark].file_offset == symdef->file_offset);
4038
4039           /* We mark subsequent symbols from this object file as we go
4040              on through the loop.  */
4041           last = symdef->file_offset;
4042         }
4043     }
4044   while (loop);
4045
4046   free (defined);
4047   free (included);
4048
4049   return true;
4050
4051  error_return:
4052   if (defined != (boolean *) NULL)
4053     free (defined);
4054   if (included != (boolean *) NULL)
4055     free (included);
4056   return false;
4057 }
4058
4059 /* Record a new dynamic symbol.  We record the dynamic symbols as we
4060    read the input files, since we need to have a list of all of them
4061    before we can determine the final sizes of the output sections.  */
4062
4063 static INLINE boolean
4064 elf_link_record_dynamic_symbol (info, h)
4065      struct bfd_link_info *info;
4066      struct elf_link_hash_entry *h;
4067 {
4068   if (h->dynindx == -1)
4069     {
4070       h->dynindx = elf_hash_table (info)->dynsymcount;
4071       ++elf_hash_table (info)->dynsymcount;
4072       h->dynstr_index = bfd_add_to_strtab (elf_hash_table (info)->dynobj,
4073                                            elf_hash_table (info)->dynstr,
4074                                            h->root.root.string);
4075       if (h->dynstr_index == (unsigned long) -1)
4076         return false;
4077     }
4078
4079   return true;
4080 }
4081
4082 /* Add symbols from an ELF object file to the linker hash table.  */
4083
4084 static boolean
4085 elf_link_add_object_symbols (abfd, info)
4086      bfd *abfd;
4087      struct bfd_link_info *info;
4088 {
4089   boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
4090                                       const Elf_Internal_Sym *,
4091                                       const char **, flagword *,
4092                                       asection **, bfd_vma *));
4093   boolean collect;
4094   Elf_Internal_Shdr *hdr;
4095   size_t symcount;
4096   size_t extsymcount;
4097   size_t extsymoff;
4098   Elf_External_Sym *buf = NULL;
4099   struct elf_link_hash_entry **sym_hash;
4100   boolean dynamic;
4101   Elf_External_Dyn *dynbuf = NULL;
4102   struct elf_link_hash_entry *weaks;
4103   Elf_External_Sym *esym;
4104   Elf_External_Sym *esymend;
4105
4106   add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
4107   collect = get_elf_backend_data (abfd)->collect;
4108
4109   hdr = &elf_tdata (abfd)->symtab_hdr;
4110   symcount = hdr->sh_size / sizeof (Elf_External_Sym);
4111
4112   /* The sh_info field of the symtab header tells us where the
4113      external symbols start.  We don't care about the local symbols at
4114      this point.  */
4115   if (elf_bad_symtab (abfd))
4116     {
4117       extsymcount = symcount;
4118       extsymoff = 0;
4119     }
4120   else
4121     {
4122       extsymcount = symcount - hdr->sh_info;
4123       extsymoff = hdr->sh_info;
4124     }
4125
4126   buf = (Elf_External_Sym *) malloc (extsymcount * sizeof (Elf_External_Sym));
4127   if (buf == NULL && extsymcount != 0)
4128     {
4129       bfd_set_error (bfd_error_no_memory);
4130       goto error_return;
4131     }
4132
4133   /* We store a pointer to the hash table entry for each external
4134      symbol.  */
4135   sym_hash = ((struct elf_link_hash_entry **)
4136               bfd_alloc (abfd,
4137                          extsymcount * sizeof (struct elf_link_hash_entry *)));
4138   if (sym_hash == NULL)
4139     {
4140       bfd_set_error (bfd_error_no_memory);
4141       goto error_return;
4142     }
4143   elf_sym_hashes (abfd) = sym_hash;
4144
4145   if (elf_elfheader (abfd)->e_type != ET_DYN)
4146     dynamic = false;
4147   else
4148     {
4149       asection *s;
4150       const char *name;
4151       unsigned long strindex;
4152
4153       dynamic = true;
4154
4155       /* You can't use -r against a dynamic object.  There's no hope
4156          of using a dynamic object which does not exactly match the
4157          format of the output file.  */
4158       if (info->relocateable
4159           || info->hash->creator != abfd->xvec)
4160         {
4161           bfd_set_error (bfd_error_invalid_operation);
4162           goto error_return;
4163         }
4164
4165       /* Find the name to use in a DT_NEEDED entry that refers to this
4166          object.  If the object has a DT_SONAME entry, we use it.
4167          Otherwise, we use the file name.  */
4168       name = bfd_get_filename (abfd);
4169       s = bfd_get_section_by_name (abfd, ".dynamic");
4170       if (s != NULL)
4171         {
4172           Elf_External_Dyn *extdyn;
4173           Elf_External_Dyn *extdynend;
4174
4175           dynbuf = (Elf_External_Dyn *) malloc (s->_raw_size);
4176           if (dynbuf == NULL)
4177             {
4178               bfd_set_error (bfd_error_no_memory);
4179               goto error_return;
4180             }
4181
4182           if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
4183                                           (file_ptr) 0, s->_raw_size))
4184             goto error_return;
4185
4186           extdyn = dynbuf;
4187           extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
4188           for (; extdyn < extdynend; extdyn++)
4189             {
4190               Elf_Internal_Dyn dyn;
4191
4192               elf_swap_dyn_in (abfd, extdyn, &dyn);
4193               if (dyn.d_tag == DT_SONAME)
4194                 {
4195                   int elfsec;
4196                   unsigned long link;
4197
4198                   elfsec = elf_section_from_bfd_section (abfd, s);
4199                   if (elfsec == -1)
4200                     goto error_return;
4201                   link = elf_elfsections (abfd)[elfsec]->sh_link;
4202                   name = elf_string_from_elf_section (abfd, link,
4203                                                       dyn.d_un.d_val);
4204                   if (name == NULL)
4205                     goto error_return;
4206
4207                   break;
4208                 }
4209             }
4210
4211           free (dynbuf);
4212           dynbuf = NULL;
4213         }
4214
4215       /* We do not want to include any of the sections in a dynamic
4216          object in the output file.  We hack by simply clobbering the
4217          list of sections in the BFD.  This could be handled more
4218          cleanly by, say, a new section flag; the existing
4219          SEC_NEVER_LOAD flag is not the one we want, because that one
4220          still implies that the section takes up space in the output
4221          file.  */
4222       abfd->sections = NULL;
4223
4224       /* If this is the first dynamic object found in the link, create
4225          the special sections required for dynamic linking.  We need
4226          to put them somewhere, and attaching them to the first
4227          dynamic object is as good place as any.  */
4228       if (elf_hash_table (info)->dynobj == NULL)
4229         {
4230           if (! elf_link_create_dynamic_sections (abfd, info))
4231             goto error_return;
4232           elf_hash_table (info)->dynobj = abfd;
4233         }
4234
4235       /* Add a DT_NEEDED entry for this dynamic object.  */
4236       strindex = bfd_add_to_strtab (abfd,
4237                                     elf_hash_table (info)->dynstr,
4238                                     name);
4239       
4240       if (strindex == (unsigned long) -1)
4241         goto error_return;
4242       if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
4243         goto error_return;
4244     }
4245
4246   if (bfd_seek (abfd,
4247                 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
4248                 SEEK_SET) != 0
4249       || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
4250           != extsymcount * sizeof (Elf_External_Sym)))
4251     goto error_return;
4252
4253   weaks = NULL;
4254
4255   esymend = buf + extsymcount;
4256   for (esym = buf; esym < esymend; esym++, sym_hash++)
4257     {
4258       Elf_Internal_Sym sym;
4259       int bind;
4260       bfd_vma value;
4261       asection *sec;
4262       flagword flags;
4263       const char *name;
4264       struct elf_link_hash_entry *h = NULL;
4265       boolean definition;
4266
4267       elf_swap_symbol_in (abfd, esym, &sym);
4268
4269       flags = BSF_NO_FLAGS;
4270       sec = NULL;
4271       value = sym.st_value;
4272       *sym_hash = NULL;
4273
4274       bind = ELF_ST_BIND (sym.st_info);
4275       if (bind == STB_LOCAL)
4276         {
4277           /* This should be impossible, since ELF requires that all
4278              global symbols follow all local symbols, and that sh_info
4279              point to the first global symbol.  Unfortunatealy, Irix 5
4280              screws this up.  */
4281           continue;
4282         }
4283       else if (bind == STB_GLOBAL)
4284         flags = BSF_GLOBAL;
4285       else if (bind == STB_WEAK)
4286         flags = BSF_WEAK;
4287       else
4288         {
4289           /* Leave it up to the processor backend.  */
4290         }
4291
4292       if (sym.st_shndx == SHN_UNDEF)
4293         sec = &bfd_und_section;
4294       else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
4295         {
4296           sec = section_from_elf_index (abfd, sym.st_shndx);
4297           if (sec == NULL)
4298             goto error_return;
4299           value -= sec->vma;
4300         }
4301       else if (sym.st_shndx == SHN_ABS)
4302         sec = &bfd_abs_section;
4303       else if (sym.st_shndx == SHN_COMMON)
4304         {
4305           sec = &bfd_com_section;
4306           /* What ELF calls the size we call the value.  What ELF
4307              calls the value we call the alignment.  */
4308           value = sym.st_size;
4309         }
4310       else
4311         {
4312           /* Leave it up to the processor backend.  */
4313         }
4314
4315       name = elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
4316       if (name == (const char *) NULL)
4317         goto error_return;
4318
4319       if (add_symbol_hook)
4320         {
4321           if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
4322                                     &value))
4323             goto error_return;
4324
4325           /* The hook function sets the name to NULL if this symbol
4326              should be skipped for some reason.  */
4327           if (name == (const char *) NULL)
4328             continue;
4329         }
4330
4331       /* Sanity check that all possibilities were handled.  */
4332       if (flags == BSF_NO_FLAGS || sec == (asection *) NULL)
4333         {
4334           bfd_set_error (bfd_error_bad_value);
4335           goto error_return;
4336         }
4337
4338       if (sec == &bfd_und_section
4339           || bfd_is_com_section (sec))
4340         definition = false;
4341       else
4342         definition = true;
4343
4344       if (info->hash->creator->flavour == bfd_target_elf_flavour)
4345         {
4346           /* We need to look up the symbol now in order to get some of
4347              the dynamic object handling right.  We pass the hash
4348              table entry in to _bfd_generic_link_add_one_symbol so
4349              that it does not have to look it up again.  */
4350           h = elf_link_hash_lookup (elf_hash_table (info), name,
4351                                     true, false, false);
4352           if (h == NULL)
4353             goto error_return;
4354           *sym_hash = h;
4355
4356           /* If we are looking at a dynamic object, and this is a
4357              definition, we need to see if it has already been defined
4358              by some other object.  If it has, we want to use the
4359              existing definition, and we do not want to report a
4360              multiple symbol definition error; we do this by
4361              clobbering sec to be bfd_und_section.  */
4362           if (dynamic && definition)
4363             {
4364               if (h->root.type == bfd_link_hash_defined)
4365                 sec = &bfd_und_section;
4366             }
4367
4368           /* Similarly, if we are not looking at a dynamic object, and
4369              we have a definition, we want to override any definition
4370              we may have from a dynamic object.  Symbols from regular
4371              files always take precedence over symbols from dynamic
4372              objects, even if they are defined after the dynamic
4373              object in the link.  */
4374           if (! dynamic
4375               && definition
4376               && h->root.type == bfd_link_hash_defined
4377               && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
4378               && (bfd_get_flavour (h->root.u.def.section->owner)
4379                   == bfd_target_elf_flavour)
4380               && (elf_elfheader (h->root.u.def.section->owner)->e_type
4381                   == ET_DYN))
4382             {
4383               /* Change the hash table entry to undefined, and let
4384                  _bfd_generic_link_add_one_symbol do the right thing
4385                  with the new definition.  */
4386               h->root.type = bfd_link_hash_undefined;
4387               h->root.u.undef.abfd = h->root.u.def.section->owner;
4388             }
4389         }
4390
4391       if (! (_bfd_generic_link_add_one_symbol
4392              (info, abfd, name, flags, sec, value, (const char *) NULL,
4393               false, collect, (struct bfd_link_hash_entry **) sym_hash)))
4394         goto error_return;
4395
4396       if (dynamic
4397           && definition
4398           && (flags & BSF_WEAK) != 0
4399           && ELF_ST_TYPE (sym.st_info) != STT_FUNC
4400           && (*sym_hash)->weakdef == NULL)
4401         {
4402           /* Keep a list of all weak defined non function symbols from
4403              a dynamic object, using the weakdef field.  Later in this
4404              function we will set the weakdef field to the correct
4405              value.  We only put non-function symbols from dynamic
4406              objects on this list, because that happens to be the only
4407              time we need to know the normal symbol corresponding to a
4408              weak symbol, and the information is time consuming to
4409              figure out.  If the weakdef field is not already NULL,
4410              then this symbol was already defined by some previous
4411              dynamic object, and we will be using that previous
4412              definition anyhow.  */
4413
4414           (*sym_hash)->weakdef = weaks;
4415           weaks = *sym_hash;
4416         }
4417
4418       if (info->hash->creator->flavour == bfd_target_elf_flavour)
4419         {
4420           int old_flags;
4421           boolean dynsym;
4422           int new_flag;
4423
4424           /* Remember the symbol size, type and alignment.  */
4425           if (sym.st_size != 0)
4426             {
4427               /* FIXME: We should probably somehow give a warning if
4428                  the symbol size changes.  */
4429               h->size = sym.st_size;
4430             }
4431           if (sym.st_shndx == SHN_COMMON
4432               && sym.st_value > h->align)
4433             h->align = sym.st_value;
4434           if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE)
4435             {
4436               /* FIXME: We should probably somehow give a warning if
4437                  the symbol type changes.  */
4438               h->type = ELF_ST_TYPE (sym.st_info);
4439             }
4440
4441           /* Set a flag in the hash table entry indicating the type of
4442              reference or definition we just found.  Keep a count of
4443              the number of dynamic symbols we find.  A dynamic symbol
4444              is one which is referenced or defined by both a regular
4445              object and a shared object, or one which is referenced or
4446              defined by more than one shared object.  */
4447           old_flags = h->elf_link_hash_flags;
4448           dynsym = false;
4449           if (! dynamic)
4450             {
4451               if (! definition)
4452                 new_flag = ELF_LINK_HASH_REF_REGULAR;
4453               else
4454                 new_flag = ELF_LINK_HASH_DEF_REGULAR;
4455               if ((old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
4456                                 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
4457                 dynsym = true;
4458             }
4459           else
4460             {
4461               if (! definition)
4462                 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
4463               else
4464                 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
4465               if ((old_flags & new_flag) != 0)
4466                 {
4467                   if (! definition)
4468                     new_flag = ELF_LINK_HASH_REF_DYNAMIC_MULTIPLE;
4469                   else
4470                     new_flag = ELF_LINK_HASH_DEF_DYNAMIC_MULTIPLE;
4471                   dynsym = true;
4472                 }
4473               else
4474                 {
4475                   if ((old_flags & (ELF_LINK_HASH_DEF_REGULAR
4476                                     | ELF_LINK_HASH_REF_REGULAR)) != 0)
4477                     dynsym = true;
4478                 }
4479             }
4480
4481           h->elf_link_hash_flags |= new_flag;
4482           if (dynsym && h->dynindx == -1)
4483             {
4484               if (! elf_link_record_dynamic_symbol (info, h))
4485                 goto error_return;
4486             }
4487         }
4488     }
4489
4490   /* Now set the weakdefs field correctly for all the weak defined
4491      symbols we found.  The only way to do this is to search all the
4492      symbols.  Since we only need the information for non functions in
4493      dynamic objects, that's the only time we actually put anything on
4494      the list WEAKS.  We need this information so that if a regular
4495      object refers to a symbol defined weakly in a dynamic object, the
4496      real symbol in the dynamic object is also put in the dynamic
4497      symbols; we also must arrange for both symbols to point to the
4498      same memory location.  We could handle the general case of symbol
4499      aliasing, but a general symbol alias can only be generated in
4500      assembler code, handling it correctly would be very time
4501      consuming, and other ELF linkers don't handle general aliasing
4502      either.  */
4503   while (weaks != NULL)
4504     {
4505       struct elf_link_hash_entry *hlook;
4506       asection *slook;
4507       bfd_vma vlook;
4508       struct elf_link_hash_entry **hpp;
4509       struct elf_link_hash_entry **hppend;
4510
4511       hlook = weaks;
4512       weaks = hlook->weakdef;
4513       hlook->weakdef = NULL;
4514
4515       BFD_ASSERT (hlook->root.type == bfd_link_hash_defined);
4516       slook = hlook->root.u.def.section;
4517       vlook = hlook->root.u.def.value;
4518
4519       hpp = elf_sym_hashes (abfd);
4520       hppend = hpp + extsymcount;
4521       for (; hpp < hppend; hpp++)
4522         {
4523           struct elf_link_hash_entry *h;
4524
4525           h = *hpp;
4526           if (h != hlook
4527               && h->root.type == bfd_link_hash_defined
4528               && h->root.u.def.section == slook
4529               && h->root.u.def.value == vlook)
4530             {
4531               hlook->weakdef = h;
4532
4533               /* If the weak definition is in the list of dynamic
4534                  symbols, make sure the real definition is put there
4535                  as well.  */
4536               if (hlook->dynindx != -1
4537                   && h->dynindx == -1)
4538                 {
4539                   if (! elf_link_record_dynamic_symbol (info, h))
4540                     goto error_return;
4541                 }
4542
4543               break;
4544             }
4545         }
4546     }
4547
4548   if (buf != NULL)
4549     free (buf);
4550
4551   return true;
4552
4553  error_return:
4554   if (buf != NULL)
4555     free (buf);
4556   if (dynbuf != NULL)
4557     free (dynbuf);
4558   return false;
4559 }
4560
4561 /* Create some sections which will be filled in with dynamic linking
4562    information.  The ABFD argument is an input file which is a dynamic
4563    object.  The dynamic sections take up virtual memory space when the
4564    final executable is run, so we need to create them before addresses
4565    are assigned to the output sections.  We work out the actual
4566    contents and size of these sections later.  */
4567
4568 static boolean
4569 elf_link_create_dynamic_sections (abfd, info)
4570      bfd *abfd;
4571      struct bfd_link_info *info;
4572 {
4573   flagword flags;
4574   register asection *s;
4575   struct elf_link_hash_entry *h;
4576   struct elf_backend_data *bed;
4577
4578   /* Note that we set the SEC_IN_MEMORY flag for all of these
4579      sections.  */
4580   flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
4581
4582   s = bfd_make_section (abfd, ".interp");
4583   if (s == NULL
4584       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
4585     return false;
4586
4587   s = bfd_make_section (abfd, ".dynamic");
4588   if (s == NULL
4589       || ! bfd_set_section_flags (abfd, s, flags)
4590       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4591     return false;
4592
4593   /* The special symbol _DYNAMIC is always set to the start of the
4594      .dynamic section.  This call occurs before we have processed the
4595      symbols for any dynamic object, so we don't have to worry about
4596      overriding a dynamic definition.  We could set _DYNAMIC in a
4597      linker script, but we only want to define it if we are, in fact,
4598      creating a .dynamic section.  We don't want to define it if there
4599      is no .dynamic section, since on some ELF platforms the start up
4600      code examines it to decide how to initialize the process.  */
4601   h = NULL;
4602   if (! (_bfd_generic_link_add_one_symbol
4603          (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
4604           (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
4605           (struct bfd_link_hash_entry **) &h)))
4606     return false;
4607   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4608
4609   s = bfd_make_section (abfd, ".dynsym");
4610   if (s == NULL
4611       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
4612       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4613     return false;
4614
4615   /* The first .dynsym symbol is a dummy.  */
4616   elf_hash_table (info)->dynsymcount = 1;
4617
4618   s = bfd_make_section (abfd, ".dynstr");
4619   if (s == NULL
4620       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
4621     return false;
4622
4623   /* Create a strtab to hold the dynamic symbol names.  */
4624   elf_hash_table (info)->dynstr = bfd_new_strtab (abfd);
4625   if (elf_hash_table (info)->dynstr == NULL)
4626     return false;
4627
4628   s = bfd_make_section (abfd, ".hash");
4629   if (s == NULL
4630       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
4631       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4632     return false;
4633
4634   /* Let the backend create the rest of the sections.  This lets the
4635      backend set the right flags.  The backend will normally create
4636      the .got and .plt sections.  */
4637   bed = get_elf_backend_data (abfd);
4638   return (*bed->elf_backend_create_dynamic_sections) (abfd, info);
4639 }
4640
4641 /* Add an entry to the .dynamic table.  */
4642
4643 boolean
4644 elf_add_dynamic_entry (info, tag, val)
4645      struct bfd_link_info *info;
4646      bfd_vma tag;
4647      bfd_vma val;
4648 {
4649   Elf_Internal_Dyn dyn;
4650   bfd *dynobj;
4651   asection *s;
4652   size_t newsize;
4653   bfd_byte *newcontents;
4654
4655   dynobj = elf_hash_table (info)->dynobj;
4656
4657   s = bfd_get_section_by_name (dynobj, ".dynamic");
4658   BFD_ASSERT (s != NULL);
4659
4660   newsize = s->_raw_size + sizeof (Elf_External_Dyn);
4661   if (s->contents == NULL)
4662     newcontents = (bfd_byte *) malloc (newsize);
4663   else
4664     newcontents = (bfd_byte *) realloc (s->contents, newsize);
4665   if (newcontents == NULL)
4666     {
4667       bfd_set_error (bfd_error_no_memory);
4668       return false;
4669     }
4670
4671   dyn.d_tag = tag;
4672   dyn.d_un.d_val = val;
4673   elf_swap_dyn_out (dynobj, &dyn,
4674                     (Elf_External_Dyn *) (newcontents + s->_raw_size));
4675
4676   s->_raw_size = newsize;
4677   s->contents = newcontents;
4678
4679   return true;
4680 }
4681
4682 /* Record an assignment to a symbol made by a linker script.  We need
4683    this in case some dynamic object refers to this symbol.  */
4684
4685 /*ARGSUSED*/
4686 boolean
4687 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name)
4688      bfd *output_bfd;
4689      struct bfd_link_info *info;
4690      const char *name;
4691 {
4692   struct elf_link_hash_entry *h;
4693
4694   /* This is called after we have examined all the input objects.  If
4695      the symbol does not exist, it merely means that no object refers
4696      to it, and we can just ignore it at this point.  */
4697   h = elf_link_hash_lookup (elf_hash_table (info), name,
4698                             false, false, false);
4699   if (h == NULL)
4700     return true;
4701
4702   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4703
4704   if ((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
4705                                  | ELF_LINK_HASH_REF_DYNAMIC)) != 0
4706       && h->dynindx == -1)
4707     {
4708       if (! elf_link_record_dynamic_symbol (info, h))
4709         return false;
4710
4711       /* If this is a weak defined symbol, and we know a corresponding
4712          real symbol from the same dynamic object, make sure the real
4713          symbol is also made into a dynamic symbol.  */
4714       if (h->weakdef != NULL
4715           && h->weakdef->dynindx == -1)
4716         {
4717           if (! elf_link_record_dynamic_symbol (info, h->weakdef))
4718             return false;
4719         }
4720     }
4721
4722   return true;
4723 }
4724
4725 /* Array used to determine the number of hash table buckets to use
4726    based on the number of symbols there are.  If there are fewer than
4727    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
4728    fewer than 37 we use 17 buckets, and so forth.  We never use more
4729    than 521 buckets.  */
4730
4731 static const size_t elf_buckets[] =
4732 {
4733   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 0
4734 };
4735
4736 /* Set up the sizes and contents of the ELF dynamic sections.  This is
4737    called by the ELF linker emulation before_allocation routine.  We
4738    must set the sizes of the sections before the linker sets the
4739    addresses of the various sections.  */
4740
4741 boolean
4742 NAME(bfd_elf,size_dynamic_sections) (output_bfd, info)
4743      bfd *output_bfd;
4744      struct bfd_link_info *info;
4745 {
4746   bfd *dynobj;
4747   size_t dynsymcount;
4748   asection *s;
4749   Elf_Internal_Sym isym;
4750   size_t i;
4751   size_t bucketcount;
4752   struct elf_backend_data *bed;
4753
4754   dynobj = elf_hash_table (info)->dynobj;
4755   dynsymcount = elf_hash_table (info)->dynsymcount;
4756
4757   /* If there were no dynamic objects in the link, there is nothing to
4758      do here.  */
4759   if (dynobj == NULL)
4760     return true;
4761
4762   /* Set the size of the .dynsym and .hash sections.  We counted the
4763      number of dynamic symbols in elf_link_add_object_symbols.  We
4764      will build the contents of .dynsym and .hash when we build the
4765      final symbol table, because until then we do not know the correct
4766      value to give the symbols.  We built the .dynstr section as we
4767      went along in elf_link_add_object_symbols.  */
4768   s = bfd_get_section_by_name (dynobj, ".dynsym");
4769   BFD_ASSERT (s != NULL);
4770   s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
4771   s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
4772   if (s->contents == NULL && s->_raw_size != 0)
4773     {
4774       bfd_set_error (bfd_error_no_memory);
4775       return false;
4776     }
4777
4778   /* The first entry in .dynsym is a dummy symbol.  */
4779   isym.st_value = 0;
4780   isym.st_size = 0;
4781   isym.st_name = 0;
4782   isym.st_info = 0;
4783   isym.st_other = 0;
4784   isym.st_shndx = 0;
4785   elf_swap_symbol_out (output_bfd, &isym,
4786                        (Elf_External_Sym *) s->contents);
4787
4788   for (i = 0; elf_buckets[i] != 0; i++)
4789     {
4790       bucketcount = elf_buckets[i];
4791       if (dynsymcount < elf_buckets[i + 1])
4792         break;
4793     }
4794
4795   s = bfd_get_section_by_name (dynobj, ".hash");
4796   BFD_ASSERT (s != NULL);
4797   s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
4798   s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
4799   if (s->contents == NULL)
4800     {
4801       bfd_set_error (bfd_error_no_memory);
4802       return false;
4803     }
4804   memset (s->contents, 0, s->_raw_size);
4805
4806   put_word (output_bfd, bucketcount, s->contents);
4807   put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
4808
4809   elf_hash_table (info)->bucketcount = bucketcount;
4810
4811   s = bfd_get_section_by_name (dynobj, ".dynstr");
4812   BFD_ASSERT (s != NULL);
4813   s->_raw_size = elf_hash_table (info)->dynstr->length;
4814   s->contents = (unsigned char *) elf_hash_table (info)->dynstr->tab;
4815
4816   /* Find all symbols which were defined in a dynamic object and make
4817      the backend pick a reasonable value for them.  */
4818   elf_link_hash_traverse (elf_hash_table (info),
4819                           elf_adjust_dynamic_symbol,
4820                           (PTR) info);
4821
4822   /* Add some entries to the .dynamic section.  We fill in some of the
4823      values later, in elf_bfd_final_link, but we must add the entries
4824      now so that we know the final size of the .dynamic section.  */
4825   if (bfd_get_section_by_name (output_bfd, ".init") != NULL)
4826     {
4827       if (! elf_add_dynamic_entry (info, DT_INIT, 0))
4828         return false;
4829     }
4830   if (bfd_get_section_by_name (output_bfd, ".fini") != NULL)
4831     {
4832       if (! elf_add_dynamic_entry (info, DT_FINI, 0))
4833         return false;
4834     }
4835   if (! elf_add_dynamic_entry (info, DT_HASH, 0)
4836       || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
4837       || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
4838       || ! elf_add_dynamic_entry (info, DT_STRSZ,
4839                                   elf_hash_table (info)->dynstr->length)
4840       || ! elf_add_dynamic_entry (info, DT_SYMENT,
4841                                   sizeof (Elf_External_Sym)))
4842     return false;
4843
4844   /* The backend must work out the sizes of all the other dynamic
4845      sections.  */
4846   bed = get_elf_backend_data (output_bfd);
4847   if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
4848     return false;
4849
4850   return elf_add_dynamic_entry (info, DT_NULL, 0);
4851 }
4852
4853 /* Make the backend pick a good value for a dynamic symbol.  This is
4854    called via elf_link_hash_traverse, and also calls itself
4855    recursively.  */
4856
4857 static boolean
4858 elf_adjust_dynamic_symbol (h, data)
4859      struct elf_link_hash_entry *h;
4860      PTR data;
4861 {
4862   struct bfd_link_info *info = (struct bfd_link_info *) data;
4863   bfd *dynobj;
4864   struct elf_backend_data *bed;
4865
4866   /* If this symbol is not defined by a dynamic object, or is not
4867      referenced by a regular object, ignore it.  FIXME: Do we need to
4868      worry about symbols which are defined by one dynamic object and
4869      referenced by another one?  */
4870   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
4871       || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
4872       || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
4873     return true;
4874
4875   /* If we've already adjusted this symbol, don't do it again.  This
4876      can happen via a recursive call.  */
4877   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
4878     return true;
4879
4880   /* Don't look at this symbol again.  Note that we must set this
4881      after checking the above conditions, because we may look at a
4882      symbol once, decide not to do anything, and then get called
4883      recursively later after REF_REGULAR is set below.  */
4884   h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
4885
4886   /* If this is a weak definition, and we know a real definition, and
4887      the real symbol is not itself defined by a regular object file,
4888      then get a good value for the real definition.  We handle the
4889      real symbol first, for the convenience of the backend routine.
4890
4891      Note that there is a confusing case here.  If the real definition
4892      is defined by a regular object file, we don't get the real symbol
4893      from the dynamic object, but we do get the weak symbol.  If the
4894      processor backend uses a COPY reloc, then if some routine in the
4895      dynamic object changes the real symbol, we will not see that
4896      change in the corresponding weak symbol.  This is the way other
4897      ELF linkers work as well, and seems to be a result of the shared
4898      library model.
4899
4900      I will clarify this issue.  Most SVR4 shared libraries define the
4901      variable _timezone and define timezone as a weak synonym.  The
4902      tzset call changes _timezone.  If you write
4903        extern int timezone;
4904        int _timezone = 5;
4905        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
4906      you might expect that, since timezone is a synonym for _timezone,
4907      the same number will print both times.  However, if the processor
4908      backend uses a COPY reloc, then actually timezone will be copied
4909      into your process image, and, since you define _timezone
4910      yourself, _timezone will not.  Thus timezone and _timezone will
4911      wind up at different memory locations.  The tzset call will set
4912      _timezone, leaving timezone unchanged.  */
4913
4914   if (h->weakdef != NULL)
4915     {
4916       struct elf_link_hash_entry *weakdef;
4917
4918       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
4919       weakdef = h->weakdef;
4920       BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined);
4921       BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
4922       if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
4923           || (weakdef->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
4924         {
4925           /* This symbol is defined or referenced by a regular object
4926              file, so we will not do anything special.  Clear weakdef
4927              for the convenience of the processor backend.  */
4928           h->weakdef = NULL;
4929         }
4930       else
4931         {
4932           /* There is an implicit reference by a regular object file
4933              via the weak symbol.  */
4934           weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
4935           if (! elf_adjust_dynamic_symbol (weakdef, (PTR) info))
4936             return false;
4937         }
4938     }
4939
4940   dynobj = elf_hash_table (info)->dynobj;
4941   bed = get_elf_backend_data (dynobj);
4942   if (! (*bed->elf_backend_adjust_dynamic_symbol) (info, h))
4943     {
4944       /* FIXME: No way to return error.  */
4945       abort ();
4946     }
4947
4948   return true;
4949 }
4950 \f
4951 /* Final phase of ELF linker.  */
4952
4953 /* A structure we use to avoid passing large numbers of arguments.  */
4954
4955 struct elf_final_link_info
4956 {
4957   /* General link information.  */
4958   struct bfd_link_info *info;
4959   /* Output BFD.  */
4960   bfd *output_bfd;
4961   /* Symbol string table.  */
4962   struct strtab *symstrtab;
4963   /* .dynsym section.  */
4964   asection *dynsym_sec;
4965   /* .hash section.  */
4966   asection *hash_sec;
4967   /* Buffer large enough to hold contents of any section.  */
4968   bfd_byte *contents;
4969   /* Buffer large enough to hold external relocs of any section.  */
4970   PTR external_relocs;
4971   /* Buffer large enough to hold internal relocs of any section.  */
4972   Elf_Internal_Rela *internal_relocs;
4973   /* Buffer large enough to hold external local symbols of any input
4974      BFD.  */
4975   Elf_External_Sym *external_syms;
4976   /* Buffer large enough to hold internal local symbols of any input
4977      BFD.  */
4978   Elf_Internal_Sym *internal_syms;
4979   /* Array large enough to hold a symbol index for each local symbol
4980      of any input BFD.  */
4981   long *indices;
4982   /* Array large enough to hold a section pointer for each local
4983      symbol of any input BFD.  */
4984   asection **sections;
4985   /* Buffer to hold swapped out symbols.  */
4986   Elf_External_Sym *symbuf;
4987   /* Number of swapped out symbols in buffer.  */
4988   size_t symbuf_count;
4989   /* Number of symbols which fit in symbuf.  */
4990   size_t symbuf_size;
4991 };
4992
4993 static boolean elf_link_output_sym
4994   PARAMS ((struct elf_final_link_info *, const char *, Elf_Internal_Sym *));
4995 static boolean elf_link_flush_output_syms
4996   PARAMS ((struct elf_final_link_info *));
4997 static boolean elf_link_output_extsym
4998   PARAMS ((struct elf_link_hash_entry *, PTR));
4999 static boolean elf_link_input_bfd
5000   PARAMS ((struct elf_final_link_info *, bfd *));
5001 static boolean elf_reloc_link_order
5002   PARAMS ((bfd *, struct bfd_link_info *, asection *,
5003            struct bfd_link_order *));
5004
5005 /* Do the final step of an ELF link.  */
5006
5007 boolean
5008 elf_bfd_final_link (abfd, info)
5009      bfd *abfd;
5010      struct bfd_link_info *info;
5011 {
5012   bfd *dynobj;
5013   struct elf_final_link_info finfo;
5014   register asection *o;
5015   register struct bfd_link_order *p;
5016   register bfd *sub;
5017   size_t max_contents_size;
5018   size_t max_external_reloc_size;
5019   size_t max_internal_reloc_count;
5020   size_t max_sym_count;
5021   file_ptr off;
5022   Elf_Internal_Sym elfsym;
5023   unsigned int i;
5024   Elf_Internal_Shdr *symtab_hdr;
5025   Elf_Internal_Shdr *symstrtab_hdr;
5026
5027   dynobj = elf_hash_table (info)->dynobj;
5028
5029   finfo.info = info;
5030   finfo.output_bfd = abfd;
5031   finfo.symstrtab = bfd_new_strtab (abfd);
5032   if (finfo.symstrtab == NULL)
5033     return false;
5034   if (dynobj == NULL)
5035     {
5036       finfo.dynsym_sec = NULL;
5037       finfo.hash_sec = NULL;
5038     }
5039   else
5040     {
5041       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
5042       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
5043       if (finfo.dynsym_sec == NULL
5044           || finfo.hash_sec == NULL)
5045         abort ();
5046     }
5047   finfo.contents = NULL;
5048   finfo.external_relocs = NULL;
5049   finfo.internal_relocs = NULL;
5050   finfo.external_syms = NULL;
5051   finfo.internal_syms = NULL;
5052   finfo.indices = NULL;
5053   finfo.sections = NULL;
5054   finfo.symbuf = NULL;
5055   finfo.symbuf_count = 0;
5056
5057   /* Count up the number of relocations we will output for each output
5058      section, so that we know the sizes of the reloc sections.  We
5059      also figure out some maximum sizes.  */
5060   max_contents_size = 0;
5061   max_external_reloc_size = 0;
5062   max_internal_reloc_count = 0;
5063   max_sym_count = 0;
5064   for (o = abfd->sections; o != (asection *) NULL; o = o->next)
5065     {
5066       o->reloc_count = 0;
5067
5068       for (p = o->link_order_head; p != NULL; p = p->next)
5069         {
5070           if (p->type == bfd_section_reloc_link_order
5071               || p->type == bfd_symbol_reloc_link_order)
5072             ++o->reloc_count;
5073           else if (p->type == bfd_indirect_link_order)
5074             {
5075               asection *sec;
5076
5077               sec = p->u.indirect.section;
5078
5079               if (info->relocateable)
5080                 o->reloc_count += sec->reloc_count;
5081
5082               if (sec->_raw_size > max_contents_size)
5083                 max_contents_size = sec->_raw_size;
5084               if (sec->_cooked_size > max_contents_size)
5085                 max_contents_size = sec->_cooked_size;
5086
5087               /* We are interested in just local symbols, not all
5088                  symbols.  */
5089               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
5090                 {
5091                   size_t sym_count;
5092
5093                   if (elf_bad_symtab (sec->owner))
5094                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
5095                                  / sizeof (Elf_External_Sym));
5096                   else
5097                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
5098
5099                   if (sym_count > max_sym_count)
5100                     max_sym_count = sym_count;
5101                 }
5102
5103               if ((sec->flags & SEC_RELOC) != 0)
5104                 {
5105                   size_t ext_size;
5106
5107                   ext_size = elf_section_data (sec)->rel_hdr.sh_size;
5108                   if (ext_size > max_external_reloc_size)
5109                     max_external_reloc_size = ext_size;
5110                   if (sec->reloc_count > max_internal_reloc_count)
5111                     max_internal_reloc_count = sec->reloc_count;
5112                 }
5113             }
5114         }
5115
5116       if (o->reloc_count > 0)
5117         o->flags |= SEC_RELOC;
5118       else
5119         {
5120           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
5121              set it (this is probably a bug) and if it is set
5122              assign_section_numbers will create a reloc section.  */
5123           o->flags &=~ SEC_RELOC;
5124         }
5125     }
5126
5127   /* Figure out the file positions for everything but the symbol table
5128      and the relocs.  We set symcount to force assign_section_numbers
5129      to create a symbol table.  */
5130   abfd->symcount = info->strip == strip_all ? 0 : 1;
5131   BFD_ASSERT (! abfd->output_has_begun);
5132   if (! elf_compute_section_file_positions (abfd, info))
5133     goto error_return;
5134
5135   /* That created the reloc sections.  Set their sizes, and assign
5136      them file positions, and allocate some buffers.  */
5137   for (o = abfd->sections; o != NULL; o = o->next)
5138     {
5139       if ((o->flags & SEC_RELOC) != 0)
5140         {
5141           Elf_Internal_Shdr *rel_hdr;
5142           register struct elf_link_hash_entry **p, **pend;
5143
5144           rel_hdr = &elf_section_data (o)->rel_hdr;
5145
5146           rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
5147
5148           /* The contents field must last into write_object_contents,
5149              so we allocate it with bfd_alloc rather than malloc.  */
5150           rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
5151           if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
5152             {
5153               bfd_set_error (bfd_error_no_memory);
5154               goto error_return;
5155             }
5156
5157           p = ((struct elf_link_hash_entry **)
5158                malloc (o->reloc_count
5159                        * sizeof (struct elf_link_hash_entry *)));
5160           if (p == NULL && o->reloc_count != 0)
5161             {
5162               bfd_set_error (bfd_error_no_memory);
5163               goto error_return;
5164             }
5165           elf_section_data (o)->rel_hashes = p;
5166           pend = p + o->reloc_count;
5167           for (; p < pend; p++)
5168             *p = NULL;
5169
5170           /* Use the reloc_count field as an index when outputting the
5171              relocs.  */
5172           o->reloc_count = 0;
5173         }
5174     }
5175
5176   assign_file_positions_for_relocs (abfd);
5177
5178   /* We have now assigned file positions for all the sections except
5179      .symtab and .strtab.  We start the .symtab section at the current
5180      file position, and write directly to it.  We build the .strtab
5181      section in memory.  When we add .dynsym support, we will build
5182      that in memory as well (.dynsym is smaller than .symtab).  */
5183   abfd->symcount = 0;
5184   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5185   /* sh_name is set in prep_headers.  */
5186   symtab_hdr->sh_type = SHT_SYMTAB;
5187   symtab_hdr->sh_flags = 0;
5188   symtab_hdr->sh_addr = 0;
5189   symtab_hdr->sh_size = 0;
5190   symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
5191   /* sh_link is set in assign_section_numbers.  */
5192   /* sh_info is set below.  */
5193   /* sh_offset is set just below.  */
5194   symtab_hdr->sh_addralign = 4;  /* FIXME: system dependent?  */
5195
5196   off = elf_tdata (abfd)->next_file_pos;
5197   off = assign_file_position_for_section (symtab_hdr, off, true);
5198
5199   /* Note that at this point elf_tdata (abfd)->next_file_pos is
5200      incorrect.  We do not yet know the size of the .symtab section.
5201      We correct next_file_pos below, after we do know the size.  */
5202
5203   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
5204      continuously seeking to the right position in the file.  */
5205   if (! info->keep_memory || max_sym_count < 20)
5206     finfo.symbuf_size = 20;
5207   else
5208     finfo.symbuf_size = max_sym_count;
5209   finfo.symbuf = ((Elf_External_Sym *)
5210                   malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
5211   if (finfo.symbuf == NULL)
5212     {
5213       bfd_set_error (bfd_error_no_memory);
5214       goto error_return;
5215     }
5216
5217   /* Start writing out the symbol table.  The first symbol is always a
5218      dummy symbol.  */
5219   elfsym.st_value = 0;
5220   elfsym.st_size = 0;
5221   elfsym.st_info = 0;
5222   elfsym.st_other = 0;
5223   elfsym.st_shndx = SHN_UNDEF;
5224   if (! elf_link_output_sym (&finfo, (const char *) NULL, &elfsym))
5225     goto error_return;
5226
5227 #if 0
5228   /* Some standard ELF linkers do this, but we don't because it causes
5229      bootstrap comparison failures.  */
5230   /* Output a file symbol for the output file as the second symbol.
5231      We output this even if we are discarding local symbols, although
5232      I'm not sure if this is correct.  */
5233   elfsym.st_value = 0;
5234   elfsym.st_size = 0;
5235   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
5236   elfsym.st_other = 0;
5237   elfsym.st_shndx = SHN_ABS;
5238   if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd), &elfsym))
5239     goto error_return;
5240 #endif
5241
5242   /* Output a symbol for each section.  We output these even if we are
5243      discarding local symbols, since they are used for relocs.  These
5244      symbols have no names.  We store the index of each one in the
5245      index field of the section, so that we can find it again when
5246      outputting relocs.  */
5247   elfsym.st_value = 0;
5248   elfsym.st_size = 0;
5249   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
5250   elfsym.st_other = 0;
5251   for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
5252     {
5253       o = section_from_elf_index (abfd, i);
5254       if (o != &bfd_abs_section)
5255         o->target_index = abfd->symcount;
5256       elfsym.st_shndx = i;
5257       if (! elf_link_output_sym (&finfo, (const char *) NULL, &elfsym))
5258         goto error_return;
5259     }
5260
5261   /* Allocate some memory to hold information read in from the input
5262      files.  */
5263   finfo.contents = (bfd_byte *) malloc (max_contents_size);
5264   finfo.external_relocs = (PTR) malloc (max_external_reloc_size);
5265   finfo.internal_relocs = ((Elf_Internal_Rela *)
5266                            malloc (max_internal_reloc_count
5267                                    * sizeof (Elf_Internal_Rela)));
5268   finfo.external_syms = ((Elf_External_Sym *)
5269                          malloc (max_sym_count * sizeof (Elf_External_Sym)));
5270   finfo.internal_syms = ((Elf_Internal_Sym *)
5271                          malloc (max_sym_count * sizeof (Elf_Internal_Sym)));
5272   finfo.indices = (long *) malloc (max_sym_count * sizeof (long));
5273   finfo.sections = (asection **) malloc (max_sym_count * sizeof (asection *));
5274   if ((finfo.contents == NULL && max_contents_size != 0)
5275       || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
5276       || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
5277       || (finfo.external_syms == NULL && max_sym_count != 0)
5278       || (finfo.internal_syms == NULL && max_sym_count != 0)
5279       || (finfo.indices == NULL && max_sym_count != 0)
5280       || (finfo.sections == NULL && max_sym_count != 0))
5281     {
5282       bfd_set_error (bfd_error_no_memory);
5283       goto error_return;
5284     }
5285
5286   /* Since ELF permits relocations to be against local symbols, we
5287      must have the local symbols available when we do the relocations.
5288      Since we would rather only read the local symbols once, and we
5289      would rather not keep them in memory, we handle all the
5290      relocations for a single input file at the same time.
5291
5292      Unfortunately, there is no way to know the total number of local
5293      symbols until we have seen all of them, and the local symbol
5294      indices precede the global symbol indices.  This means that when
5295      we are generating relocateable output, and we see a reloc against
5296      a global symbol, we can not know the symbol index until we have
5297      finished examining all the local symbols to see which ones we are
5298      going to output.  To deal with this, we keep the relocations in
5299      memory, and don't output them until the end of the link.  This is
5300      an unfortunate waste of memory, but I don't see a good way around
5301      it.  Fortunately, it only happens when performing a relocateable
5302      link, which is not the common case.  FIXME: If keep_memory is set
5303      we could write the relocs out and then read them again; I don't
5304      know how bad the memory loss will be.  */
5305
5306   for (sub = info->input_bfds; sub != NULL; sub = sub->next)
5307     sub->output_has_begun = false;
5308   for (o = abfd->sections; o != NULL; o = o->next)
5309     {
5310       for (p = o->link_order_head; p != NULL; p = p->next)
5311         {
5312           if (p->type == bfd_indirect_link_order
5313               && (bfd_get_flavour (p->u.indirect.section->owner)
5314                   == bfd_target_elf_flavour))
5315             {
5316               sub = p->u.indirect.section->owner;
5317               if (! sub->output_has_begun)
5318                 {
5319                   if (! elf_link_input_bfd (&finfo, sub))
5320                     goto error_return;
5321                   sub->output_has_begun = true;
5322                 }
5323             }
5324           else if (p->type == bfd_section_reloc_link_order
5325                    || p->type == bfd_symbol_reloc_link_order)
5326             {
5327               if (! elf_reloc_link_order (abfd, info, o, p))
5328                 goto error_return;
5329             }
5330           else
5331             {
5332               if (! _bfd_default_link_order (abfd, info, o, p))
5333                 goto error_return;
5334             }
5335         }
5336     }
5337
5338   /* That wrote out all the local symbols.  Finish up the symbol table
5339      with the global symbols.  */
5340
5341   /* The sh_info field records the index of the first non local
5342      symbol.  */
5343   symtab_hdr->sh_info = abfd->symcount;
5344   if (dynobj != NULL)
5345     elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
5346
5347   /* We get the global symbols from the hash table.  */
5348   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
5349                           (PTR) &finfo);
5350
5351   /* Flush all symbols to the file.  */
5352   if (! elf_link_flush_output_syms (&finfo))
5353     return false;
5354
5355   /* Now we know the size of the symtab section.  */
5356   off += symtab_hdr->sh_size;
5357
5358   /* Finish up the symbol string table (.strtab) section.  */
5359   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
5360   /* sh_name was set in prep_headers.  */
5361   symstrtab_hdr->sh_type = SHT_STRTAB;
5362   symstrtab_hdr->sh_flags = 0;
5363   symstrtab_hdr->sh_addr = 0;
5364   symstrtab_hdr->sh_size = finfo.symstrtab->length;
5365   symstrtab_hdr->sh_entsize = 0;
5366   symstrtab_hdr->sh_link = 0;
5367   symstrtab_hdr->sh_info = 0;
5368   /* sh_offset is set just below.  */
5369   symstrtab_hdr->sh_addralign = 1;
5370   symstrtab_hdr->contents = (PTR) finfo.symstrtab->tab;
5371
5372   off = assign_file_position_for_section (symstrtab_hdr, off, true);
5373   elf_tdata (abfd)->next_file_pos = off;
5374
5375   /* Adjust the relocs to have the correct symbol indices.  */
5376   for (o = abfd->sections; o != NULL; o = o->next)
5377     {
5378       struct elf_link_hash_entry **rel_hash;
5379       Elf_Internal_Shdr *rel_hdr;
5380
5381       if ((o->flags & SEC_RELOC) == 0)
5382         continue;
5383
5384       rel_hash = elf_section_data (o)->rel_hashes;
5385       rel_hdr = &elf_section_data (o)->rel_hdr;
5386       for (i = 0; i < o->reloc_count; i++, rel_hash++)
5387         {
5388           if (*rel_hash == NULL)
5389             continue;
5390               
5391           BFD_ASSERT ((*rel_hash)->indx >= 0);
5392
5393           if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
5394             {
5395               Elf_External_Rel *erel;
5396               Elf_Internal_Rel irel;
5397
5398               erel = (Elf_External_Rel *) rel_hdr->contents + i;
5399               elf_swap_reloc_in (abfd, erel, &irel);
5400               irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
5401                                         ELF_R_TYPE (irel.r_info));
5402               elf_swap_reloc_out (abfd, &irel, erel);
5403             }
5404           else
5405             {
5406               Elf_External_Rela *erela;
5407               Elf_Internal_Rela irela;
5408
5409               BFD_ASSERT (rel_hdr->sh_entsize
5410                           == sizeof (Elf_External_Rela));
5411
5412               erela = (Elf_External_Rela *) rel_hdr->contents + i;
5413               elf_swap_reloca_in (abfd, erela, &irela);
5414               irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
5415                                          ELF_R_TYPE (irela.r_info));
5416               elf_swap_reloca_out (abfd, &irela, erela);
5417             }
5418         }
5419
5420       /* Set the reloc_count field to 0 to prevent write_relocs from
5421          trying to swap the relocs out itself.  */
5422       o->reloc_count = 0;
5423     }
5424
5425   /* If we are linking against a dynamic object, finish up the dynamic
5426      linking information.  */
5427   if (dynobj != NULL)
5428     {
5429       Elf_External_Dyn *dyncon, *dynconend;
5430       struct elf_backend_data *bed;
5431
5432       /* Fix up .dynamic entries.  */
5433       o = bfd_get_section_by_name (dynobj, ".dynamic");
5434       BFD_ASSERT (o != NULL);
5435
5436       dyncon = (Elf_External_Dyn *) o->contents;
5437       dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
5438       for (; dyncon < dynconend; dyncon++)
5439         {
5440           Elf_Internal_Dyn dyn;
5441           const char *name;
5442           unsigned int type;
5443
5444           elf_swap_dyn_in (dynobj, dyncon, &dyn);
5445
5446           switch (dyn.d_tag)
5447             {
5448             default:
5449               break;
5450
5451             case DT_INIT:
5452               name = ".init";
5453               goto get_vma;
5454             case DT_FINI:
5455               name = ".fini";
5456               goto get_vma;
5457             case DT_HASH:
5458               name = ".hash";
5459               goto get_vma;
5460             case DT_STRTAB:
5461               name = ".dynstr";
5462               goto get_vma;
5463             case DT_SYMTAB:
5464               name = ".dynsym";
5465             get_vma:
5466               o = bfd_get_section_by_name (abfd, name);
5467               BFD_ASSERT (o != NULL);
5468               dyn.d_un.d_ptr = o->vma;
5469               elf_swap_dyn_out (dynobj, &dyn, dyncon);
5470               break;
5471
5472             case DT_REL:
5473             case DT_RELA:
5474             case DT_RELSZ:
5475             case DT_RELASZ:
5476               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
5477                 type = SHT_REL;
5478               else
5479                 type = SHT_RELA;
5480               dyn.d_un.d_val = 0;
5481               for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
5482                 {
5483                   Elf_Internal_Shdr *hdr;
5484
5485                   hdr = elf_elfsections (abfd)[i];
5486                   if (hdr->sh_type == type
5487                       && (hdr->sh_flags & SHF_ALLOC) != 0)
5488                     {
5489                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
5490                         dyn.d_un.d_val += hdr->sh_size;
5491                       else
5492                         {
5493                           if (dyn.d_un.d_val == 0
5494                               || hdr->sh_addr < dyn.d_un.d_val)
5495                             dyn.d_un.d_val = hdr->sh_addr;
5496                         }
5497                     }
5498                 }
5499               elf_swap_dyn_out (dynobj, &dyn, dyncon);
5500               break;
5501             }
5502         }
5503
5504       bed = get_elf_backend_data (abfd);
5505       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
5506         goto error_return;
5507
5508       for (o = dynobj->sections; o != NULL; o = o->next)
5509         {
5510           if ((o->flags & SEC_HAS_CONTENTS) == 0)
5511             continue;
5512           BFD_ASSERT ((o->flags & SEC_IN_MEMORY) != 0);
5513           if (! bfd_set_section_contents (abfd, o->output_section,
5514                                           o->contents, o->output_offset,
5515                                           o->_raw_size))
5516             goto error_return;
5517         }
5518     }
5519
5520   if (finfo.contents != NULL)
5521     free (finfo.contents);
5522   if (finfo.external_relocs != NULL)
5523     free (finfo.external_relocs);
5524   if (finfo.internal_relocs != NULL)
5525     free (finfo.internal_relocs);
5526   if (finfo.external_syms != NULL)
5527     free (finfo.external_syms);
5528   if (finfo.internal_syms != NULL)
5529     free (finfo.internal_syms);
5530   if (finfo.indices != NULL)
5531     free (finfo.indices);
5532   if (finfo.sections != NULL)
5533     free (finfo.sections);
5534   if (finfo.symbuf != NULL)
5535     free (finfo.symbuf);
5536   for (o = abfd->sections; o != NULL; o = o->next)
5537     {
5538       if ((o->flags & SEC_RELOC) != 0
5539           && elf_section_data (o)->rel_hashes != NULL)
5540         free (elf_section_data (o)->rel_hashes);
5541     }
5542
5543   return true;
5544
5545  error_return:
5546   if (finfo.contents != NULL)
5547     free (finfo.contents);
5548   if (finfo.external_relocs != NULL)
5549     free (finfo.external_relocs);
5550   if (finfo.internal_relocs != NULL)
5551     free (finfo.internal_relocs);
5552   if (finfo.external_syms != NULL)
5553     free (finfo.external_syms);
5554   if (finfo.internal_syms != NULL)
5555     free (finfo.internal_syms);
5556   if (finfo.indices != NULL)
5557     free (finfo.indices);
5558   if (finfo.sections != NULL)
5559     free (finfo.sections);
5560   if (finfo.symbuf != NULL)
5561     free (finfo.symbuf);
5562   for (o = abfd->sections; o != NULL; o = o->next)
5563     {
5564       if ((o->flags & SEC_RELOC) != 0
5565           && elf_section_data (o)->rel_hashes != NULL)
5566         free (elf_section_data (o)->rel_hashes);
5567     }
5568
5569   return false;
5570 }
5571
5572 /* Add a symbol to the output symbol table.  */
5573
5574 static boolean
5575 elf_link_output_sym (finfo, name, elfsym)
5576      struct elf_final_link_info *finfo;
5577      const char *name;
5578      Elf_Internal_Sym *elfsym;
5579 {
5580   if (name == (const char *) NULL || *name == '\0')
5581     elfsym->st_name = 0;
5582   else
5583     {
5584       elfsym->st_name = bfd_add_to_strtab (finfo->output_bfd,
5585                                            finfo->symstrtab, name);
5586       if (elfsym->st_name == (unsigned long) -1)
5587         return false;
5588     }
5589
5590   if (finfo->symbuf_count >= finfo->symbuf_size)
5591     {
5592       if (! elf_link_flush_output_syms (finfo))
5593         return false;
5594     }
5595
5596   elf_swap_symbol_out (finfo->output_bfd, elfsym,
5597                        finfo->symbuf + finfo->symbuf_count);
5598   ++finfo->symbuf_count;
5599
5600   ++finfo->output_bfd->symcount;
5601
5602   return true;
5603 }
5604
5605 /* Flush the output symbols to the file.  */
5606
5607 static boolean
5608 elf_link_flush_output_syms (finfo)
5609      struct elf_final_link_info *finfo;
5610 {
5611   Elf_Internal_Shdr *symtab;
5612
5613   symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
5614
5615   if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
5616                 SEEK_SET) != 0
5617       || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
5618                      sizeof (Elf_External_Sym), finfo->output_bfd)
5619           != finfo->symbuf_count * sizeof (Elf_External_Sym)))
5620     return false;
5621
5622   symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
5623
5624   finfo->symbuf_count = 0;
5625
5626   return true;
5627 }
5628
5629 /* Add an external symbol to the symbol table.  This is called from
5630    the hash table traversal routine.  */
5631
5632 static boolean
5633 elf_link_output_extsym (h, data)
5634      struct elf_link_hash_entry *h;
5635      PTR data;
5636 {
5637   struct elf_final_link_info *finfo = (struct elf_final_link_info *) data;
5638   boolean strip;
5639   Elf_Internal_Sym sym;
5640
5641   /* We don't want to output symbols that have never been mentioned by
5642      a regular file, or that we have been told to strip.  However, if
5643      h->indx is set to -2, the symbol is used by a reloc and we must
5644      output it.  */
5645   if (h->indx == -2)
5646     strip = false;
5647   else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
5648             || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
5649            && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
5650            && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
5651     strip = true;
5652   else if (finfo->info->strip == strip_all
5653            || (finfo->info->strip == strip_some
5654                && bfd_hash_lookup (finfo->info->keep_hash,
5655                                    h->root.root.string,
5656                                    false, false) == NULL))
5657     strip = true;
5658   else
5659     strip = false;
5660
5661   /* If we're stripping it, and it's not a dynamic symbol, there's
5662      nothing else to do.  */
5663   if (strip && h->dynindx == -1)
5664     return true;
5665
5666   sym.st_value = 0;
5667   sym.st_size = h->size;
5668   sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
5669   sym.st_other = 0;
5670
5671   switch (h->root.type)
5672     {
5673     default:
5674     case bfd_link_hash_new:
5675       abort ();
5676       return false;
5677
5678     case bfd_link_hash_undefined:
5679       sym.st_shndx = SHN_UNDEF;
5680       break;
5681
5682     case bfd_link_hash_weak:
5683       sym.st_shndx = SHN_UNDEF;
5684       sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
5685       break;
5686
5687     case bfd_link_hash_defined:
5688       {
5689         asection *sec;
5690
5691         sec = h->root.u.def.section;
5692         if (sec->output_section != NULL)
5693           {
5694             sym.st_shndx = elf_section_from_bfd_section (finfo->output_bfd,
5695                                                          sec->output_section);
5696             if (sym.st_shndx == (unsigned short) -1)
5697               {
5698                 /* FIXME: No way to handle errors.  */
5699                 abort ();
5700               }
5701
5702             /* ELF symbols in relocateable files are section relative,
5703                but in nonrelocateable files they are virtual
5704                addresses.  */
5705             sym.st_value = h->root.u.def.value + sec->output_offset;
5706             if (! finfo->info->relocateable)
5707               sym.st_value += sec->output_section->vma;
5708           }
5709         else
5710           {
5711             BFD_ASSERT (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
5712                         && elf_elfheader (sec->owner)->e_type == ET_DYN);
5713             sym.st_shndx = SHN_UNDEF;
5714           }
5715       }
5716       break;
5717
5718     case bfd_link_hash_common:
5719       sym.st_shndx = SHN_COMMON;
5720       if (h->align == 0)
5721         sym.st_value = 1;
5722       else
5723         sym.st_value = h->align;
5724       break;
5725
5726     case bfd_link_hash_indirect:
5727     case bfd_link_hash_warning:
5728       /* I have no idea how these should be handled.  */
5729       return true;
5730     }
5731
5732   /* If this symbol should be put in the .dynsym section, then put it
5733      there now.  We have already know the symbol index.  We also fill
5734      in the entry in the .hash section.  */
5735   if (h->dynindx != -1)
5736     {
5737       struct elf_backend_data *bed;
5738       size_t bucketcount;
5739       size_t bucket;
5740       bfd_byte *bucketpos;
5741       bfd_vma chain;
5742
5743       sym.st_name = h->dynstr_index;
5744
5745       /* Give the processor backend a chance to tweak the symbol
5746          value, and also to finish up anything that needs to be done
5747          for this symbol.  */
5748       bed = get_elf_backend_data (finfo->output_bfd);
5749       if (! ((*bed->elf_backend_finish_dynamic_symbol)
5750              (finfo->output_bfd, finfo->info, h, &sym)))
5751         {
5752           /* FIXME: No way to return error.  */
5753           abort ();
5754         }
5755
5756       elf_swap_symbol_out (finfo->output_bfd, &sym,
5757                            ((Elf_External_Sym *) finfo->dynsym_sec->contents
5758                             + h->dynindx));
5759
5760       bucketcount = elf_hash_table (finfo->info)->bucketcount;
5761       bucket = bfd_elf_hash (h->root.root.string) % bucketcount;
5762       bucketpos = ((bfd_byte *) finfo->hash_sec->contents
5763                    + (bucket + 2) * (ARCH_SIZE / 8));
5764       chain = get_word (finfo->output_bfd, bucketpos);
5765       put_word (finfo->output_bfd, h->dynindx, bucketpos);
5766       put_word (finfo->output_bfd, chain,
5767                 ((bfd_byte *) finfo->hash_sec->contents
5768                  + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
5769     }
5770
5771   /* If we're stripping it, then it was just a dynamic symbol, and
5772      there's nothing else to do.  */
5773   if (strip)
5774     return true;
5775
5776   h->indx = finfo->output_bfd->symcount;
5777
5778   if (! elf_link_output_sym (finfo, h->root.root.string, &sym))
5779     {
5780       /* FIXME: No way to return error.  */
5781       abort ();
5782     }
5783
5784   return true;
5785 }
5786
5787 /* Link an input file into the linker output file.  This function
5788    handles all the sections and relocations of the input file at once.
5789    This is so that we only have to read the local symbols once, and
5790    don't have to keep them in memory.  */
5791
5792 static boolean
5793 elf_link_input_bfd (finfo, input_bfd)
5794      struct elf_final_link_info *finfo;
5795      bfd *input_bfd;
5796 {
5797   boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
5798                                        bfd *, asection *, bfd_byte *,
5799                                        Elf_Internal_Rela *,
5800                                        Elf_Internal_Sym *,
5801                                        asection **));
5802   bfd *output_bfd;
5803   Elf_Internal_Shdr *symtab_hdr;
5804   size_t locsymcount;
5805   size_t extsymoff;
5806   Elf_External_Sym *esym;
5807   Elf_External_Sym *esymend;
5808   Elf_Internal_Sym *isym;
5809   long *pindex;
5810   asection **ppsection;
5811   asection *o;
5812
5813   output_bfd = finfo->output_bfd;
5814   relocate_section =
5815     get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
5816
5817   /* If this is a dynamic object, we don't want to do anything here:
5818      we don't want the local symbols, and we don't want the section
5819      contents.  */
5820   if (elf_elfheader (input_bfd)->e_type == ET_DYN)
5821     return true;
5822
5823   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5824   if (elf_bad_symtab (input_bfd))
5825     {
5826       locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
5827       extsymoff = 0;
5828     }
5829   else
5830     {
5831       locsymcount = symtab_hdr->sh_info;
5832       extsymoff = symtab_hdr->sh_info;
5833     }
5834
5835   /* Read the local symbols.  */
5836   if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
5837       || (bfd_read (finfo->external_syms, sizeof (Elf_External_Sym),
5838                     locsymcount, input_bfd)
5839           != locsymcount * sizeof (Elf_External_Sym)))
5840     return false;
5841
5842   /* Swap in the local symbols and write out the ones which we know
5843      are going into the output file.  */
5844   esym = finfo->external_syms;
5845   esymend = esym + locsymcount;
5846   isym = finfo->internal_syms;
5847   pindex = finfo->indices;
5848   ppsection = finfo->sections;
5849   for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
5850     {
5851       asection *isec;
5852       const char *name;
5853       bfd_vma oldval;
5854
5855       elf_swap_symbol_in (input_bfd, esym, isym);
5856       *pindex = -1;
5857
5858       if (elf_bad_symtab (input_bfd))
5859         {
5860           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
5861             {
5862               *ppsection = NULL;
5863               continue;
5864             }
5865         }
5866
5867       if (isym->st_shndx == SHN_UNDEF)
5868         isec = &bfd_und_section;
5869       else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
5870         {
5871           isec = section_from_elf_index (input_bfd, isym->st_shndx);
5872           if (isec == NULL)
5873             return false;
5874         }
5875       else if (isym->st_shndx == SHN_ABS)
5876         isec = &bfd_abs_section;
5877       else if (isym->st_shndx == SHN_COMMON)
5878         isec = &bfd_com_section;
5879       else
5880         {
5881           /* Who knows?  */
5882           isec = NULL;
5883         }
5884
5885       *ppsection = isec;
5886
5887       /* Don't output the first, undefined, symbol.  */
5888       if (esym == finfo->external_syms)
5889         continue;
5890
5891       /* If we are stripping all symbols, we don't want to output this
5892          one.  */
5893       if (finfo->info->strip == strip_all)
5894         continue;
5895
5896       /* We never output section symbols.  Instead, we use the section
5897          symbol of the corresponding section in the output file.  */
5898       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
5899         continue;
5900
5901       /* If we are discarding all local symbols, we don't want to
5902          output this one.  If we are generating a relocateable output
5903          file, then some of the local symbols may be required by
5904          relocs; we output them below as we discover that they are
5905          needed.  */
5906       if (finfo->info->discard == discard_all)
5907         continue;
5908
5909       /* Get the name of the symbol.  */
5910       name = elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
5911                                           isym->st_name);
5912       if (name == NULL)
5913         return false;
5914
5915       /* See if we are discarding symbols with this name.  */
5916       if ((finfo->info->strip == strip_some
5917            && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
5918                == NULL))
5919           || (finfo->info->discard == discard_l
5920               && strncmp (name, finfo->info->lprefix,
5921                           finfo->info->lprefix_len) == 0))
5922         continue;
5923
5924       /* If we get here, we are going to output this symbol.  */
5925
5926       /* Adjust the section index for the output file.  */
5927       isym->st_shndx = elf_section_from_bfd_section (output_bfd,
5928                                                      isec->output_section);
5929       if (isym->st_shndx == (unsigned short) -1)
5930         return false;
5931
5932       *pindex = output_bfd->symcount;
5933
5934       /* ELF symbols in relocateable files are section relative, but
5935          in executable files they are virtual addresses.  Note that
5936          this code assumes that all ELF sections have an associated
5937          BFD section with a reasonable value for output_offset; below
5938          we assume that they also have a reasonable value for
5939          output_section.  Any special sections must be set up to meet
5940          these requirements.  */
5941       oldval = isym->st_value;
5942       isym->st_value += isec->output_offset;
5943       if (! finfo->info->relocateable)
5944         isym->st_value += isec->output_section->vma;
5945
5946       if (! elf_link_output_sym (finfo, name, isym))
5947         return false;
5948
5949       /* Restore the old value for reloc handling.  */
5950       isym->st_value = oldval;
5951     }
5952
5953   /* Relocate the contents of each section.  */
5954   for (o = input_bfd->sections; o != NULL; o = o->next)
5955     {
5956       Elf_Internal_Shdr *input_rel_hdr;
5957
5958       if ((o->flags & SEC_HAS_CONTENTS) == 0)
5959         continue;
5960
5961       /* Read the contents of the section.  */
5962       if (! bfd_get_section_contents (input_bfd, o, finfo->contents,
5963                                       (file_ptr) 0, o->_raw_size))
5964         return false;
5965
5966       if ((o->flags & SEC_RELOC) != 0)
5967         {
5968           /* Read in the relocs.  */
5969           input_rel_hdr = &elf_section_data (o)->rel_hdr;
5970           if (bfd_seek (input_bfd, input_rel_hdr->sh_offset, SEEK_SET) != 0
5971               || bfd_read (finfo->external_relocs, 1, input_rel_hdr->sh_size,
5972                            input_bfd) != input_rel_hdr->sh_size)
5973             return false;
5974
5975           /* Swap in the relocs.  For convenience, we always produce
5976              an Elf_Internal_Rela array; if the relocs are Rel, we set
5977              the addend to 0.  */
5978           if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
5979             {
5980               Elf_External_Rel *erel;
5981               Elf_External_Rel *erelend;
5982               Elf_Internal_Rela *irela;
5983
5984               erel = (Elf_External_Rel *) finfo->external_relocs;
5985               erelend = erel + o->reloc_count;
5986               irela = finfo->internal_relocs;
5987               for (; erel < erelend; erel++, irela++)
5988                 {
5989                   Elf_Internal_Rel irel;
5990
5991                   elf_swap_reloc_in (input_bfd, erel, &irel);
5992                   irela->r_offset = irel.r_offset;
5993                   irela->r_info = irel.r_info;
5994                   irela->r_addend = 0;
5995                 }
5996             }
5997           else
5998             {
5999               Elf_External_Rela *erela;
6000               Elf_External_Rela *erelaend;
6001               Elf_Internal_Rela *irela;
6002
6003               BFD_ASSERT (input_rel_hdr->sh_entsize
6004                           == sizeof (Elf_External_Rela));
6005
6006               erela = (Elf_External_Rela *) finfo->external_relocs;
6007               erelaend = erela + o->reloc_count;
6008               irela = finfo->internal_relocs;
6009               for (; erela < erelaend; erela++, irela++)
6010                 elf_swap_reloca_in (input_bfd, erela, irela);
6011             }
6012
6013           /* Relocate the section by invoking a back end routine.
6014
6015              The back end routine is responsible for adjusting the
6016              section contents as necessary, and (if using Rela relocs
6017              and generating a relocateable output file) adjusting the
6018              reloc addend as necessary.
6019
6020              The back end routine does not have to worry about setting
6021              the reloc address or the reloc symbol index.
6022
6023              The back end routine is given a pointer to the swapped in
6024              internal symbols, and can access the hash table entries
6025              for the external symbols via elf_sym_hashes (input_bfd).
6026
6027              When generating relocateable output, the back end routine
6028              must handle STB_LOCAL/STT_SECTION symbols specially.  The
6029              output symbol is going to be a section symbol
6030              corresponding to the output section, which will require
6031              the addend to be adjusted.  */
6032
6033           if (! (*relocate_section) (output_bfd, finfo->info,
6034                                      input_bfd, o,
6035                                      finfo->contents,
6036                                      finfo->internal_relocs,
6037                                      finfo->internal_syms,
6038                                      finfo->sections))
6039             return false;
6040
6041           if (finfo->info->relocateable)
6042             {
6043               Elf_Internal_Rela *irela;
6044               Elf_Internal_Rela *irelaend;
6045               struct elf_link_hash_entry **rel_hash;
6046               Elf_Internal_Shdr *output_rel_hdr;
6047
6048               /* Adjust the reloc addresses and symbol indices.  */
6049
6050               irela = finfo->internal_relocs;
6051               irelaend = irela + o->reloc_count;
6052               rel_hash = (elf_section_data (o->output_section)->rel_hashes
6053                           + o->output_section->reloc_count);
6054               for (; irela < irelaend; irela++, rel_hash++)
6055                 {
6056                   long r_symndx;
6057                   Elf_Internal_Sym *isym;
6058                   asection *sec;
6059
6060                   irela->r_offset += o->output_offset;
6061
6062                   r_symndx = ELF_R_SYM (irela->r_info);
6063
6064                   if (r_symndx == 0)
6065                     continue;
6066
6067                   if (r_symndx >= locsymcount
6068                       || (elf_bad_symtab (input_bfd)
6069                           && finfo->sections[r_symndx] == NULL))
6070                     {
6071                       long indx;
6072
6073                       /* This is a reloc against a global symbol.  We
6074                          have not yet output all the local symbols, so
6075                          we do not know the symbol index of any global
6076                          symbol.  We set the rel_hash entry for this
6077                          reloc to point to the global hash table entry
6078                          for this symbol.  The symbol index is then
6079                          set at the end of elf_bfd_final_link.  */
6080                       indx = r_symndx - extsymoff;
6081                       *rel_hash = elf_sym_hashes (input_bfd)[indx];
6082
6083                       /* Setting the index to -2 tells
6084                          elf_link_output_extsym that this symbol is
6085                          used by a reloc.  */
6086                       BFD_ASSERT ((*rel_hash)->indx < 0);
6087                       (*rel_hash)->indx = -2;
6088
6089                       continue;
6090                     }
6091
6092                   /* This is a reloc against a local symbol. */
6093
6094                   *rel_hash = NULL;
6095                   isym = finfo->internal_syms + r_symndx;
6096                   sec = finfo->sections[r_symndx];
6097                   if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6098                     {
6099                       /* I suppose the backend ought to fill in the
6100                          section of any STT_SECTION symbol against a
6101                          processor specific section.  */
6102                       if (sec == NULL
6103                           || sec == &bfd_und_section
6104                           || sec == &bfd_com_section)
6105                         {
6106                           bfd_set_error (bfd_error_bad_value);
6107                           return false;
6108                         }
6109                       else if (sec == &bfd_abs_section)
6110                         r_symndx = 0;
6111                       else
6112                         {
6113                           r_symndx = sec->output_section->target_index;
6114                           if (r_symndx == 0)
6115                             abort ();
6116                         }
6117                     }
6118                   else
6119                     {
6120                       if (finfo->indices[r_symndx] == -1)
6121                         {
6122                           unsigned long link;
6123                           const char *name;
6124                           asection *osec;
6125
6126                           if (finfo->info->strip == strip_all)
6127                             {
6128                               /* You can't do ld -r -s.  */
6129                               bfd_set_error (bfd_error_invalid_operation);
6130                               return false;
6131                             }
6132
6133                           /* This symbol was skipped earlier, but
6134                              since it is needed by a reloc, we
6135                              must output it now.  */
6136                           link = symtab_hdr->sh_link;
6137                           name = elf_string_from_elf_section (input_bfd,
6138                                                               link,
6139                                                               isym->st_name);
6140                           if (name == NULL)
6141                             return false;
6142
6143                           osec = sec->output_section;
6144                           isym->st_shndx =
6145                             elf_section_from_bfd_section (output_bfd,
6146                                                           osec);
6147                           if (isym->st_shndx == (unsigned short) -1)
6148                             return false;
6149
6150                           isym->st_value += sec->output_offset;
6151                           if (! finfo->info->relocateable)
6152                             isym->st_value += osec->vma;
6153
6154                           finfo->indices[r_symndx] = output_bfd->symcount;
6155
6156                           if (! elf_link_output_sym (finfo, name, isym))
6157                             return false;
6158                         }
6159
6160                       r_symndx = finfo->indices[r_symndx];
6161                     }
6162
6163                   irela->r_info = ELF_R_INFO (r_symndx,
6164                                               ELF_R_TYPE (irela->r_info));
6165                 }
6166
6167               /* Swap out the relocs.  */
6168               output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
6169               BFD_ASSERT (output_rel_hdr->sh_entsize
6170                           == input_rel_hdr->sh_entsize);
6171               irela = finfo->internal_relocs;
6172               irelaend = irela + o->reloc_count;
6173               if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
6174                 {
6175                   Elf_External_Rel *erel;
6176
6177                   erel = ((Elf_External_Rel *) output_rel_hdr->contents
6178                           + o->output_section->reloc_count);
6179                   for (; irela < irelaend; irela++, erel++)
6180                     {
6181                       Elf_Internal_Rel irel;
6182
6183                       irel.r_offset = irela->r_offset;
6184                       irel.r_info = irela->r_info;
6185                       BFD_ASSERT (irela->r_addend == 0);
6186                       elf_swap_reloc_out (output_bfd, &irel, erel);
6187                     }
6188                 }
6189               else
6190                 {
6191                   Elf_External_Rela *erela;
6192
6193                   BFD_ASSERT (input_rel_hdr->sh_entsize
6194                               == sizeof (Elf_External_Rela));
6195                   erela = ((Elf_External_Rela *) output_rel_hdr->contents
6196                            + o->output_section->reloc_count);
6197                   for (; irela < irelaend; irela++, erela++)
6198                     elf_swap_reloca_out (output_bfd, irela, erela);
6199                 }
6200
6201               o->output_section->reloc_count += o->reloc_count;
6202             }
6203         }
6204
6205       /* Write out the modified section contents.  */
6206       if (! bfd_set_section_contents (output_bfd, o->output_section,
6207                                       finfo->contents, o->output_offset,
6208                                       (o->_cooked_size != 0
6209                                        ? o->_cooked_size
6210                                        : o->_raw_size)))
6211         return false;
6212     }
6213
6214   return true;
6215 }
6216
6217 /* Generate a reloc when linking an ELF file.  This is a reloc
6218    requested by the linker, and does come from any input file.  This
6219    is used to build constructor and destructor tables when linking
6220    with -Ur.  */
6221
6222 static boolean
6223 elf_reloc_link_order (output_bfd, info, output_section, link_order)
6224      bfd *output_bfd;
6225      struct bfd_link_info *info;
6226      asection *output_section;
6227      struct bfd_link_order *link_order;
6228 {
6229   const reloc_howto_type *howto;
6230   long indx;
6231   bfd_vma offset;
6232   struct elf_link_hash_entry **rel_hash_ptr;
6233   Elf_Internal_Shdr *rel_hdr;
6234
6235   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
6236   if (howto == NULL)
6237     {
6238       bfd_set_error (bfd_error_bad_value);
6239       return false;
6240     }
6241
6242   /* If this is an inplace reloc, we must write the addend into the
6243      object file.  */
6244   if (howto->partial_inplace
6245       && link_order->u.reloc.p->addend != 0)
6246     {
6247       bfd_size_type size;
6248       bfd_reloc_status_type rstat;
6249       bfd_byte *buf;
6250       boolean ok;
6251
6252       size = bfd_get_reloc_size (howto);
6253       buf = (bfd_byte *) bfd_zmalloc (size);
6254       if (buf == (bfd_byte *) NULL)
6255         {
6256           bfd_set_error (bfd_error_no_memory);
6257           return false;
6258         }
6259       rstat = _bfd_relocate_contents (howto, output_bfd,
6260                                       link_order->u.reloc.p->addend, buf);
6261       switch (rstat)
6262         {
6263         case bfd_reloc_ok:
6264           break;
6265         default:
6266         case bfd_reloc_outofrange:
6267           abort ();
6268         case bfd_reloc_overflow:
6269           if (! ((*info->callbacks->reloc_overflow)
6270                  (info,
6271                   (link_order->type == bfd_section_reloc_link_order
6272                    ? bfd_section_name (output_bfd,
6273                                        link_order->u.reloc.p->u.section)
6274                    : link_order->u.reloc.p->u.name),
6275                   howto->name, link_order->u.reloc.p->addend,
6276                   (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
6277             {
6278               free (buf);
6279               return false;
6280             }
6281           break;
6282         }
6283       ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
6284                                      (file_ptr) link_order->offset, size);
6285       free (buf);
6286       if (! ok)
6287         return false;
6288     }
6289
6290   /* Figure out the symbol index.  */
6291   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
6292                   + output_section->reloc_count);
6293   if (link_order->type == bfd_section_reloc_link_order)
6294     {
6295       indx = link_order->u.reloc.p->u.section->target_index;
6296       if (indx == 0)
6297         abort ();
6298       *rel_hash_ptr = NULL;
6299     }
6300   else
6301     {
6302       struct elf_link_hash_entry *h;
6303
6304       h = elf_link_hash_lookup (elf_hash_table (info),
6305                                 link_order->u.reloc.p->u.name,
6306                                 false, false, true);
6307       if (h != NULL)
6308         {
6309           /* Setting the index to -2 tells elf_link_output_extsym that
6310              this symbol is used by a reloc.  */
6311           h->indx = -2;
6312           *rel_hash_ptr = h;
6313           indx = 0;
6314         }
6315       else
6316         {
6317           if (! ((*info->callbacks->unattached_reloc)
6318                  (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
6319                   (asection *) NULL, (bfd_vma) 0)))
6320             return false;
6321           indx = 0;
6322         }
6323     }
6324
6325   /* The address of a reloc is relative to the section in a
6326      relocateable file, and is a virtual address in an executable
6327      file.  */
6328   offset = link_order->offset;
6329   if (! info->relocateable)
6330     offset += output_section->vma;
6331
6332   rel_hdr = &elf_section_data (output_section)->rel_hdr;
6333
6334   if (rel_hdr->sh_type == SHT_REL)
6335     {
6336       Elf_Internal_Rel irel;
6337       Elf_External_Rel *erel;
6338
6339       irel.r_offset = offset;
6340       irel.r_info = ELF_R_INFO (indx, howto->type);
6341       erel = ((Elf_External_Rel *) rel_hdr->contents
6342               + output_section->reloc_count);
6343       elf_swap_reloc_out (output_bfd, &irel, erel);
6344     }
6345   else
6346     {
6347       Elf_Internal_Rela irela;
6348       Elf_External_Rela *erela;
6349
6350       irela.r_offset = offset;
6351       irela.r_info = ELF_R_INFO (indx, howto->type);
6352       irela.r_addend = link_order->u.reloc.p->addend;
6353       erela = ((Elf_External_Rela *) rel_hdr->contents
6354                + output_section->reloc_count);
6355       elf_swap_reloca_out (output_bfd, &irela, erela);
6356     }
6357
6358   ++output_section->reloc_count;
6359
6360   return true;
6361 }
This page took 0.382584 seconds and 4 git commands to generate.