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