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