1 /* ELF executable support for BFD.
2 Copyright 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
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.
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.
16 This file is part of BFD, the Binary File Descriptor library.
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.
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.
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. */
32 /* Problems and other issues to resolve.
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.
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
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)
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
57 (3) ELF section symbols are handled rather sloppily now. This should
58 be cleaned up, and ELF section symbols reconciled with BFD section
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
66 #include <string.h> /* For strrchr and friends */
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)
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 elf_find_section NAME(bfd_elf,find_section)
115 #define elf_bfd_link_add_symbols NAME(bfd_elf,bfd_link_add_symbols)
116 #define elf_add_dynamic_entry NAME(bfd_elf,add_dynamic_entry)
117 #define elf_link_create_dynamic_sections \
118 NAME(bfd_elf,link_create_dynamic_sections)
119 #define elf_link_record_dynamic_symbol \
120 NAME(bfd_elf,link_record_dynamic_symbol)
121 #define elf_bfd_final_link NAME(bfd_elf,bfd_final_link)
124 #define ELF_R_INFO(X,Y) ELF64_R_INFO(X,Y)
125 #define ELF_R_SYM(X) ELF64_R_SYM(X)
126 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
127 #define ELFCLASS ELFCLASS64
129 #define LOG_FILE_ALIGN 3
132 #define ELF_R_INFO(X,Y) ELF32_R_INFO(X,Y)
133 #define ELF_R_SYM(X) ELF32_R_SYM(X)
134 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
135 #define ELFCLASS ELFCLASS32
137 #define LOG_FILE_ALIGN 2
140 /* Forward declarations of static functions */
142 static struct bfd_strtab_hash *elf_stringtab_init PARAMS ((void));
143 static asection *section_from_elf_index PARAMS ((bfd *, unsigned int));
145 static int elf_section_from_bfd_section PARAMS ((bfd *, struct sec *));
147 static long elf_slurp_symbol_table PARAMS ((bfd *, asymbol **, boolean));
149 static boolean elf_slurp_reloc_table PARAMS ((bfd *, asection *, asymbol **));
151 static int elf_symbol_from_bfd_symbol PARAMS ((bfd *,
152 struct symbol_cache_entry **));
154 static boolean elf_compute_section_file_positions
155 PARAMS ((bfd *, struct bfd_link_info *));
156 static boolean prep_headers PARAMS ((bfd *));
157 static void write_relocs PARAMS ((bfd *, asection *, PTR));
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 Elf_Internal_Shdr **,
170 static file_ptr map_program_segments
171 PARAMS ((bfd *, file_ptr, Elf_Internal_Shdr *, Elf_Internal_Shdr **,
174 static boolean elf_map_symbols PARAMS ((bfd *));
175 static boolean swap_out_syms PARAMS ((bfd *, struct bfd_strtab_hash **));
177 static boolean bfd_section_from_shdr PARAMS ((bfd *, unsigned int shindex));
180 static void elf_debug_section PARAMS ((int, Elf_Internal_Shdr *));
181 static void elf_debug_file PARAMS ((Elf_Internal_Ehdr *));
182 static char *elf_symbol_flags PARAMS ((flagword));
185 #define elf_string_from_elf_strtab(abfd,strindex) \
186 elf_string_from_elf_section(abfd,elf_elfheader(abfd)->e_shstrndx,strindex)
188 /* Structure swapping routines */
190 /* Should perhaps use put_offset, put_word, etc. For now, the two versions
191 can be handled by explicitly specifying 32 bits or "the long type". */
193 #define put_word bfd_h_put_64
194 #define get_word bfd_h_get_64
197 #define put_word bfd_h_put_32
198 #define get_word bfd_h_get_32
201 /* Translate an ELF symbol in external format into an ELF symbol in internal
205 elf_swap_symbol_in (abfd, src, dst)
207 Elf_External_Sym *src;
208 Elf_Internal_Sym *dst;
210 dst->st_name = bfd_h_get_32 (abfd, (bfd_byte *) src->st_name);
211 dst->st_value = get_word (abfd, (bfd_byte *) src->st_value);
212 dst->st_size = get_word (abfd, (bfd_byte *) src->st_size);
213 dst->st_info = bfd_h_get_8 (abfd, (bfd_byte *) src->st_info);
214 dst->st_other = bfd_h_get_8 (abfd, (bfd_byte *) src->st_other);
215 dst->st_shndx = bfd_h_get_16 (abfd, (bfd_byte *) src->st_shndx);
218 /* Translate an ELF symbol in internal format into an ELF symbol in external
222 elf_swap_symbol_out (abfd, src, dst)
224 Elf_Internal_Sym *src;
225 Elf_External_Sym *dst;
227 bfd_h_put_32 (abfd, src->st_name, dst->st_name);
228 put_word (abfd, src->st_value, dst->st_value);
229 put_word (abfd, src->st_size, dst->st_size);
230 bfd_h_put_8 (abfd, src->st_info, dst->st_info);
231 bfd_h_put_8 (abfd, src->st_other, dst->st_other);
232 bfd_h_put_16 (abfd, src->st_shndx, dst->st_shndx);
236 /* Translate an ELF file header in external format into an ELF file header in
240 elf_swap_ehdr_in (abfd, src, dst)
242 Elf_External_Ehdr *src;
243 Elf_Internal_Ehdr *dst;
245 memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
246 dst->e_type = bfd_h_get_16 (abfd, (bfd_byte *) src->e_type);
247 dst->e_machine = bfd_h_get_16 (abfd, (bfd_byte *) src->e_machine);
248 dst->e_version = bfd_h_get_32 (abfd, (bfd_byte *) src->e_version);
249 dst->e_entry = get_word (abfd, (bfd_byte *) src->e_entry);
250 dst->e_phoff = get_word (abfd, (bfd_byte *) src->e_phoff);
251 dst->e_shoff = get_word (abfd, (bfd_byte *) src->e_shoff);
252 dst->e_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->e_flags);
253 dst->e_ehsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_ehsize);
254 dst->e_phentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phentsize);
255 dst->e_phnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phnum);
256 dst->e_shentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shentsize);
257 dst->e_shnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shnum);
258 dst->e_shstrndx = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shstrndx);
261 /* Translate an ELF file header in internal format into an ELF file header in
265 elf_swap_ehdr_out (abfd, src, dst)
267 Elf_Internal_Ehdr *src;
268 Elf_External_Ehdr *dst;
270 memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
271 /* note that all elements of dst are *arrays of unsigned char* already... */
272 bfd_h_put_16 (abfd, src->e_type, dst->e_type);
273 bfd_h_put_16 (abfd, src->e_machine, dst->e_machine);
274 bfd_h_put_32 (abfd, src->e_version, dst->e_version);
275 put_word (abfd, src->e_entry, dst->e_entry);
276 put_word (abfd, src->e_phoff, dst->e_phoff);
277 put_word (abfd, src->e_shoff, dst->e_shoff);
278 bfd_h_put_32 (abfd, src->e_flags, dst->e_flags);
279 bfd_h_put_16 (abfd, src->e_ehsize, dst->e_ehsize);
280 bfd_h_put_16 (abfd, src->e_phentsize, dst->e_phentsize);
281 bfd_h_put_16 (abfd, src->e_phnum, dst->e_phnum);
282 bfd_h_put_16 (abfd, src->e_shentsize, dst->e_shentsize);
283 bfd_h_put_16 (abfd, src->e_shnum, dst->e_shnum);
284 bfd_h_put_16 (abfd, src->e_shstrndx, dst->e_shstrndx);
288 /* Translate an ELF section header table entry in external format into an
289 ELF section header table entry in internal format. */
292 elf_swap_shdr_in (abfd, src, dst)
294 Elf_External_Shdr *src;
295 Elf_Internal_Shdr *dst;
297 dst->sh_name = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_name);
298 dst->sh_type = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_type);
299 dst->sh_flags = get_word (abfd, (bfd_byte *) src->sh_flags);
300 dst->sh_addr = get_word (abfd, (bfd_byte *) src->sh_addr);
301 dst->sh_offset = get_word (abfd, (bfd_byte *) src->sh_offset);
302 dst->sh_size = get_word (abfd, (bfd_byte *) src->sh_size);
303 dst->sh_link = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_link);
304 dst->sh_info = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_info);
305 dst->sh_addralign = get_word (abfd, (bfd_byte *) src->sh_addralign);
306 dst->sh_entsize = get_word (abfd, (bfd_byte *) src->sh_entsize);
307 dst->bfd_section = NULL;
308 dst->contents = NULL;
311 /* Translate an ELF section header table entry in internal format into an
312 ELF section header table entry in external format. */
315 elf_swap_shdr_out (abfd, src, dst)
317 Elf_Internal_Shdr *src;
318 Elf_External_Shdr *dst;
320 /* note that all elements of dst are *arrays of unsigned char* already... */
321 bfd_h_put_32 (abfd, src->sh_name, dst->sh_name);
322 bfd_h_put_32 (abfd, src->sh_type, dst->sh_type);
323 put_word (abfd, src->sh_flags, dst->sh_flags);
324 put_word (abfd, src->sh_addr, dst->sh_addr);
325 put_word (abfd, src->sh_offset, dst->sh_offset);
326 put_word (abfd, src->sh_size, dst->sh_size);
327 bfd_h_put_32 (abfd, src->sh_link, dst->sh_link);
328 bfd_h_put_32 (abfd, src->sh_info, dst->sh_info);
329 put_word (abfd, src->sh_addralign, dst->sh_addralign);
330 put_word (abfd, src->sh_entsize, dst->sh_entsize);
334 /* Translate an ELF program header table entry in external format into an
335 ELF program header table entry in internal format. */
338 elf_swap_phdr_in (abfd, src, dst)
340 Elf_External_Phdr *src;
341 Elf_Internal_Phdr *dst;
343 dst->p_type = bfd_h_get_32 (abfd, (bfd_byte *) src->p_type);
344 dst->p_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->p_flags);
345 dst->p_offset = get_word (abfd, (bfd_byte *) src->p_offset);
346 dst->p_vaddr = get_word (abfd, (bfd_byte *) src->p_vaddr);
347 dst->p_paddr = get_word (abfd, (bfd_byte *) src->p_paddr);
348 dst->p_filesz = get_word (abfd, (bfd_byte *) src->p_filesz);
349 dst->p_memsz = get_word (abfd, (bfd_byte *) src->p_memsz);
350 dst->p_align = get_word (abfd, (bfd_byte *) src->p_align);
354 elf_swap_phdr_out (abfd, src, dst)
356 Elf_Internal_Phdr *src;
357 Elf_External_Phdr *dst;
359 /* note that all elements of dst are *arrays of unsigned char* already... */
360 bfd_h_put_32 (abfd, src->p_type, dst->p_type);
361 put_word (abfd, src->p_offset, dst->p_offset);
362 put_word (abfd, src->p_vaddr, dst->p_vaddr);
363 put_word (abfd, src->p_paddr, dst->p_paddr);
364 put_word (abfd, src->p_filesz, dst->p_filesz);
365 put_word (abfd, src->p_memsz, dst->p_memsz);
366 bfd_h_put_32 (abfd, src->p_flags, dst->p_flags);
367 put_word (abfd, src->p_align, dst->p_align);
370 /* Translate an ELF reloc from external format to internal format. */
372 elf_swap_reloc_in (abfd, src, dst)
374 Elf_External_Rel *src;
375 Elf_Internal_Rel *dst;
377 dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
378 dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
382 elf_swap_reloca_in (abfd, src, dst)
384 Elf_External_Rela *src;
385 Elf_Internal_Rela *dst;
387 dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
388 dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
389 dst->r_addend = get_word (abfd, (bfd_byte *) src->r_addend);
392 /* Translate an ELF reloc from internal format to external format. */
394 elf_swap_reloc_out (abfd, src, dst)
396 Elf_Internal_Rel *src;
397 Elf_External_Rel *dst;
399 put_word (abfd, src->r_offset, dst->r_offset);
400 put_word (abfd, src->r_info, dst->r_info);
404 elf_swap_reloca_out (abfd, src, dst)
406 Elf_Internal_Rela *src;
407 Elf_External_Rela *dst;
409 put_word (abfd, src->r_offset, dst->r_offset);
410 put_word (abfd, src->r_info, dst->r_info);
411 put_word (abfd, src->r_addend, dst->r_addend);
415 elf_swap_dyn_in (abfd, src, dst)
417 const Elf_External_Dyn *src;
418 Elf_Internal_Dyn *dst;
420 dst->d_tag = get_word (abfd, src->d_tag);
421 dst->d_un.d_val = get_word (abfd, src->d_un.d_val);
425 elf_swap_dyn_out (abfd, src, dst)
427 const Elf_Internal_Dyn *src;
428 Elf_External_Dyn *dst;
430 put_word (abfd, src->d_tag, dst->d_tag);
431 put_word (abfd, src->d_un.d_val, dst->d_un.d_val);
434 /* Allocate an ELF string table--force the first byte to be zero. */
436 static struct bfd_strtab_hash *
437 elf_stringtab_init ()
439 struct bfd_strtab_hash *ret;
441 ret = _bfd_stringtab_init ();
446 loc = _bfd_stringtab_add (ret, "", true, false);
447 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
448 if (loc == (bfd_size_type) -1)
450 _bfd_stringtab_free (ret);
457 /* ELF .o/exec file reading */
459 /* Create a new bfd section from an ELF section header. */
462 bfd_section_from_shdr (abfd, shindex)
464 unsigned int shindex;
466 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
467 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
470 name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
472 switch (hdr->sh_type)
475 /* Inactive section. Throw it away. */
478 case SHT_PROGBITS: /* Normal section with contents. */
479 case SHT_DYNAMIC: /* Dynamic linking information. */
480 case SHT_NOBITS: /* .bss section. */
481 case SHT_HASH: /* .hash section. */
482 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
484 case SHT_SYMTAB: /* A symbol table */
485 if (elf_onesymtab (abfd) == shindex)
488 BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
489 BFD_ASSERT (elf_onesymtab (abfd) == 0);
490 elf_onesymtab (abfd) = shindex;
491 elf_tdata (abfd)->symtab_hdr = *hdr;
492 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_hdr;
493 abfd->flags |= HAS_SYMS;
495 /* Sometimes a shared object will map in the symbol table. If
496 SHF_ALLOC is set, and this is a shared object, then we also
497 treat this section as a BFD section. We can not base the
498 decision purely on SHF_ALLOC, because that flag is sometimes
499 set in a relocateable object file, which would confuse the
501 if ((hdr->sh_flags & SHF_ALLOC) != 0
502 && (abfd->flags & DYNAMIC) != 0
503 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
508 case SHT_DYNSYM: /* A dynamic symbol table */
509 if (elf_dynsymtab (abfd) == shindex)
512 BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
513 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
514 elf_dynsymtab (abfd) = shindex;
515 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
516 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->dynsymtab_hdr;
517 abfd->flags |= HAS_SYMS;
519 /* Besides being a symbol table, we also treat this as a regular
520 section, so that objcopy can handle it. */
521 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
523 case SHT_STRTAB: /* A string table */
524 if (hdr->bfd_section != NULL)
526 if (ehdr->e_shstrndx == shindex)
528 elf_tdata (abfd)->shstrtab_hdr = *hdr;
529 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
535 for (i = 1; i < ehdr->e_shnum; i++)
537 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
538 if (hdr2->sh_link == shindex)
540 if (! bfd_section_from_shdr (abfd, i))
542 if (elf_onesymtab (abfd) == i)
544 elf_tdata (abfd)->strtab_hdr = *hdr;
545 elf_elfsections (abfd)[shindex] =
546 &elf_tdata (abfd)->strtab_hdr;
549 if (elf_dynsymtab (abfd) == i)
551 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
552 elf_elfsections (abfd)[shindex] =
553 &elf_tdata (abfd)->dynstrtab_hdr;
554 /* We also treat this as a regular section, so
555 that objcopy can handle it. */
558 #if 0 /* Not handling other string tables specially right now. */
559 hdr2 = elf_elfsections (abfd)[i]; /* in case it moved */
560 /* We have a strtab for some random other section. */
561 newsect = (asection *) hdr2->bfd_section;
564 hdr->bfd_section = newsect;
565 hdr2 = &elf_section_data (newsect)->str_hdr;
567 elf_elfsections (abfd)[shindex] = hdr2;
573 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
577 /* *These* do a lot of work -- but build no sections! */
579 asection *target_sect;
580 Elf_Internal_Shdr *hdr2;
581 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
583 /* Get the symbol table. */
584 if (! bfd_section_from_shdr (abfd, hdr->sh_link))
587 /* If this reloc section does not use the main symbol table we
588 don't treat it as a reloc section. BFD can't adequately
589 represent such a section, so at least for now, we don't
590 try. We just present it as a normal section. */
591 if (hdr->sh_link != elf_onesymtab (abfd))
592 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
594 /* Don't allow REL relocations on a machine that uses RELA and
596 /* @@ Actually, the generic ABI does suggest that both might be
597 used in one file. But the four ABI Processor Supplements I
598 have access to right now all specify that only one is used on
599 each of those architectures. It's conceivable that, e.g., a
600 bunch of absolute 32-bit relocs might be more compact in REL
601 form even on a RELA machine... */
602 BFD_ASSERT (use_rela_p
603 ? (hdr->sh_type == SHT_RELA
604 && hdr->sh_entsize == sizeof (Elf_External_Rela))
605 : (hdr->sh_type == SHT_REL
606 && hdr->sh_entsize == sizeof (Elf_External_Rel)));
608 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
610 target_sect = section_from_elf_index (abfd, hdr->sh_info);
611 if (target_sect == NULL)
614 hdr2 = &elf_section_data (target_sect)->rel_hdr;
616 elf_elfsections (abfd)[shindex] = hdr2;
617 target_sect->reloc_count = hdr->sh_size / hdr->sh_entsize;
618 target_sect->flags |= SEC_RELOC;
619 target_sect->relocation = NULL;
620 target_sect->rel_filepos = hdr->sh_offset;
621 abfd->flags |= HAS_RELOC;
628 fprintf (stderr, "Note Sections not yet supported.\n");
635 fprintf (stderr, "SHLIB Sections not supported (and non conforming.)\n");
640 /* Check for any processor-specific section types. */
642 struct elf_backend_data *bed = get_elf_backend_data (abfd);
644 if (bed->elf_backend_section_from_shdr)
645 (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
654 elf_new_section_hook (abfd, sec)
659 struct bfd_elf_section_data *sdata;
661 sdata = (struct bfd_elf_section_data *) bfd_alloc (abfd, sizeof (*sdata));
664 bfd_set_error (bfd_error_no_memory);
667 sec->used_by_bfd = (PTR) sdata;
668 memset (sdata, 0, sizeof (*sdata));
672 /* Create a new bfd section from an ELF program header.
674 Since program segments have no names, we generate a synthetic name
675 of the form segment<NUM>, where NUM is generally the index in the
676 program header table. For segments that are split (see below) we
677 generate the names segment<NUM>a and segment<NUM>b.
679 Note that some program segments may have a file size that is different than
680 (less than) the memory size. All this means is that at execution the
681 system must allocate the amount of memory specified by the memory size,
682 but only initialize it with the first "file size" bytes read from the
683 file. This would occur for example, with program segments consisting
684 of combined data+bss.
686 To handle the above situation, this routine generates TWO bfd sections
687 for the single program segment. The first has the length specified by
688 the file size of the segment, and the second has the length specified
689 by the difference between the two sizes. In effect, the segment is split
690 into it's initialized and uninitialized parts.
695 bfd_section_from_phdr (abfd, hdr, index)
697 Elf_Internal_Phdr *hdr;
705 split = ((hdr->p_memsz > 0) &&
706 (hdr->p_filesz > 0) &&
707 (hdr->p_memsz > hdr->p_filesz));
708 sprintf (namebuf, split ? "segment%da" : "segment%d", index);
709 name = bfd_alloc (abfd, strlen (namebuf) + 1);
712 bfd_set_error (bfd_error_no_memory);
715 strcpy (name, namebuf);
716 newsect = bfd_make_section (abfd, name);
719 newsect->vma = hdr->p_vaddr;
720 newsect->_raw_size = hdr->p_filesz;
721 newsect->filepos = hdr->p_offset;
722 newsect->flags |= SEC_HAS_CONTENTS;
723 if (hdr->p_type == PT_LOAD)
725 newsect->flags |= SEC_ALLOC;
726 newsect->flags |= SEC_LOAD;
727 if (hdr->p_flags & PF_X)
729 /* FIXME: all we known is that it has execute PERMISSION,
731 newsect->flags |= SEC_CODE;
734 if (!(hdr->p_flags & PF_W))
736 newsect->flags |= SEC_READONLY;
741 sprintf (namebuf, "segment%db", index);
742 name = bfd_alloc (abfd, strlen (namebuf) + 1);
745 bfd_set_error (bfd_error_no_memory);
748 strcpy (name, namebuf);
749 newsect = bfd_make_section (abfd, name);
752 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
753 newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
754 if (hdr->p_type == PT_LOAD)
756 newsect->flags |= SEC_ALLOC;
757 if (hdr->p_flags & PF_X)
758 newsect->flags |= SEC_CODE;
760 if (!(hdr->p_flags & PF_W))
761 newsect->flags |= SEC_READONLY;
767 /* Begin processing a given object.
769 First we validate the file by reading in the ELF header and checking
772 static INLINE boolean
774 Elf_External_Ehdr *x_ehdrp;
776 return ((x_ehdrp->e_ident[EI_MAG0] == ELFMAG0)
777 && (x_ehdrp->e_ident[EI_MAG1] == ELFMAG1)
778 && (x_ehdrp->e_ident[EI_MAG2] == ELFMAG2)
779 && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3));
782 /* Check to see if the file associated with ABFD matches the target vector
785 Note that we may be called several times with the same ABFD, but different
786 target vectors, most of which will not match. We have to avoid leaving
787 any side effects in ABFD, or any data it points to (like tdata), if the
788 file does not match the target vector. */
794 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
795 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
796 Elf_External_Shdr x_shdr; /* Section header table entry, external form */
797 Elf_Internal_Shdr *i_shdrp = NULL; /* Section header table, internal form */
798 unsigned int shindex;
799 char *shstrtab; /* Internal copy of section header stringtab */
800 struct elf_backend_data *ebd;
801 struct elf_obj_tdata *preserved_tdata = elf_tdata (abfd);
802 struct elf_obj_tdata *new_tdata = NULL;
804 /* Read in the ELF header in external format. */
806 if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
808 if (bfd_get_error () != bfd_error_system_call)
809 goto got_wrong_format_error;
814 /* Now check to see if we have a valid ELF file, and one that BFD can
815 make use of. The magic number must match, the address size ('class')
816 and byte-swapping must match our XVEC entry, and it must have a
817 section header table (FIXME: See comments re sections at top of this
820 if ((elf_file_p (&x_ehdr) == false) ||
821 (x_ehdr.e_ident[EI_VERSION] != EV_CURRENT) ||
822 (x_ehdr.e_ident[EI_CLASS] != ELFCLASS))
823 goto got_wrong_format_error;
825 /* Check that file's byte order matches xvec's */
826 switch (x_ehdr.e_ident[EI_DATA])
828 case ELFDATA2MSB: /* Big-endian */
829 if (!abfd->xvec->header_byteorder_big_p)
830 goto got_wrong_format_error;
832 case ELFDATA2LSB: /* Little-endian */
833 if (abfd->xvec->header_byteorder_big_p)
834 goto got_wrong_format_error;
836 case ELFDATANONE: /* No data encoding specified */
837 default: /* Unknown data encoding specified */
838 goto got_wrong_format_error;
841 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
842 the tdata pointer in the bfd. */
844 new_tdata = ((struct elf_obj_tdata *)
845 bfd_zalloc (abfd, sizeof (struct elf_obj_tdata)));
846 if (new_tdata == NULL)
847 goto got_no_memory_error;
848 elf_tdata (abfd) = new_tdata;
850 /* Now that we know the byte order, swap in the rest of the header */
851 i_ehdrp = elf_elfheader (abfd);
852 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
854 elf_debug_file (i_ehdrp);
857 /* If there is no section header table, we're hosed. */
858 if (i_ehdrp->e_shoff == 0)
859 goto got_wrong_format_error;
861 /* As a simple sanity check, verify that the what BFD thinks is the
862 size of each section header table entry actually matches the size
863 recorded in the file. */
864 if (i_ehdrp->e_shentsize != sizeof (x_shdr))
865 goto got_wrong_format_error;
867 ebd = get_elf_backend_data (abfd);
869 /* Check that the ELF e_machine field matches what this particular
870 BFD format expects. */
871 if (ebd->elf_machine_code != i_ehdrp->e_machine
872 && (ebd->elf_machine_alt1 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt1)
873 && (ebd->elf_machine_alt2 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt2))
875 const bfd_target * const *target_ptr;
877 if (ebd->elf_machine_code != EM_NONE)
878 goto got_wrong_format_error;
880 /* This is the generic ELF target. Let it match any ELF target
881 for which we do not have a specific backend. */
882 for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
884 struct elf_backend_data *back;
886 if ((*target_ptr)->flavour != bfd_target_elf_flavour)
888 back = (struct elf_backend_data *) (*target_ptr)->backend_data;
889 if (back->elf_machine_code == i_ehdrp->e_machine)
891 /* target_ptr is an ELF backend which matches this
892 object file, so reject the generic ELF target. */
893 goto got_wrong_format_error;
898 if (i_ehdrp->e_type == ET_EXEC)
899 abfd->flags |= EXEC_P;
900 else if (i_ehdrp->e_type == ET_DYN)
901 abfd->flags |= DYNAMIC;
903 if (i_ehdrp->e_phnum > 0)
904 abfd->flags |= D_PAGED;
906 if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
909 /* Remember the entry point specified in the ELF file header. */
910 bfd_get_start_address (abfd) = i_ehdrp->e_entry;
912 /* Allocate space for a copy of the section header table in
913 internal form, seek to the section header table in the file,
914 read it in, and convert it to internal form. */
915 i_shdrp = ((Elf_Internal_Shdr *)
916 bfd_alloc (abfd, sizeof (*i_shdrp) * i_ehdrp->e_shnum));
917 elf_elfsections (abfd) = ((Elf_Internal_Shdr **)
919 sizeof (i_shdrp) * i_ehdrp->e_shnum));
920 if (!i_shdrp || !elf_elfsections (abfd))
921 goto got_no_memory_error;
922 if (bfd_seek (abfd, i_ehdrp->e_shoff, SEEK_SET) != 0)
924 for (shindex = 0; shindex < i_ehdrp->e_shnum; shindex++)
926 if (bfd_read ((PTR) & x_shdr, sizeof x_shdr, 1, abfd) != sizeof (x_shdr))
928 elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
929 elf_elfsections (abfd)[shindex] = i_shdrp + shindex;
931 if (i_ehdrp->e_shstrndx)
933 if (! bfd_section_from_shdr (abfd, i_ehdrp->e_shstrndx))
937 /* Read in the string table containing the names of the sections. We
938 will need the base pointer to this table later. */
939 /* We read this inline now, so that we don't have to go through
940 bfd_section_from_shdr with it (since this particular strtab is
941 used to find all of the ELF section names.) */
943 shstrtab = elf_get_str_section (abfd, i_ehdrp->e_shstrndx);
947 /* Once all of the section headers have been read and converted, we
948 can start processing them. Note that the first section header is
949 a dummy placeholder entry, so we ignore it. */
951 for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
953 if (! bfd_section_from_shdr (abfd, shindex))
957 /* Let the backend double check the format and override global
959 if (ebd->elf_backend_object_p)
961 if ((*ebd->elf_backend_object_p) (abfd) == false)
962 goto got_wrong_format_error;
967 got_wrong_format_error:
968 bfd_set_error (bfd_error_wrong_format);
971 bfd_set_error (bfd_error_no_memory);
974 if (new_tdata != NULL
975 && new_tdata->elf_sect_ptr != NULL)
976 bfd_release (abfd, new_tdata->elf_sect_ptr);
978 bfd_release (abfd, i_shdrp);
979 if (new_tdata != NULL)
980 bfd_release (abfd, new_tdata);
981 elf_tdata (abfd) = preserved_tdata;
986 /* ELF .o/exec file writing */
988 /* Takes a bfd and a symbol, returns a pointer to the elf specific area
989 of the symbol if there is one. */
990 static INLINE elf_symbol_type *
991 elf_symbol_from (ignore_abfd, symbol)
995 if (symbol->the_bfd->xvec->flavour != bfd_target_elf_flavour)
998 if (symbol->the_bfd->tdata.elf_obj_data == (struct elf_obj_tdata *) NULL)
1001 return (elf_symbol_type *) symbol;
1005 write_relocs (abfd, sec, data)
1010 boolean *failedp = (boolean *) data;
1011 Elf_Internal_Shdr *rela_hdr;
1012 Elf_External_Rela *outbound_relocas;
1013 Elf_External_Rel *outbound_relocs;
1015 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1016 asymbol *last_sym = 0;
1017 int last_sym_idx = 9999999; /* should always be written before use */
1019 /* If we have already failed, don't do anything. */
1023 if ((sec->flags & SEC_RELOC) == 0)
1026 /* The linker backend writes the relocs out itself, and sets the
1027 reloc_count field to zero to inhibit writing them here. Also,
1028 sometimes the SEC_RELOC flag gets set even when there aren't any
1030 if (sec->reloc_count == 0)
1033 rela_hdr = &elf_section_data (sec)->rel_hdr;
1035 rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count;
1036 rela_hdr->contents = (PTR) bfd_alloc (abfd, rela_hdr->sh_size);
1037 if (rela_hdr->contents == NULL)
1039 bfd_set_error (bfd_error_no_memory);
1044 /* orelocation has the data, reloc_count has the count... */
1047 outbound_relocas = (Elf_External_Rela *) rela_hdr->contents;
1049 for (idx = 0; idx < sec->reloc_count; idx++)
1051 Elf_Internal_Rela dst_rela;
1052 Elf_External_Rela *src_rela;
1057 ptr = sec->orelocation[idx];
1058 src_rela = outbound_relocas + idx;
1060 /* The address of an ELF reloc is section relative for an object
1061 file, and absolute for an executable file or shared library.
1062 The address of a BFD reloc is always section relative. */
1063 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
1064 dst_rela.r_offset = ptr->address;
1066 dst_rela.r_offset = ptr->address + sec->vma;
1068 sym = *ptr->sym_ptr_ptr;
1069 if (sym == last_sym)
1074 last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1076 dst_rela.r_info = ELF_R_INFO (n, ptr->howto->type);
1078 dst_rela.r_addend = ptr->addend;
1079 elf_swap_reloca_out (abfd, &dst_rela, src_rela);
1083 /* REL relocations */
1085 outbound_relocs = (Elf_External_Rel *) rela_hdr->contents;
1087 for (idx = 0; idx < sec->reloc_count; idx++)
1089 Elf_Internal_Rel dst_rel;
1090 Elf_External_Rel *src_rel;
1095 ptr = sec->orelocation[idx];
1096 sym = *ptr->sym_ptr_ptr;
1097 src_rel = outbound_relocs + idx;
1099 /* The address of an ELF reloc is section relative for an object
1100 file, and absolute for an executable file or shared library.
1101 The address of a BFD reloc is always section relative. */
1102 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
1103 dst_rel.r_offset = ptr->address;
1105 dst_rel.r_offset = ptr->address + sec->vma;
1107 if (sym == last_sym)
1112 last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1114 dst_rel.r_info = ELF_R_INFO (n, ptr->howto->type);
1116 elf_swap_reloc_out (abfd, &dst_rel, src_rel);
1121 /* Set up an ELF internal section header for a section. */
1125 elf_fake_sections (abfd, asect, failedptrarg)
1130 boolean *failedptr = (boolean *) failedptrarg;
1131 Elf_Internal_Shdr *this_hdr;
1135 /* We already failed; just get out of the bfd_map_over_sections
1140 this_hdr = &elf_section_data (asect)->this_hdr;
1142 this_hdr->sh_name = (unsigned long) _bfd_stringtab_add (elf_shstrtab (abfd),
1145 if (this_hdr->sh_name == (unsigned long) -1)
1151 this_hdr->sh_flags = 0;
1152 if ((asect->flags & SEC_ALLOC) != 0)
1153 this_hdr->sh_addr = asect->vma;
1155 this_hdr->sh_addr = 0;
1156 this_hdr->sh_offset = 0;
1157 this_hdr->sh_size = asect->_raw_size;
1158 this_hdr->sh_link = 0;
1159 this_hdr->sh_info = 0;
1160 this_hdr->sh_addralign = 1 << asect->alignment_power;
1161 this_hdr->sh_entsize = 0;
1163 this_hdr->bfd_section = asect;
1164 this_hdr->contents = NULL;
1166 /* FIXME: This should not be based on section names. */
1167 if (strcmp (asect->name, ".dynstr") == 0)
1168 this_hdr->sh_type = SHT_STRTAB;
1169 else if (strcmp (asect->name, ".hash") == 0)
1171 this_hdr->sh_type = SHT_HASH;
1172 this_hdr->sh_entsize = ARCH_SIZE / 8;
1174 else if (strcmp (asect->name, ".dynsym") == 0)
1176 this_hdr->sh_type = SHT_DYNSYM;
1177 this_hdr->sh_entsize = sizeof (Elf_External_Sym);
1179 else if (strcmp (asect->name, ".dynamic") == 0)
1181 this_hdr->sh_type = SHT_DYNAMIC;
1182 this_hdr->sh_entsize = sizeof (Elf_External_Dyn);
1184 else if (strncmp (asect->name, ".rela", 5) == 0
1185 && get_elf_backend_data (abfd)->use_rela_p)
1187 this_hdr->sh_type = SHT_RELA;
1188 this_hdr->sh_entsize = sizeof (Elf_External_Rela);
1190 else if (strncmp (asect->name, ".rel", 4) == 0
1191 && ! get_elf_backend_data (abfd)->use_rela_p)
1193 this_hdr->sh_type = SHT_REL;
1194 this_hdr->sh_entsize = sizeof (Elf_External_Rel);
1196 else if (strcmp (asect->name, ".note") == 0)
1197 this_hdr->sh_type = SHT_NOTE;
1198 else if (strncmp (asect->name, ".stab", 5) == 0
1199 && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1200 this_hdr->sh_type = SHT_STRTAB;
1201 else if ((asect->flags & SEC_ALLOC) != 0
1202 && (asect->flags & SEC_LOAD) != 0)
1203 this_hdr->sh_type = SHT_PROGBITS;
1204 else if ((asect->flags & SEC_ALLOC) != 0
1205 && ((asect->flags & SEC_LOAD) == 0))
1207 BFD_ASSERT (strcmp (asect->name, ".bss") == 0
1208 || strcmp (asect->name, ".sbss") == 0
1209 || strcmp (asect->name, ".scommon") == 0
1210 || strcmp (asect->name, "COMMON") == 0);
1211 this_hdr->sh_type = SHT_NOBITS;
1216 this_hdr->sh_type = SHT_PROGBITS;
1219 if ((asect->flags & SEC_ALLOC) != 0)
1220 this_hdr->sh_flags |= SHF_ALLOC;
1221 if ((asect->flags & SEC_READONLY) == 0)
1222 this_hdr->sh_flags |= SHF_WRITE;
1223 if ((asect->flags & SEC_CODE) != 0)
1224 this_hdr->sh_flags |= SHF_EXECINSTR;
1226 /* Check for processor-specific section types. */
1228 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1230 if (bed->elf_backend_fake_sections)
1231 (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1234 /* If the section has relocs, set up a section header for the
1235 SHT_REL[A] section. */
1236 if ((asect->flags & SEC_RELOC) != 0)
1238 Elf_Internal_Shdr *rela_hdr;
1239 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1242 rela_hdr = &elf_section_data (asect)->rel_hdr;
1243 name = bfd_alloc (abfd, sizeof ".rela" + strlen (asect->name));
1246 bfd_set_error (bfd_error_no_memory);
1250 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
1252 (unsigned int) _bfd_stringtab_add (elf_shstrtab (abfd), name,
1254 if (rela_hdr->sh_name == (unsigned int) -1)
1259 rela_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1260 rela_hdr->sh_entsize = (use_rela_p
1261 ? sizeof (Elf_External_Rela)
1262 : sizeof (Elf_External_Rel));
1263 rela_hdr->sh_addralign = FILE_ALIGN;
1264 rela_hdr->sh_flags = 0;
1265 rela_hdr->sh_addr = 0;
1266 rela_hdr->sh_size = 0;
1267 rela_hdr->sh_offset = 0;
1271 /* Assign all ELF section numbers. The dummy first section is handled here
1272 too. The link/info pointers for the standard section types are filled
1273 in here too, while we're at it. */
1276 assign_section_numbers (abfd)
1279 struct elf_obj_tdata *t = elf_tdata (abfd);
1281 unsigned int section_number;
1282 Elf_Internal_Shdr **i_shdrp;
1286 for (sec = abfd->sections; sec; sec = sec->next)
1288 struct bfd_elf_section_data *d = elf_section_data (sec);
1290 d->this_idx = section_number++;
1291 if ((sec->flags & SEC_RELOC) == 0)
1294 d->rel_idx = section_number++;
1297 t->shstrtab_section = section_number++;
1298 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
1299 t->shstrtab_hdr.sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1301 if (abfd->symcount > 0)
1303 t->symtab_section = section_number++;
1304 t->strtab_section = section_number++;
1307 elf_elfheader (abfd)->e_shnum = section_number;
1309 /* Set up the list of section header pointers, in agreement with the
1311 i_shdrp = ((Elf_Internal_Shdr **)
1312 bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *)));
1313 if (i_shdrp == NULL)
1315 bfd_set_error (bfd_error_no_memory);
1319 i_shdrp[0] = ((Elf_Internal_Shdr *)
1320 bfd_alloc (abfd, sizeof (Elf_Internal_Shdr)));
1321 if (i_shdrp[0] == NULL)
1323 bfd_release (abfd, i_shdrp);
1324 bfd_set_error (bfd_error_no_memory);
1327 memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
1329 elf_elfsections (abfd) = i_shdrp;
1331 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1332 if (abfd->symcount > 0)
1334 i_shdrp[t->symtab_section] = &t->symtab_hdr;
1335 i_shdrp[t->strtab_section] = &t->strtab_hdr;
1336 t->symtab_hdr.sh_link = t->strtab_section;
1338 for (sec = abfd->sections; sec; sec = sec->next)
1340 struct bfd_elf_section_data *d = elf_section_data (sec);
1344 i_shdrp[d->this_idx] = &d->this_hdr;
1345 if (d->rel_idx != 0)
1346 i_shdrp[d->rel_idx] = &d->rel_hdr;
1348 /* Fill in the sh_link and sh_info fields while we're at it. */
1350 /* sh_link of a reloc section is the section index of the symbol
1351 table. sh_info is the section index of the section to which
1352 the relocation entries apply. */
1353 if (d->rel_idx != 0)
1355 d->rel_hdr.sh_link = t->symtab_section;
1356 d->rel_hdr.sh_info = d->this_idx;
1359 switch (d->this_hdr.sh_type)
1363 /* A reloc section which we are treating as a normal BFD
1364 section. sh_link is the section index of the symbol
1365 table. sh_info is the section index of the section to
1366 which the relocation entries apply. We assume that an
1367 allocated reloc section uses the dynamic symbol table.
1368 FIXME: How can we be sure? */
1369 s = bfd_get_section_by_name (abfd, ".dynsym");
1371 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1373 /* We look up the section the relocs apply to by name. */
1375 if (d->this_hdr.sh_type == SHT_REL)
1379 s = bfd_get_section_by_name (abfd, name);
1381 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
1385 /* We assume that a section named .stab*str is a stabs
1386 string section. We look for a section with the same name
1387 but without the trailing ``str'', and set its sh_link
1388 field to point to this section. */
1389 if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
1390 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
1395 len = strlen (sec->name);
1396 alc = (char *) malloc (len - 2);
1399 bfd_set_error (bfd_error_no_memory);
1402 strncpy (alc, sec->name, len - 3);
1403 alc[len - 3] = '\0';
1404 s = bfd_get_section_by_name (abfd, alc);
1408 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1410 /* This is a .stab section. */
1411 elf_section_data (s)->this_hdr.sh_entsize =
1412 4 + 2 * (ARCH_SIZE / 8);
1419 /* sh_link is the section header index of the string table
1420 used for the dynamic entries or symbol table. */
1421 s = bfd_get_section_by_name (abfd, ".dynstr");
1423 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1427 /* sh_link is the section header index of the symbol table
1428 this hash table is for. */
1429 s = bfd_get_section_by_name (abfd, ".dynsym");
1431 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1439 /* Map symbol from it's internal number to the external number, moving
1440 all local symbols to be at the head of the list. */
1443 sym_is_global (abfd, sym)
1447 /* If the backend has a special mapping, use it. */
1448 if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1449 return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1452 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
1453 || bfd_is_und_section (bfd_get_section (sym))
1454 || bfd_is_com_section (bfd_get_section (sym)));
1458 elf_map_symbols (abfd)
1461 int symcount = bfd_get_symcount (abfd);
1462 asymbol **syms = bfd_get_outsymbols (abfd);
1463 asymbol **sect_syms;
1465 int num_globals = 0;
1466 int num_locals2 = 0;
1467 int num_globals2 = 0;
1469 int num_sections = 0;
1475 fprintf (stderr, "elf_map_symbols\n");
1479 /* Add a section symbol for each BFD section. FIXME: Is this really
1481 for (asect = abfd->sections; asect; asect = asect->next)
1483 if (max_index < asect->index)
1484 max_index = asect->index;
1488 sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1489 if (sect_syms == NULL)
1491 bfd_set_error (bfd_error_no_memory);
1494 elf_section_syms (abfd) = sect_syms;
1496 for (idx = 0; idx < symcount; idx++)
1498 if ((syms[idx]->flags & BSF_SECTION_SYM) != 0
1499 && syms[idx]->value == 0)
1503 sec = syms[idx]->section;
1504 if (sec->owner != NULL)
1506 if (sec->owner != abfd)
1508 if (sec->output_offset != 0)
1510 sec = sec->output_section;
1511 BFD_ASSERT (sec->owner == abfd);
1513 sect_syms[sec->index] = syms[idx];
1518 for (asect = abfd->sections; asect; asect = asect->next)
1522 if (sect_syms[asect->index] != NULL)
1525 sym = bfd_make_empty_symbol (abfd);
1528 sym->the_bfd = abfd;
1529 sym->name = asect->name;
1531 /* Set the flags to 0 to indicate that this one was newly added. */
1533 sym->section = asect;
1534 sect_syms[asect->index] = sym;
1538 "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n",
1539 asect->name, (long) asect->vma, asect->index, (long) asect);
1543 /* Classify all of the symbols. */
1544 for (idx = 0; idx < symcount; idx++)
1546 if (!sym_is_global (abfd, syms[idx]))
1551 for (asect = abfd->sections; asect; asect = asect->next)
1553 if (sect_syms[asect->index] != NULL
1554 && sect_syms[asect->index]->flags == 0)
1556 sect_syms[asect->index]->flags = BSF_SECTION_SYM;
1557 if (!sym_is_global (abfd, sect_syms[asect->index]))
1561 sect_syms[asect->index]->flags = 0;
1565 /* Now sort the symbols so the local symbols are first. */
1566 new_syms = ((asymbol **)
1568 (num_locals + num_globals) * sizeof (asymbol *)));
1569 if (new_syms == NULL)
1571 bfd_set_error (bfd_error_no_memory);
1575 for (idx = 0; idx < symcount; idx++)
1577 asymbol *sym = syms[idx];
1580 if (!sym_is_global (abfd, sym))
1583 i = num_locals + num_globals2++;
1585 sym->udata.i = i + 1;
1587 for (asect = abfd->sections; asect; asect = asect->next)
1589 if (sect_syms[asect->index] != NULL
1590 && sect_syms[asect->index]->flags == 0)
1592 asymbol *sym = sect_syms[asect->index];
1595 sym->flags = BSF_SECTION_SYM;
1596 if (!sym_is_global (abfd, sym))
1599 i = num_locals + num_globals2++;
1601 sym->udata.i = i + 1;
1605 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
1607 elf_num_locals (abfd) = num_locals;
1608 elf_num_globals (abfd) = num_globals;
1612 /* Compute the file positions we are going to put the sections at, and
1613 otherwise prepare to begin writing out the ELF file. If LINK_INFO
1614 is not NULL, this is being called by the ELF backend linker. */
1617 elf_compute_section_file_positions (abfd, link_info)
1619 struct bfd_link_info *link_info;
1621 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1623 struct bfd_strtab_hash *strtab;
1624 Elf_Internal_Shdr *shstrtab_hdr;
1626 if (abfd->output_has_begun)
1629 /* Do any elf backend specific processing first. */
1630 if (bed->elf_backend_begin_write_processing)
1631 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
1633 if (! prep_headers (abfd))
1637 bfd_map_over_sections (abfd, elf_fake_sections, &failed);
1641 if (!assign_section_numbers (abfd))
1644 /* The backend linker builds symbol table information itself. */
1645 if (link_info == NULL)
1647 if (! swap_out_syms (abfd, &strtab))
1651 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
1652 /* sh_name was set in prep_headers. */
1653 shstrtab_hdr->sh_type = SHT_STRTAB;
1654 shstrtab_hdr->sh_flags = 0;
1655 shstrtab_hdr->sh_addr = 0;
1656 shstrtab_hdr->sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1657 shstrtab_hdr->sh_entsize = 0;
1658 shstrtab_hdr->sh_link = 0;
1659 shstrtab_hdr->sh_info = 0;
1660 /* sh_offset is set in assign_file_positions_for_symtabs_and_strtabs. */
1661 shstrtab_hdr->sh_addralign = 1;
1663 if (!assign_file_positions_except_relocs (abfd,
1664 link_info == NULL ? true : false))
1667 if (link_info == NULL)
1669 /* Now that we know where the .strtab section goes, write it
1671 if ((bfd_seek (abfd, elf_tdata (abfd)->strtab_hdr.sh_offset, SEEK_SET)
1673 || ! _bfd_stringtab_emit (abfd, strtab))
1675 _bfd_stringtab_free (strtab);
1678 abfd->output_has_begun = true;
1684 /* Align to the maximum file alignment that could be required for any
1685 ELF data structure. */
1687 static INLINE file_ptr
1688 align_file_position (off)
1691 return (off + FILE_ALIGN - 1) & ~(FILE_ALIGN - 1);
1694 /* Assign a file position to a section, optionally aligning to the
1695 required section alignment. */
1697 static INLINE file_ptr
1698 assign_file_position_for_section (i_shdrp, offset, align)
1699 Elf_Internal_Shdr *i_shdrp;
1707 al = i_shdrp->sh_addralign;
1709 offset = BFD_ALIGN (offset, al);
1711 i_shdrp->sh_offset = offset;
1712 if (i_shdrp->bfd_section != NULL)
1713 i_shdrp->bfd_section->filepos = offset;
1714 if (i_shdrp->sh_type != SHT_NOBITS)
1715 offset += i_shdrp->sh_size;
1719 /* Get the size of the program header.
1721 SORTED_HDRS, if non-NULL, is an array of COUNT pointers to headers sorted
1722 by VMA. Non-allocated sections (!SHF_ALLOC) must appear last. All
1723 section VMAs and sizes are known so we can compute the correct value.
1724 (??? This may not be perfectly true. What cases do we miss?)
1726 If SORTED_HDRS is NULL we assume there are two segments: text and data
1727 (exclusive of .interp and .dynamic).
1729 If this is called by the linker before any of the section VMA's are set, it
1730 can't calculate the correct value for a strange memory layout. This only
1731 happens when SIZEOF_HEADERS is used in a linker script. In this case,
1732 SORTED_HDRS is NULL and we assume the normal scenario of one text and one
1733 data segment (exclusive of .interp and .dynamic).
1735 ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
1736 will be two segments. */
1738 static bfd_size_type
1739 get_program_header_size (abfd, sorted_hdrs, count, maxpagesize)
1741 Elf_Internal_Shdr **sorted_hdrs;
1743 bfd_vma maxpagesize;
1748 /* We can't return a different result each time we're called. */
1749 if (elf_tdata (abfd)->program_header_size != 0)
1750 return elf_tdata (abfd)->program_header_size;
1752 if (sorted_hdrs != NULL)
1755 unsigned int last_type;
1756 Elf_Internal_Shdr **hdrpp;
1757 /* What we think the current segment's offset is. */
1759 /* What we think the current segment's address is. */
1761 /* How big we think the current segment is. */
1763 /* What we think the current file offset is. */
1764 bfd_vma file_offset;
1765 bfd_vma next_offset;
1767 /* Scan the headers and compute the number of segments required. This
1768 code is intentionally similar to the code in map_program_segments.
1770 The `sh_offset' field isn't valid at this point, so we keep our own
1771 running total in `file_offset'.
1773 This works because section VMAs are already known. */
1776 /* Make sure the first section goes in the first segment. */
1777 file_offset = p_offset = sorted_hdrs[0]->sh_addr % maxpagesize;
1778 p_vaddr = sorted_hdrs[0]->sh_addr;
1780 last_type = SHT_PROGBITS;
1782 for (i = 0, hdrpp = sorted_hdrs; i < count; i++, hdrpp++)
1784 Elf_Internal_Shdr *hdr;
1788 /* Ignore any section which will not be part of the process
1790 if ((hdr->sh_flags & SHF_ALLOC) == 0)
1793 /* Keep track of where this and the next sections go.
1794 The section VMA must equal the file position modulo
1796 file_offset += (hdr->sh_addr - file_offset) % maxpagesize;
1797 next_offset = file_offset;
1798 if (hdr->sh_type != SHT_NOBITS)
1799 next_offset = file_offset + hdr->sh_size;
1801 /* If this section fits in the segment we are constructing, add
1803 if ((file_offset - (p_offset + p_memsz)
1804 == hdr->sh_addr - (p_vaddr + p_memsz))
1805 && (last_type != SHT_NOBITS || hdr->sh_type == SHT_NOBITS))
1807 bfd_size_type adjust;
1809 adjust = hdr->sh_addr - (p_vaddr + p_memsz);
1810 p_memsz += hdr->sh_size + adjust;
1811 file_offset = next_offset;
1812 last_type = hdr->sh_type;
1816 /* The section won't fit, start a new segment. */
1819 /* Initialize the segment. */
1820 p_vaddr = hdr->sh_addr;
1821 p_memsz = hdr->sh_size;
1822 p_offset = file_offset;
1823 file_offset = next_offset;
1825 last_type = hdr->sh_type;
1830 /* Assume we will need exactly two PT_LOAD segments: one for text
1831 and one for data. */
1835 s = bfd_get_section_by_name (abfd, ".interp");
1836 if (s != NULL && (s->flags & SEC_LOAD) != 0)
1838 /* If we have a loadable interpreter section, we need a
1839 PT_INTERP segment. In this case, assume we also need a
1840 PT_PHDR segment, although that may not be true for all
1845 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
1847 /* We need a PT_DYNAMIC segment. */
1851 elf_tdata (abfd)->program_header_size = segs * sizeof (Elf_External_Phdr);
1852 return elf_tdata (abfd)->program_header_size;
1855 /* Create the program header. OFF is the file offset where the
1856 program header should be written. FIRST is the first loadable ELF
1857 section. SORTED_HDRS is the ELF sections sorted by section
1858 address. PHDR_SIZE is the size of the program header as returned
1859 by get_program_header_size. */
1862 map_program_segments (abfd, off, first, sorted_hdrs, phdr_size)
1865 Elf_Internal_Shdr *first;
1866 Elf_Internal_Shdr **sorted_hdrs;
1867 bfd_size_type phdr_size;
1869 Elf_Internal_Phdr phdrs[10];
1870 unsigned int phdr_count;
1871 Elf_Internal_Phdr *phdr;
1872 int phdr_size_adjust;
1874 Elf_Internal_Shdr **hdrpp;
1875 asection *sinterp, *sdyn;
1876 unsigned int last_type;
1877 Elf_Internal_Ehdr *i_ehdrp;
1879 BFD_ASSERT ((abfd->flags & (EXEC_P | DYNAMIC)) != 0);
1880 BFD_ASSERT (phdr_size / sizeof (Elf_Internal_Phdr)
1881 <= sizeof phdrs / sizeof (phdrs[0]));
1886 phdr_size_adjust = 0;
1888 /* If we have a loadable .interp section, we must create a PT_INTERP
1889 segment which must precede all PT_LOAD segments. We assume that
1890 we must also create a PT_PHDR segment, although that may not be
1891 true for all targets. */
1892 sinterp = bfd_get_section_by_name (abfd, ".interp");
1893 if (sinterp != NULL && (sinterp->flags & SEC_LOAD) != 0)
1895 BFD_ASSERT (first != NULL);
1897 phdr->p_type = PT_PHDR;
1899 phdr->p_offset = off;
1901 /* Account for any adjustment made because of the alignment of
1902 the first loadable section. */
1903 phdr_size_adjust = (first->sh_offset - phdr_size) - off;
1904 BFD_ASSERT (phdr_size_adjust >= 0 && phdr_size_adjust < 128);
1906 /* The program header precedes all loadable sections. This lets
1907 us compute its loadable address. This depends on the linker
1909 phdr->p_vaddr = first->sh_addr - (phdr_size + phdr_size_adjust);
1912 phdr->p_filesz = phdr_size;
1913 phdr->p_memsz = phdr_size;
1915 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
1916 phdr->p_flags = PF_R | PF_X;
1918 phdr->p_align = FILE_ALIGN;
1919 BFD_ASSERT ((phdr->p_vaddr - phdr->p_offset) % FILE_ALIGN == 0);
1921 /* Include the ELF header in the first loadable segment. */
1922 phdr_size_adjust += off;
1927 phdr->p_type = PT_INTERP;
1928 phdr->p_offset = sinterp->filepos;
1929 phdr->p_vaddr = sinterp->vma;
1931 phdr->p_filesz = sinterp->_raw_size;
1932 phdr->p_memsz = sinterp->_raw_size;
1933 phdr->p_flags = PF_R;
1934 phdr->p_align = 1 << bfd_get_section_alignment (abfd, sinterp);
1940 /* Look through the sections to see how they will be divided into
1941 program segments. The sections must be arranged in order by
1942 sh_addr for this to work correctly. */
1943 phdr->p_type = PT_NULL;
1944 last_type = SHT_PROGBITS;
1945 for (i = 1, hdrpp = sorted_hdrs;
1946 i < elf_elfheader (abfd)->e_shnum;
1949 Elf_Internal_Shdr *hdr;
1953 /* Ignore any section which will not be part of the process
1955 if ((hdr->sh_flags & SHF_ALLOC) == 0)
1958 /* If this section fits in the segment we are constructing, add
1960 if (phdr->p_type != PT_NULL
1961 && (hdr->sh_offset - (phdr->p_offset + phdr->p_memsz)
1962 == hdr->sh_addr - (phdr->p_vaddr + phdr->p_memsz))
1963 && (last_type != SHT_NOBITS || hdr->sh_type == SHT_NOBITS))
1965 bfd_size_type adjust;
1967 adjust = hdr->sh_addr - (phdr->p_vaddr + phdr->p_memsz);
1968 phdr->p_memsz += hdr->sh_size + adjust;
1969 if (hdr->sh_type != SHT_NOBITS)
1970 phdr->p_filesz += hdr->sh_size + adjust;
1971 if ((hdr->sh_flags & SHF_WRITE) != 0)
1972 phdr->p_flags |= PF_W;
1973 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1974 phdr->p_flags |= PF_X;
1975 last_type = hdr->sh_type;
1979 /* The section won't fit, start a new segment. If we're already in one,
1980 move to the next one. */
1981 if (phdr->p_type != PT_NULL)
1987 /* Initialize the segment. */
1988 phdr->p_type = PT_LOAD;
1989 phdr->p_offset = hdr->sh_offset;
1990 phdr->p_vaddr = hdr->sh_addr;
1992 if (hdr->sh_type == SHT_NOBITS)
1995 phdr->p_filesz = hdr->sh_size;
1996 phdr->p_memsz = hdr->sh_size;
1997 phdr->p_flags = PF_R;
1998 if ((hdr->sh_flags & SHF_WRITE) != 0)
1999 phdr->p_flags |= PF_W;
2000 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
2001 phdr->p_flags |= PF_X;
2002 phdr->p_align = get_elf_backend_data (abfd)->maxpagesize;
2006 && (sinterp->flags & SEC_LOAD) != 0)
2008 phdr->p_offset -= phdr_size + phdr_size_adjust;
2009 phdr->p_vaddr -= phdr_size + phdr_size_adjust;
2010 phdr->p_filesz += phdr_size + phdr_size_adjust;
2011 phdr->p_memsz += phdr_size + phdr_size_adjust;
2014 last_type = hdr->sh_type;
2017 if (phdr->p_type != PT_NULL)
2023 /* If we have a .dynamic section, create a PT_DYNAMIC segment. */
2024 sdyn = bfd_get_section_by_name (abfd, ".dynamic");
2025 if (sdyn != NULL && (sdyn->flags & SEC_LOAD) != 0)
2027 phdr->p_type = PT_DYNAMIC;
2028 phdr->p_offset = sdyn->filepos;
2029 phdr->p_vaddr = sdyn->vma;
2031 phdr->p_filesz = sdyn->_raw_size;
2032 phdr->p_memsz = sdyn->_raw_size;
2033 phdr->p_flags = PF_R;
2034 if ((sdyn->flags & SEC_READONLY) == 0)
2035 phdr->p_flags |= PF_W;
2036 if ((sdyn->flags & SEC_CODE) != 0)
2037 phdr->p_flags |= PF_X;
2038 phdr->p_align = 1 << bfd_get_section_alignment (abfd, sdyn);
2044 /* Make sure the return value from get_program_header_size matches
2045 what we computed here. Actually, it's OK if we allocated too
2046 much space in the program header. */
2047 if (phdr_count > phdr_size / sizeof (Elf_External_Phdr))
2049 ((*_bfd_error_handler)
2050 ("%s: Not enough room for program headers (allocated %lu, need %u)",
2051 bfd_get_filename (abfd),
2052 (unsigned long) (phdr_size / sizeof (Elf_External_Phdr)),
2054 bfd_set_error (bfd_error_bad_value);
2055 return (file_ptr) -1;
2058 /* Set up program header information. */
2059 i_ehdrp = elf_elfheader (abfd);
2060 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2061 i_ehdrp->e_phoff = off;
2062 i_ehdrp->e_phnum = phdr_count;
2064 /* Save the program headers away. I don't think anybody uses this
2065 information right now. */
2066 elf_tdata (abfd)->phdr = ((Elf_Internal_Phdr *)
2069 * sizeof (Elf_Internal_Phdr))));
2070 if (elf_tdata (abfd)->phdr == NULL && phdr_count != 0)
2072 bfd_set_error (bfd_error_no_memory);
2073 return (file_ptr) -1;
2075 memcpy (elf_tdata (abfd)->phdr, phdrs,
2076 phdr_count * sizeof (Elf_Internal_Phdr));
2078 /* Write out the program headers. */
2079 if (bfd_seek (abfd, off, SEEK_SET) != 0)
2080 return (file_ptr) -1;
2082 for (i = 0, phdr = phdrs; i < phdr_count; i++, phdr++)
2084 Elf_External_Phdr extphdr;
2086 elf_swap_phdr_out (abfd, phdr, &extphdr);
2087 if (bfd_write (&extphdr, sizeof (Elf_External_Phdr), 1, abfd)
2088 != sizeof (Elf_External_Phdr))
2089 return (file_ptr) -1;
2092 return off + phdr_count * sizeof (Elf_External_Phdr);
2095 /* Work out the file positions of all the sections. This is called by
2096 elf_compute_section_file_positions. All the section sizes and VMAs
2097 must be known before this is called.
2099 We do not consider reloc sections at this point, unless they form
2100 part of the loadable image. Reloc sections are assigned file
2101 positions in assign_file_positions_for_relocs, which is called by
2102 write_object_contents and final_link.
2104 If DOSYMS is false, we do not assign file positions for the symbol
2105 table or the string table. */
2108 assign_file_positions_except_relocs (abfd, dosyms)
2112 struct elf_obj_tdata * const tdata = elf_tdata (abfd);
2113 Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
2114 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
2117 /* Start after the ELF header. */
2118 off = i_ehdrp->e_ehsize;
2120 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
2122 Elf_Internal_Shdr **hdrpp;
2125 /* We are not creating an executable, which means that we are
2126 not creating a program header, and that the actual order of
2127 the sections in the file is unimportant. */
2128 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2130 Elf_Internal_Shdr *hdr;
2133 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2135 hdr->sh_offset = -1;
2139 && (i == tdata->symtab_section
2140 || i == tdata->strtab_section))
2142 hdr->sh_offset = -1;
2146 off = assign_file_position_for_section (hdr, off, true);
2152 bfd_size_type phdr_size;
2153 bfd_vma maxpagesize;
2155 Elf_Internal_Shdr **sorted_hdrs;
2156 Elf_Internal_Shdr **hdrpp;
2158 Elf_Internal_Shdr *first;
2161 /* We are creating an executable. */
2163 maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
2164 if (maxpagesize == 0)
2167 /* We must sort the sections. The GNU linker will always create
2168 the sections in an appropriate order, but the Irix 5 linker
2169 will not. We don't include the dummy first section in the
2170 sort. We sort sections which are not SHF_ALLOC to the end. */
2171 hdrppsize = (i_ehdrp->e_shnum - 1) * sizeof (Elf_Internal_Shdr *);
2172 sorted_hdrs = (Elf_Internal_Shdr **) malloc (hdrppsize);
2173 if (sorted_hdrs == NULL)
2175 bfd_set_error (bfd_error_no_memory);
2179 memcpy (sorted_hdrs, i_shdrpp + 1, hdrppsize);
2180 qsort (sorted_hdrs, i_ehdrp->e_shnum - 1, sizeof (Elf_Internal_Shdr *),
2183 /* We can't actually create the program header until we have set the
2184 file positions for the sections, and we can't do that until we know
2185 how big the header is going to be. */
2186 off = align_file_position (off);
2187 phdr_size = get_program_header_size (abfd,
2188 sorted_hdrs, i_ehdrp->e_shnum - 1,
2190 if (phdr_size == (file_ptr) -1)
2193 /* Compute the file offsets of each section. */
2197 for (i = 1, hdrpp = sorted_hdrs; i < i_ehdrp->e_shnum; i++, hdrpp++)
2199 Elf_Internal_Shdr *hdr;
2202 if ((hdr->sh_flags & SHF_ALLOC) == 0)
2204 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2206 hdr->sh_offset = -1;
2210 && (hdr == i_shdrpp[tdata->symtab_section]
2211 || hdr == i_shdrpp[tdata->strtab_section]))
2213 hdr->sh_offset = -1;
2222 /* The section VMA must equal the file position modulo
2223 the page size. This is required by the program
2225 off += (hdr->sh_addr - off) % maxpagesize;
2228 off = assign_file_position_for_section (hdr, off, false);
2231 /* Create the program header. */
2232 phdr_map = map_program_segments (abfd, phdr_off, first, sorted_hdrs,
2234 if (phdr_map == (file_ptr) -1)
2236 BFD_ASSERT ((bfd_size_type) phdr_map <= (bfd_size_type) phdr_off + phdr_size);
2241 /* Place the section headers. */
2242 off = align_file_position (off);
2243 i_ehdrp->e_shoff = off;
2244 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
2246 elf_tdata (abfd)->next_file_pos = off;
2251 /* Sort the ELF headers by VMA. We sort headers which are not
2252 SHF_ALLOC to the end. */
2256 elf_sort_hdrs (arg1, arg2)
2261 const Elf_Internal_Shdr *hdr1 = *(const Elf_Internal_Shdr **) arg1;
2262 const Elf_Internal_Shdr *hdr2 = *(const Elf_Internal_Shdr **) arg2;
2264 #define TOEND(x) (((x)->sh_flags & SHF_ALLOC)==0)
2275 if (hdr1->sh_addr < hdr2->sh_addr)
2277 else if (hdr1->sh_addr > hdr2->sh_addr)
2279 /* Put !SHT_NOBITS sections before SHT_NOBITS ones.
2280 The main loop in map_program_segments requires this. */
2281 ret = (hdr1->sh_type == SHT_NOBITS) - (hdr2->sh_type == SHT_NOBITS);
2284 if (hdr1->sh_size < hdr2->sh_size)
2286 if (hdr1->sh_size > hdr2->sh_size)
2297 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2298 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
2299 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2301 struct bfd_strtab_hash *shstrtab;
2303 i_ehdrp = elf_elfheader (abfd);
2304 i_shdrp = elf_elfsections (abfd);
2306 shstrtab = elf_stringtab_init ();
2307 if (shstrtab == NULL)
2310 elf_shstrtab (abfd) = shstrtab;
2312 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
2313 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
2314 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
2315 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
2317 i_ehdrp->e_ident[EI_CLASS] = ELFCLASS;
2318 i_ehdrp->e_ident[EI_DATA] =
2319 abfd->xvec->byteorder_big_p ? ELFDATA2MSB : ELFDATA2LSB;
2320 i_ehdrp->e_ident[EI_VERSION] = EV_CURRENT;
2322 for (count = EI_PAD; count < EI_NIDENT; count++)
2323 i_ehdrp->e_ident[count] = 0;
2325 if ((abfd->flags & DYNAMIC) != 0)
2326 i_ehdrp->e_type = ET_DYN;
2327 else if ((abfd->flags & EXEC_P) != 0)
2328 i_ehdrp->e_type = ET_EXEC;
2330 i_ehdrp->e_type = ET_REL;
2332 switch (bfd_get_arch (abfd))
2334 case bfd_arch_unknown:
2335 i_ehdrp->e_machine = EM_NONE;
2337 case bfd_arch_sparc:
2339 i_ehdrp->e_machine = EM_SPARC64;
2341 i_ehdrp->e_machine = EM_SPARC;
2345 i_ehdrp->e_machine = EM_386;
2348 i_ehdrp->e_machine = EM_68K;
2351 i_ehdrp->e_machine = EM_88K;
2354 i_ehdrp->e_machine = EM_860;
2356 case bfd_arch_mips: /* MIPS Rxxxx */
2357 i_ehdrp->e_machine = EM_MIPS; /* only MIPS R3000 */
2360 i_ehdrp->e_machine = EM_PARISC;
2362 case bfd_arch_powerpc:
2363 i_ehdrp->e_machine = EM_PPC;
2365 /* start-sanitize-arc */
2367 i_ehdrp->e_machine = EM_CYGNUS_ARC;
2369 /* end-sanitize-arc */
2370 /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
2372 i_ehdrp->e_machine = EM_NONE;
2374 i_ehdrp->e_version = EV_CURRENT;
2375 i_ehdrp->e_ehsize = sizeof (Elf_External_Ehdr);
2377 /* no program header, for now. */
2378 i_ehdrp->e_phoff = 0;
2379 i_ehdrp->e_phentsize = 0;
2380 i_ehdrp->e_phnum = 0;
2382 /* each bfd section is section header entry */
2383 i_ehdrp->e_entry = bfd_get_start_address (abfd);
2384 i_ehdrp->e_shentsize = sizeof (Elf_External_Shdr);
2386 /* if we're building an executable, we'll need a program header table */
2387 if (abfd->flags & EXEC_P)
2389 /* it all happens later */
2391 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2393 /* elf_build_phdrs() returns a (NULL-terminated) array of
2394 Elf_Internal_Phdrs */
2395 i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
2396 i_ehdrp->e_phoff = outbase;
2397 outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
2402 i_ehdrp->e_phentsize = 0;
2404 i_ehdrp->e_phoff = 0;
2407 elf_tdata (abfd)->symtab_hdr.sh_name =
2408 (unsigned int) _bfd_stringtab_add (shstrtab, ".symtab", true, false);
2409 elf_tdata (abfd)->strtab_hdr.sh_name =
2410 (unsigned int) _bfd_stringtab_add (shstrtab, ".strtab", true, false);
2411 elf_tdata (abfd)->shstrtab_hdr.sh_name =
2412 (unsigned int) _bfd_stringtab_add (shstrtab, ".shstrtab", true, false);
2413 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2414 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2415 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
2422 swap_out_syms (abfd, sttp)
2424 struct bfd_strtab_hash **sttp;
2426 if (!elf_map_symbols (abfd))
2429 /* Dump out the symtabs. */
2431 int symcount = bfd_get_symcount (abfd);
2432 asymbol **syms = bfd_get_outsymbols (abfd);
2433 struct bfd_strtab_hash *stt;
2434 Elf_Internal_Shdr *symtab_hdr;
2435 Elf_Internal_Shdr *symstrtab_hdr;
2436 Elf_External_Sym *outbound_syms;
2439 stt = elf_stringtab_init ();
2443 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2444 symtab_hdr->sh_type = SHT_SYMTAB;
2445 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
2446 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
2447 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
2448 symtab_hdr->sh_addralign = FILE_ALIGN;
2450 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2451 symstrtab_hdr->sh_type = SHT_STRTAB;
2453 outbound_syms = ((Elf_External_Sym *)
2455 (1 + symcount) * sizeof (Elf_External_Sym)));
2456 if (outbound_syms == NULL)
2458 bfd_set_error (bfd_error_no_memory);
2461 symtab_hdr->contents = (PTR) outbound_syms;
2463 /* now generate the data (for "contents") */
2465 /* Fill in zeroth symbol and swap it out. */
2466 Elf_Internal_Sym sym;
2472 sym.st_shndx = SHN_UNDEF;
2473 elf_swap_symbol_out (abfd, &sym, outbound_syms);
2476 for (idx = 0; idx < symcount; idx++)
2478 Elf_Internal_Sym sym;
2479 bfd_vma value = syms[idx]->value;
2480 elf_symbol_type *type_ptr;
2481 flagword flags = syms[idx]->flags;
2483 if (flags & BSF_SECTION_SYM)
2484 /* Section symbols have no names. */
2488 sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
2491 if (sym.st_name == (unsigned long) -1)
2495 type_ptr = elf_symbol_from (abfd, syms[idx]);
2497 if (bfd_is_com_section (syms[idx]->section))
2499 /* ELF common symbols put the alignment into the `value' field,
2500 and the size into the `size' field. This is backwards from
2501 how BFD handles it, so reverse it here. */
2502 sym.st_size = value;
2503 if (type_ptr == NULL
2504 || type_ptr->internal_elf_sym.st_value == 0)
2505 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
2507 sym.st_value = type_ptr->internal_elf_sym.st_value;
2508 sym.st_shndx = elf_section_from_bfd_section (abfd,
2509 syms[idx]->section);
2513 asection *sec = syms[idx]->section;
2516 if (sec->output_section)
2518 value += sec->output_offset;
2519 sec = sec->output_section;
2522 sym.st_value = value;
2523 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
2524 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec);
2528 /* Writing this would be a hell of a lot easier if we had
2529 some decent documentation on bfd, and knew what to expect
2530 of the library, and what to demand of applications. For
2531 example, it appears that `objcopy' might not set the
2532 section of a symbol to be a section that is actually in
2534 sec2 = bfd_get_section_by_name (abfd, sec->name);
2535 BFD_ASSERT (sec2 != 0);
2536 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec2);
2537 BFD_ASSERT (shndx != -1);
2541 if (bfd_is_com_section (syms[idx]->section))
2542 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_OBJECT);
2543 else if (bfd_is_und_section (syms[idx]->section))
2544 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
2547 ((flags & BSF_FUNCTION)
2550 else if (flags & BSF_SECTION_SYM)
2551 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
2552 else if (flags & BSF_FILE)
2553 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
2556 int bind = STB_LOCAL;
2557 int type = STT_OBJECT;
2559 if (flags & BSF_LOCAL)
2561 else if (flags & BSF_WEAK)
2563 else if (flags & BSF_GLOBAL)
2566 if (flags & BSF_FUNCTION)
2569 sym.st_info = ELF_ST_INFO (bind, type);
2573 elf_swap_symbol_out (abfd, &sym, outbound_syms);
2578 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
2579 symstrtab_hdr->sh_type = SHT_STRTAB;
2581 symstrtab_hdr->sh_flags = 0;
2582 symstrtab_hdr->sh_addr = 0;
2583 symstrtab_hdr->sh_entsize = 0;
2584 symstrtab_hdr->sh_link = 0;
2585 symstrtab_hdr->sh_info = 0;
2586 symstrtab_hdr->sh_addralign = 1;
2593 write_shdrs_and_ehdr (abfd)
2596 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
2597 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2598 Elf_External_Shdr *x_shdrp; /* Section header table, external form */
2599 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2602 i_ehdrp = elf_elfheader (abfd);
2603 i_shdrp = elf_elfsections (abfd);
2605 /* swap the header before spitting it out... */
2608 elf_debug_file (i_ehdrp);
2610 elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr);
2611 if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
2612 || (bfd_write ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd)
2613 != sizeof (x_ehdr)))
2616 /* at this point we've concocted all the ELF sections... */
2617 x_shdrp = (Elf_External_Shdr *)
2618 bfd_alloc (abfd, sizeof (*x_shdrp) * (i_ehdrp->e_shnum));
2621 bfd_set_error (bfd_error_no_memory);
2625 for (count = 0; count < i_ehdrp->e_shnum; count++)
2628 elf_debug_section (count, i_shdrp[count]);
2630 elf_swap_shdr_out (abfd, i_shdrp[count], x_shdrp + count);
2632 if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET) != 0
2633 || (bfd_write ((PTR) x_shdrp, sizeof (*x_shdrp), i_ehdrp->e_shnum, abfd)
2634 != sizeof (*x_shdrp) * i_ehdrp->e_shnum))
2637 /* need to dump the string table too... */
2642 /* Assign file positions for all the reloc sections which are not part
2643 of the loadable file image. */
2646 assign_file_positions_for_relocs (abfd)
2651 Elf_Internal_Shdr **shdrpp;
2653 off = elf_tdata (abfd)->next_file_pos;
2655 for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
2656 i < elf_elfheader (abfd)->e_shnum;
2659 Elf_Internal_Shdr *shdrp;
2662 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
2663 && shdrp->sh_offset == -1)
2664 off = assign_file_position_for_section (shdrp, off, true);
2667 elf_tdata (abfd)->next_file_pos = off;
2671 NAME(bfd_elf,write_object_contents) (abfd)
2674 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2675 Elf_Internal_Ehdr *i_ehdrp;
2676 Elf_Internal_Shdr **i_shdrp;
2680 if (! abfd->output_has_begun
2681 && ! elf_compute_section_file_positions (abfd,
2682 (struct bfd_link_info *) NULL))
2685 i_shdrp = elf_elfsections (abfd);
2686 i_ehdrp = elf_elfheader (abfd);
2689 bfd_map_over_sections (abfd, write_relocs, &failed);
2692 assign_file_positions_for_relocs (abfd);
2694 /* After writing the headers, we need to write the sections too... */
2695 for (count = 1; count < i_ehdrp->e_shnum; count++)
2697 if (bed->elf_backend_section_processing)
2698 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
2699 if (i_shdrp[count]->contents)
2701 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
2702 || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
2704 != i_shdrp[count]->sh_size))
2709 /* Write out the section header names. */
2710 if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
2711 || ! _bfd_stringtab_emit (abfd, elf_shstrtab (abfd)))
2714 if (bed->elf_backend_final_write_processing)
2715 (*bed->elf_backend_final_write_processing) (abfd,
2716 elf_tdata (abfd)->linker);
2718 return write_shdrs_and_ehdr (abfd);
2721 /* Given an ELF section number, retrieve the corresponding BFD
2725 section_from_elf_index (abfd, index)
2729 BFD_ASSERT (index > 0 && index < SHN_LORESERVE);
2730 if (index >= elf_elfheader (abfd)->e_shnum)
2732 return elf_elfsections (abfd)[index]->bfd_section;
2735 /* given a section, search the header to find them... */
2737 elf_section_from_bfd_section (abfd, asect)
2741 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2742 Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
2744 Elf_Internal_Shdr *hdr;
2745 int maxindex = elf_elfheader (abfd)->e_shnum;
2747 for (index = 0; index < maxindex; index++)
2749 hdr = i_shdrp[index];
2750 if (hdr->bfd_section == asect)
2754 if (bed->elf_backend_section_from_bfd_section)
2756 for (index = 0; index < maxindex; index++)
2760 hdr = i_shdrp[index];
2762 if ((*bed->elf_backend_section_from_bfd_section)
2763 (abfd, hdr, asect, &retval))
2768 if (bfd_is_abs_section (asect))
2770 if (bfd_is_com_section (asect))
2772 if (bfd_is_und_section (asect))
2778 /* given a symbol, return the bfd index for that symbol. */
2780 elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
2782 struct symbol_cache_entry **asym_ptr_ptr;
2784 struct symbol_cache_entry *asym_ptr = *asym_ptr_ptr;
2786 flagword flags = asym_ptr->flags;
2788 /* When gas creates relocations against local labels, it creates its
2789 own symbol for the section, but does put the symbol into the
2790 symbol chain, so udata is 0. When the linker is generating
2791 relocatable output, this section symbol may be for one of the
2792 input sections rather than the output section. */
2793 if (asym_ptr->udata.i == 0
2794 && (flags & BSF_SECTION_SYM)
2795 && asym_ptr->section)
2799 if (asym_ptr->section->output_section != NULL)
2800 indx = asym_ptr->section->output_section->index;
2802 indx = asym_ptr->section->index;
2803 if (elf_section_syms (abfd)[indx])
2804 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
2807 idx = asym_ptr->udata.i;
2808 BFD_ASSERT (idx != 0);
2814 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n",
2815 (long) asym_ptr, asym_ptr->name, idx, flags, elf_symbol_flags (flags));
2824 elf_slurp_symbol_table (abfd, symptrs, dynamic)
2826 asymbol **symptrs; /* Buffer for generated bfd symbols */
2829 Elf_Internal_Shdr *hdr;
2830 long symcount; /* Number of external ELF symbols */
2831 elf_symbol_type *sym; /* Pointer to current bfd symbol */
2832 elf_symbol_type *symbase; /* Buffer for generated bfd symbols */
2833 Elf_Internal_Sym i_sym;
2834 Elf_External_Sym *x_symp = NULL;
2836 /* Read each raw ELF symbol, converting from external ELF form to
2837 internal ELF form, and then using the information to create a
2838 canonical bfd symbol table entry.
2840 Note that we allocate the initial bfd canonical symbol buffer
2841 based on a one-to-one mapping of the ELF symbols to canonical
2842 symbols. We actually use all the ELF symbols, so there will be no
2843 space left over at the end. When we have all the symbols, we
2844 build the caller's pointer vector. */
2847 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2849 hdr = &elf_tdata (abfd)->symtab_hdr;
2850 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2853 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2856 sym = symbase = NULL;
2861 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2864 symbase = ((elf_symbol_type *)
2865 bfd_zalloc (abfd, symcount * sizeof (elf_symbol_type)));
2866 if (symbase == (elf_symbol_type *) NULL)
2868 bfd_set_error (bfd_error_no_memory);
2873 /* Temporarily allocate room for the raw ELF symbols. */
2874 x_symp = ((Elf_External_Sym *)
2875 malloc (symcount * sizeof (Elf_External_Sym)));
2876 if (x_symp == NULL && symcount != 0)
2878 bfd_set_error (bfd_error_no_memory);
2882 if (bfd_read ((PTR) x_symp, sizeof (Elf_External_Sym), symcount, abfd)
2883 != symcount * sizeof (Elf_External_Sym))
2885 /* Skip first symbol, which is a null dummy. */
2886 for (i = 1; i < symcount; i++)
2888 elf_swap_symbol_in (abfd, x_symp + i, &i_sym);
2889 memcpy (&sym->internal_elf_sym, &i_sym, sizeof (Elf_Internal_Sym));
2890 #ifdef ELF_KEEP_EXTSYM
2891 memcpy (&sym->native_elf_sym, x_symp + i, sizeof (Elf_External_Sym));
2893 sym->symbol.the_bfd = abfd;
2895 sym->symbol.name = elf_string_from_elf_section (abfd, hdr->sh_link,
2898 sym->symbol.value = i_sym.st_value;
2900 if (i_sym.st_shndx > 0 && i_sym.st_shndx < SHN_LORESERVE)
2902 sym->symbol.section = section_from_elf_index (abfd,
2904 if (sym->symbol.section == NULL)
2906 /* This symbol is in a section for which we did not
2907 create a BFD section. Just use bfd_abs_section,
2908 although it is wrong. FIXME. */
2909 sym->symbol.section = bfd_abs_section_ptr;
2912 else if (i_sym.st_shndx == SHN_ABS)
2914 sym->symbol.section = bfd_abs_section_ptr;
2916 else if (i_sym.st_shndx == SHN_COMMON)
2918 sym->symbol.section = bfd_com_section_ptr;
2919 /* Elf puts the alignment into the `value' field, and
2920 the size into the `size' field. BFD wants to see the
2921 size in the value field, and doesn't care (at the
2922 moment) about the alignment. */
2923 sym->symbol.value = i_sym.st_size;
2925 else if (i_sym.st_shndx == SHN_UNDEF)
2927 sym->symbol.section = bfd_und_section_ptr;
2930 sym->symbol.section = bfd_abs_section_ptr;
2932 sym->symbol.value -= sym->symbol.section->vma;
2934 switch (ELF_ST_BIND (i_sym.st_info))
2937 sym->symbol.flags |= BSF_LOCAL;
2940 if (i_sym.st_shndx != SHN_UNDEF
2941 && i_sym.st_shndx != SHN_COMMON)
2942 sym->symbol.flags |= BSF_GLOBAL;
2945 sym->symbol.flags |= BSF_WEAK;
2949 switch (ELF_ST_TYPE (i_sym.st_info))
2952 sym->symbol.flags |= BSF_SECTION_SYM | BSF_DEBUGGING;
2955 sym->symbol.flags |= BSF_FILE | BSF_DEBUGGING;
2958 sym->symbol.flags |= BSF_FUNCTION;
2963 sym->symbol.flags |= BSF_DYNAMIC;
2965 /* Do some backend-specific processing on this symbol. */
2967 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2968 if (ebd->elf_backend_symbol_processing)
2969 (*ebd->elf_backend_symbol_processing) (abfd, &sym->symbol);
2976 /* Do some backend-specific processing on this symbol table. */
2978 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2979 if (ebd->elf_backend_symbol_table_processing)
2980 (*ebd->elf_backend_symbol_table_processing) (abfd, symbase, symcount);
2983 /* We rely on the zalloc to clear out the final symbol entry. */
2985 symcount = sym - symbase;
2987 /* Fill in the user's symbol pointer vector if needed. */
2995 *symptrs++ = &sym->symbol;
2998 *symptrs = 0; /* Final null pointer */
3010 /* Return the number of bytes required to hold the symtab vector.
3012 Note that we base it on the count plus 1, since we will null terminate
3013 the vector allocated based on this size. However, the ELF symbol table
3014 always has a dummy entry as symbol #0, so it ends up even. */
3017 elf_get_symtab_upper_bound (abfd)
3022 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
3024 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
3025 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
3031 elf_get_dynamic_symtab_upper_bound (abfd)
3036 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3038 if (elf_dynsymtab (abfd) == 0)
3040 bfd_set_error (bfd_error_invalid_operation);
3044 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
3045 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
3051 elf_get_reloc_upper_bound (abfd, asect)
3055 return (asect->reloc_count + 1) * sizeof (arelent *);
3058 /* Read in and swap the external relocs. */
3061 elf_slurp_reloc_table (abfd, asect, symbols)
3066 struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
3067 struct bfd_elf_section_data * const d = elf_section_data (asect);
3068 PTR allocated = NULL;
3069 bfd_byte *native_relocs;
3075 if (asect->relocation != NULL
3076 || (asect->flags & SEC_RELOC) == 0
3077 || asect->reloc_count == 0)
3080 BFD_ASSERT (asect->rel_filepos == d->rel_hdr.sh_offset
3081 && (asect->reloc_count
3082 == d->rel_hdr.sh_size / d->rel_hdr.sh_entsize));
3084 allocated = (PTR) malloc (d->rel_hdr.sh_size);
3085 if (allocated == NULL)
3087 bfd_set_error (bfd_error_no_memory);
3091 if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0
3092 || (bfd_read (allocated, 1, d->rel_hdr.sh_size, abfd)
3093 != d->rel_hdr.sh_size))
3096 native_relocs = (bfd_byte *) allocated;
3098 relents = ((arelent *)
3099 bfd_alloc (abfd, asect->reloc_count * sizeof (arelent)));
3100 if (relents == NULL)
3102 bfd_set_error (bfd_error_no_memory);
3106 entsize = d->rel_hdr.sh_entsize;
3107 BFD_ASSERT (entsize == sizeof (Elf_External_Rel)
3108 || entsize == sizeof (Elf_External_Rela));
3110 for (i = 0, relent = relents;
3111 i < asect->reloc_count;
3112 i++, relent++, native_relocs += entsize)
3114 Elf_Internal_Rela rela;
3115 Elf_Internal_Rel rel;
3117 if (entsize == sizeof (Elf_External_Rela))
3118 elf_swap_reloca_in (abfd, (Elf_External_Rela *) native_relocs, &rela);
3121 elf_swap_reloc_in (abfd, (Elf_External_Rel *) native_relocs, &rel);
3122 rela.r_offset = rel.r_offset;
3123 rela.r_info = rel.r_info;
3127 /* The address of an ELF reloc is section relative for an object
3128 file, and absolute for an executable file or shared library.
3129 The address of a BFD reloc is always section relative. */
3130 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3131 relent->address = rela.r_offset;
3133 relent->address = rela.r_offset - asect->vma;
3135 if (ELF_R_SYM (rela.r_info) == 0)
3136 relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
3141 ps = symbols + ELF_R_SYM (rela.r_info) - 1;
3144 /* Canonicalize ELF section symbols. FIXME: Why? */
3145 if ((s->flags & BSF_SECTION_SYM) == 0)
3146 relent->sym_ptr_ptr = ps;
3148 relent->sym_ptr_ptr = s->section->symbol_ptr_ptr;
3151 relent->addend = rela.r_addend;
3153 if (entsize == sizeof (Elf_External_Rela))
3154 (*ebd->elf_info_to_howto) (abfd, relent, &rela);
3156 (*ebd->elf_info_to_howto_rel) (abfd, relent, &rel);
3159 asect->relocation = relents;
3161 if (allocated != NULL)
3167 if (allocated != NULL)
3174 elf_debug_section (num, hdr)
3176 Elf_Internal_Shdr *hdr;
3178 fprintf (stderr, "\nSection#%d '%s' 0x%.8lx\n", num,
3179 hdr->bfd_section != NULL ? hdr->bfd_section->name : "",
3182 "sh_name = %ld\tsh_type = %ld\tsh_flags = %ld\n",
3183 (long) hdr->sh_name,
3184 (long) hdr->sh_type,
3185 (long) hdr->sh_flags);
3187 "sh_addr = %ld\tsh_offset = %ld\tsh_size = %ld\n",
3188 (long) hdr->sh_addr,
3189 (long) hdr->sh_offset,
3190 (long) hdr->sh_size);
3192 "sh_link = %ld\tsh_info = %ld\tsh_addralign = %ld\n",
3193 (long) hdr->sh_link,
3194 (long) hdr->sh_info,
3195 (long) hdr->sh_addralign);
3196 fprintf (stderr, "sh_entsize = %ld\n",
3197 (long) hdr->sh_entsize);
3202 elf_debug_file (ehdrp)
3203 Elf_Internal_Ehdr *ehdrp;
3205 fprintf (stderr, "e_entry = 0x%.8lx\n", (long) ehdrp->e_entry);
3206 fprintf (stderr, "e_phoff = %ld\n", (long) ehdrp->e_phoff);
3207 fprintf (stderr, "e_phnum = %ld\n", (long) ehdrp->e_phnum);
3208 fprintf (stderr, "e_phentsize = %ld\n", (long) ehdrp->e_phentsize);
3209 fprintf (stderr, "e_shoff = %ld\n", (long) ehdrp->e_shoff);
3210 fprintf (stderr, "e_shnum = %ld\n", (long) ehdrp->e_shnum);
3211 fprintf (stderr, "e_shentsize = %ld\n", (long) ehdrp->e_shentsize);
3215 elf_symbol_flags (flags)
3218 static char buffer[1024];
3221 if (flags & BSF_LOCAL)
3222 strcat (buffer, " local");
3224 if (flags & BSF_GLOBAL)
3225 strcat (buffer, " global");
3227 if (flags & BSF_DEBUGGING)
3228 strcat (buffer, " debug");
3230 if (flags & BSF_FUNCTION)
3231 strcat (buffer, " function");
3233 if (flags & BSF_KEEP)
3234 strcat (buffer, " keep");
3236 if (flags & BSF_KEEP_G)
3237 strcat (buffer, " keep_g");
3239 if (flags & BSF_WEAK)
3240 strcat (buffer, " weak");
3242 if (flags & BSF_SECTION_SYM)
3243 strcat (buffer, " section-sym");
3245 if (flags & BSF_OLD_COMMON)
3246 strcat (buffer, " old-common");
3248 if (flags & BSF_NOT_AT_END)
3249 strcat (buffer, " not-at-end");
3251 if (flags & BSF_CONSTRUCTOR)
3252 strcat (buffer, " constructor");
3254 if (flags & BSF_WARNING)
3255 strcat (buffer, " warning");
3257 if (flags & BSF_INDIRECT)
3258 strcat (buffer, " indirect");
3260 if (flags & BSF_FILE)
3261 strcat (buffer, " file");
3263 if (flags & DYNAMIC)
3264 strcat (buffer, " dynamic");
3266 if (flags & ~(BSF_LOCAL
3281 strcat (buffer, " unknown-bits");
3287 /* Canonicalize the relocs. */
3290 elf_canonicalize_reloc (abfd, section, relptr, symbols)
3299 if (! elf_slurp_reloc_table (abfd, section, symbols))
3302 tblptr = section->relocation;
3303 for (i = 0; i < section->reloc_count; i++)
3304 *relptr++ = tblptr++;
3308 return section->reloc_count;
3312 elf_get_symtab (abfd, alocation)
3314 asymbol **alocation;
3316 long symcount = elf_slurp_symbol_table (abfd, alocation, false);
3319 bfd_get_symcount (abfd) = symcount;
3324 elf_canonicalize_dynamic_symtab (abfd, alocation)
3326 asymbol **alocation;
3328 return elf_slurp_symbol_table (abfd, alocation, true);
3332 elf_make_empty_symbol (abfd)
3335 elf_symbol_type *newsym;
3337 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
3340 bfd_set_error (bfd_error_no_memory);
3345 newsym->symbol.the_bfd = abfd;
3346 return &newsym->symbol;
3351 elf_get_symbol_info (ignore_abfd, symbol, ret)
3356 bfd_symbol_info (symbol, ret);
3360 elf_get_lineno (ignore_abfd, symbol)
3364 fprintf (stderr, "elf_get_lineno unimplemented\n");
3371 elf_set_arch_mach (abfd, arch, machine)
3373 enum bfd_architecture arch;
3374 unsigned long machine;
3376 /* If this isn't the right architecture for this backend, and this
3377 isn't the generic backend, fail. */
3378 if (arch != get_elf_backend_data (abfd)->arch
3379 && arch != bfd_arch_unknown
3380 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
3383 return bfd_default_set_arch_mach (abfd, arch, machine);
3387 elf_find_nearest_line (abfd,
3398 CONST char **filename_ptr;
3399 CONST char **functionname_ptr;
3400 unsigned int *line_ptr;
3406 elf_sizeof_headers (abfd, reloc)
3412 ret = sizeof (Elf_External_Ehdr);
3414 ret += get_program_header_size (abfd, (Elf_Internal_Shdr **) NULL, 0,
3420 elf_set_section_contents (abfd, section, location, offset, count)
3425 bfd_size_type count;
3427 Elf_Internal_Shdr *hdr;
3429 if (! abfd->output_has_begun
3430 && ! elf_compute_section_file_positions (abfd,
3431 (struct bfd_link_info *) NULL))
3434 hdr = &elf_section_data (section)->this_hdr;
3436 if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
3438 if (bfd_write (location, 1, count, abfd) != count)
3445 elf_no_info_to_howto (abfd, cache_ptr, dst)
3448 Elf_Internal_Rela *dst;
3450 fprintf (stderr, "elf RELA relocation support for target machine unimplemented\n");
3456 elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
3459 Elf_Internal_Rel *dst;
3461 fprintf (stderr, "elf REL relocation support for target machine unimplemented\n");
3467 /* Core file support */
3469 #ifdef HAVE_PROCFS /* Some core file support requires host /proc files */
3470 #include <sys/procfs.h>
3472 #define bfd_prstatus(abfd, descdata, descsz, filepos) true
3473 #define bfd_fpregset(abfd, descdata, descsz, filepos) true
3474 #define bfd_prpsinfo(abfd, descdata, descsz, filepos) true
3480 bfd_prstatus (abfd, descdata, descsz, filepos)
3487 prstatus_t *status = (prstatus_t *) 0;
3489 if (descsz == sizeof (prstatus_t))
3491 newsect = bfd_make_section (abfd, ".reg");
3492 if (newsect == NULL)
3494 newsect->_raw_size = sizeof (status->pr_reg);
3495 newsect->filepos = filepos + (long) &status->pr_reg;
3496 newsect->flags = SEC_HAS_CONTENTS;
3497 newsect->alignment_power = 2;
3498 if ((core_prstatus (abfd) = bfd_alloc (abfd, descsz)) != NULL)
3500 memcpy (core_prstatus (abfd), descdata, descsz);
3506 /* Stash a copy of the prpsinfo structure away for future use. */
3509 bfd_prpsinfo (abfd, descdata, descsz, filepos)
3515 if (descsz == sizeof (prpsinfo_t))
3517 if ((core_prpsinfo (abfd) = bfd_alloc (abfd, descsz)) == NULL)
3519 bfd_set_error (bfd_error_no_memory);
3522 memcpy (core_prpsinfo (abfd), descdata, descsz);
3528 bfd_fpregset (abfd, descdata, descsz, filepos)
3536 newsect = bfd_make_section (abfd, ".reg2");
3537 if (newsect == NULL)
3539 newsect->_raw_size = descsz;
3540 newsect->filepos = filepos;
3541 newsect->flags = SEC_HAS_CONTENTS;
3542 newsect->alignment_power = 2;
3546 #endif /* HAVE_PROCFS */
3548 /* Return a pointer to the args (including the command name) that were
3549 seen by the program that generated the core dump. Note that for
3550 some reason, a spurious space is tacked onto the end of the args
3551 in some (at least one anyway) implementations, so strip it off if
3555 elf_core_file_failing_command (abfd)
3559 if (core_prpsinfo (abfd))
3561 prpsinfo_t *p = core_prpsinfo (abfd);
3562 char *scan = p->pr_psargs;
3567 if ((scan > p->pr_psargs) && (*scan == ' '))
3571 return p->pr_psargs;
3577 /* Return the number of the signal that caused the core dump. Presumably,
3578 since we have a core file, we got a signal of some kind, so don't bother
3579 checking the other process status fields, just return the signal number.
3583 elf_core_file_failing_signal (abfd)
3587 if (core_prstatus (abfd))
3589 return ((prstatus_t *) (core_prstatus (abfd)))->pr_cursig;
3595 /* Check to see if the core file could reasonably be expected to have
3596 come for the current executable file. Note that by default we return
3597 true unless we find something that indicates that there might be a
3602 elf_core_file_matches_executable_p (core_bfd, exec_bfd)
3611 /* First, xvecs must match since both are ELF files for the same target. */
3613 if (core_bfd->xvec != exec_bfd->xvec)
3615 bfd_set_error (bfd_error_system_call);
3621 /* If no prpsinfo, just return true. Otherwise, grab the last component
3622 of the exec'd pathname from the prpsinfo. */
3624 if (core_prpsinfo (core_bfd))
3626 corename = (((prpsinfo_t *) core_prpsinfo (core_bfd))->pr_fname);
3633 /* Find the last component of the executable pathname. */
3635 if ((execname = strrchr (exec_bfd->filename, '/')) != NULL)
3641 execname = (char *) exec_bfd->filename;
3644 /* See if they match */
3646 return strcmp (execname, corename) ? false : true;
3652 #endif /* HAVE_PROCFS */
3655 /* ELF core files contain a segment of type PT_NOTE, that holds much of
3656 the information that would normally be available from the /proc interface
3657 for the process, at the time the process dumped core. Currently this
3658 includes copies of the prstatus, prpsinfo, and fpregset structures.
3660 Since these structures are potentially machine dependent in size and
3661 ordering, bfd provides two levels of support for them. The first level,
3662 available on all machines since it does not require that the host
3663 have /proc support or the relevant include files, is to create a bfd
3664 section for each of the prstatus, prpsinfo, and fpregset structures,
3665 without any interpretation of their contents. With just this support,
3666 the bfd client will have to interpret the structures itself. Even with
3667 /proc support, it might want these full structures for it's own reasons.
3669 In the second level of support, where HAVE_PROCFS is defined, bfd will
3670 pick apart the structures to gather some additional information that
3671 clients may want, such as the general register set, the name of the
3672 exec'ed file and its arguments, the signal (if any) that caused the
3678 elf_corefile_note (abfd, hdr)
3680 Elf_Internal_Phdr *hdr;
3682 Elf_External_Note *x_note_p; /* Elf note, external form */
3683 Elf_Internal_Note i_note; /* Elf note, internal form */
3684 char *buf = NULL; /* Entire note segment contents */
3685 char *namedata; /* Name portion of the note */
3686 char *descdata; /* Descriptor portion of the note */
3687 char *sectname; /* Name to use for new section */
3688 long filepos; /* File offset to descriptor data */
3691 if (hdr->p_filesz > 0
3692 && (buf = (char *) malloc (hdr->p_filesz)) != NULL
3693 && bfd_seek (abfd, hdr->p_offset, SEEK_SET) != -1
3694 && bfd_read ((PTR) buf, hdr->p_filesz, 1, abfd) == hdr->p_filesz)
3696 x_note_p = (Elf_External_Note *) buf;
3697 while ((char *) x_note_p < (buf + hdr->p_filesz))
3699 i_note.namesz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->namesz);
3700 i_note.descsz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->descsz);
3701 i_note.type = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->type);
3702 namedata = x_note_p->name;
3703 descdata = namedata + BFD_ALIGN (i_note.namesz, 4);
3704 filepos = hdr->p_offset + (descdata - buf);
3705 switch (i_note.type)
3708 /* process descdata as prstatus info */
3709 if (! bfd_prstatus (abfd, descdata, i_note.descsz, filepos))
3711 sectname = ".prstatus";
3714 /* process descdata as fpregset info */
3715 if (! bfd_fpregset (abfd, descdata, i_note.descsz, filepos))
3717 sectname = ".fpregset";
3720 /* process descdata as prpsinfo */
3721 if (! bfd_prpsinfo (abfd, descdata, i_note.descsz, filepos))
3723 sectname = ".prpsinfo";
3726 /* Unknown descriptor, just ignore it. */
3730 if (sectname != NULL)
3732 newsect = bfd_make_section (abfd, sectname);
3733 if (newsect == NULL)
3735 newsect->_raw_size = i_note.descsz;
3736 newsect->filepos = filepos;
3737 newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3738 newsect->alignment_power = 2;
3740 x_note_p = (Elf_External_Note *)
3741 (descdata + BFD_ALIGN (i_note.descsz, 4));
3748 else if (hdr->p_filesz > 0)
3750 bfd_set_error (bfd_error_no_memory);
3757 /* Core files are simply standard ELF formatted files that partition
3758 the file using the execution view of the file (program header table)
3759 rather than the linking view. In fact, there is no section header
3760 table in a core file.
3762 The process status information (including the contents of the general
3763 register set) and the floating point register set are stored in a
3764 segment of type PT_NOTE. We handcraft a couple of extra bfd sections
3765 that allow standard bfd access to the general registers (.reg) and the
3766 floating point registers (.reg2).
3771 elf_core_file_p (abfd)
3774 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
3775 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
3776 Elf_External_Phdr x_phdr; /* Program header table entry, external form */
3777 Elf_Internal_Phdr *i_phdrp; /* Program header table, internal form */
3778 unsigned int phindex;
3779 struct elf_backend_data *ebd;
3781 /* Read in the ELF header in external format. */
3783 if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
3785 if (bfd_get_error () != bfd_error_system_call)
3786 bfd_set_error (bfd_error_wrong_format);
3790 /* Now check to see if we have a valid ELF file, and one that BFD can
3791 make use of. The magic number must match, the address size ('class')
3792 and byte-swapping must match our XVEC entry, and it must have a
3793 program header table (FIXME: See comments re segments at top of this
3796 if (elf_file_p (&x_ehdr) == false)
3799 bfd_set_error (bfd_error_wrong_format);
3803 /* FIXME, Check EI_VERSION here ! */
3807 int desired_address_size = ELFCLASS32;
3810 int desired_address_size = ELFCLASS64;
3813 if (x_ehdr.e_ident[EI_CLASS] != desired_address_size)
3817 /* Switch xvec to match the specified byte order. */
3818 switch (x_ehdr.e_ident[EI_DATA])
3820 case ELFDATA2MSB: /* Big-endian */
3821 if (abfd->xvec->byteorder_big_p == false)
3824 case ELFDATA2LSB: /* Little-endian */
3825 if (abfd->xvec->byteorder_big_p == true)
3828 case ELFDATANONE: /* No data encoding specified */
3829 default: /* Unknown data encoding specified */
3833 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
3834 the tdata pointer in the bfd. */
3837 (struct elf_obj_tdata *) bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
3838 if (elf_tdata (abfd) == NULL)
3840 bfd_set_error (bfd_error_no_memory);
3844 /* FIXME, `wrong' returns from this point onward, leak memory. */
3846 /* Now that we know the byte order, swap in the rest of the header */
3847 i_ehdrp = elf_elfheader (abfd);
3848 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
3850 elf_debug_file (i_ehdrp);
3853 ebd = get_elf_backend_data (abfd);
3855 /* Check that the ELF e_machine field matches what this particular
3856 BFD format expects. */
3857 if (ebd->elf_machine_code != i_ehdrp->e_machine
3858 && (ebd->elf_machine_alt1 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt1)
3859 && (ebd->elf_machine_alt2 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt2))
3861 const bfd_target * const *target_ptr;
3863 if (ebd->elf_machine_code != EM_NONE)
3866 /* This is the generic ELF target. Let it match any ELF target
3867 for which we do not have a specific backend. */
3868 for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
3870 struct elf_backend_data *back;
3872 if ((*target_ptr)->flavour != bfd_target_elf_flavour)
3874 back = (struct elf_backend_data *) (*target_ptr)->backend_data;
3875 if (back->elf_machine_code == i_ehdrp->e_machine)
3877 /* target_ptr is an ELF backend which matches this
3878 object file, so reject the generic ELF target. */
3884 /* If there is no program header, or the type is not a core file, then
3886 if (i_ehdrp->e_phoff == 0 || i_ehdrp->e_type != ET_CORE)
3889 /* Allocate space for a copy of the program header table in
3890 internal form, seek to the program header table in the file,
3891 read it in, and convert it to internal form. As a simple sanity
3892 check, verify that the what BFD thinks is the size of each program
3893 header table entry actually matches the size recorded in the file. */
3895 if (i_ehdrp->e_phentsize != sizeof (x_phdr))
3897 i_phdrp = (Elf_Internal_Phdr *)
3898 bfd_alloc (abfd, sizeof (*i_phdrp) * i_ehdrp->e_phnum);
3901 bfd_set_error (bfd_error_no_memory);
3904 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) == -1)
3906 for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3908 if (bfd_read ((PTR) & x_phdr, sizeof (x_phdr), 1, abfd)
3911 elf_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
3914 /* Once all of the program headers have been read and converted, we
3915 can start processing them. */
3917 for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3919 bfd_section_from_phdr (abfd, i_phdrp + phindex, phindex);
3920 if ((i_phdrp + phindex)->p_type == PT_NOTE)
3922 if (! elf_corefile_note (abfd, i_phdrp + phindex))
3927 /* Remember the entry point specified in the ELF file header. */
3929 bfd_get_start_address (abfd) = i_ehdrp->e_entry;
3934 /* ELF linker code. */
3936 static boolean elf_link_add_object_symbols
3937 PARAMS ((bfd *, struct bfd_link_info *));
3938 static boolean elf_link_add_archive_symbols
3939 PARAMS ((bfd *, struct bfd_link_info *));
3940 static Elf_Internal_Rela *elf_link_read_relocs
3941 PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
3942 static boolean elf_export_symbol
3943 PARAMS ((struct elf_link_hash_entry *, PTR));
3944 static boolean elf_adjust_dynamic_symbol
3945 PARAMS ((struct elf_link_hash_entry *, PTR));
3947 /* This struct is used to pass information to routines called via
3948 elf_link_hash_traverse which must return failure. */
3950 struct elf_info_failed
3953 struct bfd_link_info *info;
3956 /* Given an ELF BFD, add symbols to the global hash table as
3960 elf_bfd_link_add_symbols (abfd, info)
3962 struct bfd_link_info *info;
3966 switch (bfd_get_format (abfd))
3969 return elf_link_add_object_symbols (abfd, info);
3971 first = bfd_openr_next_archived_file (abfd, (bfd *) NULL);
3974 /* It's OK to have an empty archive. */
3977 if (! bfd_check_format (first, bfd_object))
3979 if (bfd_get_flavour (first) != bfd_target_elf_flavour)
3981 /* On Linux, we may have an a.out archive which got
3982 recognized as an ELF archive. Therefore, we treat all
3983 archives as though they were actually of the flavour of
3984 their first element. */
3985 return (*first->xvec->_bfd_link_add_symbols) (abfd, info);
3987 return elf_link_add_archive_symbols (abfd, info);
3989 bfd_set_error (bfd_error_wrong_format);
3994 /* Add symbols from an ELF archive file to the linker hash table. We
3995 don't use _bfd_generic_link_add_archive_symbols because of a
3996 problem which arises on UnixWare. The UnixWare libc.so is an
3997 archive which includes an entry libc.so.1 which defines a bunch of
3998 symbols. The libc.so archive also includes a number of other
3999 object files, which also define symbols, some of which are the same
4000 as those defined in libc.so.1. Correct linking requires that we
4001 consider each object file in turn, and include it if it defines any
4002 symbols we need. _bfd_generic_link_add_archive_symbols does not do
4003 this; it looks through the list of undefined symbols, and includes
4004 any object file which defines them. When this algorithm is used on
4005 UnixWare, it winds up pulling in libc.so.1 early and defining a
4006 bunch of symbols. This means that some of the other objects in the
4007 archive are not included in the link, which is incorrect since they
4008 precede libc.so.1 in the archive.
4010 Fortunately, ELF archive handling is simpler than that done by
4011 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
4012 oddities. In ELF, if we find a symbol in the archive map, and the
4013 symbol is currently undefined, we know that we must pull in that
4016 Unfortunately, we do have to make multiple passes over the symbol
4017 table until nothing further is resolved. */
4020 elf_link_add_archive_symbols (abfd, info)
4022 struct bfd_link_info *info;
4025 boolean *defined = NULL;
4026 boolean *included = NULL;
4030 if (! bfd_has_map (abfd))
4032 /* An empty archive is a special case. */
4033 if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL)
4035 bfd_set_error (bfd_error_no_symbols);
4039 /* Keep track of all symbols we know to be already defined, and all
4040 files we know to be already included. This is to speed up the
4041 second and subsequent passes. */
4042 c = bfd_ardata (abfd)->symdef_count;
4045 defined = (boolean *) malloc (c * sizeof (boolean));
4046 included = (boolean *) malloc (c * sizeof (boolean));
4047 if (defined == (boolean *) NULL || included == (boolean *) NULL)
4049 bfd_set_error (bfd_error_no_memory);
4052 memset (defined, 0, c * sizeof (boolean));
4053 memset (included, 0, c * sizeof (boolean));
4055 symdefs = bfd_ardata (abfd)->symdefs;
4068 symdefend = symdef + c;
4069 for (i = 0; symdef < symdefend; symdef++, i++)
4071 struct elf_link_hash_entry *h;
4073 struct bfd_link_hash_entry *undefs_tail;
4076 if (defined[i] || included[i])
4078 if (symdef->file_offset == last)
4084 h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
4085 false, false, false);
4086 if (h == (struct elf_link_hash_entry *) NULL)
4088 if (h->root.type != bfd_link_hash_undefined)
4094 /* We need to include this archive member. */
4096 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
4097 if (element == (bfd *) NULL)
4100 if (! bfd_check_format (element, bfd_object))
4103 /* Doublecheck that we have not included this object
4104 already--it should be impossible, but there may be
4105 something wrong with the archive. */
4106 if (element->archive_pass != 0)
4108 bfd_set_error (bfd_error_bad_value);
4111 element->archive_pass = 1;
4113 undefs_tail = info->hash->undefs_tail;
4115 if (! (*info->callbacks->add_archive_element) (info, element,
4118 if (! elf_link_add_object_symbols (element, info))
4121 /* If there are any new undefined symbols, we need to make
4122 another pass through the archive in order to see whether
4123 they can be defined. FIXME: This isn't perfect, because
4124 common symbols wind up on undefs_tail and because an
4125 undefined symbol which is defined later on in this pass
4126 does not require another pass. This isn't a bug, but it
4127 does make the code less efficient than it could be. */
4128 if (undefs_tail != info->hash->undefs_tail)
4131 /* Look backward to mark all symbols from this object file
4132 which we have already seen in this pass. */
4136 included[mark] = true;
4141 while (symdefs[mark].file_offset == symdef->file_offset);
4143 /* We mark subsequent symbols from this object file as we go
4144 on through the loop. */
4145 last = symdef->file_offset;
4156 if (defined != (boolean *) NULL)
4158 if (included != (boolean *) NULL)
4163 /* Record a new dynamic symbol. We record the dynamic symbols as we
4164 read the input files, since we need to have a list of all of them
4165 before we can determine the final sizes of the output sections.
4166 Note that we may actually call this function even though we are not
4167 going to output any dynamic symbols; in some cases we know that a
4168 symbol should be in the dynamic symbol table, but only if there is
4172 elf_link_record_dynamic_symbol (info, h)
4173 struct bfd_link_info *info;
4174 struct elf_link_hash_entry *h;
4176 if (h->dynindx == -1)
4178 struct bfd_strtab_hash *dynstr;
4180 h->dynindx = elf_hash_table (info)->dynsymcount;
4181 ++elf_hash_table (info)->dynsymcount;
4183 dynstr = elf_hash_table (info)->dynstr;
4186 /* Create a strtab to hold the dynamic symbol names. */
4187 elf_hash_table (info)->dynstr = dynstr = elf_stringtab_init ();
4192 h->dynstr_index = ((unsigned long)
4193 _bfd_stringtab_add (dynstr, h->root.root.string,
4195 if (h->dynstr_index == (unsigned long) -1)
4202 /* Add symbols from an ELF object file to the linker hash table. */
4205 elf_link_add_object_symbols (abfd, info)
4207 struct bfd_link_info *info;
4209 boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
4210 const Elf_Internal_Sym *,
4211 const char **, flagword *,
4212 asection **, bfd_vma *));
4213 boolean (*check_relocs) PARAMS ((bfd *, struct bfd_link_info *,
4214 asection *, const Elf_Internal_Rela *));
4216 Elf_Internal_Shdr *hdr;
4220 Elf_External_Sym *buf = NULL;
4221 struct elf_link_hash_entry **sym_hash;
4223 Elf_External_Dyn *dynbuf = NULL;
4224 struct elf_link_hash_entry *weaks;
4225 Elf_External_Sym *esym;
4226 Elf_External_Sym *esymend;
4228 add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
4229 collect = get_elf_backend_data (abfd)->collect;
4231 /* A stripped shared library might only have a dynamic symbol table,
4232 not a regular symbol table. In that case we can still go ahead
4233 and link using the dynamic symbol table. */
4234 if (elf_onesymtab (abfd) == 0
4235 && elf_dynsymtab (abfd) != 0)
4237 elf_onesymtab (abfd) = elf_dynsymtab (abfd);
4238 elf_tdata (abfd)->symtab_hdr = elf_tdata (abfd)->dynsymtab_hdr;
4241 hdr = &elf_tdata (abfd)->symtab_hdr;
4242 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
4244 /* The sh_info field of the symtab header tells us where the
4245 external symbols start. We don't care about the local symbols at
4247 if (elf_bad_symtab (abfd))
4249 extsymcount = symcount;
4254 extsymcount = symcount - hdr->sh_info;
4255 extsymoff = hdr->sh_info;
4258 buf = (Elf_External_Sym *) malloc (extsymcount * sizeof (Elf_External_Sym));
4259 if (buf == NULL && extsymcount != 0)
4261 bfd_set_error (bfd_error_no_memory);
4265 /* We store a pointer to the hash table entry for each external
4267 sym_hash = ((struct elf_link_hash_entry **)
4269 extsymcount * sizeof (struct elf_link_hash_entry *)));
4270 if (sym_hash == NULL)
4272 bfd_set_error (bfd_error_no_memory);
4275 elf_sym_hashes (abfd) = sym_hash;
4277 if (elf_elfheader (abfd)->e_type != ET_DYN)
4281 /* If we are creating a shared library, create all the dynamic
4282 sections immediately. We need to attach them to something,
4283 so we attach them to this BFD, provided it is the right
4284 format. FIXME: If there are no input BFD's of the same
4285 format as the output, we can't make a shared library. */
4287 && ! elf_hash_table (info)->dynamic_sections_created
4288 && abfd->xvec == info->hash->creator)
4290 if (! elf_link_create_dynamic_sections (abfd, info))
4298 bfd_size_type oldsize;
4299 bfd_size_type strindex;
4303 /* You can't use -r against a dynamic object. Also, there's no
4304 hope of using a dynamic object which does not exactly match
4305 the format of the output file. */
4306 if (info->relocateable
4307 || info->hash->creator != abfd->xvec)
4309 bfd_set_error (bfd_error_invalid_operation);
4313 /* Find the name to use in a DT_NEEDED entry that refers to this
4314 object. If the object has a DT_SONAME entry, we use it.
4315 Otherwise, if the generic linker stuck something in
4316 elf_dt_needed_name, we use that. Otherwise, we just use the
4318 name = bfd_get_filename (abfd);
4319 if (elf_dt_needed_name (abfd) != NULL)
4320 name = elf_dt_needed_name (abfd);
4321 s = bfd_get_section_by_name (abfd, ".dynamic");
4324 Elf_External_Dyn *extdyn;
4325 Elf_External_Dyn *extdynend;
4327 dynbuf = (Elf_External_Dyn *) malloc (s->_raw_size);
4330 bfd_set_error (bfd_error_no_memory);
4334 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
4335 (file_ptr) 0, s->_raw_size))
4339 extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
4340 for (; extdyn < extdynend; extdyn++)
4342 Elf_Internal_Dyn dyn;
4344 elf_swap_dyn_in (abfd, extdyn, &dyn);
4345 if (dyn.d_tag == DT_SONAME)
4350 elfsec = elf_section_from_bfd_section (abfd, s);
4353 link = elf_elfsections (abfd)[elfsec]->sh_link;
4354 name = elf_string_from_elf_section (abfd, link,
4359 if (dyn.d_tag == DT_NEEDED)
4360 elf_hash_table (info)->saw_needed = true;
4367 /* We do not want to include any of the sections in a dynamic
4368 object in the output file. We hack by simply clobbering the
4369 list of sections in the BFD. This could be handled more
4370 cleanly by, say, a new section flag; the existing
4371 SEC_NEVER_LOAD flag is not the one we want, because that one
4372 still implies that the section takes up space in the output
4374 abfd->sections = NULL;
4376 /* If this is the first dynamic object found in the link, create
4377 the special sections required for dynamic linking. */
4378 if (! elf_hash_table (info)->dynamic_sections_created)
4380 if (! elf_link_create_dynamic_sections (abfd, info))
4384 /* Add a DT_NEEDED entry for this dynamic object. */
4385 oldsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
4386 strindex = _bfd_stringtab_add (elf_hash_table (info)->dynstr, name,
4388 if (strindex == (bfd_size_type) -1)
4391 if (oldsize == _bfd_stringtab_size (elf_hash_table (info)->dynstr))
4394 Elf_External_Dyn *dyncon, *dynconend;
4396 /* The hash table size did not change, which means that the
4397 dynamic object name was already entered. If we have
4398 already included this dynamic object in the link, just
4399 ignore it. There is no reason to include a particular
4400 dynamic object more than once. */
4401 sdyn = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
4403 BFD_ASSERT (sdyn != NULL);
4405 dyncon = (Elf_External_Dyn *) sdyn->contents;
4406 dynconend = (Elf_External_Dyn *) (sdyn->contents + sdyn->_raw_size);
4407 for (; dyncon < dynconend; dyncon++)
4409 Elf_Internal_Dyn dyn;
4411 elf_swap_dyn_in (elf_hash_table (info)->dynobj, dyncon, &dyn);
4412 if (dyn.d_tag == DT_NEEDED
4413 && dyn.d_un.d_val == strindex)
4422 if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
4427 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
4429 || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
4430 != extsymcount * sizeof (Elf_External_Sym)))
4435 esymend = buf + extsymcount;
4436 for (esym = buf; esym < esymend; esym++, sym_hash++)
4438 Elf_Internal_Sym sym;
4444 struct elf_link_hash_entry *h = NULL;
4447 elf_swap_symbol_in (abfd, esym, &sym);
4449 flags = BSF_NO_FLAGS;
4451 value = sym.st_value;
4454 bind = ELF_ST_BIND (sym.st_info);
4455 if (bind == STB_LOCAL)
4457 /* This should be impossible, since ELF requires that all
4458 global symbols follow all local symbols, and that sh_info
4459 point to the first global symbol. Unfortunatealy, Irix 5
4463 else if (bind == STB_GLOBAL)
4465 if (sym.st_shndx != SHN_UNDEF
4466 && sym.st_shndx != SHN_COMMON)
4471 else if (bind == STB_WEAK)
4475 /* Leave it up to the processor backend. */
4478 if (sym.st_shndx == SHN_UNDEF)
4479 sec = bfd_und_section_ptr;
4480 else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
4482 sec = section_from_elf_index (abfd, sym.st_shndx);
4486 sec = bfd_abs_section_ptr;
4488 else if (sym.st_shndx == SHN_ABS)
4489 sec = bfd_abs_section_ptr;
4490 else if (sym.st_shndx == SHN_COMMON)
4492 sec = bfd_com_section_ptr;
4493 /* What ELF calls the size we call the value. What ELF
4494 calls the value we call the alignment. */
4495 value = sym.st_size;
4499 /* Leave it up to the processor backend. */
4502 name = elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
4503 if (name == (const char *) NULL)
4506 if (add_symbol_hook)
4508 if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
4512 /* The hook function sets the name to NULL if this symbol
4513 should be skipped for some reason. */
4514 if (name == (const char *) NULL)
4518 /* Sanity check that all possibilities were handled. */
4519 if (sec == (asection *) NULL)
4521 bfd_set_error (bfd_error_bad_value);
4525 if (bfd_is_und_section (sec)
4526 || bfd_is_com_section (sec))
4531 if (info->hash->creator->flavour == bfd_target_elf_flavour)
4533 /* We need to look up the symbol now in order to get some of
4534 the dynamic object handling right. We pass the hash
4535 table entry in to _bfd_generic_link_add_one_symbol so
4536 that it does not have to look it up again. */
4537 h = elf_link_hash_lookup (elf_hash_table (info), name,
4538 true, false, false);
4543 /* If we are looking at a dynamic object, and this is a
4544 definition, we need to see if it has already been defined
4545 by some other object. If it has, we want to use the
4546 existing definition, and we do not want to report a
4547 multiple symbol definition error; we do this by
4548 clobbering sec to be bfd_und_section_ptr. */
4549 if (dynamic && definition)
4551 if (h->root.type == bfd_link_hash_defined
4552 || h->root.type == bfd_link_hash_defweak)
4553 sec = bfd_und_section_ptr;
4556 /* Similarly, if we are not looking at a dynamic object, and
4557 we have a definition, we want to override any definition
4558 we may have from a dynamic object. Symbols from regular
4559 files always take precedence over symbols from dynamic
4560 objects, even if they are defined after the dynamic
4561 object in the link. */
4564 && (h->root.type == bfd_link_hash_defined
4565 || h->root.type == bfd_link_hash_defweak)
4566 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
4567 && (bfd_get_flavour (h->root.u.def.section->owner)
4568 == bfd_target_elf_flavour)
4569 && (elf_elfheader (h->root.u.def.section->owner)->e_type
4572 /* Change the hash table entry to undefined, and let
4573 _bfd_generic_link_add_one_symbol do the right thing
4574 with the new definition. */
4575 h->root.type = bfd_link_hash_undefined;
4576 h->root.u.undef.abfd = h->root.u.def.section->owner;
4580 if (! (_bfd_generic_link_add_one_symbol
4581 (info, abfd, name, flags, sec, value, (const char *) NULL,
4582 false, collect, (struct bfd_link_hash_entry **) sym_hash)))
4587 && (flags & BSF_WEAK) != 0
4588 && ELF_ST_TYPE (sym.st_info) != STT_FUNC
4589 && info->hash->creator->flavour == bfd_target_elf_flavour
4590 && (*sym_hash)->weakdef == NULL)
4592 /* Keep a list of all weak defined non function symbols from
4593 a dynamic object, using the weakdef field. Later in this
4594 function we will set the weakdef field to the correct
4595 value. We only put non-function symbols from dynamic
4596 objects on this list, because that happens to be the only
4597 time we need to know the normal symbol corresponding to a
4598 weak symbol, and the information is time consuming to
4599 figure out. If the weakdef field is not already NULL,
4600 then this symbol was already defined by some previous
4601 dynamic object, and we will be using that previous
4602 definition anyhow. */
4604 (*sym_hash)->weakdef = weaks;
4608 /* Get the alignment of a common symbol. */
4609 if (sym.st_shndx == SHN_COMMON
4610 && (*sym_hash)->root.type == bfd_link_hash_common)
4611 (*sym_hash)->root.u.c.p->alignment_power = bfd_log2 (sym.st_value);
4613 if (info->hash->creator->flavour == bfd_target_elf_flavour)
4619 /* Remember the symbol size and type. */
4620 if (sym.st_size != 0)
4622 /* FIXME: We should probably somehow give a warning if
4623 the symbol size changes. */
4624 h->size = sym.st_size;
4626 if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE)
4628 /* FIXME: We should probably somehow give a warning if
4629 the symbol type changes. */
4630 h->type = ELF_ST_TYPE (sym.st_info);
4633 /* Set a flag in the hash table entry indicating the type of
4634 reference or definition we just found. Keep a count of
4635 the number of dynamic symbols we find. A dynamic symbol
4636 is one which is referenced or defined by both a regular
4637 object and a shared object, or one which is referenced or
4638 defined by more than one shared object. */
4639 old_flags = h->elf_link_hash_flags;
4644 new_flag = ELF_LINK_HASH_REF_REGULAR;
4646 new_flag = ELF_LINK_HASH_DEF_REGULAR;
4648 || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
4649 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
4655 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
4657 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
4658 if ((old_flags & new_flag) != 0
4659 || (old_flags & (ELF_LINK_HASH_DEF_REGULAR
4660 | ELF_LINK_HASH_REF_REGULAR)) != 0)
4664 h->elf_link_hash_flags |= new_flag;
4665 if (dynsym && h->dynindx == -1)
4667 if (! elf_link_record_dynamic_symbol (info, h))
4673 /* Now set the weakdefs field correctly for all the weak defined
4674 symbols we found. The only way to do this is to search all the
4675 symbols. Since we only need the information for non functions in
4676 dynamic objects, that's the only time we actually put anything on
4677 the list WEAKS. We need this information so that if a regular
4678 object refers to a symbol defined weakly in a dynamic object, the
4679 real symbol in the dynamic object is also put in the dynamic
4680 symbols; we also must arrange for both symbols to point to the
4681 same memory location. We could handle the general case of symbol
4682 aliasing, but a general symbol alias can only be generated in
4683 assembler code, handling it correctly would be very time
4684 consuming, and other ELF linkers don't handle general aliasing
4686 while (weaks != NULL)
4688 struct elf_link_hash_entry *hlook;
4691 struct elf_link_hash_entry **hpp;
4692 struct elf_link_hash_entry **hppend;
4695 weaks = hlook->weakdef;
4696 hlook->weakdef = NULL;
4698 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
4699 || hlook->root.type == bfd_link_hash_defweak);
4700 slook = hlook->root.u.def.section;
4701 vlook = hlook->root.u.def.value;
4703 hpp = elf_sym_hashes (abfd);
4704 hppend = hpp + extsymcount;
4705 for (; hpp < hppend; hpp++)
4707 struct elf_link_hash_entry *h;
4710 if (h != NULL && h != hlook
4711 && (h->root.type == bfd_link_hash_defined
4712 || h->root.type == bfd_link_hash_defweak)
4713 && h->root.u.def.section == slook
4714 && h->root.u.def.value == vlook)
4718 /* If the weak definition is in the list of dynamic
4719 symbols, make sure the real definition is put there
4721 if (hlook->dynindx != -1
4722 && h->dynindx == -1)
4724 if (! elf_link_record_dynamic_symbol (info, h))
4739 /* If this object is the same format as the output object, and it is
4740 not a shared library, then let the backend look through the
4743 This is required to build global offset table entries and to
4744 arrange for dynamic relocs. It is not required for the
4745 particular common case of linking non PIC code, even when linking
4746 against shared libraries, but unfortunately there is no way of
4747 knowing whether an object file has been compiled PIC or not.
4748 Looking through the relocs is not particularly time consuming.
4749 The problem is that we must either (1) keep the relocs in memory,
4750 which causes the linker to require additional runtime memory or
4751 (2) read the relocs twice from the input file, which wastes time.
4752 This would be a good case for using mmap.
4754 I have no idea how to handle linking PIC code into a file of a
4755 different format. It probably can't be done. */
4756 check_relocs = get_elf_backend_data (abfd)->check_relocs;
4758 && abfd->xvec == info->hash->creator
4759 && check_relocs != NULL)
4763 for (o = abfd->sections; o != NULL; o = o->next)
4765 Elf_Internal_Rela *internal_relocs;
4768 if ((o->flags & SEC_RELOC) == 0
4769 || o->reloc_count == 0)
4772 /* I believe we can ignore the relocs for any section which
4773 does not form part of the final process image, such as a
4774 debugging section. */
4775 if ((o->flags & SEC_ALLOC) == 0)
4778 internal_relocs = elf_link_read_relocs (abfd, o, (PTR) NULL,
4779 (Elf_Internal_Rela *) NULL,
4781 if (internal_relocs == NULL)
4784 ok = (*check_relocs) (abfd, info, o, internal_relocs);
4786 if (! info->keep_memory)
4787 free (internal_relocs);
4804 /* Create some sections which will be filled in with dynamic linking
4805 information. ABFD is an input file which requires dynamic sections
4806 to be created. The dynamic sections take up virtual memory space
4807 when the final executable is run, so we need to create them before
4808 addresses are assigned to the output sections. We work out the
4809 actual contents and size of these sections later. */
4812 elf_link_create_dynamic_sections (abfd, info)
4814 struct bfd_link_info *info;
4817 register asection *s;
4818 struct elf_link_hash_entry *h;
4819 struct elf_backend_data *bed;
4821 if (elf_hash_table (info)->dynamic_sections_created)
4824 /* Make sure that all dynamic sections use the same input BFD. */
4825 if (elf_hash_table (info)->dynobj == NULL)
4826 elf_hash_table (info)->dynobj = abfd;
4828 abfd = elf_hash_table (info)->dynobj;
4830 /* Note that we set the SEC_IN_MEMORY flag for all of these
4832 flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
4834 /* A dynamically linked executable has a .interp section, but a
4835 shared library does not. */
4838 s = bfd_make_section (abfd, ".interp");
4840 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
4844 s = bfd_make_section (abfd, ".dynsym");
4846 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
4847 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4850 s = bfd_make_section (abfd, ".dynstr");
4852 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
4855 /* Create a strtab to hold the dynamic symbol names. */
4856 if (elf_hash_table (info)->dynstr == NULL)
4858 elf_hash_table (info)->dynstr = elf_stringtab_init ();
4859 if (elf_hash_table (info)->dynstr == NULL)
4863 s = bfd_make_section (abfd, ".dynamic");
4865 || ! bfd_set_section_flags (abfd, s, flags)
4866 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4869 /* The special symbol _DYNAMIC is always set to the start of the
4870 .dynamic section. This call occurs before we have processed the
4871 symbols for any dynamic object, so we don't have to worry about
4872 overriding a dynamic definition. We could set _DYNAMIC in a
4873 linker script, but we only want to define it if we are, in fact,
4874 creating a .dynamic section. We don't want to define it if there
4875 is no .dynamic section, since on some ELF platforms the start up
4876 code examines it to decide how to initialize the process. */
4878 if (! (_bfd_generic_link_add_one_symbol
4879 (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
4880 (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
4881 (struct bfd_link_hash_entry **) &h)))
4883 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4884 h->type = STT_OBJECT;
4887 && ! elf_link_record_dynamic_symbol (info, h))
4890 s = bfd_make_section (abfd, ".hash");
4892 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
4893 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4896 /* Let the backend create the rest of the sections. This lets the
4897 backend set the right flags. The backend will normally create
4898 the .got and .plt sections. */
4899 bed = get_elf_backend_data (abfd);
4900 if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
4903 elf_hash_table (info)->dynamic_sections_created = true;
4908 /* Add an entry to the .dynamic table. */
4911 elf_add_dynamic_entry (info, tag, val)
4912 struct bfd_link_info *info;
4916 Elf_Internal_Dyn dyn;
4920 bfd_byte *newcontents;
4922 dynobj = elf_hash_table (info)->dynobj;
4924 s = bfd_get_section_by_name (dynobj, ".dynamic");
4925 BFD_ASSERT (s != NULL);
4927 newsize = s->_raw_size + sizeof (Elf_External_Dyn);
4928 if (s->contents == NULL)
4929 newcontents = (bfd_byte *) malloc (newsize);
4931 newcontents = (bfd_byte *) realloc (s->contents, newsize);
4932 if (newcontents == NULL)
4934 bfd_set_error (bfd_error_no_memory);
4939 dyn.d_un.d_val = val;
4940 elf_swap_dyn_out (dynobj, &dyn,
4941 (Elf_External_Dyn *) (newcontents + s->_raw_size));
4943 s->_raw_size = newsize;
4944 s->contents = newcontents;
4949 /* Read and swap the relocs for a section. They may have been cached.
4950 If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are not NULL,
4951 they are used as buffers to read into. They are known to be large
4952 enough. If the INTERNAL_RELOCS relocs argument is NULL, the return
4953 value is allocated using either malloc or bfd_alloc, according to
4954 the KEEP_MEMORY argument. */
4956 static Elf_Internal_Rela *
4957 elf_link_read_relocs (abfd, o, external_relocs, internal_relocs, keep_memory)
4960 PTR external_relocs;
4961 Elf_Internal_Rela *internal_relocs;
4962 boolean keep_memory;
4964 Elf_Internal_Shdr *rel_hdr;
4966 Elf_Internal_Rela *alloc2 = NULL;
4968 if (elf_section_data (o)->relocs != NULL)
4969 return elf_section_data (o)->relocs;
4971 if (o->reloc_count == 0)
4974 rel_hdr = &elf_section_data (o)->rel_hdr;
4976 if (internal_relocs == NULL)
4980 size = o->reloc_count * sizeof (Elf_Internal_Rela);
4982 internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
4984 internal_relocs = alloc2 = (Elf_Internal_Rela *) malloc (size);
4985 if (internal_relocs == NULL)
4987 bfd_set_error (bfd_error_no_memory);
4992 if (external_relocs == NULL)
4994 alloc1 = (PTR) malloc (rel_hdr->sh_size);
4997 bfd_set_error (bfd_error_no_memory);
5000 external_relocs = alloc1;
5003 if ((bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
5004 || (bfd_read (external_relocs, 1, rel_hdr->sh_size, abfd)
5005 != rel_hdr->sh_size))
5008 /* Swap in the relocs. For convenience, we always produce an
5009 Elf_Internal_Rela array; if the relocs are Rel, we set the addend
5011 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
5013 Elf_External_Rel *erel;
5014 Elf_External_Rel *erelend;
5015 Elf_Internal_Rela *irela;
5017 erel = (Elf_External_Rel *) external_relocs;
5018 erelend = erel + o->reloc_count;
5019 irela = internal_relocs;
5020 for (; erel < erelend; erel++, irela++)
5022 Elf_Internal_Rel irel;
5024 elf_swap_reloc_in (abfd, erel, &irel);
5025 irela->r_offset = irel.r_offset;
5026 irela->r_info = irel.r_info;
5027 irela->r_addend = 0;
5032 Elf_External_Rela *erela;
5033 Elf_External_Rela *erelaend;
5034 Elf_Internal_Rela *irela;
5036 BFD_ASSERT (rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
5038 erela = (Elf_External_Rela *) external_relocs;
5039 erelaend = erela + o->reloc_count;
5040 irela = internal_relocs;
5041 for (; erela < erelaend; erela++, irela++)
5042 elf_swap_reloca_in (abfd, erela, irela);
5045 /* Cache the results for next time, if we can. */
5047 elf_section_data (o)->relocs = internal_relocs;
5052 /* Don't free alloc2, since if it was allocated we are passing it
5053 back (under the name of internal_relocs). */
5055 return internal_relocs;
5065 /* Record an assignment to a symbol made by a linker script. We need
5066 this in case some dynamic object refers to this symbol. */
5070 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name)
5072 struct bfd_link_info *info;
5075 struct elf_link_hash_entry *h;
5077 if (info->hash->creator->flavour != bfd_target_elf_flavour)
5080 h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false);
5084 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
5085 h->type = STT_OBJECT;
5087 if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
5088 | ELF_LINK_HASH_REF_DYNAMIC)) != 0
5090 && h->dynindx == -1)
5092 if (! elf_link_record_dynamic_symbol (info, h))
5095 /* If this is a weak defined symbol, and we know a corresponding
5096 real symbol from the same dynamic object, make sure the real
5097 symbol is also made into a dynamic symbol. */
5098 if (h->weakdef != NULL
5099 && h->weakdef->dynindx == -1)
5101 if (! elf_link_record_dynamic_symbol (info, h->weakdef))
5109 /* Array used to determine the number of hash table buckets to use
5110 based on the number of symbols there are. If there are fewer than
5111 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
5112 fewer than 37 we use 17 buckets, and so forth. We never use more
5113 than 521 buckets. */
5115 static const size_t elf_buckets[] =
5117 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 0
5120 /* Set up the sizes and contents of the ELF dynamic sections. This is
5121 called by the ELF linker emulation before_allocation routine. We
5122 must set the sizes of the sections before the linker sets the
5123 addresses of the various sections. */
5126 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
5127 export_dynamic, info, sinterpptr)
5131 boolean export_dynamic;
5132 struct bfd_link_info *info;
5133 asection **sinterpptr;
5136 struct elf_backend_data *bed;
5140 if (info->hash->creator->flavour != bfd_target_elf_flavour)
5143 dynobj = elf_hash_table (info)->dynobj;
5145 /* If there were no dynamic objects in the link, there is nothing to
5150 /* If we are supposed to export all symbols into the dynamic symbol
5151 table (this is not the normal case), then do so. */
5154 struct elf_info_failed eif;
5158 elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
5164 if (elf_hash_table (info)->dynamic_sections_created)
5166 struct elf_info_failed eif;
5167 bfd_size_type strsize;
5169 *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
5170 BFD_ASSERT (*sinterpptr != NULL || info->shared);
5176 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, soname,
5178 if (indx == (bfd_size_type) -1
5179 || ! elf_add_dynamic_entry (info, DT_SONAME, indx))
5187 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
5189 if (indx == (bfd_size_type) -1
5190 || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
5194 /* Find all symbols which were defined in a dynamic object and make
5195 the backend pick a reasonable value for them. */
5198 elf_link_hash_traverse (elf_hash_table (info),
5199 elf_adjust_dynamic_symbol,
5204 /* Add some entries to the .dynamic section. We fill in some of the
5205 values later, in elf_bfd_final_link, but we must add the entries
5206 now so that we know the final size of the .dynamic section. */
5207 if (elf_link_hash_lookup (elf_hash_table (info), "_init", false,
5208 false, false) != NULL)
5210 if (! elf_add_dynamic_entry (info, DT_INIT, 0))
5213 if (elf_link_hash_lookup (elf_hash_table (info), "_fini", false,
5214 false, false) != NULL)
5216 if (! elf_add_dynamic_entry (info, DT_FINI, 0))
5219 strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
5220 if (! elf_add_dynamic_entry (info, DT_HASH, 0)
5221 || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
5222 || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
5223 || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
5224 || ! elf_add_dynamic_entry (info, DT_SYMENT,
5225 sizeof (Elf_External_Sym)))
5229 /* The backend must work out the sizes of all the other dynamic
5231 bed = get_elf_backend_data (output_bfd);
5232 if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
5235 if (elf_hash_table (info)->dynamic_sections_created)
5241 Elf_Internal_Sym isym;
5243 /* Set the size of the .dynsym and .hash sections. We counted
5244 the number of dynamic symbols in elf_link_add_object_symbols.
5245 We will build the contents of .dynsym and .hash when we build
5246 the final symbol table, because until then we do not know the
5247 correct value to give the symbols. We built the .dynstr
5248 section as we went along in elf_link_add_object_symbols. */
5249 dynsymcount = elf_hash_table (info)->dynsymcount;
5250 s = bfd_get_section_by_name (dynobj, ".dynsym");
5251 BFD_ASSERT (s != NULL);
5252 s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
5253 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
5254 if (s->contents == NULL && s->_raw_size != 0)
5256 bfd_set_error (bfd_error_no_memory);
5260 /* The first entry in .dynsym is a dummy symbol. */
5267 elf_swap_symbol_out (output_bfd, &isym,
5268 (Elf_External_Sym *) s->contents);
5270 for (i = 0; elf_buckets[i] != 0; i++)
5272 bucketcount = elf_buckets[i];
5273 if (dynsymcount < elf_buckets[i + 1])
5277 s = bfd_get_section_by_name (dynobj, ".hash");
5278 BFD_ASSERT (s != NULL);
5279 s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
5280 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
5281 if (s->contents == NULL)
5283 bfd_set_error (bfd_error_no_memory);
5286 memset (s->contents, 0, s->_raw_size);
5288 put_word (output_bfd, bucketcount, s->contents);
5289 put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
5291 elf_hash_table (info)->bucketcount = bucketcount;
5293 s = bfd_get_section_by_name (dynobj, ".dynstr");
5294 BFD_ASSERT (s != NULL);
5295 s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
5297 if (! elf_add_dynamic_entry (info, DT_NULL, 0))
5304 /* This routine is used to export all defined symbols into the dynamic
5305 symbol table. It is called via elf_link_hash_traverse. */
5308 elf_export_symbol (h, data)
5309 struct elf_link_hash_entry *h;
5312 struct elf_info_failed *eif = (struct elf_info_failed *) data;
5314 if (h->dynindx == -1
5315 && (h->elf_link_hash_flags
5316 & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
5318 if (! elf_link_record_dynamic_symbol (eif->info, h))
5328 /* Make the backend pick a good value for a dynamic symbol. This is
5329 called via elf_link_hash_traverse, and also calls itself
5333 elf_adjust_dynamic_symbol (h, data)
5334 struct elf_link_hash_entry *h;
5337 struct elf_info_failed *eif = (struct elf_info_failed *) data;
5339 struct elf_backend_data *bed;
5341 /* If this symbol does not require a PLT entry, and it is not
5342 defined by a dynamic object, or is not referenced by a regular
5343 object, ignore it. FIXME: Do we need to worry about symbols
5344 which are defined by one dynamic object and referenced by another
5346 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
5347 && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
5348 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
5349 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0))
5352 /* If we've already adjusted this symbol, don't do it again. This
5353 can happen via a recursive call. */
5354 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
5357 /* Don't look at this symbol again. Note that we must set this
5358 after checking the above conditions, because we may look at a
5359 symbol once, decide not to do anything, and then get called
5360 recursively later after REF_REGULAR is set below. */
5361 h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
5363 /* If this is a weak definition, and we know a real definition, and
5364 the real symbol is not itself defined by a regular object file,
5365 then get a good value for the real definition. We handle the
5366 real symbol first, for the convenience of the backend routine.
5368 Note that there is a confusing case here. If the real definition
5369 is defined by a regular object file, we don't get the real symbol
5370 from the dynamic object, but we do get the weak symbol. If the
5371 processor backend uses a COPY reloc, then if some routine in the
5372 dynamic object changes the real symbol, we will not see that
5373 change in the corresponding weak symbol. This is the way other
5374 ELF linkers work as well, and seems to be a result of the shared
5377 I will clarify this issue. Most SVR4 shared libraries define the
5378 variable _timezone and define timezone as a weak synonym. The
5379 tzset call changes _timezone. If you write
5380 extern int timezone;
5382 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
5383 you might expect that, since timezone is a synonym for _timezone,
5384 the same number will print both times. However, if the processor
5385 backend uses a COPY reloc, then actually timezone will be copied
5386 into your process image, and, since you define _timezone
5387 yourself, _timezone will not. Thus timezone and _timezone will
5388 wind up at different memory locations. The tzset call will set
5389 _timezone, leaving timezone unchanged. */
5391 if (h->weakdef != NULL)
5393 struct elf_link_hash_entry *weakdef;
5395 BFD_ASSERT (h->root.type == bfd_link_hash_defined
5396 || h->root.type == bfd_link_hash_defweak);
5397 weakdef = h->weakdef;
5398 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
5399 || weakdef->root.type == bfd_link_hash_defweak);
5400 BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
5401 if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
5403 /* This symbol is defined by a regular object file, so we
5404 will not do anything special. Clear weakdef for the
5405 convenience of the processor backend. */
5410 /* There is an implicit reference by a regular object file
5411 via the weak symbol. */
5412 weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
5413 if (! elf_adjust_dynamic_symbol (weakdef, (PTR) eif))
5418 dynobj = elf_hash_table (eif->info)->dynobj;
5419 bed = get_elf_backend_data (dynobj);
5420 if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
5429 /* Final phase of ELF linker. */
5431 /* A structure we use to avoid passing large numbers of arguments. */
5433 struct elf_final_link_info
5435 /* General link information. */
5436 struct bfd_link_info *info;
5439 /* Symbol string table. */
5440 struct bfd_strtab_hash *symstrtab;
5441 /* .dynsym section. */
5442 asection *dynsym_sec;
5443 /* .hash section. */
5445 /* Buffer large enough to hold contents of any section. */
5447 /* Buffer large enough to hold external relocs of any section. */
5448 PTR external_relocs;
5449 /* Buffer large enough to hold internal relocs of any section. */
5450 Elf_Internal_Rela *internal_relocs;
5451 /* Buffer large enough to hold external local symbols of any input
5453 Elf_External_Sym *external_syms;
5454 /* Buffer large enough to hold internal local symbols of any input
5456 Elf_Internal_Sym *internal_syms;
5457 /* Array large enough to hold a symbol index for each local symbol
5458 of any input BFD. */
5460 /* Array large enough to hold a section pointer for each local
5461 symbol of any input BFD. */
5462 asection **sections;
5463 /* Buffer to hold swapped out symbols. */
5464 Elf_External_Sym *symbuf;
5465 /* Number of swapped out symbols in buffer. */
5466 size_t symbuf_count;
5467 /* Number of symbols which fit in symbuf. */
5471 static boolean elf_link_output_sym
5472 PARAMS ((struct elf_final_link_info *, const char *,
5473 Elf_Internal_Sym *, asection *));
5474 static boolean elf_link_flush_output_syms
5475 PARAMS ((struct elf_final_link_info *));
5476 static boolean elf_link_output_extsym
5477 PARAMS ((struct elf_link_hash_entry *, PTR));
5478 static boolean elf_link_input_bfd
5479 PARAMS ((struct elf_final_link_info *, bfd *));
5480 static boolean elf_reloc_link_order
5481 PARAMS ((bfd *, struct bfd_link_info *, asection *,
5482 struct bfd_link_order *));
5484 /* This struct is used to pass information to routines called via
5485 elf_link_hash_traverse which must return failure. */
5487 struct elf_finfo_failed
5490 struct elf_final_link_info *finfo;
5493 /* Do the final step of an ELF link. */
5496 elf_bfd_final_link (abfd, info)
5498 struct bfd_link_info *info;
5502 struct elf_final_link_info finfo;
5503 register asection *o;
5504 register struct bfd_link_order *p;
5506 size_t max_contents_size;
5507 size_t max_external_reloc_size;
5508 size_t max_internal_reloc_count;
5509 size_t max_sym_count;
5511 Elf_Internal_Sym elfsym;
5513 Elf_Internal_Shdr *symtab_hdr;
5514 Elf_Internal_Shdr *symstrtab_hdr;
5515 struct elf_backend_data *bed = get_elf_backend_data (abfd);
5516 struct elf_finfo_failed eif;
5519 abfd->flags |= DYNAMIC;
5521 dynamic = elf_hash_table (info)->dynamic_sections_created;
5522 dynobj = elf_hash_table (info)->dynobj;
5525 finfo.output_bfd = abfd;
5526 finfo.symstrtab = elf_stringtab_init ();
5527 if (finfo.symstrtab == NULL)
5531 finfo.dynsym_sec = NULL;
5532 finfo.hash_sec = NULL;
5536 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
5537 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
5538 BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
5540 finfo.contents = NULL;
5541 finfo.external_relocs = NULL;
5542 finfo.internal_relocs = NULL;
5543 finfo.external_syms = NULL;
5544 finfo.internal_syms = NULL;
5545 finfo.indices = NULL;
5546 finfo.sections = NULL;
5547 finfo.symbuf = NULL;
5548 finfo.symbuf_count = 0;
5550 /* Count up the number of relocations we will output for each output
5551 section, so that we know the sizes of the reloc sections. We
5552 also figure out some maximum sizes. */
5553 max_contents_size = 0;
5554 max_external_reloc_size = 0;
5555 max_internal_reloc_count = 0;
5557 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
5561 for (p = o->link_order_head; p != NULL; p = p->next)
5563 if (p->type == bfd_section_reloc_link_order
5564 || p->type == bfd_symbol_reloc_link_order)
5566 else if (p->type == bfd_indirect_link_order)
5570 sec = p->u.indirect.section;
5572 if (info->relocateable)
5573 o->reloc_count += sec->reloc_count;
5575 if (sec->_raw_size > max_contents_size)
5576 max_contents_size = sec->_raw_size;
5577 if (sec->_cooked_size > max_contents_size)
5578 max_contents_size = sec->_cooked_size;
5580 /* We are interested in just local symbols, not all
5582 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
5586 if (elf_bad_symtab (sec->owner))
5587 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
5588 / sizeof (Elf_External_Sym));
5590 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
5592 if (sym_count > max_sym_count)
5593 max_sym_count = sym_count;
5595 if ((sec->flags & SEC_RELOC) != 0)
5599 ext_size = elf_section_data (sec)->rel_hdr.sh_size;
5600 if (ext_size > max_external_reloc_size)
5601 max_external_reloc_size = ext_size;
5602 if (sec->reloc_count > max_internal_reloc_count)
5603 max_internal_reloc_count = sec->reloc_count;
5609 if (o->reloc_count > 0)
5610 o->flags |= SEC_RELOC;
5613 /* Explicitly clear the SEC_RELOC flag. The linker tends to
5614 set it (this is probably a bug) and if it is set
5615 assign_section_numbers will create a reloc section. */
5616 o->flags &=~ SEC_RELOC;
5619 /* If the SEC_ALLOC flag is not set, force the section VMA to
5620 zero. This is done in elf_fake_sections as well, but forcing
5621 the VMA to 0 here will ensure that relocs against these
5622 sections are handled correctly. */
5623 if ((o->flags & SEC_ALLOC) == 0)
5627 /* Figure out the file positions for everything but the symbol table
5628 and the relocs. We set symcount to force assign_section_numbers
5629 to create a symbol table. */
5630 abfd->symcount = info->strip == strip_all ? 0 : 1;
5631 BFD_ASSERT (! abfd->output_has_begun);
5632 if (! elf_compute_section_file_positions (abfd, info))
5635 /* That created the reloc sections. Set their sizes, and assign
5636 them file positions, and allocate some buffers. */
5637 for (o = abfd->sections; o != NULL; o = o->next)
5639 if ((o->flags & SEC_RELOC) != 0)
5641 Elf_Internal_Shdr *rel_hdr;
5642 register struct elf_link_hash_entry **p, **pend;
5644 rel_hdr = &elf_section_data (o)->rel_hdr;
5646 rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
5648 /* The contents field must last into write_object_contents,
5649 so we allocate it with bfd_alloc rather than malloc. */
5650 rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
5651 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
5653 bfd_set_error (bfd_error_no_memory);
5657 p = ((struct elf_link_hash_entry **)
5658 malloc (o->reloc_count
5659 * sizeof (struct elf_link_hash_entry *)));
5660 if (p == NULL && o->reloc_count != 0)
5662 bfd_set_error (bfd_error_no_memory);
5665 elf_section_data (o)->rel_hashes = p;
5666 pend = p + o->reloc_count;
5667 for (; p < pend; p++)
5670 /* Use the reloc_count field as an index when outputting the
5676 assign_file_positions_for_relocs (abfd);
5678 /* We have now assigned file positions for all the sections except
5679 .symtab and .strtab. We start the .symtab section at the current
5680 file position, and write directly to it. We build the .strtab
5681 section in memory. When we add .dynsym support, we will build
5682 that in memory as well (.dynsym is smaller than .symtab). */
5684 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5685 /* sh_name is set in prep_headers. */
5686 symtab_hdr->sh_type = SHT_SYMTAB;
5687 symtab_hdr->sh_flags = 0;
5688 symtab_hdr->sh_addr = 0;
5689 symtab_hdr->sh_size = 0;
5690 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
5691 /* sh_link is set in assign_section_numbers. */
5692 /* sh_info is set below. */
5693 /* sh_offset is set just below. */
5694 symtab_hdr->sh_addralign = 4; /* FIXME: system dependent? */
5696 off = elf_tdata (abfd)->next_file_pos;
5697 off = assign_file_position_for_section (symtab_hdr, off, true);
5699 /* Note that at this point elf_tdata (abfd)->next_file_pos is
5700 incorrect. We do not yet know the size of the .symtab section.
5701 We correct next_file_pos below, after we do know the size. */
5703 /* Allocate a buffer to hold swapped out symbols. This is to avoid
5704 continuously seeking to the right position in the file. */
5705 if (! info->keep_memory || max_sym_count < 20)
5706 finfo.symbuf_size = 20;
5708 finfo.symbuf_size = max_sym_count;
5709 finfo.symbuf = ((Elf_External_Sym *)
5710 malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
5711 if (finfo.symbuf == NULL)
5713 bfd_set_error (bfd_error_no_memory);
5717 /* Start writing out the symbol table. The first symbol is always a
5719 elfsym.st_value = 0;
5722 elfsym.st_other = 0;
5723 elfsym.st_shndx = SHN_UNDEF;
5724 if (! elf_link_output_sym (&finfo, (const char *) NULL,
5725 &elfsym, bfd_und_section_ptr))
5729 /* Some standard ELF linkers do this, but we don't because it causes
5730 bootstrap comparison failures. */
5731 /* Output a file symbol for the output file as the second symbol.
5732 We output this even if we are discarding local symbols, although
5733 I'm not sure if this is correct. */
5734 elfsym.st_value = 0;
5736 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
5737 elfsym.st_other = 0;
5738 elfsym.st_shndx = SHN_ABS;
5739 if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
5740 &elfsym, bfd_abs_section_ptr))
5744 /* Output a symbol for each section. We output these even if we are
5745 discarding local symbols, since they are used for relocs. These
5746 symbols have no names. We store the index of each one in the
5747 index field of the section, so that we can find it again when
5748 outputting relocs. */
5749 elfsym.st_value = 0;
5751 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
5752 elfsym.st_other = 0;
5753 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
5755 o = section_from_elf_index (abfd, i);
5757 o->target_index = abfd->symcount;
5758 elfsym.st_shndx = i;
5759 if (! elf_link_output_sym (&finfo, (const char *) NULL,
5764 /* Allocate some memory to hold information read in from the input
5766 finfo.contents = (bfd_byte *) malloc (max_contents_size);
5767 finfo.external_relocs = (PTR) malloc (max_external_reloc_size);
5768 finfo.internal_relocs = ((Elf_Internal_Rela *)
5769 malloc (max_internal_reloc_count
5770 * sizeof (Elf_Internal_Rela)));
5771 finfo.external_syms = ((Elf_External_Sym *)
5772 malloc (max_sym_count * sizeof (Elf_External_Sym)));
5773 finfo.internal_syms = ((Elf_Internal_Sym *)
5774 malloc (max_sym_count * sizeof (Elf_Internal_Sym)));
5775 finfo.indices = (long *) malloc (max_sym_count * sizeof (long));
5776 finfo.sections = (asection **) malloc (max_sym_count * sizeof (asection *));
5777 if ((finfo.contents == NULL && max_contents_size != 0)
5778 || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
5779 || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
5780 || (finfo.external_syms == NULL && max_sym_count != 0)
5781 || (finfo.internal_syms == NULL && max_sym_count != 0)
5782 || (finfo.indices == NULL && max_sym_count != 0)
5783 || (finfo.sections == NULL && max_sym_count != 0))
5785 bfd_set_error (bfd_error_no_memory);
5789 /* Since ELF permits relocations to be against local symbols, we
5790 must have the local symbols available when we do the relocations.
5791 Since we would rather only read the local symbols once, and we
5792 would rather not keep them in memory, we handle all the
5793 relocations for a single input file at the same time.
5795 Unfortunately, there is no way to know the total number of local
5796 symbols until we have seen all of them, and the local symbol
5797 indices precede the global symbol indices. This means that when
5798 we are generating relocateable output, and we see a reloc against
5799 a global symbol, we can not know the symbol index until we have
5800 finished examining all the local symbols to see which ones we are
5801 going to output. To deal with this, we keep the relocations in
5802 memory, and don't output them until the end of the link. This is
5803 an unfortunate waste of memory, but I don't see a good way around
5804 it. Fortunately, it only happens when performing a relocateable
5805 link, which is not the common case. FIXME: If keep_memory is set
5806 we could write the relocs out and then read them again; I don't
5807 know how bad the memory loss will be. */
5809 for (sub = info->input_bfds; sub != NULL; sub = sub->next)
5810 sub->output_has_begun = false;
5811 for (o = abfd->sections; o != NULL; o = o->next)
5813 for (p = o->link_order_head; p != NULL; p = p->next)
5815 if (p->type == bfd_indirect_link_order
5816 && (bfd_get_flavour (p->u.indirect.section->owner)
5817 == bfd_target_elf_flavour))
5819 sub = p->u.indirect.section->owner;
5820 if (! sub->output_has_begun)
5822 if (! elf_link_input_bfd (&finfo, sub))
5824 sub->output_has_begun = true;
5827 else if (p->type == bfd_section_reloc_link_order
5828 || p->type == bfd_symbol_reloc_link_order)
5830 if (! elf_reloc_link_order (abfd, info, o, p))
5835 if (! _bfd_default_link_order (abfd, info, o, p))
5841 /* That wrote out all the local symbols. Finish up the symbol table
5842 with the global symbols. */
5844 /* The sh_info field records the index of the first non local
5846 symtab_hdr->sh_info = abfd->symcount;
5848 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
5850 /* We get the global symbols from the hash table. */
5853 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
5858 /* Flush all symbols to the file. */
5859 if (! elf_link_flush_output_syms (&finfo))
5862 /* Now we know the size of the symtab section. */
5863 off += symtab_hdr->sh_size;
5865 /* Finish up and write out the symbol string table (.strtab)
5867 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
5868 /* sh_name was set in prep_headers. */
5869 symstrtab_hdr->sh_type = SHT_STRTAB;
5870 symstrtab_hdr->sh_flags = 0;
5871 symstrtab_hdr->sh_addr = 0;
5872 symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
5873 symstrtab_hdr->sh_entsize = 0;
5874 symstrtab_hdr->sh_link = 0;
5875 symstrtab_hdr->sh_info = 0;
5876 /* sh_offset is set just below. */
5877 symstrtab_hdr->sh_addralign = 1;
5879 off = assign_file_position_for_section (symstrtab_hdr, off, true);
5880 elf_tdata (abfd)->next_file_pos = off;
5882 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
5883 || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
5886 /* Adjust the relocs to have the correct symbol indices. */
5887 for (o = abfd->sections; o != NULL; o = o->next)
5889 struct elf_link_hash_entry **rel_hash;
5890 Elf_Internal_Shdr *rel_hdr;
5892 if ((o->flags & SEC_RELOC) == 0)
5895 rel_hash = elf_section_data (o)->rel_hashes;
5896 rel_hdr = &elf_section_data (o)->rel_hdr;
5897 for (i = 0; i < o->reloc_count; i++, rel_hash++)
5899 if (*rel_hash == NULL)
5902 BFD_ASSERT ((*rel_hash)->indx >= 0);
5904 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
5906 Elf_External_Rel *erel;
5907 Elf_Internal_Rel irel;
5909 erel = (Elf_External_Rel *) rel_hdr->contents + i;
5910 elf_swap_reloc_in (abfd, erel, &irel);
5911 irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
5912 ELF_R_TYPE (irel.r_info));
5913 elf_swap_reloc_out (abfd, &irel, erel);
5917 Elf_External_Rela *erela;
5918 Elf_Internal_Rela irela;
5920 BFD_ASSERT (rel_hdr->sh_entsize
5921 == sizeof (Elf_External_Rela));
5923 erela = (Elf_External_Rela *) rel_hdr->contents + i;
5924 elf_swap_reloca_in (abfd, erela, &irela);
5925 irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
5926 ELF_R_TYPE (irela.r_info));
5927 elf_swap_reloca_out (abfd, &irela, erela);
5931 /* Set the reloc_count field to 0 to prevent write_relocs from
5932 trying to swap the relocs out itself. */
5936 /* If we are linking against a dynamic object, or generating a
5937 shared library, finish up the dynamic linking information. */
5940 Elf_External_Dyn *dyncon, *dynconend;
5942 /* Fix up .dynamic entries. */
5943 o = bfd_get_section_by_name (dynobj, ".dynamic");
5944 BFD_ASSERT (o != NULL);
5946 dyncon = (Elf_External_Dyn *) o->contents;
5947 dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
5948 for (; dyncon < dynconend; dyncon++)
5950 Elf_Internal_Dyn dyn;
5954 elf_swap_dyn_in (dynobj, dyncon, &dyn);
5961 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on
5962 magic _init and _fini symbols. This is pretty ugly,
5963 but we are compatible. */
5971 struct elf_link_hash_entry *h;
5973 h = elf_link_hash_lookup (elf_hash_table (info), name,
5974 false, false, true);
5975 BFD_ASSERT (h != NULL);
5976 if (h->root.type == bfd_link_hash_defined
5977 || h->root.type == bfd_link_hash_defweak)
5979 dyn.d_un.d_val = h->root.u.def.value;
5980 o = h->root.u.def.section;
5981 if (o->output_section != NULL)
5982 dyn.d_un.d_val += (o->output_section->vma
5983 + o->output_offset);
5985 /* The symbol is imported from another shared
5986 library and does not apply to this one. */
5989 elf_swap_dyn_out (dynobj, &dyn, dyncon);
6002 o = bfd_get_section_by_name (abfd, name);
6003 BFD_ASSERT (o != NULL);
6004 dyn.d_un.d_ptr = o->vma;
6005 elf_swap_dyn_out (dynobj, &dyn, dyncon);
6012 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
6017 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
6019 Elf_Internal_Shdr *hdr;
6021 hdr = elf_elfsections (abfd)[i];
6022 if (hdr->sh_type == type
6023 && (hdr->sh_flags & SHF_ALLOC) != 0)
6025 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
6026 dyn.d_un.d_val += hdr->sh_size;
6029 if (dyn.d_un.d_val == 0
6030 || hdr->sh_addr < dyn.d_un.d_val)
6031 dyn.d_un.d_val = hdr->sh_addr;
6035 elf_swap_dyn_out (dynobj, &dyn, dyncon);
6041 /* If we have created any dynamic sections, then output them. */
6044 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
6047 for (o = dynobj->sections; o != NULL; o = o->next)
6049 if ((o->flags & SEC_HAS_CONTENTS) == 0
6050 || o->_raw_size == 0)
6052 if ((o->flags & SEC_IN_MEMORY) == 0)
6054 /* At this point, we are only interested in sections
6055 created by elf_link_create_dynamic_sections. FIXME:
6056 This test is fragile. */
6059 if ((elf_section_data (o->output_section)->this_hdr.sh_type
6061 || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
6063 if (! bfd_set_section_contents (abfd, o->output_section,
6064 o->contents, o->output_offset,
6072 /* The contents of the .dynstr section are actually in a
6074 off = elf_section_data (o->output_section)->this_hdr.sh_offset;
6075 if (bfd_seek (abfd, off, SEEK_SET) != 0
6076 || ! _bfd_stringtab_emit (abfd,
6077 elf_hash_table (info)->dynstr))
6083 if (finfo.symstrtab != NULL)
6084 _bfd_stringtab_free (finfo.symstrtab);
6085 if (finfo.contents != NULL)
6086 free (finfo.contents);
6087 if (finfo.external_relocs != NULL)
6088 free (finfo.external_relocs);
6089 if (finfo.internal_relocs != NULL)
6090 free (finfo.internal_relocs);
6091 if (finfo.external_syms != NULL)
6092 free (finfo.external_syms);
6093 if (finfo.internal_syms != NULL)
6094 free (finfo.internal_syms);
6095 if (finfo.indices != NULL)
6096 free (finfo.indices);
6097 if (finfo.sections != NULL)
6098 free (finfo.sections);
6099 if (finfo.symbuf != NULL)
6100 free (finfo.symbuf);
6101 for (o = abfd->sections; o != NULL; o = o->next)
6103 if ((o->flags & SEC_RELOC) != 0
6104 && elf_section_data (o)->rel_hashes != NULL)
6105 free (elf_section_data (o)->rel_hashes);
6108 elf_tdata (abfd)->linker = true;
6113 if (finfo.symstrtab != NULL)
6114 _bfd_stringtab_free (finfo.symstrtab);
6115 if (finfo.contents != NULL)
6116 free (finfo.contents);
6117 if (finfo.external_relocs != NULL)
6118 free (finfo.external_relocs);
6119 if (finfo.internal_relocs != NULL)
6120 free (finfo.internal_relocs);
6121 if (finfo.external_syms != NULL)
6122 free (finfo.external_syms);
6123 if (finfo.internal_syms != NULL)
6124 free (finfo.internal_syms);
6125 if (finfo.indices != NULL)
6126 free (finfo.indices);
6127 if (finfo.sections != NULL)
6128 free (finfo.sections);
6129 if (finfo.symbuf != NULL)
6130 free (finfo.symbuf);
6131 for (o = abfd->sections; o != NULL; o = o->next)
6133 if ((o->flags & SEC_RELOC) != 0
6134 && elf_section_data (o)->rel_hashes != NULL)
6135 free (elf_section_data (o)->rel_hashes);
6141 /* Add a symbol to the output symbol table. */
6144 elf_link_output_sym (finfo, name, elfsym, input_sec)
6145 struct elf_final_link_info *finfo;
6147 Elf_Internal_Sym *elfsym;
6148 asection *input_sec;
6150 boolean (*output_symbol_hook) PARAMS ((bfd *,
6151 struct bfd_link_info *info,
6156 output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
6157 elf_backend_link_output_symbol_hook;
6158 if (output_symbol_hook != NULL)
6160 if (! ((*output_symbol_hook)
6161 (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
6165 if (name == (const char *) NULL || *name == '\0')
6166 elfsym->st_name = 0;
6169 elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
6172 if (elfsym->st_name == (unsigned long) -1)
6176 if (finfo->symbuf_count >= finfo->symbuf_size)
6178 if (! elf_link_flush_output_syms (finfo))
6182 elf_swap_symbol_out (finfo->output_bfd, elfsym,
6183 finfo->symbuf + finfo->symbuf_count);
6184 ++finfo->symbuf_count;
6186 ++finfo->output_bfd->symcount;
6191 /* Flush the output symbols to the file. */
6194 elf_link_flush_output_syms (finfo)
6195 struct elf_final_link_info *finfo;
6197 Elf_Internal_Shdr *symtab;
6199 symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
6201 if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
6203 || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
6204 sizeof (Elf_External_Sym), finfo->output_bfd)
6205 != finfo->symbuf_count * sizeof (Elf_External_Sym)))
6208 symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
6210 finfo->symbuf_count = 0;
6215 /* Add an external symbol to the symbol table. This is called from
6216 the hash table traversal routine. */
6219 elf_link_output_extsym (h, data)
6220 struct elf_link_hash_entry *h;
6223 struct elf_finfo_failed *eif = (struct elf_finfo_failed *) data;
6224 struct elf_final_link_info *finfo = eif->finfo;
6226 Elf_Internal_Sym sym;
6227 asection *input_sec;
6229 /* If we are not creating a shared library, and this symbol is
6230 referenced by a shared library but is not defined anywhere, then
6231 warn that it is undefined. If we do not do this, the runtime
6232 linker will complain that the symbol is undefined when the
6233 program is run. We don't have to worry about symbols that are
6234 referenced by regular files, because we will already have issued
6237 FIXME: If we are linking against an object which uses DT_NEEDED,
6238 we don't give this warning, because it might be the case that the
6239 needed dynamic object will define the symbols. Unfortunately,
6240 this makes this type of check much less useful, but the only way
6241 to fix it would be to locate the needed object and read its
6242 symbol table. That seems like a real waste of time just to give
6243 better error messages. */
6244 if (! finfo->info->relocateable
6245 && ! finfo->info->shared
6246 && ! elf_hash_table (finfo->info)->saw_needed
6247 && h->root.type == bfd_link_hash_undefined
6248 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
6249 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
6251 if (! ((*finfo->info->callbacks->undefined_symbol)
6252 (finfo->info, h->root.root.string, h->root.u.undef.abfd,
6253 (asection *) NULL, 0)))
6260 /* We don't want to output symbols that have never been mentioned by
6261 a regular file, or that we have been told to strip. However, if
6262 h->indx is set to -2, the symbol is used by a reloc and we must
6266 else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
6267 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
6268 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
6269 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
6271 else if (finfo->info->strip == strip_all
6272 || (finfo->info->strip == strip_some
6273 && bfd_hash_lookup (finfo->info->keep_hash,
6274 h->root.root.string,
6275 false, false) == NULL))
6280 /* If we're stripping it, and it's not a dynamic symbol, there's
6281 nothing else to do. */
6282 if (strip && h->dynindx == -1)
6286 sym.st_size = h->size;
6288 if (h->root.type == bfd_link_hash_undefweak
6289 || h->root.type == bfd_link_hash_defweak)
6290 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
6292 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
6294 switch (h->root.type)
6297 case bfd_link_hash_new:
6301 case bfd_link_hash_undefined:
6302 input_sec = bfd_und_section_ptr;
6303 sym.st_shndx = SHN_UNDEF;
6306 case bfd_link_hash_undefweak:
6307 input_sec = bfd_und_section_ptr;
6308 sym.st_shndx = SHN_UNDEF;
6311 case bfd_link_hash_defined:
6312 case bfd_link_hash_defweak:
6314 input_sec = h->root.u.def.section;
6315 if (input_sec->output_section != NULL)
6318 elf_section_from_bfd_section (finfo->output_bfd,
6319 input_sec->output_section);
6320 if (sym.st_shndx == (unsigned short) -1)
6326 /* ELF symbols in relocateable files are section relative,
6327 but in nonrelocateable files they are virtual
6329 sym.st_value = h->root.u.def.value + input_sec->output_offset;
6330 if (! finfo->info->relocateable)
6331 sym.st_value += input_sec->output_section->vma;
6335 BFD_ASSERT ((bfd_get_flavour (input_sec->owner)
6336 == bfd_target_elf_flavour)
6337 && elf_elfheader (input_sec->owner)->e_type == ET_DYN);
6338 sym.st_shndx = SHN_UNDEF;
6339 input_sec = bfd_und_section_ptr;
6344 case bfd_link_hash_common:
6345 input_sec = bfd_com_section_ptr;
6346 sym.st_shndx = SHN_COMMON;
6347 sym.st_value = 1 << h->root.u.c.p->alignment_power;
6350 case bfd_link_hash_indirect:
6351 case bfd_link_hash_warning:
6352 /* I have no idea how these should be handled. */
6356 /* If this symbol should be put in the .dynsym section, then put it
6357 there now. We have already know the symbol index. We also fill
6358 in the entry in the .hash section. */
6359 if (h->dynindx != -1
6360 && elf_hash_table (finfo->info)->dynamic_sections_created)
6362 struct elf_backend_data *bed;
6365 bfd_byte *bucketpos;
6368 sym.st_name = h->dynstr_index;
6370 /* Give the processor backend a chance to tweak the symbol
6371 value, and also to finish up anything that needs to be done
6373 bed = get_elf_backend_data (finfo->output_bfd);
6374 if (! ((*bed->elf_backend_finish_dynamic_symbol)
6375 (finfo->output_bfd, finfo->info, h, &sym)))
6381 elf_swap_symbol_out (finfo->output_bfd, &sym,
6382 ((Elf_External_Sym *) finfo->dynsym_sec->contents
6385 bucketcount = elf_hash_table (finfo->info)->bucketcount;
6386 bucket = (bfd_elf_hash ((const unsigned char *) h->root.root.string)
6388 bucketpos = ((bfd_byte *) finfo->hash_sec->contents
6389 + (bucket + 2) * (ARCH_SIZE / 8));
6390 chain = get_word (finfo->output_bfd, bucketpos);
6391 put_word (finfo->output_bfd, h->dynindx, bucketpos);
6392 put_word (finfo->output_bfd, chain,
6393 ((bfd_byte *) finfo->hash_sec->contents
6394 + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
6397 /* If we're stripping it, then it was just a dynamic symbol, and
6398 there's nothing else to do. */
6402 h->indx = finfo->output_bfd->symcount;
6404 if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
6413 /* Link an input file into the linker output file. This function
6414 handles all the sections and relocations of the input file at once.
6415 This is so that we only have to read the local symbols once, and
6416 don't have to keep them in memory. */
6419 elf_link_input_bfd (finfo, input_bfd)
6420 struct elf_final_link_info *finfo;
6423 boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
6424 bfd *, asection *, bfd_byte *,
6425 Elf_Internal_Rela *,
6426 Elf_Internal_Sym *, asection **));
6428 Elf_Internal_Shdr *symtab_hdr;
6431 Elf_External_Sym *esym;
6432 Elf_External_Sym *esymend;
6433 Elf_Internal_Sym *isym;
6435 asection **ppsection;
6438 output_bfd = finfo->output_bfd;
6440 get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
6442 /* If this is a dynamic object, we don't want to do anything here:
6443 we don't want the local symbols, and we don't want the section
6445 if (elf_elfheader (input_bfd)->e_type == ET_DYN)
6448 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
6449 if (elf_bad_symtab (input_bfd))
6451 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
6456 locsymcount = symtab_hdr->sh_info;
6457 extsymoff = symtab_hdr->sh_info;
6460 /* Read the local symbols. */
6462 && (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
6463 || (bfd_read (finfo->external_syms, sizeof (Elf_External_Sym),
6464 locsymcount, input_bfd)
6465 != locsymcount * sizeof (Elf_External_Sym))))
6468 /* Swap in the local symbols and write out the ones which we know
6469 are going into the output file. */
6470 esym = finfo->external_syms;
6471 esymend = esym + locsymcount;
6472 isym = finfo->internal_syms;
6473 pindex = finfo->indices;
6474 ppsection = finfo->sections;
6475 for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
6479 Elf_Internal_Sym osym;
6481 elf_swap_symbol_in (input_bfd, esym, isym);
6484 if (elf_bad_symtab (input_bfd))
6486 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
6493 if (isym->st_shndx == SHN_UNDEF)
6494 isec = bfd_und_section_ptr;
6495 else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
6496 isec = section_from_elf_index (input_bfd, isym->st_shndx);
6497 else if (isym->st_shndx == SHN_ABS)
6498 isec = bfd_abs_section_ptr;
6499 else if (isym->st_shndx == SHN_COMMON)
6500 isec = bfd_com_section_ptr;
6509 /* Don't output the first, undefined, symbol. */
6510 if (esym == finfo->external_syms)
6513 /* If we are stripping all symbols, we don't want to output this
6515 if (finfo->info->strip == strip_all)
6518 /* We never output section symbols. Instead, we use the section
6519 symbol of the corresponding section in the output file. */
6520 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6523 /* If we are discarding all local symbols, we don't want to
6524 output this one. If we are generating a relocateable output
6525 file, then some of the local symbols may be required by
6526 relocs; we output them below as we discover that they are
6528 if (finfo->info->discard == discard_all)
6531 /* Get the name of the symbol. */
6532 name = elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
6537 /* See if we are discarding symbols with this name. */
6538 if ((finfo->info->strip == strip_some
6539 && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
6541 || (finfo->info->discard == discard_l
6542 && strncmp (name, finfo->info->lprefix,
6543 finfo->info->lprefix_len) == 0))
6546 /* If we get here, we are going to output this symbol. */
6550 /* Adjust the section index for the output file. */
6551 osym.st_shndx = elf_section_from_bfd_section (output_bfd,
6552 isec->output_section);
6553 if (osym.st_shndx == (unsigned short) -1)
6556 *pindex = output_bfd->symcount;
6558 /* ELF symbols in relocateable files are section relative, but
6559 in executable files they are virtual addresses. Note that
6560 this code assumes that all ELF sections have an associated
6561 BFD section with a reasonable value for output_offset; below
6562 we assume that they also have a reasonable value for
6563 output_section. Any special sections must be set up to meet
6564 these requirements. */
6565 osym.st_value += isec->output_offset;
6566 if (! finfo->info->relocateable)
6567 osym.st_value += isec->output_section->vma;
6569 if (! elf_link_output_sym (finfo, name, &osym, isec))
6573 /* Relocate the contents of each section. */
6574 for (o = input_bfd->sections; o != NULL; o = o->next)
6576 if ((o->flags & SEC_HAS_CONTENTS) == 0)
6579 if ((o->flags & SEC_IN_MEMORY) != 0
6580 && input_bfd == elf_hash_table (finfo->info)->dynobj)
6582 /* Section was created by elf_link_create_dynamic_sections.
6583 FIXME: This test is fragile. */
6587 /* Read the contents of the section. */
6588 if (! bfd_get_section_contents (input_bfd, o, finfo->contents,
6589 (file_ptr) 0, o->_raw_size))
6592 if ((o->flags & SEC_RELOC) != 0)
6594 Elf_Internal_Rela *internal_relocs;
6596 /* Get the swapped relocs. */
6597 internal_relocs = elf_link_read_relocs (input_bfd, o,
6598 finfo->external_relocs,
6599 finfo->internal_relocs,
6601 if (internal_relocs == NULL
6602 && o->reloc_count > 0)
6605 /* Relocate the section by invoking a back end routine.
6607 The back end routine is responsible for adjusting the
6608 section contents as necessary, and (if using Rela relocs
6609 and generating a relocateable output file) adjusting the
6610 reloc addend as necessary.
6612 The back end routine does not have to worry about setting
6613 the reloc address or the reloc symbol index.
6615 The back end routine is given a pointer to the swapped in
6616 internal symbols, and can access the hash table entries
6617 for the external symbols via elf_sym_hashes (input_bfd).
6619 When generating relocateable output, the back end routine
6620 must handle STB_LOCAL/STT_SECTION symbols specially. The
6621 output symbol is going to be a section symbol
6622 corresponding to the output section, which will require
6623 the addend to be adjusted. */
6625 if (! (*relocate_section) (output_bfd, finfo->info,
6629 finfo->internal_syms,
6633 if (finfo->info->relocateable)
6635 Elf_Internal_Rela *irela;
6636 Elf_Internal_Rela *irelaend;
6637 struct elf_link_hash_entry **rel_hash;
6638 Elf_Internal_Shdr *input_rel_hdr;
6639 Elf_Internal_Shdr *output_rel_hdr;
6641 /* Adjust the reloc addresses and symbol indices. */
6643 irela = internal_relocs;
6644 irelaend = irela + o->reloc_count;
6645 rel_hash = (elf_section_data (o->output_section)->rel_hashes
6646 + o->output_section->reloc_count);
6647 for (; irela < irelaend; irela++, rel_hash++)
6650 Elf_Internal_Sym *isym;
6653 irela->r_offset += o->output_offset;
6655 r_symndx = ELF_R_SYM (irela->r_info);
6660 if (r_symndx >= locsymcount
6661 || (elf_bad_symtab (input_bfd)
6662 && finfo->sections[r_symndx] == NULL))
6666 /* This is a reloc against a global symbol. We
6667 have not yet output all the local symbols, so
6668 we do not know the symbol index of any global
6669 symbol. We set the rel_hash entry for this
6670 reloc to point to the global hash table entry
6671 for this symbol. The symbol index is then
6672 set at the end of elf_bfd_final_link. */
6673 indx = r_symndx - extsymoff;
6674 *rel_hash = elf_sym_hashes (input_bfd)[indx];
6676 /* Setting the index to -2 tells
6677 elf_link_output_extsym that this symbol is
6679 BFD_ASSERT ((*rel_hash)->indx < 0);
6680 (*rel_hash)->indx = -2;
6685 /* This is a reloc against a local symbol. */
6688 isym = finfo->internal_syms + r_symndx;
6689 sec = finfo->sections[r_symndx];
6690 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6692 /* I suppose the backend ought to fill in the
6693 section of any STT_SECTION symbol against a
6694 processor specific section. */
6695 if (sec != NULL && bfd_is_abs_section (sec))
6697 else if (sec == NULL || sec->owner == NULL)
6699 bfd_set_error (bfd_error_bad_value);
6704 r_symndx = sec->output_section->target_index;
6705 BFD_ASSERT (r_symndx != 0);
6710 if (finfo->indices[r_symndx] == -1)
6716 if (finfo->info->strip == strip_all)
6718 /* You can't do ld -r -s. */
6719 bfd_set_error (bfd_error_invalid_operation);
6723 /* This symbol was skipped earlier, but
6724 since it is needed by a reloc, we
6725 must output it now. */
6726 link = symtab_hdr->sh_link;
6727 name = elf_string_from_elf_section (input_bfd,
6733 osec = sec->output_section;
6735 elf_section_from_bfd_section (output_bfd,
6737 if (isym->st_shndx == (unsigned short) -1)
6740 isym->st_value += sec->output_offset;
6741 if (! finfo->info->relocateable)
6742 isym->st_value += osec->vma;
6744 finfo->indices[r_symndx] = output_bfd->symcount;
6746 if (! elf_link_output_sym (finfo, name, isym, sec))
6750 r_symndx = finfo->indices[r_symndx];
6753 irela->r_info = ELF_R_INFO (r_symndx,
6754 ELF_R_TYPE (irela->r_info));
6757 /* Swap out the relocs. */
6758 input_rel_hdr = &elf_section_data (o)->rel_hdr;
6759 output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
6760 BFD_ASSERT (output_rel_hdr->sh_entsize
6761 == input_rel_hdr->sh_entsize);
6762 irela = internal_relocs;
6763 irelaend = irela + o->reloc_count;
6764 if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
6766 Elf_External_Rel *erel;
6768 erel = ((Elf_External_Rel *) output_rel_hdr->contents
6769 + o->output_section->reloc_count);
6770 for (; irela < irelaend; irela++, erel++)
6772 Elf_Internal_Rel irel;
6774 irel.r_offset = irela->r_offset;
6775 irel.r_info = irela->r_info;
6776 BFD_ASSERT (irela->r_addend == 0);
6777 elf_swap_reloc_out (output_bfd, &irel, erel);
6782 Elf_External_Rela *erela;
6784 BFD_ASSERT (input_rel_hdr->sh_entsize
6785 == sizeof (Elf_External_Rela));
6786 erela = ((Elf_External_Rela *) output_rel_hdr->contents
6787 + o->output_section->reloc_count);
6788 for (; irela < irelaend; irela++, erela++)
6789 elf_swap_reloca_out (output_bfd, irela, erela);
6792 o->output_section->reloc_count += o->reloc_count;
6796 /* Write out the modified section contents. */
6797 if (! bfd_set_section_contents (output_bfd, o->output_section,
6798 finfo->contents, o->output_offset,
6799 (o->_cooked_size != 0
6808 /* Generate a reloc when linking an ELF file. This is a reloc
6809 requested by the linker, and does come from any input file. This
6810 is used to build constructor and destructor tables when linking
6814 elf_reloc_link_order (output_bfd, info, output_section, link_order)
6816 struct bfd_link_info *info;
6817 asection *output_section;
6818 struct bfd_link_order *link_order;
6820 reloc_howto_type *howto;
6823 struct elf_link_hash_entry **rel_hash_ptr;
6824 Elf_Internal_Shdr *rel_hdr;
6826 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
6829 bfd_set_error (bfd_error_bad_value);
6833 /* If this is an inplace reloc, we must write the addend into the
6835 if (howto->partial_inplace
6836 && link_order->u.reloc.p->addend != 0)
6839 bfd_reloc_status_type rstat;
6843 size = bfd_get_reloc_size (howto);
6844 buf = (bfd_byte *) bfd_zmalloc (size);
6845 if (buf == (bfd_byte *) NULL)
6847 bfd_set_error (bfd_error_no_memory);
6850 rstat = _bfd_relocate_contents (howto, output_bfd,
6851 link_order->u.reloc.p->addend, buf);
6857 case bfd_reloc_outofrange:
6859 case bfd_reloc_overflow:
6860 if (! ((*info->callbacks->reloc_overflow)
6862 (link_order->type == bfd_section_reloc_link_order
6863 ? bfd_section_name (output_bfd,
6864 link_order->u.reloc.p->u.section)
6865 : link_order->u.reloc.p->u.name),
6866 howto->name, link_order->u.reloc.p->addend,
6867 (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
6874 ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
6875 (file_ptr) link_order->offset, size);
6881 /* Figure out the symbol index. */
6882 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
6883 + output_section->reloc_count);
6884 if (link_order->type == bfd_section_reloc_link_order)
6886 indx = link_order->u.reloc.p->u.section->target_index;
6887 BFD_ASSERT (indx != 0);
6888 *rel_hash_ptr = NULL;
6892 struct elf_link_hash_entry *h;
6894 h = elf_link_hash_lookup (elf_hash_table (info),
6895 link_order->u.reloc.p->u.name,
6896 false, false, true);
6899 /* Setting the index to -2 tells elf_link_output_extsym that
6900 this symbol is used by a reloc. */
6907 if (! ((*info->callbacks->unattached_reloc)
6908 (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
6909 (asection *) NULL, (bfd_vma) 0)))
6915 /* The address of a reloc is relative to the section in a
6916 relocateable file, and is a virtual address in an executable
6918 offset = link_order->offset;
6919 if (! info->relocateable)
6920 offset += output_section->vma;
6922 rel_hdr = &elf_section_data (output_section)->rel_hdr;
6924 if (rel_hdr->sh_type == SHT_REL)
6926 Elf_Internal_Rel irel;
6927 Elf_External_Rel *erel;
6929 irel.r_offset = offset;
6930 irel.r_info = ELF_R_INFO (indx, howto->type);
6931 erel = ((Elf_External_Rel *) rel_hdr->contents
6932 + output_section->reloc_count);
6933 elf_swap_reloc_out (output_bfd, &irel, erel);
6937 Elf_Internal_Rela irela;
6938 Elf_External_Rela *erela;
6940 irela.r_offset = offset;
6941 irela.r_info = ELF_R_INFO (indx, howto->type);
6942 irela.r_addend = link_order->u.reloc.p->addend;
6943 erela = ((Elf_External_Rela *) rel_hdr->contents
6944 + output_section->reloc_count);
6945 elf_swap_reloca_out (output_bfd, &irela, erela);
6948 ++output_section->reloc_count;