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