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