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