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