1 /* ELF executable support for BFD.
2 Copyright 1991, 1992, 1993, 1994 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 write_relocs NAME(bfd_elf,_write_relocs)
115 #define elf_find_section NAME(bfd_elf,find_section)
116 #define elf_bfd_link_add_symbols NAME(bfd_elf,bfd_link_add_symbols)
117 #define elf_add_dynamic_entry NAME(bfd_elf,add_dynamic_entry)
118 #define elf_link_create_dynamic_sections \
119 NAME(bfd_elf,link_create_dynamic_sections)
120 #define elf_link_record_dynamic_symbol \
121 NAME(bfd_elf,link_record_dynamic_symbol)
122 #define elf_bfd_final_link NAME(bfd_elf,bfd_final_link)
125 #define ELF_R_INFO(X,Y) ELF64_R_INFO(X,Y)
126 #define ELF_R_SYM(X) ELF64_R_SYM(X)
127 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
128 #define ELFCLASS ELFCLASS64
130 #define LOG_FILE_ALIGN 3
133 #define ELF_R_INFO(X,Y) ELF32_R_INFO(X,Y)
134 #define ELF_R_SYM(X) ELF32_R_SYM(X)
135 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
136 #define ELFCLASS ELFCLASS32
138 #define LOG_FILE_ALIGN 2
141 /* Forward declarations of static functions */
143 static struct bfd_strtab_hash *elf_stringtab_init PARAMS ((void));
144 static asection *section_from_elf_index PARAMS ((bfd *, unsigned int));
146 static int elf_section_from_bfd_section PARAMS ((bfd *, struct sec *));
148 static long elf_slurp_symbol_table PARAMS ((bfd *, asymbol **, boolean));
150 static boolean elf_slurp_reloc_table PARAMS ((bfd *, asection *, asymbol **));
152 static int elf_symbol_from_bfd_symbol PARAMS ((bfd *,
153 struct symbol_cache_entry **));
155 static boolean elf_compute_section_file_positions
156 PARAMS ((bfd *, struct bfd_link_info *));
157 static boolean prep_headers PARAMS ((bfd *));
158 static void elf_fake_sections PARAMS ((bfd *, asection *, PTR));
159 static boolean assign_section_numbers PARAMS ((bfd *));
160 static file_ptr align_file_position PARAMS ((file_ptr));
161 static file_ptr assign_file_position_for_section
162 PARAMS ((Elf_Internal_Shdr *, file_ptr, boolean));
163 static boolean assign_file_positions_except_relocs PARAMS ((bfd *, boolean));
164 static void assign_file_positions_for_relocs PARAMS ((bfd *));
165 static bfd_size_type get_program_header_size PARAMS ((bfd *));
166 static file_ptr map_program_segments
167 PARAMS ((bfd *, file_ptr, Elf_Internal_Shdr *, bfd_size_type));
169 static boolean elf_map_symbols PARAMS ((bfd *));
170 static boolean swap_out_syms PARAMS ((bfd *, struct bfd_strtab_hash **));
172 static boolean bfd_section_from_shdr PARAMS ((bfd *, unsigned int shindex));
175 static void elf_debug_section PARAMS ((int, Elf_Internal_Shdr *));
176 static void elf_debug_file PARAMS ((Elf_Internal_Ehdr *));
179 #define elf_string_from_elf_strtab(abfd,strindex) \
180 elf_string_from_elf_section(abfd,elf_elfheader(abfd)->e_shstrndx,strindex)
183 /* Structure swapping routines */
185 /* Should perhaps use put_offset, put_word, etc. For now, the two versions
186 can be handled by explicitly specifying 32 bits or "the long type". */
188 #define put_word bfd_h_put_64
189 #define get_word bfd_h_get_64
192 #define put_word bfd_h_put_32
193 #define get_word bfd_h_get_32
196 /* Translate an ELF symbol in external format into an ELF symbol in internal
200 elf_swap_symbol_in (abfd, src, dst)
202 Elf_External_Sym *src;
203 Elf_Internal_Sym *dst;
205 dst->st_name = bfd_h_get_32 (abfd, (bfd_byte *) src->st_name);
206 dst->st_value = get_word (abfd, (bfd_byte *) src->st_value);
207 dst->st_size = get_word (abfd, (bfd_byte *) src->st_size);
208 dst->st_info = bfd_h_get_8 (abfd, (bfd_byte *) src->st_info);
209 dst->st_other = bfd_h_get_8 (abfd, (bfd_byte *) src->st_other);
210 dst->st_shndx = bfd_h_get_16 (abfd, (bfd_byte *) src->st_shndx);
213 /* Translate an ELF symbol in internal format into an ELF symbol in external
217 elf_swap_symbol_out (abfd, src, dst)
219 Elf_Internal_Sym *src;
220 Elf_External_Sym *dst;
222 bfd_h_put_32 (abfd, src->st_name, dst->st_name);
223 put_word (abfd, src->st_value, dst->st_value);
224 put_word (abfd, src->st_size, dst->st_size);
225 bfd_h_put_8 (abfd, src->st_info, dst->st_info);
226 bfd_h_put_8 (abfd, src->st_other, dst->st_other);
227 bfd_h_put_16 (abfd, src->st_shndx, dst->st_shndx);
231 /* Translate an ELF file header in external format into an ELF file header in
235 elf_swap_ehdr_in (abfd, src, dst)
237 Elf_External_Ehdr *src;
238 Elf_Internal_Ehdr *dst;
240 memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
241 dst->e_type = bfd_h_get_16 (abfd, (bfd_byte *) src->e_type);
242 dst->e_machine = bfd_h_get_16 (abfd, (bfd_byte *) src->e_machine);
243 dst->e_version = bfd_h_get_32 (abfd, (bfd_byte *) src->e_version);
244 dst->e_entry = get_word (abfd, (bfd_byte *) src->e_entry);
245 dst->e_phoff = get_word (abfd, (bfd_byte *) src->e_phoff);
246 dst->e_shoff = get_word (abfd, (bfd_byte *) src->e_shoff);
247 dst->e_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->e_flags);
248 dst->e_ehsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_ehsize);
249 dst->e_phentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phentsize);
250 dst->e_phnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phnum);
251 dst->e_shentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shentsize);
252 dst->e_shnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shnum);
253 dst->e_shstrndx = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shstrndx);
256 /* Translate an ELF file header in internal format into an ELF file header in
260 elf_swap_ehdr_out (abfd, src, dst)
262 Elf_Internal_Ehdr *src;
263 Elf_External_Ehdr *dst;
265 memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
266 /* note that all elements of dst are *arrays of unsigned char* already... */
267 bfd_h_put_16 (abfd, src->e_type, dst->e_type);
268 bfd_h_put_16 (abfd, src->e_machine, dst->e_machine);
269 bfd_h_put_32 (abfd, src->e_version, dst->e_version);
270 put_word (abfd, src->e_entry, dst->e_entry);
271 put_word (abfd, src->e_phoff, dst->e_phoff);
272 put_word (abfd, src->e_shoff, dst->e_shoff);
273 bfd_h_put_32 (abfd, src->e_flags, dst->e_flags);
274 bfd_h_put_16 (abfd, src->e_ehsize, dst->e_ehsize);
275 bfd_h_put_16 (abfd, src->e_phentsize, dst->e_phentsize);
276 bfd_h_put_16 (abfd, src->e_phnum, dst->e_phnum);
277 bfd_h_put_16 (abfd, src->e_shentsize, dst->e_shentsize);
278 bfd_h_put_16 (abfd, src->e_shnum, dst->e_shnum);
279 bfd_h_put_16 (abfd, src->e_shstrndx, dst->e_shstrndx);
283 /* Translate an ELF section header table entry in external format into an
284 ELF section header table entry in internal format. */
287 elf_swap_shdr_in (abfd, src, dst)
289 Elf_External_Shdr *src;
290 Elf_Internal_Shdr *dst;
292 dst->sh_name = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_name);
293 dst->sh_type = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_type);
294 dst->sh_flags = get_word (abfd, (bfd_byte *) src->sh_flags);
295 dst->sh_addr = get_word (abfd, (bfd_byte *) src->sh_addr);
296 dst->sh_offset = get_word (abfd, (bfd_byte *) src->sh_offset);
297 dst->sh_size = get_word (abfd, (bfd_byte *) src->sh_size);
298 dst->sh_link = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_link);
299 dst->sh_info = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_info);
300 dst->sh_addralign = get_word (abfd, (bfd_byte *) src->sh_addralign);
301 dst->sh_entsize = get_word (abfd, (bfd_byte *) src->sh_entsize);
302 dst->bfd_section = NULL;
303 dst->contents = NULL;
306 /* Translate an ELF section header table entry in internal format into an
307 ELF section header table entry in external format. */
310 elf_swap_shdr_out (abfd, src, dst)
312 Elf_Internal_Shdr *src;
313 Elf_External_Shdr *dst;
315 /* note that all elements of dst are *arrays of unsigned char* already... */
316 bfd_h_put_32 (abfd, src->sh_name, dst->sh_name);
317 bfd_h_put_32 (abfd, src->sh_type, dst->sh_type);
318 put_word (abfd, src->sh_flags, dst->sh_flags);
319 put_word (abfd, src->sh_addr, dst->sh_addr);
320 put_word (abfd, src->sh_offset, dst->sh_offset);
321 put_word (abfd, src->sh_size, dst->sh_size);
322 bfd_h_put_32 (abfd, src->sh_link, dst->sh_link);
323 bfd_h_put_32 (abfd, src->sh_info, dst->sh_info);
324 put_word (abfd, src->sh_addralign, dst->sh_addralign);
325 put_word (abfd, src->sh_entsize, dst->sh_entsize);
329 /* Translate an ELF program header table entry in external format into an
330 ELF program header table entry in internal format. */
333 elf_swap_phdr_in (abfd, src, dst)
335 Elf_External_Phdr *src;
336 Elf_Internal_Phdr *dst;
338 dst->p_type = bfd_h_get_32 (abfd, (bfd_byte *) src->p_type);
339 dst->p_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->p_flags);
340 dst->p_offset = get_word (abfd, (bfd_byte *) src->p_offset);
341 dst->p_vaddr = get_word (abfd, (bfd_byte *) src->p_vaddr);
342 dst->p_paddr = get_word (abfd, (bfd_byte *) src->p_paddr);
343 dst->p_filesz = get_word (abfd, (bfd_byte *) src->p_filesz);
344 dst->p_memsz = get_word (abfd, (bfd_byte *) src->p_memsz);
345 dst->p_align = get_word (abfd, (bfd_byte *) src->p_align);
349 elf_swap_phdr_out (abfd, src, dst)
351 Elf_Internal_Phdr *src;
352 Elf_External_Phdr *dst;
354 /* note that all elements of dst are *arrays of unsigned char* already... */
355 bfd_h_put_32 (abfd, src->p_type, dst->p_type);
356 put_word (abfd, src->p_offset, dst->p_offset);
357 put_word (abfd, src->p_vaddr, dst->p_vaddr);
358 put_word (abfd, src->p_paddr, dst->p_paddr);
359 put_word (abfd, src->p_filesz, dst->p_filesz);
360 put_word (abfd, src->p_memsz, dst->p_memsz);
361 bfd_h_put_32 (abfd, src->p_flags, dst->p_flags);
362 put_word (abfd, src->p_align, dst->p_align);
365 /* Translate an ELF reloc from external format to internal format. */
367 elf_swap_reloc_in (abfd, src, dst)
369 Elf_External_Rel *src;
370 Elf_Internal_Rel *dst;
372 dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
373 dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
377 elf_swap_reloca_in (abfd, src, dst)
379 Elf_External_Rela *src;
380 Elf_Internal_Rela *dst;
382 dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
383 dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
384 dst->r_addend = get_word (abfd, (bfd_byte *) src->r_addend);
387 /* Translate an ELF reloc from internal format to external format. */
389 elf_swap_reloc_out (abfd, src, dst)
391 Elf_Internal_Rel *src;
392 Elf_External_Rel *dst;
394 put_word (abfd, src->r_offset, dst->r_offset);
395 put_word (abfd, src->r_info, dst->r_info);
399 elf_swap_reloca_out (abfd, src, dst)
401 Elf_Internal_Rela *src;
402 Elf_External_Rela *dst;
404 put_word (abfd, src->r_offset, dst->r_offset);
405 put_word (abfd, src->r_info, dst->r_info);
406 put_word (abfd, src->r_addend, dst->r_addend);
410 elf_swap_dyn_in (abfd, src, dst)
412 const Elf_External_Dyn *src;
413 Elf_Internal_Dyn *dst;
415 dst->d_tag = get_word (abfd, src->d_tag);
416 dst->d_un.d_val = get_word (abfd, src->d_un.d_val);
420 elf_swap_dyn_out (abfd, src, dst)
422 const Elf_Internal_Dyn *src;
423 Elf_External_Dyn *dst;
425 put_word (abfd, src->d_tag, dst->d_tag);
426 put_word (abfd, src->d_un.d_val, dst->d_un.d_val);
429 /* Allocate an ELF string table--force the first byte to be zero. */
431 static struct bfd_strtab_hash *
432 elf_stringtab_init ()
434 struct bfd_strtab_hash *ret;
436 ret = _bfd_stringtab_init ();
441 loc = _bfd_stringtab_add (ret, "", true, false);
442 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
443 if (loc == (bfd_size_type) -1)
445 _bfd_stringtab_free (ret);
452 /* ELF .o/exec file reading */
454 /* Create a new bfd section from an ELF section header. */
457 bfd_section_from_shdr (abfd, shindex)
459 unsigned int shindex;
461 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
462 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
465 name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
467 switch (hdr->sh_type)
470 /* Inactive section. Throw it away. */
473 case SHT_PROGBITS: /* Normal section with contents. */
474 case SHT_DYNAMIC: /* Dynamic linking information. */
475 case SHT_NOBITS: /* .bss section. */
476 case SHT_HASH: /* .hash section. */
477 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
479 case SHT_SYMTAB: /* A symbol table */
480 if (elf_onesymtab (abfd) == shindex)
483 BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
484 BFD_ASSERT (elf_onesymtab (abfd) == 0);
485 elf_onesymtab (abfd) = shindex;
486 elf_tdata (abfd)->symtab_hdr = *hdr;
487 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_hdr;
488 abfd->flags |= HAS_SYMS;
490 /* Sometimes a shared object will map in the symbol table. If
491 SHF_ALLOC is set, and this is a shared object, then we also
492 treat this section as a BFD section. We can not base the
493 decision purely on SHF_ALLOC, because that flag is sometimes
494 set in a relocateable object file, which would confuse the
496 if ((hdr->sh_flags & SHF_ALLOC) != 0
497 && (abfd->flags & DYNAMIC) != 0
498 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
503 case SHT_DYNSYM: /* A dynamic symbol table */
504 if (elf_dynsymtab (abfd) == shindex)
507 BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
508 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
509 elf_dynsymtab (abfd) = shindex;
510 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
511 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->dynsymtab_hdr;
512 abfd->flags |= HAS_SYMS;
514 /* Besides being a symbol table, we also treat this as a regular
515 section, so that objcopy can handle it. */
516 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
518 case SHT_STRTAB: /* A string table */
519 if (hdr->bfd_section != NULL)
521 if (ehdr->e_shstrndx == shindex)
523 elf_tdata (abfd)->shstrtab_hdr = *hdr;
524 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
530 for (i = 1; i < ehdr->e_shnum; i++)
532 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
533 if (hdr2->sh_link == shindex)
535 if (! bfd_section_from_shdr (abfd, i))
537 if (elf_onesymtab (abfd) == i)
539 elf_tdata (abfd)->strtab_hdr = *hdr;
540 elf_elfsections (abfd)[shindex] =
541 &elf_tdata (abfd)->strtab_hdr;
544 if (elf_dynsymtab (abfd) == i)
546 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
547 elf_elfsections (abfd)[shindex] =
548 &elf_tdata (abfd)->dynstrtab_hdr;
549 /* We also treat this as a regular section, so
550 that objcopy can handle it. */
553 #if 0 /* Not handling other string tables specially right now. */
554 hdr2 = elf_elfsections (abfd)[i]; /* in case it moved */
555 /* We have a strtab for some random other section. */
556 newsect = (asection *) hdr2->bfd_section;
559 hdr->bfd_section = newsect;
560 hdr2 = &elf_section_data (newsect)->str_hdr;
562 elf_elfsections (abfd)[shindex] = hdr2;
568 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
572 /* *These* do a lot of work -- but build no sections! */
574 asection *target_sect;
575 Elf_Internal_Shdr *hdr2;
576 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
578 /* Get the symbol table. */
579 if (! bfd_section_from_shdr (abfd, hdr->sh_link))
582 /* If this reloc section does not use the main symbol table we
583 don't treat it as a reloc section. BFD can't adequately
584 represent such a section, so at least for now, we don't
585 try. We just present it as a normal section. */
586 if (hdr->sh_link != elf_onesymtab (abfd))
587 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
589 /* Don't allow REL relocations on a machine that uses RELA and
591 /* @@ Actually, the generic ABI does suggest that both might be
592 used in one file. But the four ABI Processor Supplements I
593 have access to right now all specify that only one is used on
594 each of those architectures. It's conceivable that, e.g., a
595 bunch of absolute 32-bit relocs might be more compact in REL
596 form even on a RELA machine... */
597 BFD_ASSERT (use_rela_p
598 ? (hdr->sh_type == SHT_RELA
599 && hdr->sh_entsize == sizeof (Elf_External_Rela))
600 : (hdr->sh_type == SHT_REL
601 && hdr->sh_entsize == sizeof (Elf_External_Rel)));
603 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
605 target_sect = section_from_elf_index (abfd, hdr->sh_info);
606 if (target_sect == NULL)
609 hdr2 = &elf_section_data (target_sect)->rel_hdr;
611 elf_elfsections (abfd)[shindex] = hdr2;
612 target_sect->reloc_count = hdr->sh_size / hdr->sh_entsize;
613 target_sect->flags |= SEC_RELOC;
614 target_sect->relocation = NULL;
615 target_sect->rel_filepos = hdr->sh_offset;
616 abfd->flags |= HAS_RELOC;
623 fprintf (stderr, "Note Sections not yet supported.\n");
630 fprintf (stderr, "SHLIB Sections not supported (and non conforming.)\n");
635 /* Check for any processor-specific section types. */
637 struct elf_backend_data *bed = get_elf_backend_data (abfd);
639 if (bed->elf_backend_section_from_shdr)
640 (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
649 elf_new_section_hook (abfd, sec)
654 struct bfd_elf_section_data *sdata;
656 sdata = (struct bfd_elf_section_data *) bfd_alloc (abfd, sizeof (*sdata));
659 bfd_set_error (bfd_error_no_memory);
662 sec->used_by_bfd = (PTR) sdata;
663 memset (sdata, 0, sizeof (*sdata));
667 /* Create a new bfd section from an ELF program header.
669 Since program segments have no names, we generate a synthetic name
670 of the form segment<NUM>, where NUM is generally the index in the
671 program header table. For segments that are split (see below) we
672 generate the names segment<NUM>a and segment<NUM>b.
674 Note that some program segments may have a file size that is different than
675 (less than) the memory size. All this means is that at execution the
676 system must allocate the amount of memory specified by the memory size,
677 but only initialize it with the first "file size" bytes read from the
678 file. This would occur for example, with program segments consisting
679 of combined data+bss.
681 To handle the above situation, this routine generates TWO bfd sections
682 for the single program segment. The first has the length specified by
683 the file size of the segment, and the second has the length specified
684 by the difference between the two sizes. In effect, the segment is split
685 into it's initialized and uninitialized parts.
690 bfd_section_from_phdr (abfd, hdr, index)
692 Elf_Internal_Phdr *hdr;
700 split = ((hdr->p_memsz > 0) &&
701 (hdr->p_filesz > 0) &&
702 (hdr->p_memsz > hdr->p_filesz));
703 sprintf (namebuf, split ? "segment%da" : "segment%d", index);
704 name = bfd_alloc (abfd, strlen (namebuf) + 1);
707 bfd_set_error (bfd_error_no_memory);
710 strcpy (name, namebuf);
711 newsect = bfd_make_section (abfd, name);
714 newsect->vma = hdr->p_vaddr;
715 newsect->_raw_size = hdr->p_filesz;
716 newsect->filepos = hdr->p_offset;
717 newsect->flags |= SEC_HAS_CONTENTS;
718 if (hdr->p_type == PT_LOAD)
720 newsect->flags |= SEC_ALLOC;
721 newsect->flags |= SEC_LOAD;
722 if (hdr->p_flags & PF_X)
724 /* FIXME: all we known is that it has execute PERMISSION,
726 newsect->flags |= SEC_CODE;
729 if (!(hdr->p_flags & PF_W))
731 newsect->flags |= SEC_READONLY;
736 sprintf (namebuf, "segment%db", index);
737 name = bfd_alloc (abfd, strlen (namebuf) + 1);
740 bfd_set_error (bfd_error_no_memory);
743 strcpy (name, namebuf);
744 newsect = bfd_make_section (abfd, name);
747 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
748 newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
749 if (hdr->p_type == PT_LOAD)
751 newsect->flags |= SEC_ALLOC;
752 if (hdr->p_flags & PF_X)
753 newsect->flags |= SEC_CODE;
755 if (!(hdr->p_flags & PF_W))
756 newsect->flags |= SEC_READONLY;
762 /* Begin processing a given object.
764 First we validate the file by reading in the ELF header and checking
767 static INLINE boolean
769 Elf_External_Ehdr *x_ehdrp;
771 return ((x_ehdrp->e_ident[EI_MAG0] == ELFMAG0)
772 && (x_ehdrp->e_ident[EI_MAG1] == ELFMAG1)
773 && (x_ehdrp->e_ident[EI_MAG2] == ELFMAG2)
774 && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3));
777 /* Check to see if the file associated with ABFD matches the target vector
780 Note that we may be called several times with the same ABFD, but different
781 target vectors, most of which will not match. We have to avoid leaving
782 any side effects in ABFD, or any data it points to (like tdata), if the
783 file does not match the target vector. */
789 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
790 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
791 Elf_External_Shdr x_shdr; /* Section header table entry, external form */
792 Elf_Internal_Shdr *i_shdrp = NULL; /* Section header table, internal form */
793 unsigned int shindex;
794 char *shstrtab; /* Internal copy of section header stringtab */
795 struct elf_backend_data *ebd;
796 struct elf_obj_tdata *preserved_tdata = elf_tdata (abfd);
797 struct elf_obj_tdata *new_tdata = NULL;
799 /* Read in the ELF header in external format. */
801 if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
803 if (bfd_get_error () != bfd_error_system_call)
804 goto got_wrong_format_error;
809 /* Now check to see if we have a valid ELF file, and one that BFD can
810 make use of. The magic number must match, the address size ('class')
811 and byte-swapping must match our XVEC entry, and it must have a
812 section header table (FIXME: See comments re sections at top of this
815 if ((elf_file_p (&x_ehdr) == false) ||
816 (x_ehdr.e_ident[EI_VERSION] != EV_CURRENT) ||
817 (x_ehdr.e_ident[EI_CLASS] != ELFCLASS))
818 goto got_wrong_format_error;
820 /* Check that file's byte order matches xvec's */
821 switch (x_ehdr.e_ident[EI_DATA])
823 case ELFDATA2MSB: /* Big-endian */
824 if (!abfd->xvec->header_byteorder_big_p)
825 goto got_wrong_format_error;
827 case ELFDATA2LSB: /* Little-endian */
828 if (abfd->xvec->header_byteorder_big_p)
829 goto got_wrong_format_error;
831 case ELFDATANONE: /* No data encoding specified */
832 default: /* Unknown data encoding specified */
833 goto got_wrong_format_error;
836 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
837 the tdata pointer in the bfd. */
839 new_tdata = ((struct elf_obj_tdata *)
840 bfd_zalloc (abfd, sizeof (struct elf_obj_tdata)));
841 if (new_tdata == NULL)
842 goto got_no_memory_error;
843 elf_tdata (abfd) = new_tdata;
845 /* Now that we know the byte order, swap in the rest of the header */
846 i_ehdrp = elf_elfheader (abfd);
847 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
849 elf_debug_file (i_ehdrp);
852 /* If there is no section header table, we're hosed. */
853 if (i_ehdrp->e_shoff == 0)
854 goto got_wrong_format_error;
856 /* As a simple sanity check, verify that the what BFD thinks is the
857 size of each section header table entry actually matches the size
858 recorded in the file. */
859 if (i_ehdrp->e_shentsize != sizeof (x_shdr))
860 goto got_wrong_format_error;
862 ebd = get_elf_backend_data (abfd);
864 /* Check that the ELF e_machine field matches what this particular
865 BFD format expects. */
866 if (ebd->elf_machine_code != i_ehdrp->e_machine)
868 const bfd_target * const *target_ptr;
870 if (ebd->elf_machine_code != EM_NONE)
871 goto got_wrong_format_error;
873 /* This is the generic ELF target. Let it match any ELF target
874 for which we do not have a specific backend. */
875 for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
877 struct elf_backend_data *back;
879 if ((*target_ptr)->flavour != bfd_target_elf_flavour)
881 back = (struct elf_backend_data *) (*target_ptr)->backend_data;
882 if (back->elf_machine_code == i_ehdrp->e_machine)
884 /* target_ptr is an ELF backend which matches this
885 object file, so reject the generic ELF target. */
886 goto got_wrong_format_error;
891 if (i_ehdrp->e_type == ET_EXEC)
892 abfd->flags |= EXEC_P;
893 else if (i_ehdrp->e_type == ET_DYN)
894 abfd->flags |= DYNAMIC;
896 if (i_ehdrp->e_phnum > 0)
897 abfd->flags |= D_PAGED;
899 if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
902 /* Remember the entry point specified in the ELF file header. */
903 bfd_get_start_address (abfd) = i_ehdrp->e_entry;
905 /* Allocate space for a copy of the section header table in
906 internal form, seek to the section header table in the file,
907 read it in, and convert it to internal form. */
908 i_shdrp = ((Elf_Internal_Shdr *)
909 bfd_alloc (abfd, sizeof (*i_shdrp) * i_ehdrp->e_shnum));
910 elf_elfsections (abfd) = ((Elf_Internal_Shdr **)
912 sizeof (i_shdrp) * i_ehdrp->e_shnum));
913 if (!i_shdrp || !elf_elfsections (abfd))
914 goto got_no_memory_error;
915 if (bfd_seek (abfd, i_ehdrp->e_shoff, SEEK_SET) != 0)
917 for (shindex = 0; shindex < i_ehdrp->e_shnum; shindex++)
919 if (bfd_read ((PTR) & x_shdr, sizeof x_shdr, 1, abfd) != sizeof (x_shdr))
921 elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
922 elf_elfsections (abfd)[shindex] = i_shdrp + shindex;
924 if (i_ehdrp->e_shstrndx)
926 if (! bfd_section_from_shdr (abfd, i_ehdrp->e_shstrndx))
930 /* Read in the string table containing the names of the sections. We
931 will need the base pointer to this table later. */
932 /* We read this inline now, so that we don't have to go through
933 bfd_section_from_shdr with it (since this particular strtab is
934 used to find all of the ELF section names.) */
936 shstrtab = elf_get_str_section (abfd, i_ehdrp->e_shstrndx);
940 /* Once all of the section headers have been read and converted, we
941 can start processing them. Note that the first section header is
942 a dummy placeholder entry, so we ignore it. */
944 for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
946 if (! bfd_section_from_shdr (abfd, shindex))
950 /* Let the backend double check the format and override global
952 if (ebd->elf_backend_object_p)
954 if ((*ebd->elf_backend_object_p) (abfd) == false)
955 goto got_wrong_format_error;
960 got_wrong_format_error:
961 bfd_set_error (bfd_error_wrong_format);
964 bfd_set_error (bfd_error_no_memory);
967 if (new_tdata != NULL
968 && new_tdata->elf_sect_ptr != NULL)
969 bfd_release (abfd, new_tdata->elf_sect_ptr);
971 bfd_release (abfd, i_shdrp);
972 if (new_tdata != NULL)
973 bfd_release (abfd, new_tdata);
974 elf_tdata (abfd) = preserved_tdata;
979 /* ELF .o/exec file writing */
981 /* Takes a bfd and a symbol, returns a pointer to the elf specific area
982 of the symbol if there is one. */
983 static INLINE elf_symbol_type *
984 elf_symbol_from (ignore_abfd, symbol)
988 if (symbol->the_bfd->xvec->flavour != bfd_target_elf_flavour)
991 if (symbol->the_bfd->tdata.elf_obj_data == (struct elf_obj_tdata *) NULL)
994 return (elf_symbol_type *) symbol;
998 write_relocs (abfd, sec, xxx)
1003 Elf_Internal_Shdr *rela_hdr;
1004 Elf_External_Rela *outbound_relocas;
1005 Elf_External_Rel *outbound_relocs;
1007 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1008 asymbol *last_sym = 0;
1009 int last_sym_idx = 9999999; /* should always be written before use */
1011 if ((sec->flags & SEC_RELOC) == 0)
1014 /* The linker backend writes the relocs out itself, and sets the
1015 reloc_count field to zero to inhibit writing them here. Also,
1016 sometimes the SEC_RELOC flag gets set even when there aren't any
1018 if (sec->reloc_count == 0)
1021 rela_hdr = &elf_section_data (sec)->rel_hdr;
1023 rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count;
1024 rela_hdr->contents = (void *) bfd_alloc (abfd, rela_hdr->sh_size);
1025 if (!rela_hdr->contents)
1027 bfd_set_error (bfd_error_no_memory);
1028 abort (); /* FIXME */
1031 /* orelocation has the data, reloc_count has the count... */
1034 outbound_relocas = (Elf_External_Rela *) rela_hdr->contents;
1036 for (idx = 0; idx < sec->reloc_count; idx++)
1038 Elf_Internal_Rela dst_rela;
1039 Elf_External_Rela *src_rela;
1044 ptr = sec->orelocation[idx];
1045 src_rela = outbound_relocas + idx;
1046 if (!(abfd->flags & EXEC_P))
1047 dst_rela.r_offset = ptr->address - sec->vma;
1049 dst_rela.r_offset = ptr->address;
1051 sym = *ptr->sym_ptr_ptr;
1052 if (sym == last_sym)
1057 last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1059 dst_rela.r_info = ELF_R_INFO (n, ptr->howto->type);
1061 dst_rela.r_addend = ptr->addend;
1062 elf_swap_reloca_out (abfd, &dst_rela, src_rela);
1066 /* REL relocations */
1068 outbound_relocs = (Elf_External_Rel *) rela_hdr->contents;
1070 for (idx = 0; idx < sec->reloc_count; idx++)
1072 Elf_Internal_Rel dst_rel;
1073 Elf_External_Rel *src_rel;
1078 ptr = sec->orelocation[idx];
1079 sym = *ptr->sym_ptr_ptr;
1080 src_rel = outbound_relocs + idx;
1081 if (!(abfd->flags & EXEC_P))
1082 dst_rel.r_offset = ptr->address - sec->vma;
1084 dst_rel.r_offset = ptr->address;
1086 if (sym == last_sym)
1091 last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1093 dst_rel.r_info = ELF_R_INFO (n, ptr->howto->type);
1095 elf_swap_reloc_out (abfd, &dst_rel, src_rel);
1100 /* Set up an ELF internal section header for a section. */
1104 elf_fake_sections (abfd, asect, failedptrarg)
1109 boolean *failedptr = (boolean *) failedptrarg;
1110 Elf_Internal_Shdr *this_hdr;
1114 /* We already failed; just get out of the bfd_map_over_sections
1119 this_hdr = &elf_section_data (asect)->this_hdr;
1121 this_hdr->sh_name = (unsigned long) _bfd_stringtab_add (elf_shstrtab (abfd),
1124 if (this_hdr->sh_name == (unsigned long) -1)
1130 this_hdr->sh_flags = 0;
1131 if ((asect->flags & SEC_ALLOC) != 0)
1132 this_hdr->sh_addr = asect->vma;
1134 this_hdr->sh_addr = 0;
1135 this_hdr->sh_offset = 0;
1136 this_hdr->sh_size = asect->_raw_size;
1137 this_hdr->sh_link = 0;
1138 this_hdr->sh_info = 0;
1139 this_hdr->sh_addralign = 1 << asect->alignment_power;
1140 this_hdr->sh_entsize = 0;
1142 this_hdr->bfd_section = asect;
1143 this_hdr->contents = NULL;
1145 /* FIXME: This should not be based on section names. */
1146 if (strcmp (asect->name, ".dynstr") == 0)
1147 this_hdr->sh_type = SHT_STRTAB;
1148 else if (strcmp (asect->name, ".hash") == 0)
1150 this_hdr->sh_type = SHT_HASH;
1151 this_hdr->sh_entsize = ARCH_SIZE / 8;
1153 else if (strcmp (asect->name, ".dynsym") == 0)
1155 this_hdr->sh_type = SHT_DYNSYM;
1156 this_hdr->sh_entsize = sizeof (Elf_External_Sym);
1158 else if (strcmp (asect->name, ".dynamic") == 0)
1160 this_hdr->sh_type = SHT_DYNAMIC;
1161 this_hdr->sh_entsize = sizeof (Elf_External_Dyn);
1163 else if (strncmp (asect->name, ".rela", 5) == 0
1164 && get_elf_backend_data (abfd)->use_rela_p)
1166 this_hdr->sh_type = SHT_RELA;
1167 this_hdr->sh_entsize = sizeof (Elf_External_Rela);
1169 else if (strncmp (asect->name, ".rel", 4) == 0
1170 && ! get_elf_backend_data (abfd)->use_rela_p)
1172 this_hdr->sh_type = SHT_REL;
1173 this_hdr->sh_entsize = sizeof (Elf_External_Rel);
1175 else if (strcmp (asect->name, ".note") == 0)
1176 this_hdr->sh_type = SHT_NOTE;
1177 else if (strncmp (asect->name, ".stab", 5) == 0
1178 && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1179 this_hdr->sh_type = SHT_STRTAB;
1180 else if ((asect->flags & SEC_ALLOC) != 0
1181 && (asect->flags & SEC_LOAD) != 0)
1182 this_hdr->sh_type = SHT_PROGBITS;
1183 else if ((asect->flags & SEC_ALLOC) != 0
1184 && ((asect->flags & SEC_LOAD) == 0))
1186 BFD_ASSERT (strcmp (asect->name, ".bss") == 0
1187 || strcmp (asect->name, ".sbss") == 0);
1188 this_hdr->sh_type = SHT_NOBITS;
1193 this_hdr->sh_type = SHT_PROGBITS;
1196 if ((asect->flags & SEC_ALLOC) != 0)
1197 this_hdr->sh_flags |= SHF_ALLOC;
1198 if ((asect->flags & SEC_READONLY) == 0)
1199 this_hdr->sh_flags |= SHF_WRITE;
1200 if ((asect->flags & SEC_CODE) != 0)
1201 this_hdr->sh_flags |= SHF_EXECINSTR;
1203 /* Check for processor-specific section types. */
1205 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1207 if (bed->elf_backend_fake_sections)
1208 (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1211 /* If the section has relocs, set up a section header for the
1212 SHT_REL[A] section. */
1213 if ((asect->flags & SEC_RELOC) != 0)
1215 Elf_Internal_Shdr *rela_hdr;
1216 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1219 rela_hdr = &elf_section_data (asect)->rel_hdr;
1220 name = bfd_alloc (abfd, sizeof ".rela" + strlen (asect->name));
1223 bfd_set_error (bfd_error_no_memory);
1227 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
1229 (unsigned int) _bfd_stringtab_add (elf_shstrtab (abfd), name,
1231 if (rela_hdr->sh_name == (unsigned int) -1)
1236 rela_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1237 rela_hdr->sh_entsize = (use_rela_p
1238 ? sizeof (Elf_External_Rela)
1239 : sizeof (Elf_External_Rel));
1240 rela_hdr->sh_addralign = FILE_ALIGN;
1241 rela_hdr->sh_flags = 0;
1242 rela_hdr->sh_addr = 0;
1243 rela_hdr->sh_size = 0;
1244 rela_hdr->sh_offset = 0;
1248 /* Assign all ELF section numbers. The dummy first section is handled here
1249 too. The link/info pointers for the standard section types are filled
1250 in here too, while we're at it. */
1253 assign_section_numbers (abfd)
1256 struct elf_obj_tdata *t = elf_tdata (abfd);
1258 unsigned int section_number;
1259 Elf_Internal_Shdr **i_shdrp;
1263 for (sec = abfd->sections; sec; sec = sec->next)
1265 struct bfd_elf_section_data *d = elf_section_data (sec);
1267 d->this_idx = section_number++;
1268 if ((sec->flags & SEC_RELOC) == 0)
1271 d->rel_idx = section_number++;
1274 t->shstrtab_section = section_number++;
1275 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
1276 t->shstrtab_hdr.sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1278 if (abfd->symcount > 0)
1280 t->symtab_section = section_number++;
1281 t->strtab_section = section_number++;
1284 elf_elfheader (abfd)->e_shnum = section_number;
1286 /* Set up the list of section header pointers, in agreement with the
1288 i_shdrp = ((Elf_Internal_Shdr **)
1289 bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *)));
1290 if (i_shdrp == NULL)
1292 bfd_set_error (bfd_error_no_memory);
1296 i_shdrp[0] = ((Elf_Internal_Shdr *)
1297 bfd_alloc (abfd, sizeof (Elf_Internal_Shdr)));
1298 if (i_shdrp[0] == NULL)
1300 bfd_release (abfd, i_shdrp);
1301 bfd_set_error (bfd_error_no_memory);
1304 memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
1306 elf_elfsections (abfd) = i_shdrp;
1308 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1309 if (abfd->symcount > 0)
1311 i_shdrp[t->symtab_section] = &t->symtab_hdr;
1312 i_shdrp[t->strtab_section] = &t->strtab_hdr;
1313 t->symtab_hdr.sh_link = t->strtab_section;
1315 for (sec = abfd->sections; sec; sec = sec->next)
1317 struct bfd_elf_section_data *d = elf_section_data (sec);
1321 i_shdrp[d->this_idx] = &d->this_hdr;
1322 if (d->rel_idx != 0)
1323 i_shdrp[d->rel_idx] = &d->rel_hdr;
1325 /* Fill in the sh_link and sh_info fields while we're at it. */
1327 /* sh_link of a reloc section is the section index of the symbol
1328 table. sh_info is the section index of the section to which
1329 the relocation entries apply. */
1330 if (d->rel_idx != 0)
1332 d->rel_hdr.sh_link = t->symtab_section;
1333 d->rel_hdr.sh_info = d->this_idx;
1336 switch (d->this_hdr.sh_type)
1340 /* A reloc section which we are treating as a normal BFD
1341 section. sh_link is the section index of the symbol
1342 table. sh_info is the section index of the section to
1343 which the relocation entries apply. We assume that an
1344 allocated reloc section uses the dynamic symbol table.
1345 FIXME: How can we be sure? */
1346 s = bfd_get_section_by_name (abfd, ".dynsym");
1348 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1350 /* We look up the section the relocs apply to by name. */
1352 if (d->this_hdr.sh_type == SHT_REL)
1356 s = bfd_get_section_by_name (abfd, name);
1358 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
1362 /* We assume that a section named .stab*str is a stabs
1363 string section. We look for a section with the same name
1364 but without the trailing ``str'', and set its sh_link
1365 field to point to this section. */
1366 if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
1367 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
1372 len = strlen (sec->name);
1373 alc = (char *) malloc (len - 2);
1376 bfd_set_error (bfd_error_no_memory);
1379 strncpy (alc, sec->name, len - 3);
1380 alc[len - 3] = '\0';
1381 s = bfd_get_section_by_name (abfd, alc);
1385 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1387 /* This is a .stab section. */
1388 elf_section_data (s)->this_hdr.sh_entsize =
1389 4 + 2 * (ARCH_SIZE / 8);
1396 /* sh_link is the section header index of the string table
1397 used for the dynamic entries or symbol table. */
1398 s = bfd_get_section_by_name (abfd, ".dynstr");
1400 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1404 /* sh_link is the section header index of the symbol table
1405 this hash table is for. */
1406 s = bfd_get_section_by_name (abfd, ".dynsym");
1408 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1416 /* Map symbol from it's internal number to the external number, moving
1417 all local symbols to be at the head of the list. */
1420 sym_is_global (abfd, sym)
1424 /* If the backend has a special mapping, use it. */
1425 if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1426 return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1429 if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
1431 if (sym->flags & BSF_LOCAL)
1435 if (sym->section == 0)
1437 /* Is this valid? */
1442 if (bfd_is_und_section (sym->section))
1444 if (bfd_is_com_section (sym->section))
1446 if (sym->flags & (BSF_LOCAL | BSF_SECTION_SYM | BSF_FILE))
1452 elf_map_symbols (abfd)
1455 int symcount = bfd_get_symcount (abfd);
1456 asymbol **syms = bfd_get_outsymbols (abfd);
1457 asymbol **sect_syms;
1459 int num_globals = 0;
1460 int num_locals2 = 0;
1461 int num_globals2 = 0;
1463 int num_sections = 0;
1464 Elf_Sym_Extra *sym_extra;
1469 fprintf (stderr, "elf_map_symbols\n");
1473 /* Add local symbols for each section for which there are relocs.
1474 FIXME: How can we tell which sections have relocs at this point?
1475 Will reloc_count always be accurate? Actually, I think most ELF
1476 targets create section symbols for all sections anyhow. */
1477 for (asect = abfd->sections; asect; asect = asect->next)
1479 if (max_index < asect->index)
1480 max_index = asect->index;
1484 sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1485 elf_section_syms (abfd) = sect_syms;
1489 bfd_set_error (bfd_error_no_memory);
1493 for (idx = 0; idx < symcount; idx++)
1495 if ((syms[idx]->flags & BSF_SECTION_SYM) != 0)
1499 sec = syms[idx]->section;
1500 if (! bfd_is_abs_section (sec))
1502 if (sec->owner != abfd)
1504 sec = sec->output_section;
1505 BFD_ASSERT (sec->owner == abfd);
1507 sect_syms[sec->index] = syms[idx];
1512 for (asect = abfd->sections; asect; asect = asect->next)
1516 if (sect_syms[asect->index] != NULL)
1519 sym = bfd_make_empty_symbol (abfd);
1522 sym->the_bfd = abfd;
1523 sym->name = asect->name;
1524 sym->value = asect->vma;
1525 /* Set the flags to 0 to indicate that this one was newly added. */
1527 sym->section = asect;
1528 sect_syms[asect->index] = sym;
1532 "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n",
1533 asect->name, (long) asect->vma, asect->index, (long) asect);
1541 asymbol **osyms = syms;
1542 syms = (asymbol **) bfd_alloc (abfd,
1543 ((symcount + num_sections + 1)
1544 * sizeof (asymbol *)));
1545 memcpy (syms, osyms, symcount * sizeof (asymbol *));
1548 syms = (asymbol **) bfd_alloc (abfd,
1549 (num_sections + 1) * sizeof (asymbol *));
1552 bfd_set_error (bfd_error_no_memory);
1556 for (asect = abfd->sections; asect; asect = asect->next)
1558 if (sect_syms[asect->index] != NULL
1559 && sect_syms[asect->index]->flags == 0)
1561 sect_syms[asect->index]->flags = BSF_SECTION_SYM;
1562 syms[symcount++] = sect_syms[asect->index];
1566 syms[symcount] = (asymbol *) 0;
1567 bfd_set_symtab (abfd, syms, symcount);
1570 elf_sym_extra (abfd) = sym_extra
1571 = (Elf_Sym_Extra *) bfd_alloc (abfd, symcount * sizeof (Elf_Sym_Extra));
1574 bfd_set_error (bfd_error_no_memory);
1578 /* Identify and classify all of the symbols. */
1579 for (idx = 0; idx < symcount; idx++)
1581 if (!sym_is_global (abfd, syms[idx]))
1587 /* Now provide mapping information. Add +1 for skipping over the
1589 for (idx = 0; idx < symcount; idx++)
1591 syms[idx]->udata = (PTR) & sym_extra[idx];
1592 if (!sym_is_global (abfd, syms[idx]))
1593 sym_extra[idx].elf_sym_num = 1 + num_locals2++;
1595 sym_extra[idx].elf_sym_num = 1 + num_locals + num_globals2++;
1598 elf_num_locals (abfd) = num_locals;
1599 elf_num_globals (abfd) = num_globals;
1603 /* Compute the file positions we are going to put the sections at, and
1604 otherwise prepare to begin writing out the ELF file. If LINK_INFO
1605 is not NULL, this is being called by the ELF backend linker. */
1608 elf_compute_section_file_positions (abfd, link_info)
1610 struct bfd_link_info *link_info;
1612 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1614 struct bfd_strtab_hash *strtab;
1615 Elf_Internal_Shdr *shstrtab_hdr;
1617 if (abfd->output_has_begun)
1620 /* Do any elf backend specific processing first. */
1621 if (bed->elf_backend_begin_write_processing)
1622 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
1624 if (! prep_headers (abfd))
1628 bfd_map_over_sections (abfd, elf_fake_sections, &failed);
1632 if (!assign_section_numbers (abfd))
1635 /* The backend linker builds symbol table information itself. */
1636 if (link_info == NULL)
1638 if (! swap_out_syms (abfd, &strtab))
1642 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
1643 /* sh_name was set in prep_headers. */
1644 shstrtab_hdr->sh_type = SHT_STRTAB;
1645 shstrtab_hdr->sh_flags = 0;
1646 shstrtab_hdr->sh_addr = 0;
1647 shstrtab_hdr->sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1648 shstrtab_hdr->sh_entsize = 0;
1649 shstrtab_hdr->sh_link = 0;
1650 shstrtab_hdr->sh_info = 0;
1651 /* sh_offset is set in assign_file_positions_for_symtabs_and_strtabs. */
1652 shstrtab_hdr->sh_addralign = 1;
1654 if (!assign_file_positions_except_relocs (abfd,
1655 link_info == NULL ? true : false))
1658 if (link_info == NULL)
1660 /* Now that we know where the .strtab section goes, write it
1662 if ((bfd_seek (abfd, elf_tdata (abfd)->strtab_hdr.sh_offset, SEEK_SET)
1664 || ! _bfd_stringtab_emit (abfd, strtab))
1666 _bfd_stringtab_free (strtab);
1669 abfd->output_has_begun = true;
1675 /* Align to the maximum file alignment that could be required for any
1676 ELF data structure. */
1678 static INLINE file_ptr
1679 align_file_position (off)
1682 return (off + FILE_ALIGN - 1) & ~(FILE_ALIGN - 1);
1685 /* Assign a file position to a section, optionally aligning to the
1686 required section alignment. */
1688 static INLINE file_ptr
1689 assign_file_position_for_section (i_shdrp, offset, align)
1690 Elf_Internal_Shdr *i_shdrp;
1698 al = i_shdrp->sh_addralign;
1700 offset = BFD_ALIGN (offset, al);
1702 i_shdrp->sh_offset = offset;
1703 if (i_shdrp->bfd_section != NULL)
1704 i_shdrp->bfd_section->filepos = offset;
1705 if (i_shdrp->sh_type != SHT_NOBITS)
1706 offset += i_shdrp->sh_size;
1710 /* Get the size of the program header. This is called by the linker
1711 before any of the section VMA's are set, so it can't calculate the
1712 correct value for a strange memory layout. */
1714 static bfd_size_type
1715 get_program_header_size (abfd)
1721 /* Assume we will need exactly two PT_LOAD segments: one for text
1722 and one for data. */
1725 s = bfd_get_section_by_name (abfd, ".interp");
1726 if (s != NULL && (s->flags & SEC_LOAD) != 0)
1728 /* If we have a loadable interpreter section, we need a
1729 PT_INTERP segment. In this case, assume we also need a
1730 PT_PHDR segment, although that may not be true for all
1735 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
1737 /* We need a PT_DYNAMIC segment. */
1741 return segs * sizeof (Elf_External_Phdr);
1744 /* Create the program header. OFF is the file offset where the
1745 program header should be written. FIRST is the first loadable ELF
1746 section. PHDR_SIZE is the size of the program header as returned
1747 by get_program_header_size. */
1750 map_program_segments (abfd, off, first, phdr_size)
1753 Elf_Internal_Shdr *first;
1754 bfd_size_type phdr_size;
1756 Elf_Internal_Phdr phdrs[10];
1757 unsigned int phdr_count;
1758 Elf_Internal_Phdr *phdr;
1759 int phdr_size_adjust;
1761 Elf_Internal_Shdr **hdrpp;
1762 asection *sinterp, *sdyn;
1763 unsigned int last_type;
1764 Elf_Internal_Ehdr *i_ehdrp;
1766 BFD_ASSERT ((abfd->flags & (EXEC_P | DYNAMIC)) != 0);
1767 BFD_ASSERT (phdr_size / sizeof (Elf_Internal_Phdr)
1768 <= sizeof phdrs / sizeof (phdrs[0]));
1773 phdr_size_adjust = 0;
1775 /* If we have a loadable .interp section, we must create a PT_INTERP
1776 segment which must precede all PT_LOAD segments. We assume that
1777 we must also create a PT_PHDR segment, although that may not be
1778 true for all targets. */
1779 sinterp = bfd_get_section_by_name (abfd, ".interp");
1780 if (sinterp != NULL && (sinterp->flags & SEC_LOAD) != 0)
1782 BFD_ASSERT (first != NULL);
1784 phdr->p_type = PT_PHDR;
1786 phdr->p_offset = off;
1788 /* Account for any adjustment made because of the alignment of
1789 the first loadable section. */
1790 phdr_size_adjust = (first->sh_offset - phdr_size) - off;
1791 BFD_ASSERT (phdr_size_adjust >= 0 && phdr_size_adjust < 128);
1793 /* The program header precedes all loadable sections. This lets
1794 us compute its loadable address. This depends on the linker
1796 phdr->p_vaddr = first->sh_addr - (phdr_size + phdr_size_adjust);
1799 phdr->p_filesz = phdr_size;
1800 phdr->p_memsz = phdr_size;
1802 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
1803 phdr->p_flags = PF_R | PF_X;
1805 phdr->p_align = FILE_ALIGN;
1806 BFD_ASSERT ((phdr->p_vaddr - phdr->p_offset) % FILE_ALIGN == 0);
1808 /* Include the ELF header in the first loadable segment. */
1809 phdr_size_adjust += off;
1814 phdr->p_type = PT_INTERP;
1815 phdr->p_offset = sinterp->filepos;
1816 phdr->p_vaddr = sinterp->vma;
1818 phdr->p_filesz = sinterp->_raw_size;
1819 phdr->p_memsz = sinterp->_raw_size;
1820 phdr->p_flags = PF_R;
1821 phdr->p_align = 1 << bfd_get_section_alignment (abfd, sinterp);
1827 /* Look through the sections to see how they will be divided into
1828 program segments. The sections must be arranged in order by
1829 sh_addr for this to work correctly. */
1830 phdr->p_type = PT_NULL;
1831 last_type = SHT_PROGBITS;
1832 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
1833 i < elf_elfheader (abfd)->e_shnum;
1836 Elf_Internal_Shdr *hdr;
1840 /* Ignore any section which will not be part of the process
1842 if ((hdr->sh_flags & SHF_ALLOC) == 0)
1845 /* If this section fits in the segment we are constructing, add
1847 if (phdr->p_type != PT_NULL
1848 && (hdr->sh_offset - (phdr->p_offset + phdr->p_memsz)
1849 == hdr->sh_addr - (phdr->p_vaddr + phdr->p_memsz))
1850 && (last_type != SHT_NOBITS || hdr->sh_type == SHT_NOBITS))
1852 bfd_size_type adjust;
1854 adjust = hdr->sh_addr - (phdr->p_vaddr + phdr->p_memsz);
1855 phdr->p_memsz += hdr->sh_size + adjust;
1856 if (hdr->sh_type != SHT_NOBITS)
1857 phdr->p_filesz += hdr->sh_size + adjust;
1858 if ((hdr->sh_flags & SHF_WRITE) != 0)
1859 phdr->p_flags |= PF_W;
1860 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1861 phdr->p_flags |= PF_X;
1862 last_type = hdr->sh_type;
1866 /* If we have a segment, move to the next one. */
1867 if (phdr->p_type != PT_NULL)
1873 /* Start a new segment. */
1874 phdr->p_type = PT_LOAD;
1875 phdr->p_offset = hdr->sh_offset;
1876 phdr->p_vaddr = hdr->sh_addr;
1878 if (hdr->sh_type == SHT_NOBITS)
1881 phdr->p_filesz = hdr->sh_size;
1882 phdr->p_memsz = hdr->sh_size;
1883 phdr->p_flags = PF_R;
1884 if ((hdr->sh_flags & SHF_WRITE) != 0)
1885 phdr->p_flags |= PF_W;
1886 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1887 phdr->p_flags |= PF_X;
1888 phdr->p_align = get_elf_backend_data (abfd)->maxpagesize;
1892 && (sinterp->flags & SEC_LOAD) != 0)
1894 phdr->p_offset -= phdr_size + phdr_size_adjust;
1895 phdr->p_vaddr -= phdr_size + phdr_size_adjust;
1896 phdr->p_filesz += phdr_size + phdr_size_adjust;
1897 phdr->p_memsz += phdr_size + phdr_size_adjust;
1900 last_type = hdr->sh_type;
1903 if (phdr->p_type != PT_NULL)
1909 /* If we have a .dynamic section, create a PT_DYNAMIC segment. */
1910 sdyn = bfd_get_section_by_name (abfd, ".dynamic");
1911 if (sdyn != NULL && (sdyn->flags & SEC_LOAD) != 0)
1913 phdr->p_type = PT_DYNAMIC;
1914 phdr->p_offset = sdyn->filepos;
1915 phdr->p_vaddr = sdyn->vma;
1917 phdr->p_filesz = sdyn->_raw_size;
1918 phdr->p_memsz = sdyn->_raw_size;
1919 phdr->p_flags = PF_R;
1920 if ((sdyn->flags & SEC_READONLY) == 0)
1921 phdr->p_flags |= PF_W;
1922 if ((sdyn->flags & SEC_CODE) != 0)
1923 phdr->p_flags |= PF_X;
1924 phdr->p_align = 1 << bfd_get_section_alignment (abfd, sdyn);
1930 /* Make sure the return value from get_program_header_size matches
1931 what we computed here. Actually, it's OK if we allocated too
1932 much space in the program header. */
1933 if (phdr_count > phdr_size / sizeof (Elf_External_Phdr))
1936 /* Set up program header information. */
1937 i_ehdrp = elf_elfheader (abfd);
1938 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
1939 i_ehdrp->e_phoff = off;
1940 i_ehdrp->e_phnum = phdr_count;
1942 /* Save the program headers away. I don't think anybody uses this
1943 information right now. */
1944 elf_tdata (abfd)->phdr = ((Elf_Internal_Phdr *)
1947 * sizeof (Elf_Internal_Phdr))));
1948 if (elf_tdata (abfd)->phdr == NULL && phdr_count != 0)
1950 bfd_set_error (bfd_error_no_memory);
1951 return (file_ptr) -1;
1953 memcpy (elf_tdata (abfd)->phdr, phdrs,
1954 phdr_count * sizeof (Elf_Internal_Phdr));
1956 /* Write out the program headers. */
1957 if (bfd_seek (abfd, off, SEEK_SET) != 0)
1958 return (file_ptr) -1;
1960 for (i = 0, phdr = phdrs; i < phdr_count; i++, phdr++)
1962 Elf_External_Phdr extphdr;
1964 elf_swap_phdr_out (abfd, phdr, &extphdr);
1965 if (bfd_write (&extphdr, sizeof (Elf_External_Phdr), 1, abfd)
1966 != sizeof (Elf_External_Phdr))
1967 return (file_ptr) -1;
1970 return off + phdr_count * sizeof (Elf_External_Phdr);
1973 /* Work out the file positions of all the sections. This is called by
1974 elf_compute_section_file_positions. All the section sizes and VMAs
1975 must be known before this is called.
1977 We do not consider reloc sections at this point, unless they form
1978 part of the loadable image. Reloc sections are assigned file
1979 positions in assign_file_positions_for_relocs, which is called by
1980 write_object_contents and final_link.
1982 If DOSYMS is false, we do not assign file positions for the symbol
1983 table or the string table. */
1986 assign_file_positions_except_relocs (abfd, dosyms)
1990 struct elf_obj_tdata * const tdata = elf_tdata (abfd);
1991 Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
1992 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
1995 /* Start after the ELF header. */
1996 off = i_ehdrp->e_ehsize;
1998 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
2000 Elf_Internal_Shdr **hdrpp;
2003 /* We are not creating an executable, which means that we are
2004 not creating a program header, and that the actual order of
2005 the sections in the file is unimportant. */
2006 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2008 Elf_Internal_Shdr *hdr;
2011 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2013 hdr->sh_offset = -1;
2017 && (i == tdata->symtab_section
2018 || i == tdata->strtab_section))
2020 hdr->sh_offset = -1;
2024 off = assign_file_position_for_section (hdr, off, true);
2030 bfd_size_type phdr_size;
2031 bfd_vma maxpagesize;
2032 Elf_Internal_Shdr **hdrpp;
2034 Elf_Internal_Shdr *first;
2037 /* We are creating an executable. We must create a program
2038 header. We can't actually create the program header until we
2039 have set the file positions for the sections, but we can
2040 figure out how big it is going to be. */
2041 off = align_file_position (off);
2042 phdr_size = get_program_header_size (abfd);
2043 if (phdr_size == (file_ptr) -1)
2048 maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
2049 if (maxpagesize == 0)
2052 /* FIXME: We might want to sort the sections on the sh_addr
2053 field here. For now, we just assume that the linker will
2054 create the sections in an appropriate order. */
2056 /* Assign file positions in two passes. In the first pass, we
2057 assign a file position to every section which forms part of
2058 the executable image. */
2060 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2062 Elf_Internal_Shdr *hdr;
2065 if ((hdr->sh_flags & SHF_ALLOC) == 0)
2071 /* The section VMA must equal the file position modulo the
2072 page size. This is required by the program header. */
2073 off += (hdr->sh_addr - off) % maxpagesize;
2075 off = assign_file_position_for_section (hdr, off, false);
2078 /* Assign file positions to all the sections which do not form
2079 part of the loadable image, except for the relocs. */
2080 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2082 Elf_Internal_Shdr *hdr;
2085 if ((hdr->sh_flags & SHF_ALLOC) != 0)
2087 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2089 hdr->sh_offset = -1;
2093 && (i == tdata->symtab_section
2094 || i == tdata->strtab_section))
2096 hdr->sh_offset = -1;
2100 off = assign_file_position_for_section (hdr, off, true);
2103 phdr_map = map_program_segments (abfd, phdr_off, first, phdr_size);
2104 if (phdr_map == (file_ptr) -1)
2106 BFD_ASSERT (phdr_map <= phdr_off + phdr_size);
2109 /* Place the section headers. */
2110 off = align_file_position (off);
2111 i_ehdrp->e_shoff = off;
2112 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
2114 elf_tdata (abfd)->next_file_pos = off;
2123 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2124 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
2125 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2127 struct bfd_strtab_hash *shstrtab;
2129 i_ehdrp = elf_elfheader (abfd);
2130 i_shdrp = elf_elfsections (abfd);
2132 shstrtab = elf_stringtab_init ();
2133 if (shstrtab == NULL)
2136 elf_shstrtab (abfd) = shstrtab;
2138 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
2139 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
2140 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
2141 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
2143 i_ehdrp->e_ident[EI_CLASS] = ELFCLASS;
2144 i_ehdrp->e_ident[EI_DATA] =
2145 abfd->xvec->byteorder_big_p ? ELFDATA2MSB : ELFDATA2LSB;
2146 i_ehdrp->e_ident[EI_VERSION] = EV_CURRENT;
2148 for (count = EI_PAD; count < EI_NIDENT; count++)
2149 i_ehdrp->e_ident[count] = 0;
2151 if ((abfd->flags & DYNAMIC) != 0)
2152 i_ehdrp->e_type = ET_DYN;
2153 else if ((abfd->flags & EXEC_P) != 0)
2154 i_ehdrp->e_type = ET_EXEC;
2156 i_ehdrp->e_type = ET_REL;
2158 switch (bfd_get_arch (abfd))
2160 case bfd_arch_unknown:
2161 i_ehdrp->e_machine = EM_NONE;
2163 case bfd_arch_sparc:
2165 i_ehdrp->e_machine = EM_SPARC64;
2167 i_ehdrp->e_machine = EM_SPARC;
2171 i_ehdrp->e_machine = EM_386;
2174 i_ehdrp->e_machine = EM_68K;
2177 i_ehdrp->e_machine = EM_88K;
2180 i_ehdrp->e_machine = EM_860;
2182 case bfd_arch_mips: /* MIPS Rxxxx */
2183 i_ehdrp->e_machine = EM_MIPS; /* only MIPS R3000 */
2186 i_ehdrp->e_machine = EM_PARISC;
2188 case bfd_arch_powerpc:
2189 i_ehdrp->e_machine = EM_CYGNUS_POWERPC;
2191 /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
2193 i_ehdrp->e_machine = EM_NONE;
2195 i_ehdrp->e_version = EV_CURRENT;
2196 i_ehdrp->e_ehsize = sizeof (Elf_External_Ehdr);
2198 /* no program header, for now. */
2199 i_ehdrp->e_phoff = 0;
2200 i_ehdrp->e_phentsize = 0;
2201 i_ehdrp->e_phnum = 0;
2203 /* each bfd section is section header entry */
2204 i_ehdrp->e_entry = bfd_get_start_address (abfd);
2205 i_ehdrp->e_shentsize = sizeof (Elf_External_Shdr);
2207 /* if we're building an executable, we'll need a program header table */
2208 if (abfd->flags & EXEC_P)
2210 /* it all happens later */
2212 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2214 /* elf_build_phdrs() returns a (NULL-terminated) array of
2215 Elf_Internal_Phdrs */
2216 i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
2217 i_ehdrp->e_phoff = outbase;
2218 outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
2223 i_ehdrp->e_phentsize = 0;
2225 i_ehdrp->e_phoff = 0;
2228 elf_tdata (abfd)->symtab_hdr.sh_name =
2229 (unsigned int) _bfd_stringtab_add (shstrtab, ".symtab", true, false);
2230 elf_tdata (abfd)->strtab_hdr.sh_name =
2231 (unsigned int) _bfd_stringtab_add (shstrtab, ".strtab", true, false);
2232 elf_tdata (abfd)->shstrtab_hdr.sh_name =
2233 (unsigned int) _bfd_stringtab_add (shstrtab, ".shstrtab", true, false);
2234 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2235 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2236 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
2243 swap_out_syms (abfd, sttp)
2245 struct bfd_strtab_hash **sttp;
2247 if (!elf_map_symbols (abfd))
2250 /* Dump out the symtabs. */
2252 int symcount = bfd_get_symcount (abfd);
2253 asymbol **syms = bfd_get_outsymbols (abfd);
2254 struct bfd_strtab_hash *stt;
2255 Elf_Internal_Shdr *symtab_hdr;
2256 Elf_Internal_Shdr *symstrtab_hdr;
2257 Elf_External_Sym *outbound_syms;
2260 stt = elf_stringtab_init ();
2264 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2265 symtab_hdr->sh_type = SHT_SYMTAB;
2266 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
2267 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
2268 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
2269 symtab_hdr->sh_addralign = FILE_ALIGN;
2271 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2272 symstrtab_hdr->sh_type = SHT_STRTAB;
2274 outbound_syms = (Elf_External_Sym *)
2275 bfd_alloc (abfd, (1 + symcount) * sizeof (Elf_External_Sym));
2278 bfd_set_error (bfd_error_no_memory);
2281 /* now generate the data (for "contents") */
2283 /* Fill in zeroth symbol and swap it out. */
2284 Elf_Internal_Sym sym;
2290 sym.st_shndx = SHN_UNDEF;
2291 elf_swap_symbol_out (abfd, &sym, outbound_syms);
2293 for (idx = 0; idx < symcount; idx++)
2295 Elf_Internal_Sym sym;
2296 bfd_vma value = syms[idx]->value;
2297 elf_symbol_type *type_ptr;
2299 if (syms[idx]->flags & BSF_SECTION_SYM)
2300 /* Section symbols have no names. */
2304 sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
2307 if (sym.st_name == (unsigned long) -1)
2311 type_ptr = elf_symbol_from (abfd, syms[idx]);
2313 if (bfd_is_com_section (syms[idx]->section))
2315 /* ELF common symbols put the alignment into the `value' field,
2316 and the size into the `size' field. This is backwards from
2317 how BFD handles it, so reverse it here. */
2318 sym.st_size = value;
2319 if (type_ptr == NULL
2320 || type_ptr->internal_elf_sym.st_value == 0)
2321 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
2323 sym.st_value = type_ptr->internal_elf_sym.st_value;
2324 sym.st_shndx = elf_section_from_bfd_section (abfd,
2325 syms[idx]->section);
2329 asection *sec = syms[idx]->section;
2332 if (sec->output_section)
2334 value += sec->output_offset;
2335 sec = sec->output_section;
2338 sym.st_value = value;
2339 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
2340 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec);
2344 /* Writing this would be a hell of a lot easier if we had
2345 some decent documentation on bfd, and knew what to expect
2346 of the library, and what to demand of applications. For
2347 example, it appears that `objcopy' might not set the
2348 section of a symbol to be a section that is actually in
2350 sec2 = bfd_get_section_by_name (abfd, sec->name);
2351 BFD_ASSERT (sec2 != 0);
2352 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec2);
2353 BFD_ASSERT (shndx != -1);
2357 if (bfd_is_com_section (syms[idx]->section))
2358 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_OBJECT);
2359 else if (bfd_is_und_section (syms[idx]->section))
2360 sym.st_info = ELF_ST_INFO (STB_GLOBAL,
2361 ((syms[idx]->flags & BSF_FUNCTION)
2364 else if (syms[idx]->flags & BSF_SECTION_SYM)
2365 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
2366 else if (syms[idx]->flags & BSF_FILE)
2367 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
2370 int bind = STB_LOCAL;
2371 int type = STT_OBJECT;
2372 unsigned int flags = syms[idx]->flags;
2374 if (flags & BSF_LOCAL)
2376 else if (flags & BSF_WEAK)
2378 else if (flags & BSF_GLOBAL)
2381 if (flags & BSF_FUNCTION)
2384 sym.st_info = ELF_ST_INFO (bind, type);
2388 elf_swap_symbol_out (abfd, &sym,
2390 + elf_sym_extra (abfd)[idx].elf_sym_num));
2393 symtab_hdr->contents = (PTR) outbound_syms;
2396 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
2397 symstrtab_hdr->sh_type = SHT_STRTAB;
2399 symstrtab_hdr->sh_flags = 0;
2400 symstrtab_hdr->sh_addr = 0;
2401 symstrtab_hdr->sh_entsize = 0;
2402 symstrtab_hdr->sh_link = 0;
2403 symstrtab_hdr->sh_info = 0;
2404 symstrtab_hdr->sh_addralign = 1;
2411 write_shdrs_and_ehdr (abfd)
2414 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
2415 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2416 Elf_External_Shdr *x_shdrp; /* Section header table, external form */
2417 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2420 i_ehdrp = elf_elfheader (abfd);
2421 i_shdrp = elf_elfsections (abfd);
2423 /* swap the header before spitting it out... */
2426 elf_debug_file (i_ehdrp);
2428 elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr);
2429 if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
2430 || (bfd_write ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd)
2431 != sizeof (x_ehdr)))
2434 /* at this point we've concocted all the ELF sections... */
2435 x_shdrp = (Elf_External_Shdr *)
2436 bfd_alloc (abfd, sizeof (*x_shdrp) * (i_ehdrp->e_shnum));
2439 bfd_set_error (bfd_error_no_memory);
2443 for (count = 0; count < i_ehdrp->e_shnum; count++)
2446 elf_debug_section (count, i_shdrp[count]);
2448 elf_swap_shdr_out (abfd, i_shdrp[count], x_shdrp + count);
2450 if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET) != 0
2451 || (bfd_write ((PTR) x_shdrp, sizeof (*x_shdrp), i_ehdrp->e_shnum, abfd)
2452 != sizeof (*x_shdrp) * i_ehdrp->e_shnum))
2455 /* need to dump the string table too... */
2460 /* Assign file positions for all the reloc sections which are not part
2461 of the loadable file image. */
2464 assign_file_positions_for_relocs (abfd)
2469 Elf_Internal_Shdr **shdrpp;
2471 off = elf_tdata (abfd)->next_file_pos;
2473 for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
2474 i < elf_elfheader (abfd)->e_shnum;
2477 Elf_Internal_Shdr *shdrp;
2480 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
2481 && shdrp->sh_offset == -1)
2482 off = assign_file_position_for_section (shdrp, off, true);
2485 elf_tdata (abfd)->next_file_pos = off;
2489 NAME(bfd_elf,write_object_contents) (abfd)
2492 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2493 Elf_Internal_Ehdr *i_ehdrp;
2494 Elf_Internal_Shdr **i_shdrp;
2497 if (! abfd->output_has_begun
2498 && ! elf_compute_section_file_positions (abfd,
2499 (struct bfd_link_info *) NULL))
2502 i_shdrp = elf_elfsections (abfd);
2503 i_ehdrp = elf_elfheader (abfd);
2505 bfd_map_over_sections (abfd, write_relocs, (PTR) 0);
2506 assign_file_positions_for_relocs (abfd);
2508 /* After writing the headers, we need to write the sections too... */
2509 for (count = 1; count < i_ehdrp->e_shnum; count++)
2511 if (bed->elf_backend_section_processing)
2512 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
2513 if (i_shdrp[count]->contents)
2515 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
2516 || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
2518 != i_shdrp[count]->sh_size))
2523 /* Write out the section header names. */
2524 if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
2525 || ! _bfd_stringtab_emit (abfd, elf_shstrtab (abfd)))
2528 if (bed->elf_backend_final_write_processing)
2529 (*bed->elf_backend_final_write_processing) (abfd,
2530 elf_tdata (abfd)->linker);
2532 return write_shdrs_and_ehdr (abfd);
2535 /* Given an ELF section number, retrieve the corresponding BFD
2539 section_from_elf_index (abfd, index)
2543 BFD_ASSERT (index > 0 && index < SHN_LORESERVE);
2544 if (index >= elf_elfheader (abfd)->e_shnum)
2546 return elf_elfsections (abfd)[index]->bfd_section;
2549 /* given a section, search the header to find them... */
2551 elf_section_from_bfd_section (abfd, asect)
2555 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2556 Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
2558 Elf_Internal_Shdr *hdr;
2559 int maxindex = elf_elfheader (abfd)->e_shnum;
2561 if (asect->owner == NULL)
2563 if (bfd_is_abs_section (asect))
2565 if (bfd_is_com_section (asect))
2567 if (bfd_is_und_section (asect))
2572 BFD_ASSERT (asect->owner == abfd);
2574 for (index = 0; index < maxindex; index++)
2576 hdr = i_shdrp[index];
2577 if (hdr->bfd_section == asect)
2580 if (bed->elf_backend_section_from_bfd_section)
2585 if ((*bed->elf_backend_section_from_bfd_section)
2586 (abfd, hdr, asect, &retval))
2594 /* given a symbol, return the bfd index for that symbol. */
2596 elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
2598 struct symbol_cache_entry **asym_ptr_ptr;
2600 struct symbol_cache_entry *asym_ptr = *asym_ptr_ptr;
2602 flagword flags = asym_ptr->flags;
2604 /* When gas creates relocations against local labels, it creates its
2605 own symbol for the section, but does put the symbol into the
2606 symbol chain, so udata is 0. When the linker is generating
2607 relocatable output, this section symbol may be for one of the
2608 input sections rather than the output section. */
2609 if (asym_ptr->udata == (PTR) 0
2610 && (flags & BSF_SECTION_SYM)
2611 && asym_ptr->section)
2615 if (asym_ptr->section->output_section != NULL)
2616 indx = asym_ptr->section->output_section->index;
2618 indx = asym_ptr->section->index;
2619 if (elf_section_syms (abfd)[indx])
2620 asym_ptr->udata = elf_section_syms (abfd)[indx]->udata;
2623 if (asym_ptr->udata)
2624 idx = ((Elf_Sym_Extra *) asym_ptr->udata)->elf_sym_num;
2634 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx %s\n",
2635 (long) asym_ptr, asym_ptr->name, idx, flags, elf_symbol_flags (flags));
2644 elf_slurp_symbol_table (abfd, symptrs, dynamic)
2646 asymbol **symptrs; /* Buffer for generated bfd symbols */
2649 Elf_Internal_Shdr *hdr;
2650 long symcount; /* Number of external ELF symbols */
2651 elf_symbol_type *sym; /* Pointer to current bfd symbol */
2652 elf_symbol_type *symbase; /* Buffer for generated bfd symbols */
2653 Elf_Internal_Sym i_sym;
2654 Elf_External_Sym *x_symp = NULL;
2656 /* Read each raw ELF symbol, converting from external ELF form to
2657 internal ELF form, and then using the information to create a
2658 canonical bfd symbol table entry.
2660 Note that we allocate the initial bfd canonical symbol buffer
2661 based on a one-to-one mapping of the ELF symbols to canonical
2662 symbols. We actually use all the ELF symbols, so there will be no
2663 space left over at the end. When we have all the symbols, we
2664 build the caller's pointer vector. */
2667 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2669 hdr = &elf_tdata (abfd)->symtab_hdr;
2670 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2673 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2676 sym = symbase = NULL;
2681 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2684 symbase = ((elf_symbol_type *)
2685 bfd_zalloc (abfd, symcount * sizeof (elf_symbol_type)));
2686 if (symbase == (elf_symbol_type *) NULL)
2688 bfd_set_error (bfd_error_no_memory);
2693 /* Temporarily allocate room for the raw ELF symbols. */
2694 x_symp = ((Elf_External_Sym *)
2695 malloc (symcount * sizeof (Elf_External_Sym)));
2696 if (x_symp == NULL && symcount != 0)
2698 bfd_set_error (bfd_error_no_memory);
2702 if (bfd_read ((PTR) x_symp, sizeof (Elf_External_Sym), symcount, abfd)
2703 != symcount * sizeof (Elf_External_Sym))
2705 /* Skip first symbol, which is a null dummy. */
2706 for (i = 1; i < symcount; i++)
2708 elf_swap_symbol_in (abfd, x_symp + i, &i_sym);
2709 memcpy (&sym->internal_elf_sym, &i_sym, sizeof (Elf_Internal_Sym));
2710 #ifdef ELF_KEEP_EXTSYM
2711 memcpy (&sym->native_elf_sym, x_symp + i, sizeof (Elf_External_Sym));
2713 sym->symbol.the_bfd = abfd;
2715 sym->symbol.name = elf_string_from_elf_section (abfd, hdr->sh_link,
2718 sym->symbol.value = i_sym.st_value;
2720 if (i_sym.st_shndx > 0 && i_sym.st_shndx < SHN_LORESERVE)
2722 sym->symbol.section = section_from_elf_index (abfd,
2724 if (sym->symbol.section == NULL)
2726 /* This symbol is in a section for which we did not
2727 create a BFD section. Just use bfd_abs_section,
2728 although it is wrong. FIXME. */
2729 sym->symbol.section = bfd_abs_section_ptr;
2732 else if (i_sym.st_shndx == SHN_ABS)
2734 sym->symbol.section = bfd_abs_section_ptr;
2736 else if (i_sym.st_shndx == SHN_COMMON)
2738 sym->symbol.section = bfd_com_section_ptr;
2739 /* Elf puts the alignment into the `value' field, and
2740 the size into the `size' field. BFD wants to see the
2741 size in the value field, and doesn't care (at the
2742 moment) about the alignment. */
2743 sym->symbol.value = i_sym.st_size;
2745 else if (i_sym.st_shndx == SHN_UNDEF)
2747 sym->symbol.section = bfd_und_section_ptr;
2750 sym->symbol.section = bfd_abs_section_ptr;
2752 sym->symbol.value -= sym->symbol.section->vma;
2754 switch (ELF_ST_BIND (i_sym.st_info))
2757 sym->symbol.flags |= BSF_LOCAL;
2760 sym->symbol.flags |= BSF_GLOBAL;
2763 sym->symbol.flags |= BSF_WEAK;
2767 switch (ELF_ST_TYPE (i_sym.st_info))
2770 sym->symbol.flags |= BSF_SECTION_SYM | BSF_DEBUGGING;
2773 sym->symbol.flags |= BSF_FILE | BSF_DEBUGGING;
2776 sym->symbol.flags |= BSF_FUNCTION;
2781 sym->symbol.flags |= BSF_DYNAMIC;
2783 /* Do some backend-specific processing on this symbol. */
2785 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2786 if (ebd->elf_backend_symbol_processing)
2787 (*ebd->elf_backend_symbol_processing) (abfd, &sym->symbol);
2794 /* Do some backend-specific processing on this symbol table. */
2796 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2797 if (ebd->elf_backend_symbol_table_processing)
2798 (*ebd->elf_backend_symbol_table_processing) (abfd, symbase, symcount);
2801 /* We rely on the zalloc to clear out the final symbol entry. */
2803 symcount = sym - symbase;
2805 /* Fill in the user's symbol pointer vector if needed. */
2813 *symptrs++ = &sym->symbol;
2816 *symptrs = 0; /* Final null pointer */
2828 /* Return the number of bytes required to hold the symtab vector.
2830 Note that we base it on the count plus 1, since we will null terminate
2831 the vector allocated based on this size. However, the ELF symbol table
2832 always has a dummy entry as symbol #0, so it ends up even. */
2835 elf_get_symtab_upper_bound (abfd)
2840 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
2842 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2843 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
2849 elf_get_dynamic_symtab_upper_bound (abfd)
2854 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2856 if (elf_dynsymtab (abfd) == 0)
2858 bfd_set_error (bfd_error_invalid_operation);
2862 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2863 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
2869 elf_get_reloc_upper_bound (abfd, asect)
2873 return (asect->reloc_count + 1) * sizeof (arelent *);
2876 /* Read in and swap the external relocs. */
2879 elf_slurp_reloc_table (abfd, asect, symbols)
2884 struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
2885 struct bfd_elf_section_data * const d = elf_section_data (asect);
2886 PTR allocated = NULL;
2887 bfd_byte *native_relocs;
2893 if (asect->relocation != NULL
2894 || (asect->flags & SEC_RELOC) == 0
2895 || asect->reloc_count == 0)
2898 BFD_ASSERT (asect->rel_filepos == d->rel_hdr.sh_offset
2899 && (asect->reloc_count
2900 == d->rel_hdr.sh_size / d->rel_hdr.sh_entsize));
2902 allocated = (PTR) malloc (d->rel_hdr.sh_size);
2903 if (allocated == NULL)
2905 bfd_set_error (bfd_error_no_memory);
2909 if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0
2910 || (bfd_read (allocated, 1, d->rel_hdr.sh_size, abfd)
2911 != d->rel_hdr.sh_size))
2914 native_relocs = (bfd_byte *) allocated;
2916 relents = ((arelent *)
2917 bfd_alloc (abfd, asect->reloc_count * sizeof (arelent)));
2918 if (relents == NULL)
2920 bfd_set_error (bfd_error_no_memory);
2924 entsize = d->rel_hdr.sh_entsize;
2925 BFD_ASSERT (entsize == sizeof (Elf_External_Rel)
2926 || entsize == sizeof (Elf_External_Rela));
2928 for (i = 0, relent = relents;
2929 i < asect->reloc_count;
2930 i++, relent++, native_relocs += entsize)
2932 Elf_Internal_Rela rela;
2933 Elf_Internal_Rel rel;
2935 if (entsize == sizeof (Elf_External_Rela))
2936 elf_swap_reloca_in (abfd, (Elf_External_Rela *) native_relocs, &rela);
2939 elf_swap_reloc_in (abfd, (Elf_External_Rel *) native_relocs, &rel);
2940 rela.r_offset = rel.r_offset;
2941 rela.r_info = rel.r_info;
2945 /* The address of an ELF reloc is section relative for an object
2946 file, and absolute for an executable file or shared library.
2947 The address of a BFD reloc is always section relative. */
2948 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
2949 relent->address = rela.r_offset;
2951 relent->address = rela.r_offset - asect->vma;
2953 if (ELF_R_SYM (rela.r_info) == 0)
2954 relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
2959 ps = symbols + ELF_R_SYM (rela.r_info) - 1;
2962 /* Canonicalize ELF section symbols. FIXME: Why? */
2963 if ((s->flags & BSF_SECTION_SYM) == 0)
2964 relent->sym_ptr_ptr = ps;
2966 relent->sym_ptr_ptr = s->section->symbol_ptr_ptr;
2969 relent->addend = rela.r_addend;
2971 if (entsize == sizeof (Elf_External_Rela))
2972 (*ebd->elf_info_to_howto) (abfd, relent, &rela);
2974 (*ebd->elf_info_to_howto_rel) (abfd, relent, &rel);
2977 asect->relocation = relents;
2979 if (allocated != NULL)
2985 if (allocated != NULL)
2992 elf_debug_section (num, hdr)
2994 Elf_Internal_Shdr *hdr;
2996 fprintf (stderr, "\nSection#%d '%s' 0x%.8lx\n", num,
2997 hdr->bfd_section != NULL ? hfd->bfd_section->name : "",
3000 "sh_name = %ld\tsh_type = %ld\tsh_flags = %ld\n",
3001 (long) hdr->sh_name,
3002 (long) hdr->sh_type,
3003 (long) hdr->sh_flags);
3005 "sh_addr = %ld\tsh_offset = %ld\tsh_size = %ld\n",
3006 (long) hdr->sh_addr,
3007 (long) hdr->sh_offset,
3008 (long) hdr->sh_size);
3010 "sh_link = %ld\tsh_info = %ld\tsh_addralign = %ld\n",
3011 (long) hdr->sh_link,
3012 (long) hdr->sh_info,
3013 (long) hdr->sh_addralign);
3014 fprintf (stderr, "sh_entsize = %ld\n",
3015 (long) hdr->sh_entsize);
3020 elf_debug_file (ehdrp)
3021 Elf_Internal_Ehdr *ehdrp;
3023 fprintf (stderr, "e_entry = 0x%.8lx\n", (long) ehdrp->e_entry);
3024 fprintf (stderr, "e_phoff = %ld\n", (long) ehdrp->e_phoff);
3025 fprintf (stderr, "e_phnum = %ld\n", (long) ehdrp->e_phnum);
3026 fprintf (stderr, "e_phentsize = %ld\n", (long) ehdrp->e_phentsize);
3027 fprintf (stderr, "e_shoff = %ld\n", (long) ehdrp->e_shoff);
3028 fprintf (stderr, "e_shnum = %ld\n", (long) ehdrp->e_shnum);
3029 fprintf (stderr, "e_shentsize = %ld\n", (long) ehdrp->e_shentsize);
3033 /* Canonicalize the relocs. */
3036 elf_canonicalize_reloc (abfd, section, relptr, symbols)
3045 if (! elf_slurp_reloc_table (abfd, section, symbols))
3048 tblptr = section->relocation;
3049 for (i = 0; i < section->reloc_count; i++)
3050 *relptr++ = tblptr++;
3054 return section->reloc_count;
3058 elf_get_symtab (abfd, alocation)
3060 asymbol **alocation;
3062 long symcount = elf_slurp_symbol_table (abfd, alocation, false);
3065 bfd_get_symcount (abfd) = symcount;
3070 elf_canonicalize_dynamic_symtab (abfd, alocation)
3072 asymbol **alocation;
3074 return elf_slurp_symbol_table (abfd, alocation, true);
3078 elf_make_empty_symbol (abfd)
3081 elf_symbol_type *newsym;
3083 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
3086 bfd_set_error (bfd_error_no_memory);
3091 newsym->symbol.the_bfd = abfd;
3092 return &newsym->symbol;
3097 elf_get_symbol_info (ignore_abfd, symbol, ret)
3102 bfd_symbol_info (symbol, ret);
3106 elf_get_lineno (ignore_abfd, symbol)
3110 fprintf (stderr, "elf_get_lineno unimplemented\n");
3117 elf_set_arch_mach (abfd, arch, machine)
3119 enum bfd_architecture arch;
3120 unsigned long machine;
3122 /* If this isn't the right architecture for this backend, and this
3123 isn't the generic backend, fail. */
3124 if (arch != get_elf_backend_data (abfd)->arch
3125 && arch != bfd_arch_unknown
3126 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
3129 return bfd_default_set_arch_mach (abfd, arch, machine);
3133 elf_find_nearest_line (abfd,
3144 CONST char **filename_ptr;
3145 CONST char **functionname_ptr;
3146 unsigned int *line_ptr;
3152 elf_sizeof_headers (abfd, reloc)
3158 ret = sizeof (Elf_External_Ehdr);
3160 ret += get_program_header_size (abfd);
3165 elf_set_section_contents (abfd, section, location, offset, count)
3170 bfd_size_type count;
3172 Elf_Internal_Shdr *hdr;
3174 if (! abfd->output_has_begun
3175 && ! elf_compute_section_file_positions (abfd,
3176 (struct bfd_link_info *) NULL))
3179 hdr = &elf_section_data (section)->this_hdr;
3181 if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
3183 if (bfd_write (location, 1, count, abfd) != count)
3190 elf_no_info_to_howto (abfd, cache_ptr, dst)
3193 Elf_Internal_Rela *dst;
3195 fprintf (stderr, "elf RELA relocation support for target machine unimplemented\n");
3201 elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
3204 Elf_Internal_Rel *dst;
3206 fprintf (stderr, "elf REL relocation support for target machine unimplemented\n");
3212 /* Core file support */
3214 #ifdef HAVE_PROCFS /* Some core file support requires host /proc files */
3215 #include <sys/procfs.h>
3217 #define bfd_prstatus(abfd, descdata, descsz, filepos) true
3218 #define bfd_fpregset(abfd, descdata, descsz, filepos) true
3219 #define bfd_prpsinfo(abfd, descdata, descsz, filepos) true
3225 bfd_prstatus (abfd, descdata, descsz, filepos)
3232 prstatus_t *status = (prstatus_t *) 0;
3234 if (descsz == sizeof (prstatus_t))
3236 newsect = bfd_make_section (abfd, ".reg");
3237 if (newsect == NULL)
3239 newsect->_raw_size = sizeof (status->pr_reg);
3240 newsect->filepos = filepos + (long) &status->pr_reg;
3241 newsect->flags = SEC_HAS_CONTENTS;
3242 newsect->alignment_power = 2;
3243 if ((core_prstatus (abfd) = bfd_alloc (abfd, descsz)) != NULL)
3245 memcpy (core_prstatus (abfd), descdata, descsz);
3251 /* Stash a copy of the prpsinfo structure away for future use. */
3254 bfd_prpsinfo (abfd, descdata, descsz, filepos)
3260 if (descsz == sizeof (prpsinfo_t))
3262 if ((core_prpsinfo (abfd) = bfd_alloc (abfd, descsz)) == NULL)
3264 bfd_set_error (bfd_error_no_memory);
3267 memcpy (core_prpsinfo (abfd), descdata, descsz);
3273 bfd_fpregset (abfd, descdata, descsz, filepos)
3281 newsect = bfd_make_section (abfd, ".reg2");
3282 if (newsect == NULL)
3284 newsect->_raw_size = descsz;
3285 newsect->filepos = filepos;
3286 newsect->flags = SEC_HAS_CONTENTS;
3287 newsect->alignment_power = 2;
3291 #endif /* HAVE_PROCFS */
3293 /* Return a pointer to the args (including the command name) that were
3294 seen by the program that generated the core dump. Note that for
3295 some reason, a spurious space is tacked onto the end of the args
3296 in some (at least one anyway) implementations, so strip it off if
3300 elf_core_file_failing_command (abfd)
3304 if (core_prpsinfo (abfd))
3306 prpsinfo_t *p = core_prpsinfo (abfd);
3307 char *scan = p->pr_psargs;
3312 if ((scan > p->pr_psargs) && (*scan == ' '))
3316 return p->pr_psargs;
3322 /* Return the number of the signal that caused the core dump. Presumably,
3323 since we have a core file, we got a signal of some kind, so don't bother
3324 checking the other process status fields, just return the signal number.
3328 elf_core_file_failing_signal (abfd)
3332 if (core_prstatus (abfd))
3334 return ((prstatus_t *) (core_prstatus (abfd)))->pr_cursig;
3340 /* Check to see if the core file could reasonably be expected to have
3341 come for the current executable file. Note that by default we return
3342 true unless we find something that indicates that there might be a
3347 elf_core_file_matches_executable_p (core_bfd, exec_bfd)
3356 /* First, xvecs must match since both are ELF files for the same target. */
3358 if (core_bfd->xvec != exec_bfd->xvec)
3360 bfd_set_error (bfd_error_system_call);
3366 /* If no prpsinfo, just return true. Otherwise, grab the last component
3367 of the exec'd pathname from the prpsinfo. */
3369 if (core_prpsinfo (core_bfd))
3371 corename = (((struct prpsinfo *) core_prpsinfo (core_bfd))->pr_fname);
3378 /* Find the last component of the executable pathname. */
3380 if ((execname = strrchr (exec_bfd->filename, '/')) != NULL)
3386 execname = (char *) exec_bfd->filename;
3389 /* See if they match */
3391 return strcmp (execname, corename) ? false : true;
3397 #endif /* HAVE_PROCFS */
3400 /* ELF core files contain a segment of type PT_NOTE, that holds much of
3401 the information that would normally be available from the /proc interface
3402 for the process, at the time the process dumped core. Currently this
3403 includes copies of the prstatus, prpsinfo, and fpregset structures.
3405 Since these structures are potentially machine dependent in size and
3406 ordering, bfd provides two levels of support for them. The first level,
3407 available on all machines since it does not require that the host
3408 have /proc support or the relevant include files, is to create a bfd
3409 section for each of the prstatus, prpsinfo, and fpregset structures,
3410 without any interpretation of their contents. With just this support,
3411 the bfd client will have to interpret the structures itself. Even with
3412 /proc support, it might want these full structures for it's own reasons.
3414 In the second level of support, where HAVE_PROCFS is defined, bfd will
3415 pick apart the structures to gather some additional information that
3416 clients may want, such as the general register set, the name of the
3417 exec'ed file and its arguments, the signal (if any) that caused the
3423 elf_corefile_note (abfd, hdr)
3425 Elf_Internal_Phdr *hdr;
3427 Elf_External_Note *x_note_p; /* Elf note, external form */
3428 Elf_Internal_Note i_note; /* Elf note, internal form */
3429 char *buf = NULL; /* Entire note segment contents */
3430 char *namedata; /* Name portion of the note */
3431 char *descdata; /* Descriptor portion of the note */
3432 char *sectname; /* Name to use for new section */
3433 long filepos; /* File offset to descriptor data */
3436 if (hdr->p_filesz > 0
3437 && (buf = (char *) malloc (hdr->p_filesz)) != NULL
3438 && bfd_seek (abfd, hdr->p_offset, SEEK_SET) != -1
3439 && bfd_read ((PTR) buf, hdr->p_filesz, 1, abfd) == hdr->p_filesz)
3441 x_note_p = (Elf_External_Note *) buf;
3442 while ((char *) x_note_p < (buf + hdr->p_filesz))
3444 i_note.namesz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->namesz);
3445 i_note.descsz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->descsz);
3446 i_note.type = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->type);
3447 namedata = x_note_p->name;
3448 descdata = namedata + BFD_ALIGN (i_note.namesz, 4);
3449 filepos = hdr->p_offset + (descdata - buf);
3450 switch (i_note.type)
3453 /* process descdata as prstatus info */
3454 if (! bfd_prstatus (abfd, descdata, i_note.descsz, filepos))
3456 sectname = ".prstatus";
3459 /* process descdata as fpregset info */
3460 if (! bfd_fpregset (abfd, descdata, i_note.descsz, filepos))
3462 sectname = ".fpregset";
3465 /* process descdata as prpsinfo */
3466 if (! bfd_prpsinfo (abfd, descdata, i_note.descsz, filepos))
3468 sectname = ".prpsinfo";
3471 /* Unknown descriptor, just ignore it. */
3475 if (sectname != NULL)
3477 newsect = bfd_make_section (abfd, sectname);
3478 if (newsect == NULL)
3480 newsect->_raw_size = i_note.descsz;
3481 newsect->filepos = filepos;
3482 newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3483 newsect->alignment_power = 2;
3485 x_note_p = (Elf_External_Note *)
3486 (descdata + BFD_ALIGN (i_note.descsz, 4));
3493 else if (hdr->p_filesz > 0)
3495 bfd_set_error (bfd_error_no_memory);
3502 /* Core files are simply standard ELF formatted files that partition
3503 the file using the execution view of the file (program header table)
3504 rather than the linking view. In fact, there is no section header
3505 table in a core file.
3507 The process status information (including the contents of the general
3508 register set) and the floating point register set are stored in a
3509 segment of type PT_NOTE. We handcraft a couple of extra bfd sections
3510 that allow standard bfd access to the general registers (.reg) and the
3511 floating point registers (.reg2).
3516 elf_core_file_p (abfd)
3519 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
3520 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
3521 Elf_External_Phdr x_phdr; /* Program header table entry, external form */
3522 Elf_Internal_Phdr *i_phdrp; /* Program header table, internal form */
3523 unsigned int phindex;
3524 struct elf_backend_data *ebd;
3526 /* Read in the ELF header in external format. */
3528 if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
3530 if (bfd_get_error () != bfd_error_system_call)
3531 bfd_set_error (bfd_error_wrong_format);
3535 /* Now check to see if we have a valid ELF file, and one that BFD can
3536 make use of. The magic number must match, the address size ('class')
3537 and byte-swapping must match our XVEC entry, and it must have a
3538 program header table (FIXME: See comments re segments at top of this
3541 if (elf_file_p (&x_ehdr) == false)
3544 bfd_set_error (bfd_error_wrong_format);
3548 /* FIXME, Check EI_VERSION here ! */
3552 int desired_address_size = ELFCLASS32;
3555 int desired_address_size = ELFCLASS64;
3558 if (x_ehdr.e_ident[EI_CLASS] != desired_address_size)
3562 /* Switch xvec to match the specified byte order. */
3563 switch (x_ehdr.e_ident[EI_DATA])
3565 case ELFDATA2MSB: /* Big-endian */
3566 if (abfd->xvec->byteorder_big_p == false)
3569 case ELFDATA2LSB: /* Little-endian */
3570 if (abfd->xvec->byteorder_big_p == true)
3573 case ELFDATANONE: /* No data encoding specified */
3574 default: /* Unknown data encoding specified */
3578 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
3579 the tdata pointer in the bfd. */
3582 (struct elf_obj_tdata *) bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
3583 if (elf_tdata (abfd) == NULL)
3585 bfd_set_error (bfd_error_no_memory);
3589 /* FIXME, `wrong' returns from this point onward, leak memory. */
3591 /* Now that we know the byte order, swap in the rest of the header */
3592 i_ehdrp = elf_elfheader (abfd);
3593 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
3595 elf_debug_file (i_ehdrp);
3598 ebd = get_elf_backend_data (abfd);
3600 /* Check that the ELF e_machine field matches what this particular
3601 BFD format expects. */
3602 if (ebd->elf_machine_code != i_ehdrp->e_machine)
3604 const bfd_target * const *target_ptr;
3606 if (ebd->elf_machine_code != EM_NONE)
3609 /* This is the generic ELF target. Let it match any ELF target
3610 for which we do not have a specific backend. */
3611 for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
3613 struct elf_backend_data *back;
3615 if ((*target_ptr)->flavour != bfd_target_elf_flavour)
3617 back = (struct elf_backend_data *) (*target_ptr)->backend_data;
3618 if (back->elf_machine_code == i_ehdrp->e_machine)
3620 /* target_ptr is an ELF backend which matches this
3621 object file, so reject the generic ELF target. */
3627 /* If there is no program header, or the type is not a core file, then
3629 if (i_ehdrp->e_phoff == 0 || i_ehdrp->e_type != ET_CORE)
3632 /* Allocate space for a copy of the program header table in
3633 internal form, seek to the program header table in the file,
3634 read it in, and convert it to internal form. As a simple sanity
3635 check, verify that the what BFD thinks is the size of each program
3636 header table entry actually matches the size recorded in the file. */
3638 if (i_ehdrp->e_phentsize != sizeof (x_phdr))
3640 i_phdrp = (Elf_Internal_Phdr *)
3641 bfd_alloc (abfd, sizeof (*i_phdrp) * i_ehdrp->e_phnum);
3644 bfd_set_error (bfd_error_no_memory);
3647 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) == -1)
3649 for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3651 if (bfd_read ((PTR) & x_phdr, sizeof (x_phdr), 1, abfd)
3654 elf_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
3657 /* Once all of the program headers have been read and converted, we
3658 can start processing them. */
3660 for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3662 bfd_section_from_phdr (abfd, i_phdrp + phindex, phindex);
3663 if ((i_phdrp + phindex)->p_type == PT_NOTE)
3665 if (! elf_corefile_note (abfd, i_phdrp + phindex))
3670 /* Remember the entry point specified in the ELF file header. */
3672 bfd_get_start_address (abfd) = i_ehdrp->e_entry;
3677 /* ELF linker code. */
3679 static boolean elf_link_add_object_symbols
3680 PARAMS ((bfd *, struct bfd_link_info *));
3681 static boolean elf_link_add_archive_symbols
3682 PARAMS ((bfd *, struct bfd_link_info *));
3683 static Elf_Internal_Rela *elf_link_read_relocs
3684 PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
3685 static boolean elf_adjust_dynamic_symbol
3686 PARAMS ((struct elf_link_hash_entry *, PTR));
3688 /* Given an ELF BFD, add symbols to the global hash table as
3692 elf_bfd_link_add_symbols (abfd, info)
3694 struct bfd_link_info *info;
3696 switch (bfd_get_format (abfd))
3699 return elf_link_add_object_symbols (abfd, info);
3701 return elf_link_add_archive_symbols (abfd, info);
3703 bfd_set_error (bfd_error_wrong_format);
3708 /* Add symbols from an ELF archive file to the linker hash table. We
3709 don't use _bfd_generic_link_add_archive_symbols because of a
3710 problem which arises on UnixWare. The UnixWare libc.so is an
3711 archive which includes an entry libc.so.1 which defines a bunch of
3712 symbols. The libc.so archive also includes a number of other
3713 object files, which also define symbols, some of which are the same
3714 as those defined in libc.so.1. Correct linking requires that we
3715 consider each object file in turn, and include it if it defines any
3716 symbols we need. _bfd_generic_link_add_archive_symbols does not do
3717 this; it looks through the list of undefined symbols, and includes
3718 any object file which defines them. When this algorithm is used on
3719 UnixWare, it winds up pulling in libc.so.1 early and defining a
3720 bunch of symbols. This means that some of the other objects in the
3721 archive are not included in the link, which is incorrect since they
3722 precede libc.so.1 in the archive.
3724 Fortunately, ELF archive handling is simpler than that done by
3725 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
3726 oddities. In ELF, if we find a symbol in the archive map, and the
3727 symbol is currently undefined, we know that we must pull in that
3730 Unfortunately, we do have to make multiple passes over the symbol
3731 table until nothing further is resolved. */
3734 elf_link_add_archive_symbols (abfd, info)
3736 struct bfd_link_info *info;
3739 boolean *defined = NULL;
3740 boolean *included = NULL;
3744 if (! bfd_has_map (abfd))
3746 bfd_set_error (bfd_error_no_symbols);
3750 /* Keep track of all symbols we know to be already defined, and all
3751 files we know to be already included. This is to speed up the
3752 second and subsequent passes. */
3753 c = bfd_ardata (abfd)->symdef_count;
3756 defined = (boolean *) malloc (c * sizeof (boolean));
3757 included = (boolean *) malloc (c * sizeof (boolean));
3758 if (defined == (boolean *) NULL || included == (boolean *) NULL)
3760 bfd_set_error (bfd_error_no_memory);
3763 memset (defined, 0, c * sizeof (boolean));
3764 memset (included, 0, c * sizeof (boolean));
3766 symdefs = bfd_ardata (abfd)->symdefs;
3779 symdefend = symdef + c;
3780 for (i = 0; symdef < symdefend; symdef++, i++)
3782 struct elf_link_hash_entry *h;
3784 struct bfd_link_hash_entry *undefs_tail;
3787 if (defined[i] || included[i])
3789 if (symdef->file_offset == last)
3795 h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
3796 false, false, false);
3797 if (h == (struct elf_link_hash_entry *) NULL)
3799 if (h->root.type != bfd_link_hash_undefined)
3805 /* We need to include this archive member. */
3807 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
3808 if (element == (bfd *) NULL)
3811 if (! bfd_check_format (element, bfd_object))
3814 /* Doublecheck that we have not included this object
3815 already--it should be impossible, but there may be
3816 something wrong with the archive. */
3817 if (element->archive_pass != 0)
3819 bfd_set_error (bfd_error_bad_value);
3822 element->archive_pass = 1;
3824 undefs_tail = info->hash->undefs_tail;
3826 if (! (*info->callbacks->add_archive_element) (info, element,
3829 if (! elf_link_add_object_symbols (element, info))
3832 /* If there are any new undefined symbols, we need to make
3833 another pass through the archive in order to see whether
3834 they can be defined. FIXME: This isn't perfect, because
3835 common symbols wind up on undefs_tail and because an
3836 undefined symbol which is defined later on in this pass
3837 does not require another pass. This isn't a bug, but it
3838 does make the code less efficient than it could be. */
3839 if (undefs_tail != info->hash->undefs_tail)
3842 /* Look backward to mark all symbols from this object file
3843 which we have already seen in this pass. */
3847 included[mark] = true;
3852 while (symdefs[mark].file_offset == symdef->file_offset);
3854 /* We mark subsequent symbols from this object file as we go
3855 on through the loop. */
3856 last = symdef->file_offset;
3867 if (defined != (boolean *) NULL)
3869 if (included != (boolean *) NULL)
3874 /* Record a new dynamic symbol. We record the dynamic symbols as we
3875 read the input files, since we need to have a list of all of them
3876 before we can determine the final sizes of the output sections. */
3879 elf_link_record_dynamic_symbol (info, h)
3880 struct bfd_link_info *info;
3881 struct elf_link_hash_entry *h;
3883 if (h->dynindx == -1)
3885 h->dynindx = elf_hash_table (info)->dynsymcount;
3886 ++elf_hash_table (info)->dynsymcount;
3888 (unsigned long) _bfd_stringtab_add (elf_hash_table (info)->dynstr,
3889 h->root.root.string,
3891 if (h->dynstr_index == (unsigned long) -1)
3898 /* Add symbols from an ELF object file to the linker hash table. */
3901 elf_link_add_object_symbols (abfd, info)
3903 struct bfd_link_info *info;
3905 boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
3906 const Elf_Internal_Sym *,
3907 const char **, flagword *,
3908 asection **, bfd_vma *));
3909 boolean (*check_relocs) PARAMS ((bfd *, struct bfd_link_info *,
3910 asection *, const Elf_Internal_Rela *));
3912 Elf_Internal_Shdr *hdr;
3916 Elf_External_Sym *buf = NULL;
3917 struct elf_link_hash_entry **sym_hash;
3919 Elf_External_Dyn *dynbuf = NULL;
3920 struct elf_link_hash_entry *weaks;
3921 Elf_External_Sym *esym;
3922 Elf_External_Sym *esymend;
3924 add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
3925 collect = get_elf_backend_data (abfd)->collect;
3927 /* A stripped shared library might only have a dynamic symbol table,
3928 not a regular symbol table. In that case we can still go ahead
3929 and link using the dynamic symbol table. */
3930 if (elf_onesymtab (abfd) == 0
3931 && elf_dynsymtab (abfd) != 0)
3933 elf_onesymtab (abfd) = elf_dynsymtab (abfd);
3934 elf_tdata (abfd)->symtab_hdr = elf_tdata (abfd)->dynsymtab_hdr;
3937 hdr = &elf_tdata (abfd)->symtab_hdr;
3938 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
3940 /* The sh_info field of the symtab header tells us where the
3941 external symbols start. We don't care about the local symbols at
3943 if (elf_bad_symtab (abfd))
3945 extsymcount = symcount;
3950 extsymcount = symcount - hdr->sh_info;
3951 extsymoff = hdr->sh_info;
3954 buf = (Elf_External_Sym *) malloc (extsymcount * sizeof (Elf_External_Sym));
3955 if (buf == NULL && extsymcount != 0)
3957 bfd_set_error (bfd_error_no_memory);
3961 /* We store a pointer to the hash table entry for each external
3963 sym_hash = ((struct elf_link_hash_entry **)
3965 extsymcount * sizeof (struct elf_link_hash_entry *)));
3966 if (sym_hash == NULL)
3968 bfd_set_error (bfd_error_no_memory);
3971 elf_sym_hashes (abfd) = sym_hash;
3973 if (elf_elfheader (abfd)->e_type != ET_DYN)
3977 /* If we are creating a shared library, create all the dynamic
3978 sections immediately. We need to attach them to something,
3979 so we attach them to this BFD, provided it is the right
3980 format. FIXME: If there are no input BFD's of the same
3981 format as the output, we can't make a shared library. */
3983 && elf_hash_table (info)->dynobj == NULL
3984 && abfd->xvec == info->hash->creator)
3986 if (! elf_link_create_dynamic_sections (abfd, info))
3988 elf_hash_table (info)->dynobj = abfd;
3995 bfd_size_type strindex;
3999 /* You can't use -r against a dynamic object. Also, there's no
4000 hope of using a dynamic object which does not exactly match
4001 the format of the output file. */
4002 if (info->relocateable
4003 || info->hash->creator != abfd->xvec)
4005 bfd_set_error (bfd_error_invalid_operation);
4009 /* Find the name to use in a DT_NEEDED entry that refers to this
4010 object. If the object has a DT_SONAME entry, we use it.
4011 Otherwise, if the generic linker stuck something in
4012 elf_dt_needed_name, we use that. Otherwise, we just use the
4014 name = bfd_get_filename (abfd);
4015 if (elf_dt_needed_name (abfd) != NULL)
4016 name = elf_dt_needed_name (abfd);
4017 s = bfd_get_section_by_name (abfd, ".dynamic");
4020 Elf_External_Dyn *extdyn;
4021 Elf_External_Dyn *extdynend;
4023 dynbuf = (Elf_External_Dyn *) malloc (s->_raw_size);
4026 bfd_set_error (bfd_error_no_memory);
4030 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
4031 (file_ptr) 0, s->_raw_size))
4035 extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
4036 for (; extdyn < extdynend; extdyn++)
4038 Elf_Internal_Dyn dyn;
4040 elf_swap_dyn_in (abfd, extdyn, &dyn);
4041 if (dyn.d_tag == DT_SONAME)
4046 elfsec = elf_section_from_bfd_section (abfd, s);
4049 link = elf_elfsections (abfd)[elfsec]->sh_link;
4050 name = elf_string_from_elf_section (abfd, link,
4063 /* We do not want to include any of the sections in a dynamic
4064 object in the output file. We hack by simply clobbering the
4065 list of sections in the BFD. This could be handled more
4066 cleanly by, say, a new section flag; the existing
4067 SEC_NEVER_LOAD flag is not the one we want, because that one
4068 still implies that the section takes up space in the output
4070 abfd->sections = NULL;
4072 /* If this is the first dynamic object found in the link, create
4073 the special sections required for dynamic linking. We need
4074 to put them somewhere, and attaching them to the first
4075 dynamic object is as good place as any. */
4076 if (elf_hash_table (info)->dynobj == NULL)
4078 if (! elf_link_create_dynamic_sections (abfd, info))
4080 elf_hash_table (info)->dynobj = abfd;
4083 /* Add a DT_NEEDED entry for this dynamic object. */
4084 strindex = _bfd_stringtab_add (elf_hash_table (info)->dynstr, name,
4086 if (strindex == (bfd_size_type) -1)
4088 if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
4093 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
4095 || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
4096 != extsymcount * sizeof (Elf_External_Sym)))
4101 esymend = buf + extsymcount;
4102 for (esym = buf; esym < esymend; esym++, sym_hash++)
4104 Elf_Internal_Sym sym;
4110 struct elf_link_hash_entry *h = NULL;
4113 elf_swap_symbol_in (abfd, esym, &sym);
4115 flags = BSF_NO_FLAGS;
4117 value = sym.st_value;
4120 bind = ELF_ST_BIND (sym.st_info);
4121 if (bind == STB_LOCAL)
4123 /* This should be impossible, since ELF requires that all
4124 global symbols follow all local symbols, and that sh_info
4125 point to the first global symbol. Unfortunatealy, Irix 5
4129 else if (bind == STB_GLOBAL)
4131 else if (bind == STB_WEAK)
4135 /* Leave it up to the processor backend. */
4138 if (sym.st_shndx == SHN_UNDEF)
4139 sec = bfd_und_section_ptr;
4140 else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
4142 sec = section_from_elf_index (abfd, sym.st_shndx);
4146 sec = bfd_abs_section_ptr;
4148 else if (sym.st_shndx == SHN_ABS)
4149 sec = bfd_abs_section_ptr;
4150 else if (sym.st_shndx == SHN_COMMON)
4152 sec = bfd_com_section_ptr;
4153 /* What ELF calls the size we call the value. What ELF
4154 calls the value we call the alignment. */
4155 value = sym.st_size;
4159 /* Leave it up to the processor backend. */
4162 name = elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
4163 if (name == (const char *) NULL)
4166 if (add_symbol_hook)
4168 if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
4172 /* The hook function sets the name to NULL if this symbol
4173 should be skipped for some reason. */
4174 if (name == (const char *) NULL)
4178 /* Sanity check that all possibilities were handled. */
4179 if (flags == BSF_NO_FLAGS || sec == (asection *) NULL)
4181 bfd_set_error (bfd_error_bad_value);
4185 if (bfd_is_und_section (sec)
4186 || bfd_is_com_section (sec))
4191 if (info->hash->creator->flavour == bfd_target_elf_flavour)
4193 /* We need to look up the symbol now in order to get some of
4194 the dynamic object handling right. We pass the hash
4195 table entry in to _bfd_generic_link_add_one_symbol so
4196 that it does not have to look it up again. */
4197 h = elf_link_hash_lookup (elf_hash_table (info), name,
4198 true, false, false);
4203 /* If we are looking at a dynamic object, and this is a
4204 definition, we need to see if it has already been defined
4205 by some other object. If it has, we want to use the
4206 existing definition, and we do not want to report a
4207 multiple symbol definition error; we do this by
4208 clobbering sec to be bfd_und_section_ptr. */
4209 if (dynamic && definition)
4211 if (h->root.type == bfd_link_hash_defined)
4212 sec = bfd_und_section_ptr;
4215 /* Similarly, if we are not looking at a dynamic object, and
4216 we have a definition, we want to override any definition
4217 we may have from a dynamic object. Symbols from regular
4218 files always take precedence over symbols from dynamic
4219 objects, even if they are defined after the dynamic
4220 object in the link. */
4223 && h->root.type == bfd_link_hash_defined
4224 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
4225 && (bfd_get_flavour (h->root.u.def.section->owner)
4226 == bfd_target_elf_flavour)
4227 && (elf_elfheader (h->root.u.def.section->owner)->e_type
4230 /* Change the hash table entry to undefined, and let
4231 _bfd_generic_link_add_one_symbol do the right thing
4232 with the new definition. */
4233 h->root.type = bfd_link_hash_undefined;
4234 h->root.u.undef.abfd = h->root.u.def.section->owner;
4235 h->elf_link_hash_flags &=~ ELF_LINK_HASH_DEFINED_WEAK;
4238 /* If this is a weak definition which we are going to use,
4239 and the symbol is currently undefined, record that the
4240 definition is weak. */
4242 && (flags & BSF_WEAK) != 0
4243 && ! bfd_is_und_section (sec)
4244 && (h->root.type == bfd_link_hash_new
4245 || h->root.type == bfd_link_hash_undefined
4246 || h->root.type == bfd_link_hash_weak))
4247 h->elf_link_hash_flags |= ELF_LINK_HASH_DEFINED_WEAK;
4250 if (! (_bfd_generic_link_add_one_symbol
4251 (info, abfd, name, flags, sec, value, (const char *) NULL,
4252 false, collect, (struct bfd_link_hash_entry **) sym_hash)))
4257 && (flags & BSF_WEAK) != 0
4258 && ELF_ST_TYPE (sym.st_info) != STT_FUNC
4259 && (*sym_hash)->weakdef == NULL)
4261 /* Keep a list of all weak defined non function symbols from
4262 a dynamic object, using the weakdef field. Later in this
4263 function we will set the weakdef field to the correct
4264 value. We only put non-function symbols from dynamic
4265 objects on this list, because that happens to be the only
4266 time we need to know the normal symbol corresponding to a
4267 weak symbol, and the information is time consuming to
4268 figure out. If the weakdef field is not already NULL,
4269 then this symbol was already defined by some previous
4270 dynamic object, and we will be using that previous
4271 definition anyhow. */
4273 (*sym_hash)->weakdef = weaks;
4277 /* Get the alignment of a common symbol. */
4278 if (sym.st_shndx == SHN_COMMON
4279 && h->root.type == bfd_link_hash_common)
4280 h->root.u.c.alignment_power = bfd_log2 (sym.st_value);
4282 if (info->hash->creator->flavour == bfd_target_elf_flavour)
4288 /* Remember the symbol size and type. */
4289 if (sym.st_size != 0)
4291 /* FIXME: We should probably somehow give a warning if
4292 the symbol size changes. */
4293 h->size = sym.st_size;
4295 if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE)
4297 /* FIXME: We should probably somehow give a warning if
4298 the symbol type changes. */
4299 h->type = ELF_ST_TYPE (sym.st_info);
4302 /* Set a flag in the hash table entry indicating the type of
4303 reference or definition we just found. Keep a count of
4304 the number of dynamic symbols we find. A dynamic symbol
4305 is one which is referenced or defined by both a regular
4306 object and a shared object, or one which is referenced or
4307 defined by more than one shared object. */
4308 old_flags = h->elf_link_hash_flags;
4313 new_flag = ELF_LINK_HASH_REF_REGULAR;
4315 new_flag = ELF_LINK_HASH_DEF_REGULAR;
4317 || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
4318 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
4324 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
4326 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
4327 if ((old_flags & new_flag) != 0
4328 || (old_flags & (ELF_LINK_HASH_DEF_REGULAR
4329 | ELF_LINK_HASH_REF_REGULAR)) != 0)
4333 h->elf_link_hash_flags |= new_flag;
4334 if (dynsym && h->dynindx == -1)
4336 if (! elf_link_record_dynamic_symbol (info, h))
4342 /* Now set the weakdefs field correctly for all the weak defined
4343 symbols we found. The only way to do this is to search all the
4344 symbols. Since we only need the information for non functions in
4345 dynamic objects, that's the only time we actually put anything on
4346 the list WEAKS. We need this information so that if a regular
4347 object refers to a symbol defined weakly in a dynamic object, the
4348 real symbol in the dynamic object is also put in the dynamic
4349 symbols; we also must arrange for both symbols to point to the
4350 same memory location. We could handle the general case of symbol
4351 aliasing, but a general symbol alias can only be generated in
4352 assembler code, handling it correctly would be very time
4353 consuming, and other ELF linkers don't handle general aliasing
4355 while (weaks != NULL)
4357 struct elf_link_hash_entry *hlook;
4360 struct elf_link_hash_entry **hpp;
4361 struct elf_link_hash_entry **hppend;
4364 weaks = hlook->weakdef;
4365 hlook->weakdef = NULL;
4367 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined);
4368 slook = hlook->root.u.def.section;
4369 vlook = hlook->root.u.def.value;
4371 hpp = elf_sym_hashes (abfd);
4372 hppend = hpp + extsymcount;
4373 for (; hpp < hppend; hpp++)
4375 struct elf_link_hash_entry *h;
4379 && h->root.type == bfd_link_hash_defined
4380 && h->root.u.def.section == slook
4381 && h->root.u.def.value == vlook)
4385 /* If the weak definition is in the list of dynamic
4386 symbols, make sure the real definition is put there
4388 if (hlook->dynindx != -1
4389 && h->dynindx == -1)
4391 if (! elf_link_record_dynamic_symbol (info, h))
4406 /* If this object is the same format as the output object, and it is
4407 not a shared library, then let the backend look through the
4410 This is required to build global offset table entries and to
4411 arrange for dynamic relocs. It is not required for the
4412 particular common case of linking non PIC code, even when linking
4413 against shared libraries, but unfortunately there is no way of
4414 knowing whether an object file has been compiled PIC or not.
4415 Looking through the relocs is not particularly time consuming.
4416 The problem is that we must either (1) keep the relocs in memory,
4417 which causes the linker to require additional runtime memory or
4418 (2) read the relocs twice from the input file, which wastes time.
4419 This would be a good case for using mmap.
4421 I have no idea how to handle linking PIC code into a file of a
4422 different format. It probably can't be done. */
4423 check_relocs = get_elf_backend_data (abfd)->check_relocs;
4425 && abfd->xvec == info->hash->creator
4426 && check_relocs != NULL)
4430 for (o = abfd->sections; o != NULL; o = o->next)
4432 Elf_Internal_Rela *internal_relocs;
4435 if ((o->flags & SEC_RELOC) == 0
4436 || o->reloc_count == 0)
4439 /* I believe we can ignore the relocs for any section which
4440 does not form part of the final process image, such as a
4441 debugging section. */
4442 if ((o->flags & SEC_ALLOC) == 0)
4445 internal_relocs = elf_link_read_relocs (abfd, o, (PTR) NULL,
4446 (Elf_Internal_Rela *) NULL,
4448 if (internal_relocs == NULL)
4451 ok = (*check_relocs) (abfd, info, o, internal_relocs);
4453 if (! info->keep_memory)
4454 free (internal_relocs);
4471 /* Create some sections which will be filled in with dynamic linking
4472 information. The ABFD argument is an input file which is a dynamic
4473 object. The dynamic sections take up virtual memory space when the
4474 final executable is run, so we need to create them before addresses
4475 are assigned to the output sections. We work out the actual
4476 contents and size of these sections later. */
4479 elf_link_create_dynamic_sections (abfd, info)
4481 struct bfd_link_info *info;
4484 register asection *s;
4485 struct elf_link_hash_entry *h;
4486 struct elf_backend_data *bed;
4488 /* Note that we set the SEC_IN_MEMORY flag for all of these
4490 flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
4492 /* A dynamically linked executable has a .interp section, but a
4493 shared library does not. */
4496 s = bfd_make_section (abfd, ".interp");
4498 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
4502 s = bfd_make_section (abfd, ".dynsym");
4504 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
4505 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4508 /* The first .dynsym symbol is a dummy. */
4509 elf_hash_table (info)->dynsymcount = 1;
4511 s = bfd_make_section (abfd, ".dynstr");
4513 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
4516 /* Create a strtab to hold the dynamic symbol names. */
4517 elf_hash_table (info)->dynstr = elf_stringtab_init ();
4518 if (elf_hash_table (info)->dynstr == NULL)
4521 s = bfd_make_section (abfd, ".dynamic");
4523 || ! bfd_set_section_flags (abfd, s, flags)
4524 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4527 /* The special symbol _DYNAMIC is always set to the start of the
4528 .dynamic section. This call occurs before we have processed the
4529 symbols for any dynamic object, so we don't have to worry about
4530 overriding a dynamic definition. We could set _DYNAMIC in a
4531 linker script, but we only want to define it if we are, in fact,
4532 creating a .dynamic section. We don't want to define it if there
4533 is no .dynamic section, since on some ELF platforms the start up
4534 code examines it to decide how to initialize the process. */
4536 if (! (_bfd_generic_link_add_one_symbol
4537 (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
4538 (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
4539 (struct bfd_link_hash_entry **) &h)))
4541 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4542 h->type = STT_OBJECT;
4545 && ! elf_link_record_dynamic_symbol (info, h))
4548 s = bfd_make_section (abfd, ".hash");
4550 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
4551 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4554 /* Let the backend create the rest of the sections. This lets the
4555 backend set the right flags. The backend will normally create
4556 the .got and .plt sections. */
4557 bed = get_elf_backend_data (abfd);
4558 return (*bed->elf_backend_create_dynamic_sections) (abfd, info);
4561 /* Add an entry to the .dynamic table. */
4564 elf_add_dynamic_entry (info, tag, val)
4565 struct bfd_link_info *info;
4569 Elf_Internal_Dyn dyn;
4573 bfd_byte *newcontents;
4575 dynobj = elf_hash_table (info)->dynobj;
4577 s = bfd_get_section_by_name (dynobj, ".dynamic");
4578 BFD_ASSERT (s != NULL);
4580 newsize = s->_raw_size + sizeof (Elf_External_Dyn);
4581 if (s->contents == NULL)
4582 newcontents = (bfd_byte *) malloc (newsize);
4584 newcontents = (bfd_byte *) realloc (s->contents, newsize);
4585 if (newcontents == NULL)
4587 bfd_set_error (bfd_error_no_memory);
4592 dyn.d_un.d_val = val;
4593 elf_swap_dyn_out (dynobj, &dyn,
4594 (Elf_External_Dyn *) (newcontents + s->_raw_size));
4596 s->_raw_size = newsize;
4597 s->contents = newcontents;
4602 /* Read and swap the relocs for a section. They may have been cached.
4603 If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are not NULL,
4604 they are used as buffers to read into. They are known to be large
4605 enough. If the INTERNAL_RELOCS relocs argument is NULL, the return
4606 value is allocated using either malloc or bfd_alloc, according to
4607 the KEEP_MEMORY argument. */
4609 static Elf_Internal_Rela *
4610 elf_link_read_relocs (abfd, o, external_relocs, internal_relocs, keep_memory)
4613 PTR external_relocs;
4614 Elf_Internal_Rela *internal_relocs;
4615 boolean keep_memory;
4617 Elf_Internal_Shdr *rel_hdr;
4619 Elf_Internal_Rela *alloc2 = NULL;
4621 if (elf_section_data (o)->relocs != NULL)
4622 return elf_section_data (o)->relocs;
4624 if (o->reloc_count == 0)
4627 rel_hdr = &elf_section_data (o)->rel_hdr;
4629 if (internal_relocs == NULL)
4633 size = o->reloc_count * sizeof (Elf_Internal_Rela);
4635 internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
4637 internal_relocs = alloc2 = (Elf_Internal_Rela *) malloc (size);
4638 if (internal_relocs == NULL)
4640 bfd_set_error (bfd_error_no_memory);
4645 if (external_relocs == NULL)
4647 alloc1 = (PTR) malloc (rel_hdr->sh_size);
4650 bfd_set_error (bfd_error_no_memory);
4653 external_relocs = alloc1;
4656 if ((bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
4657 || (bfd_read (external_relocs, 1, rel_hdr->sh_size, abfd)
4658 != rel_hdr->sh_size))
4661 /* Swap in the relocs. For convenience, we always produce an
4662 Elf_Internal_Rela array; if the relocs are Rel, we set the addend
4664 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
4666 Elf_External_Rel *erel;
4667 Elf_External_Rel *erelend;
4668 Elf_Internal_Rela *irela;
4670 erel = (Elf_External_Rel *) external_relocs;
4671 erelend = erel + o->reloc_count;
4672 irela = internal_relocs;
4673 for (; erel < erelend; erel++, irela++)
4675 Elf_Internal_Rel irel;
4677 elf_swap_reloc_in (abfd, erel, &irel);
4678 irela->r_offset = irel.r_offset;
4679 irela->r_info = irel.r_info;
4680 irela->r_addend = 0;
4685 Elf_External_Rela *erela;
4686 Elf_External_Rela *erelaend;
4687 Elf_Internal_Rela *irela;
4689 BFD_ASSERT (rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
4691 erela = (Elf_External_Rela *) external_relocs;
4692 erelaend = erela + o->reloc_count;
4693 irela = internal_relocs;
4694 for (; erela < erelaend; erela++, irela++)
4695 elf_swap_reloca_in (abfd, erela, irela);
4698 /* Cache the results for next time, if we can. */
4700 elf_section_data (o)->relocs = internal_relocs;
4705 /* Don't free alloc2, since if it was allocated we are passing it
4706 back (under the name of internal_relocs). */
4708 return internal_relocs;
4718 /* Record an assignment to a symbol made by a linker script. We need
4719 this in case some dynamic object refers to this symbol. */
4723 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name)
4725 struct bfd_link_info *info;
4728 struct elf_link_hash_entry *h;
4730 h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false);
4734 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4735 h->type = STT_OBJECT;
4737 if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
4738 | ELF_LINK_HASH_REF_DYNAMIC)) != 0
4740 && h->dynindx == -1)
4742 if (! elf_link_record_dynamic_symbol (info, h))
4745 /* If this is a weak defined symbol, and we know a corresponding
4746 real symbol from the same dynamic object, make sure the real
4747 symbol is also made into a dynamic symbol. */
4748 if (h->weakdef != NULL
4749 && h->weakdef->dynindx == -1)
4751 if (! elf_link_record_dynamic_symbol (info, h->weakdef))
4759 /* Array used to determine the number of hash table buckets to use
4760 based on the number of symbols there are. If there are fewer than
4761 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
4762 fewer than 37 we use 17 buckets, and so forth. We never use more
4763 than 521 buckets. */
4765 static const size_t elf_buckets[] =
4767 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 0
4770 /* Set up the sizes and contents of the ELF dynamic sections. This is
4771 called by the ELF linker emulation before_allocation routine. We
4772 must set the sizes of the sections before the linker sets the
4773 addresses of the various sections. */
4776 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath, info,
4781 struct bfd_link_info *info;
4782 asection **sinterpptr;
4787 Elf_Internal_Sym isym;
4790 struct elf_backend_data *bed;
4794 dynobj = elf_hash_table (info)->dynobj;
4795 dynsymcount = elf_hash_table (info)->dynsymcount;
4797 /* If there were no dynamic objects in the link, there is nothing to
4802 *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
4803 BFD_ASSERT (*sinterpptr != NULL || info->shared);
4805 /* Set the size of the .dynsym and .hash sections. We counted the
4806 number of dynamic symbols in elf_link_add_object_symbols. We
4807 will build the contents of .dynsym and .hash when we build the
4808 final symbol table, because until then we do not know the correct
4809 value to give the symbols. We built the .dynstr section as we
4810 went along in elf_link_add_object_symbols. */
4811 s = bfd_get_section_by_name (dynobj, ".dynsym");
4812 BFD_ASSERT (s != NULL);
4813 s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
4814 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
4815 if (s->contents == NULL && s->_raw_size != 0)
4817 bfd_set_error (bfd_error_no_memory);
4821 /* The first entry in .dynsym is a dummy symbol. */
4828 elf_swap_symbol_out (output_bfd, &isym,
4829 (Elf_External_Sym *) s->contents);
4831 for (i = 0; elf_buckets[i] != 0; i++)
4833 bucketcount = elf_buckets[i];
4834 if (dynsymcount < elf_buckets[i + 1])
4838 s = bfd_get_section_by_name (dynobj, ".hash");
4839 BFD_ASSERT (s != NULL);
4840 s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
4841 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
4842 if (s->contents == NULL)
4844 bfd_set_error (bfd_error_no_memory);
4847 memset (s->contents, 0, s->_raw_size);
4849 put_word (output_bfd, bucketcount, s->contents);
4850 put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
4852 elf_hash_table (info)->bucketcount = bucketcount;
4858 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, soname,
4860 if (indx == (bfd_size_type) -1
4861 || ! elf_add_dynamic_entry (info, DT_SONAME, indx))
4869 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
4871 if (indx == (bfd_size_type) -1
4872 || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
4876 s = bfd_get_section_by_name (dynobj, ".dynstr");
4877 BFD_ASSERT (s != NULL);
4878 s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
4880 /* Find all symbols which were defined in a dynamic object and make
4881 the backend pick a reasonable value for them. */
4882 elf_link_hash_traverse (elf_hash_table (info),
4883 elf_adjust_dynamic_symbol,
4886 /* Add some entries to the .dynamic section. We fill in some of the
4887 values later, in elf_bfd_final_link, but we must add the entries
4888 now so that we know the final size of the .dynamic section. */
4889 if (bfd_get_section_by_name (output_bfd, ".init") != NULL)
4891 if (! elf_add_dynamic_entry (info, DT_INIT, 0))
4894 if (bfd_get_section_by_name (output_bfd, ".fini") != NULL)
4896 if (! elf_add_dynamic_entry (info, DT_FINI, 0))
4899 if (! elf_add_dynamic_entry (info, DT_HASH, 0)
4900 || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
4901 || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
4902 || ! elf_add_dynamic_entry (info, DT_STRSZ,
4903 _bfd_stringtab_size (elf_hash_table (info)
4905 || ! elf_add_dynamic_entry (info, DT_SYMENT,
4906 sizeof (Elf_External_Sym)))
4909 /* The backend must work out the sizes of all the other dynamic
4911 bed = get_elf_backend_data (output_bfd);
4912 if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
4915 return elf_add_dynamic_entry (info, DT_NULL, 0);
4918 /* Make the backend pick a good value for a dynamic symbol. This is
4919 called via elf_link_hash_traverse, and also calls itself
4923 elf_adjust_dynamic_symbol (h, data)
4924 struct elf_link_hash_entry *h;
4927 struct bfd_link_info *info = (struct bfd_link_info *) data;
4929 struct elf_backend_data *bed;
4931 /* If this symbol is not defined by a dynamic object, or is not
4932 referenced by a regular object, ignore it. FIXME: Do we need to
4933 worry about symbols which are defined by one dynamic object and
4934 referenced by another one? */
4935 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
4936 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
4937 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
4940 /* If we've already adjusted this symbol, don't do it again. This
4941 can happen via a recursive call. */
4942 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
4945 /* Don't look at this symbol again. Note that we must set this
4946 after checking the above conditions, because we may look at a
4947 symbol once, decide not to do anything, and then get called
4948 recursively later after REF_REGULAR is set below. */
4949 h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
4951 /* If this is a weak definition, and we know a real definition, and
4952 the real symbol is not itself defined by a regular object file,
4953 then get a good value for the real definition. We handle the
4954 real symbol first, for the convenience of the backend routine.
4956 Note that there is a confusing case here. If the real definition
4957 is defined by a regular object file, we don't get the real symbol
4958 from the dynamic object, but we do get the weak symbol. If the
4959 processor backend uses a COPY reloc, then if some routine in the
4960 dynamic object changes the real symbol, we will not see that
4961 change in the corresponding weak symbol. This is the way other
4962 ELF linkers work as well, and seems to be a result of the shared
4965 I will clarify this issue. Most SVR4 shared libraries define the
4966 variable _timezone and define timezone as a weak synonym. The
4967 tzset call changes _timezone. If you write
4968 extern int timezone;
4970 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
4971 you might expect that, since timezone is a synonym for _timezone,
4972 the same number will print both times. However, if the processor
4973 backend uses a COPY reloc, then actually timezone will be copied
4974 into your process image, and, since you define _timezone
4975 yourself, _timezone will not. Thus timezone and _timezone will
4976 wind up at different memory locations. The tzset call will set
4977 _timezone, leaving timezone unchanged. */
4979 if (h->weakdef != NULL)
4981 struct elf_link_hash_entry *weakdef;
4983 BFD_ASSERT (h->root.type == bfd_link_hash_defined);
4984 weakdef = h->weakdef;
4985 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined);
4986 BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
4987 if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
4989 /* This symbol is defined by a regular object file, so we
4990 will not do anything special. Clear weakdef for the
4991 convenience of the processor backend. */
4996 /* There is an implicit reference by a regular object file
4997 via the weak symbol. */
4998 weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
4999 if (! elf_adjust_dynamic_symbol (weakdef, (PTR) info))
5004 dynobj = elf_hash_table (info)->dynobj;
5005 bed = get_elf_backend_data (dynobj);
5006 if (! (*bed->elf_backend_adjust_dynamic_symbol) (info, h))
5008 /* FIXME: No way to return error. */
5015 /* Final phase of ELF linker. */
5017 /* A structure we use to avoid passing large numbers of arguments. */
5019 struct elf_final_link_info
5021 /* General link information. */
5022 struct bfd_link_info *info;
5025 /* Symbol string table. */
5026 struct bfd_strtab_hash *symstrtab;
5027 /* .dynsym section. */
5028 asection *dynsym_sec;
5029 /* .hash section. */
5031 /* Buffer large enough to hold contents of any section. */
5033 /* Buffer large enough to hold external relocs of any section. */
5034 PTR external_relocs;
5035 /* Buffer large enough to hold internal relocs of any section. */
5036 Elf_Internal_Rela *internal_relocs;
5037 /* Buffer large enough to hold external local symbols of any input
5039 Elf_External_Sym *external_syms;
5040 /* Buffer large enough to hold internal local symbols of any input
5042 Elf_Internal_Sym *internal_syms;
5043 /* Array large enough to hold a symbol index for each local symbol
5044 of any input BFD. */
5046 /* Array large enough to hold a section pointer for each local
5047 symbol of any input BFD. */
5048 asection **sections;
5049 /* Buffer to hold swapped out symbols. */
5050 Elf_External_Sym *symbuf;
5051 /* Number of swapped out symbols in buffer. */
5052 size_t symbuf_count;
5053 /* Number of symbols which fit in symbuf. */
5057 static boolean elf_link_output_sym
5058 PARAMS ((struct elf_final_link_info *, const char *,
5059 Elf_Internal_Sym *, asection *));
5060 static boolean elf_link_flush_output_syms
5061 PARAMS ((struct elf_final_link_info *));
5062 static boolean elf_link_output_extsym
5063 PARAMS ((struct elf_link_hash_entry *, PTR));
5064 static boolean elf_link_input_bfd
5065 PARAMS ((struct elf_final_link_info *, bfd *));
5066 static boolean elf_reloc_link_order
5067 PARAMS ((bfd *, struct bfd_link_info *, asection *,
5068 struct bfd_link_order *));
5070 /* Do the final step of an ELF link. */
5073 elf_bfd_final_link (abfd, info)
5075 struct bfd_link_info *info;
5078 struct elf_final_link_info finfo;
5079 register asection *o;
5080 register struct bfd_link_order *p;
5082 size_t max_contents_size;
5083 size_t max_external_reloc_size;
5084 size_t max_internal_reloc_count;
5085 size_t max_sym_count;
5087 Elf_Internal_Sym elfsym;
5089 Elf_Internal_Shdr *symtab_hdr;
5090 Elf_Internal_Shdr *symstrtab_hdr;
5091 struct elf_backend_data *bed = get_elf_backend_data (abfd);
5094 abfd->flags |= DYNAMIC;
5096 dynobj = elf_hash_table (info)->dynobj;
5099 finfo.output_bfd = abfd;
5100 finfo.symstrtab = elf_stringtab_init ();
5101 if (finfo.symstrtab == NULL)
5105 finfo.dynsym_sec = NULL;
5106 finfo.hash_sec = NULL;
5110 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
5111 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
5112 if (finfo.dynsym_sec == NULL
5113 || finfo.hash_sec == NULL)
5116 finfo.contents = NULL;
5117 finfo.external_relocs = NULL;
5118 finfo.internal_relocs = NULL;
5119 finfo.external_syms = NULL;
5120 finfo.internal_syms = NULL;
5121 finfo.indices = NULL;
5122 finfo.sections = NULL;
5123 finfo.symbuf = NULL;
5124 finfo.symbuf_count = 0;
5126 /* Count up the number of relocations we will output for each output
5127 section, so that we know the sizes of the reloc sections. We
5128 also figure out some maximum sizes. */
5129 max_contents_size = 0;
5130 max_external_reloc_size = 0;
5131 max_internal_reloc_count = 0;
5133 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
5137 for (p = o->link_order_head; p != NULL; p = p->next)
5139 if (p->type == bfd_section_reloc_link_order
5140 || p->type == bfd_symbol_reloc_link_order)
5142 else if (p->type == bfd_indirect_link_order)
5146 sec = p->u.indirect.section;
5148 if (info->relocateable)
5149 o->reloc_count += sec->reloc_count;
5151 if (sec->_raw_size > max_contents_size)
5152 max_contents_size = sec->_raw_size;
5153 if (sec->_cooked_size > max_contents_size)
5154 max_contents_size = sec->_cooked_size;
5156 /* We are interested in just local symbols, not all
5158 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
5162 if (elf_bad_symtab (sec->owner))
5163 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
5164 / sizeof (Elf_External_Sym));
5166 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
5168 if (sym_count > max_sym_count)
5169 max_sym_count = sym_count;
5171 if ((sec->flags & SEC_RELOC) != 0)
5175 ext_size = elf_section_data (sec)->rel_hdr.sh_size;
5176 if (ext_size > max_external_reloc_size)
5177 max_external_reloc_size = ext_size;
5178 if (sec->reloc_count > max_internal_reloc_count)
5179 max_internal_reloc_count = sec->reloc_count;
5185 if (o->reloc_count > 0)
5186 o->flags |= SEC_RELOC;
5189 /* Explicitly clear the SEC_RELOC flag. The linker tends to
5190 set it (this is probably a bug) and if it is set
5191 assign_section_numbers will create a reloc section. */
5192 o->flags &=~ SEC_RELOC;
5195 /* If the SEC_ALLOC flag is not set, force the section VMA to
5196 zero. This is done in elf_fake_sections as well, but forcing
5197 the VMA to 0 here will ensure that relocs against these
5198 sections are handled correctly. */
5199 if ((o->flags & SEC_ALLOC) == 0)
5203 /* Figure out the file positions for everything but the symbol table
5204 and the relocs. We set symcount to force assign_section_numbers
5205 to create a symbol table. */
5206 abfd->symcount = info->strip == strip_all ? 0 : 1;
5207 BFD_ASSERT (! abfd->output_has_begun);
5208 if (! elf_compute_section_file_positions (abfd, info))
5211 /* That created the reloc sections. Set their sizes, and assign
5212 them file positions, and allocate some buffers. */
5213 for (o = abfd->sections; o != NULL; o = o->next)
5215 if ((o->flags & SEC_RELOC) != 0)
5217 Elf_Internal_Shdr *rel_hdr;
5218 register struct elf_link_hash_entry **p, **pend;
5220 rel_hdr = &elf_section_data (o)->rel_hdr;
5222 rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
5224 /* The contents field must last into write_object_contents,
5225 so we allocate it with bfd_alloc rather than malloc. */
5226 rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
5227 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
5229 bfd_set_error (bfd_error_no_memory);
5233 p = ((struct elf_link_hash_entry **)
5234 malloc (o->reloc_count
5235 * sizeof (struct elf_link_hash_entry *)));
5236 if (p == NULL && o->reloc_count != 0)
5238 bfd_set_error (bfd_error_no_memory);
5241 elf_section_data (o)->rel_hashes = p;
5242 pend = p + o->reloc_count;
5243 for (; p < pend; p++)
5246 /* Use the reloc_count field as an index when outputting the
5252 assign_file_positions_for_relocs (abfd);
5254 /* We have now assigned file positions for all the sections except
5255 .symtab and .strtab. We start the .symtab section at the current
5256 file position, and write directly to it. We build the .strtab
5257 section in memory. When we add .dynsym support, we will build
5258 that in memory as well (.dynsym is smaller than .symtab). */
5260 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5261 /* sh_name is set in prep_headers. */
5262 symtab_hdr->sh_type = SHT_SYMTAB;
5263 symtab_hdr->sh_flags = 0;
5264 symtab_hdr->sh_addr = 0;
5265 symtab_hdr->sh_size = 0;
5266 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
5267 /* sh_link is set in assign_section_numbers. */
5268 /* sh_info is set below. */
5269 /* sh_offset is set just below. */
5270 symtab_hdr->sh_addralign = 4; /* FIXME: system dependent? */
5272 off = elf_tdata (abfd)->next_file_pos;
5273 off = assign_file_position_for_section (symtab_hdr, off, true);
5275 /* Note that at this point elf_tdata (abfd)->next_file_pos is
5276 incorrect. We do not yet know the size of the .symtab section.
5277 We correct next_file_pos below, after we do know the size. */
5279 /* Allocate a buffer to hold swapped out symbols. This is to avoid
5280 continuously seeking to the right position in the file. */
5281 if (! info->keep_memory || max_sym_count < 20)
5282 finfo.symbuf_size = 20;
5284 finfo.symbuf_size = max_sym_count;
5285 finfo.symbuf = ((Elf_External_Sym *)
5286 malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
5287 if (finfo.symbuf == NULL)
5289 bfd_set_error (bfd_error_no_memory);
5293 /* Start writing out the symbol table. The first symbol is always a
5295 elfsym.st_value = 0;
5298 elfsym.st_other = 0;
5299 elfsym.st_shndx = SHN_UNDEF;
5300 if (! elf_link_output_sym (&finfo, (const char *) NULL,
5301 &elfsym, bfd_und_section_ptr))
5305 /* Some standard ELF linkers do this, but we don't because it causes
5306 bootstrap comparison failures. */
5307 /* Output a file symbol for the output file as the second symbol.
5308 We output this even if we are discarding local symbols, although
5309 I'm not sure if this is correct. */
5310 elfsym.st_value = 0;
5312 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
5313 elfsym.st_other = 0;
5314 elfsym.st_shndx = SHN_ABS;
5315 if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
5316 &elfsym, bfd_abs_section_ptr))
5320 /* Output a symbol for each section. We output these even if we are
5321 discarding local symbols, since they are used for relocs. These
5322 symbols have no names. We store the index of each one in the
5323 index field of the section, so that we can find it again when
5324 outputting relocs. */
5325 elfsym.st_value = 0;
5327 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
5328 elfsym.st_other = 0;
5329 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
5331 o = section_from_elf_index (abfd, i);
5333 o->target_index = abfd->symcount;
5334 elfsym.st_shndx = i;
5335 if (! elf_link_output_sym (&finfo, (const char *) NULL,
5340 /* Allocate some memory to hold information read in from the input
5342 finfo.contents = (bfd_byte *) malloc (max_contents_size);
5343 finfo.external_relocs = (PTR) malloc (max_external_reloc_size);
5344 finfo.internal_relocs = ((Elf_Internal_Rela *)
5345 malloc (max_internal_reloc_count
5346 * sizeof (Elf_Internal_Rela)));
5347 finfo.external_syms = ((Elf_External_Sym *)
5348 malloc (max_sym_count * sizeof (Elf_External_Sym)));
5349 finfo.internal_syms = ((Elf_Internal_Sym *)
5350 malloc (max_sym_count * sizeof (Elf_Internal_Sym)));
5351 finfo.indices = (long *) malloc (max_sym_count * sizeof (long));
5352 finfo.sections = (asection **) malloc (max_sym_count * sizeof (asection *));
5353 if ((finfo.contents == NULL && max_contents_size != 0)
5354 || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
5355 || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
5356 || (finfo.external_syms == NULL && max_sym_count != 0)
5357 || (finfo.internal_syms == NULL && max_sym_count != 0)
5358 || (finfo.indices == NULL && max_sym_count != 0)
5359 || (finfo.sections == NULL && max_sym_count != 0))
5361 bfd_set_error (bfd_error_no_memory);
5365 /* Since ELF permits relocations to be against local symbols, we
5366 must have the local symbols available when we do the relocations.
5367 Since we would rather only read the local symbols once, and we
5368 would rather not keep them in memory, we handle all the
5369 relocations for a single input file at the same time.
5371 Unfortunately, there is no way to know the total number of local
5372 symbols until we have seen all of them, and the local symbol
5373 indices precede the global symbol indices. This means that when
5374 we are generating relocateable output, and we see a reloc against
5375 a global symbol, we can not know the symbol index until we have
5376 finished examining all the local symbols to see which ones we are
5377 going to output. To deal with this, we keep the relocations in
5378 memory, and don't output them until the end of the link. This is
5379 an unfortunate waste of memory, but I don't see a good way around
5380 it. Fortunately, it only happens when performing a relocateable
5381 link, which is not the common case. FIXME: If keep_memory is set
5382 we could write the relocs out and then read them again; I don't
5383 know how bad the memory loss will be. */
5385 for (sub = info->input_bfds; sub != NULL; sub = sub->next)
5386 sub->output_has_begun = false;
5387 for (o = abfd->sections; o != NULL; o = o->next)
5389 for (p = o->link_order_head; p != NULL; p = p->next)
5391 if (p->type == bfd_indirect_link_order
5392 && (bfd_get_flavour (p->u.indirect.section->owner)
5393 == bfd_target_elf_flavour))
5395 sub = p->u.indirect.section->owner;
5396 if (! sub->output_has_begun)
5398 if (! elf_link_input_bfd (&finfo, sub))
5400 sub->output_has_begun = true;
5403 else if (p->type == bfd_section_reloc_link_order
5404 || p->type == bfd_symbol_reloc_link_order)
5406 if (! elf_reloc_link_order (abfd, info, o, p))
5411 if (! _bfd_default_link_order (abfd, info, o, p))
5417 /* That wrote out all the local symbols. Finish up the symbol table
5418 with the global symbols. */
5420 /* The sh_info field records the index of the first non local
5422 symtab_hdr->sh_info = abfd->symcount;
5424 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
5426 /* We get the global symbols from the hash table. */
5427 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
5430 /* Flush all symbols to the file. */
5431 if (! elf_link_flush_output_syms (&finfo))
5434 /* Now we know the size of the symtab section. */
5435 off += symtab_hdr->sh_size;
5437 /* Finish up and write out the symbol string table (.strtab)
5439 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
5440 /* sh_name was set in prep_headers. */
5441 symstrtab_hdr->sh_type = SHT_STRTAB;
5442 symstrtab_hdr->sh_flags = 0;
5443 symstrtab_hdr->sh_addr = 0;
5444 symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
5445 symstrtab_hdr->sh_entsize = 0;
5446 symstrtab_hdr->sh_link = 0;
5447 symstrtab_hdr->sh_info = 0;
5448 /* sh_offset is set just below. */
5449 symstrtab_hdr->sh_addralign = 1;
5451 off = assign_file_position_for_section (symstrtab_hdr, off, true);
5452 elf_tdata (abfd)->next_file_pos = off;
5454 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
5455 || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
5458 /* Adjust the relocs to have the correct symbol indices. */
5459 for (o = abfd->sections; o != NULL; o = o->next)
5461 struct elf_link_hash_entry **rel_hash;
5462 Elf_Internal_Shdr *rel_hdr;
5464 if ((o->flags & SEC_RELOC) == 0)
5467 rel_hash = elf_section_data (o)->rel_hashes;
5468 rel_hdr = &elf_section_data (o)->rel_hdr;
5469 for (i = 0; i < o->reloc_count; i++, rel_hash++)
5471 if (*rel_hash == NULL)
5474 BFD_ASSERT ((*rel_hash)->indx >= 0);
5476 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
5478 Elf_External_Rel *erel;
5479 Elf_Internal_Rel irel;
5481 erel = (Elf_External_Rel *) rel_hdr->contents + i;
5482 elf_swap_reloc_in (abfd, erel, &irel);
5483 irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
5484 ELF_R_TYPE (irel.r_info));
5485 elf_swap_reloc_out (abfd, &irel, erel);
5489 Elf_External_Rela *erela;
5490 Elf_Internal_Rela irela;
5492 BFD_ASSERT (rel_hdr->sh_entsize
5493 == sizeof (Elf_External_Rela));
5495 erela = (Elf_External_Rela *) rel_hdr->contents + i;
5496 elf_swap_reloca_in (abfd, erela, &irela);
5497 irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
5498 ELF_R_TYPE (irela.r_info));
5499 elf_swap_reloca_out (abfd, &irela, erela);
5503 /* Set the reloc_count field to 0 to prevent write_relocs from
5504 trying to swap the relocs out itself. */
5508 /* If we are linking against a dynamic object, finish up the dynamic
5509 linking information. */
5512 Elf_External_Dyn *dyncon, *dynconend;
5514 /* Fix up .dynamic entries. */
5515 o = bfd_get_section_by_name (dynobj, ".dynamic");
5516 BFD_ASSERT (o != NULL);
5518 dyncon = (Elf_External_Dyn *) o->contents;
5519 dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
5520 for (; dyncon < dynconend; dyncon++)
5522 Elf_Internal_Dyn dyn;
5526 elf_swap_dyn_in (dynobj, dyncon, &dyn);
5548 o = bfd_get_section_by_name (abfd, name);
5549 BFD_ASSERT (o != NULL);
5550 dyn.d_un.d_ptr = o->vma;
5551 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5558 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
5563 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
5565 Elf_Internal_Shdr *hdr;
5567 hdr = elf_elfsections (abfd)[i];
5568 if (hdr->sh_type == type
5569 && (hdr->sh_flags & SHF_ALLOC) != 0)
5571 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
5572 dyn.d_un.d_val += hdr->sh_size;
5575 if (dyn.d_un.d_val == 0
5576 || hdr->sh_addr < dyn.d_un.d_val)
5577 dyn.d_un.d_val = hdr->sh_addr;
5581 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5586 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
5589 for (o = dynobj->sections; o != NULL; o = o->next)
5591 if ((o->flags & SEC_HAS_CONTENTS) == 0)
5593 if ((o->flags & SEC_IN_MEMORY) == 0)
5595 /* At this point, we are only interested in sections
5596 created by elf_link_create_dynamic_sections. FIXME:
5597 This test is fragile. */
5600 if ((elf_section_data (o->output_section)->this_hdr.sh_type
5602 || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
5604 if (! bfd_set_section_contents (abfd, o->output_section,
5605 o->contents, o->output_offset,
5613 /* The contents of the .dynstr section are actually in a
5615 off = elf_section_data (o->output_section)->this_hdr.sh_offset;
5616 if (bfd_seek (abfd, off, SEEK_SET) != 0
5617 || ! _bfd_stringtab_emit (abfd,
5618 elf_hash_table (info)->dynstr))
5624 if (finfo.symstrtab != NULL)
5625 _bfd_stringtab_free (finfo.symstrtab);
5626 if (finfo.contents != NULL)
5627 free (finfo.contents);
5628 if (finfo.external_relocs != NULL)
5629 free (finfo.external_relocs);
5630 if (finfo.internal_relocs != NULL)
5631 free (finfo.internal_relocs);
5632 if (finfo.external_syms != NULL)
5633 free (finfo.external_syms);
5634 if (finfo.internal_syms != NULL)
5635 free (finfo.internal_syms);
5636 if (finfo.indices != NULL)
5637 free (finfo.indices);
5638 if (finfo.sections != NULL)
5639 free (finfo.sections);
5640 if (finfo.symbuf != NULL)
5641 free (finfo.symbuf);
5642 for (o = abfd->sections; o != NULL; o = o->next)
5644 if ((o->flags & SEC_RELOC) != 0
5645 && elf_section_data (o)->rel_hashes != NULL)
5646 free (elf_section_data (o)->rel_hashes);
5649 elf_tdata (abfd)->linker = true;
5654 if (finfo.symstrtab != NULL)
5655 _bfd_stringtab_free (finfo.symstrtab);
5656 if (finfo.contents != NULL)
5657 free (finfo.contents);
5658 if (finfo.external_relocs != NULL)
5659 free (finfo.external_relocs);
5660 if (finfo.internal_relocs != NULL)
5661 free (finfo.internal_relocs);
5662 if (finfo.external_syms != NULL)
5663 free (finfo.external_syms);
5664 if (finfo.internal_syms != NULL)
5665 free (finfo.internal_syms);
5666 if (finfo.indices != NULL)
5667 free (finfo.indices);
5668 if (finfo.sections != NULL)
5669 free (finfo.sections);
5670 if (finfo.symbuf != NULL)
5671 free (finfo.symbuf);
5672 for (o = abfd->sections; o != NULL; o = o->next)
5674 if ((o->flags & SEC_RELOC) != 0
5675 && elf_section_data (o)->rel_hashes != NULL)
5676 free (elf_section_data (o)->rel_hashes);
5682 /* Add a symbol to the output symbol table. */
5685 elf_link_output_sym (finfo, name, elfsym, input_sec)
5686 struct elf_final_link_info *finfo;
5688 Elf_Internal_Sym *elfsym;
5689 asection *input_sec;
5691 boolean (*output_symbol_hook) PARAMS ((bfd *,
5692 struct bfd_link_info *info,
5697 output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
5698 elf_backend_link_output_symbol_hook;
5699 if (output_symbol_hook != NULL)
5701 if (! ((*output_symbol_hook)
5702 (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
5706 if (name == (const char *) NULL || *name == '\0')
5707 elfsym->st_name = 0;
5710 elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
5713 if (elfsym->st_name == (unsigned long) -1)
5717 if (finfo->symbuf_count >= finfo->symbuf_size)
5719 if (! elf_link_flush_output_syms (finfo))
5723 elf_swap_symbol_out (finfo->output_bfd, elfsym,
5724 finfo->symbuf + finfo->symbuf_count);
5725 ++finfo->symbuf_count;
5727 ++finfo->output_bfd->symcount;
5732 /* Flush the output symbols to the file. */
5735 elf_link_flush_output_syms (finfo)
5736 struct elf_final_link_info *finfo;
5738 Elf_Internal_Shdr *symtab;
5740 symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
5742 if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
5744 || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
5745 sizeof (Elf_External_Sym), finfo->output_bfd)
5746 != finfo->symbuf_count * sizeof (Elf_External_Sym)))
5749 symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
5751 finfo->symbuf_count = 0;
5756 /* Add an external symbol to the symbol table. This is called from
5757 the hash table traversal routine. */
5760 elf_link_output_extsym (h, data)
5761 struct elf_link_hash_entry *h;
5764 struct elf_final_link_info *finfo = (struct elf_final_link_info *) data;
5766 Elf_Internal_Sym sym;
5767 asection *input_sec;
5769 /* We don't want to output symbols that have never been mentioned by
5770 a regular file, or that we have been told to strip. However, if
5771 h->indx is set to -2, the symbol is used by a reloc and we must
5775 else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
5776 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
5777 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
5778 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
5780 else if (finfo->info->strip == strip_all
5781 || (finfo->info->strip == strip_some
5782 && bfd_hash_lookup (finfo->info->keep_hash,
5783 h->root.root.string,
5784 false, false) == NULL))
5789 /* If we're stripping it, and it's not a dynamic symbol, there's
5790 nothing else to do. */
5791 if (strip && h->dynindx == -1)
5795 sym.st_size = h->size;
5797 if (h->root.type == bfd_link_hash_weak
5798 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEFINED_WEAK) != 0)
5799 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
5801 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
5803 switch (h->root.type)
5806 case bfd_link_hash_new:
5810 case bfd_link_hash_undefined:
5811 input_sec = bfd_und_section_ptr;
5812 sym.st_shndx = SHN_UNDEF;
5815 case bfd_link_hash_weak:
5816 input_sec = bfd_und_section_ptr;
5817 sym.st_shndx = SHN_UNDEF;
5820 case bfd_link_hash_defined:
5822 input_sec = h->root.u.def.section;
5823 if (input_sec->output_section != NULL)
5826 elf_section_from_bfd_section (finfo->output_bfd,
5827 input_sec->output_section);
5828 if (sym.st_shndx == (unsigned short) -1)
5830 /* FIXME: No way to handle errors. */
5834 /* ELF symbols in relocateable files are section relative,
5835 but in nonrelocateable files they are virtual
5837 sym.st_value = h->root.u.def.value + input_sec->output_offset;
5838 if (! finfo->info->relocateable)
5839 sym.st_value += input_sec->output_section->vma;
5843 BFD_ASSERT (bfd_get_flavour (input_sec->owner)
5844 == bfd_target_elf_flavour
5845 && elf_elfheader (input_sec->owner)->e_type == ET_DYN);
5846 sym.st_shndx = SHN_UNDEF;
5847 input_sec = bfd_und_section_ptr;
5852 case bfd_link_hash_common:
5853 input_sec = bfd_com_section_ptr;
5854 sym.st_shndx = SHN_COMMON;
5855 sym.st_value = 1 << h->root.u.c.alignment_power;
5858 case bfd_link_hash_indirect:
5859 case bfd_link_hash_warning:
5860 /* I have no idea how these should be handled. */
5864 /* If this symbol should be put in the .dynsym section, then put it
5865 there now. We have already know the symbol index. We also fill
5866 in the entry in the .hash section. */
5867 if (h->dynindx != -1)
5869 struct elf_backend_data *bed;
5872 bfd_byte *bucketpos;
5875 sym.st_name = h->dynstr_index;
5877 /* Give the processor backend a chance to tweak the symbol
5878 value, and also to finish up anything that needs to be done
5880 bed = get_elf_backend_data (finfo->output_bfd);
5881 if (! ((*bed->elf_backend_finish_dynamic_symbol)
5882 (finfo->output_bfd, finfo->info, h, &sym)))
5884 /* FIXME: No way to return error. */
5888 elf_swap_symbol_out (finfo->output_bfd, &sym,
5889 ((Elf_External_Sym *) finfo->dynsym_sec->contents
5892 bucketcount = elf_hash_table (finfo->info)->bucketcount;
5893 bucket = bfd_elf_hash ((const unsigned char *) h->root.root.string) % bucketcount;
5894 bucketpos = ((bfd_byte *) finfo->hash_sec->contents
5895 + (bucket + 2) * (ARCH_SIZE / 8));
5896 chain = get_word (finfo->output_bfd, bucketpos);
5897 put_word (finfo->output_bfd, h->dynindx, bucketpos);
5898 put_word (finfo->output_bfd, chain,
5899 ((bfd_byte *) finfo->hash_sec->contents
5900 + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
5903 /* If we're stripping it, then it was just a dynamic symbol, and
5904 there's nothing else to do. */
5908 h->indx = finfo->output_bfd->symcount;
5910 if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
5912 /* FIXME: No way to return error. */
5919 /* Link an input file into the linker output file. This function
5920 handles all the sections and relocations of the input file at once.
5921 This is so that we only have to read the local symbols once, and
5922 don't have to keep them in memory. */
5925 elf_link_input_bfd (finfo, input_bfd)
5926 struct elf_final_link_info *finfo;
5929 boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
5930 bfd *, asection *, bfd_byte *,
5931 Elf_Internal_Rela *,
5932 Elf_Internal_Sym *, asection **));
5934 Elf_Internal_Shdr *symtab_hdr;
5937 Elf_External_Sym *esym;
5938 Elf_External_Sym *esymend;
5939 Elf_Internal_Sym *isym;
5941 asection **ppsection;
5944 output_bfd = finfo->output_bfd;
5946 get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
5948 /* If this is a dynamic object, we don't want to do anything here:
5949 we don't want the local symbols, and we don't want the section
5951 if (elf_elfheader (input_bfd)->e_type == ET_DYN)
5954 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5955 if (elf_bad_symtab (input_bfd))
5957 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
5962 locsymcount = symtab_hdr->sh_info;
5963 extsymoff = symtab_hdr->sh_info;
5966 /* Read the local symbols. */
5968 && (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
5969 || (bfd_read (finfo->external_syms, sizeof (Elf_External_Sym),
5970 locsymcount, input_bfd)
5971 != locsymcount * sizeof (Elf_External_Sym))))
5974 /* Swap in the local symbols and write out the ones which we know
5975 are going into the output file. */
5976 esym = finfo->external_syms;
5977 esymend = esym + locsymcount;
5978 isym = finfo->internal_syms;
5979 pindex = finfo->indices;
5980 ppsection = finfo->sections;
5981 for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
5985 Elf_Internal_Sym osym;
5987 elf_swap_symbol_in (input_bfd, esym, isym);
5990 if (elf_bad_symtab (input_bfd))
5992 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
5999 if (isym->st_shndx == SHN_UNDEF)
6000 isec = bfd_und_section_ptr;
6001 else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
6002 isec = section_from_elf_index (input_bfd, isym->st_shndx);
6003 else if (isym->st_shndx == SHN_ABS)
6004 isec = bfd_abs_section_ptr;
6005 else if (isym->st_shndx == SHN_COMMON)
6006 isec = bfd_com_section_ptr;
6015 /* Don't output the first, undefined, symbol. */
6016 if (esym == finfo->external_syms)
6019 /* If we are stripping all symbols, we don't want to output this
6021 if (finfo->info->strip == strip_all)
6024 /* We never output section symbols. Instead, we use the section
6025 symbol of the corresponding section in the output file. */
6026 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6029 /* If we are discarding all local symbols, we don't want to
6030 output this one. If we are generating a relocateable output
6031 file, then some of the local symbols may be required by
6032 relocs; we output them below as we discover that they are
6034 if (finfo->info->discard == discard_all)
6037 /* Get the name of the symbol. */
6038 name = elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
6043 /* See if we are discarding symbols with this name. */
6044 if ((finfo->info->strip == strip_some
6045 && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
6047 || (finfo->info->discard == discard_l
6048 && strncmp (name, finfo->info->lprefix,
6049 finfo->info->lprefix_len) == 0))
6052 /* If we get here, we are going to output this symbol. */
6056 /* Adjust the section index for the output file. */
6057 osym.st_shndx = elf_section_from_bfd_section (output_bfd,
6058 isec->output_section);
6059 if (osym.st_shndx == (unsigned short) -1)
6062 *pindex = output_bfd->symcount;
6064 /* ELF symbols in relocateable files are section relative, but
6065 in executable files they are virtual addresses. Note that
6066 this code assumes that all ELF sections have an associated
6067 BFD section with a reasonable value for output_offset; below
6068 we assume that they also have a reasonable value for
6069 output_section. Any special sections must be set up to meet
6070 these requirements. */
6071 osym.st_value += isec->output_offset;
6072 if (! finfo->info->relocateable)
6073 osym.st_value += isec->output_section->vma;
6075 if (! elf_link_output_sym (finfo, name, &osym, isec))
6079 /* Relocate the contents of each section. */
6080 for (o = input_bfd->sections; o != NULL; o = o->next)
6082 if ((o->flags & SEC_HAS_CONTENTS) == 0)
6085 if ((o->flags & SEC_IN_MEMORY) != 0
6086 && input_bfd == elf_hash_table (finfo->info)->dynobj)
6088 /* Section was created by elf_link_create_dynamic_sections.
6089 FIXME: This test is fragile. */
6093 /* Read the contents of the section. */
6094 if (! bfd_get_section_contents (input_bfd, o, finfo->contents,
6095 (file_ptr) 0, o->_raw_size))
6098 if ((o->flags & SEC_RELOC) != 0)
6100 Elf_Internal_Rela *internal_relocs;
6102 /* Get the swapped relocs. */
6103 internal_relocs = elf_link_read_relocs (input_bfd, o,
6104 finfo->external_relocs,
6105 finfo->internal_relocs,
6107 if (internal_relocs == NULL
6108 && o->reloc_count > 0)
6111 /* Relocate the section by invoking a back end routine.
6113 The back end routine is responsible for adjusting the
6114 section contents as necessary, and (if using Rela relocs
6115 and generating a relocateable output file) adjusting the
6116 reloc addend as necessary.
6118 The back end routine does not have to worry about setting
6119 the reloc address or the reloc symbol index.
6121 The back end routine is given a pointer to the swapped in
6122 internal symbols, and can access the hash table entries
6123 for the external symbols via elf_sym_hashes (input_bfd).
6125 When generating relocateable output, the back end routine
6126 must handle STB_LOCAL/STT_SECTION symbols specially. The
6127 output symbol is going to be a section symbol
6128 corresponding to the output section, which will require
6129 the addend to be adjusted. */
6131 if (! (*relocate_section) (output_bfd, finfo->info,
6135 finfo->internal_syms,
6139 if (finfo->info->relocateable)
6141 Elf_Internal_Rela *irela;
6142 Elf_Internal_Rela *irelaend;
6143 struct elf_link_hash_entry **rel_hash;
6144 Elf_Internal_Shdr *input_rel_hdr;
6145 Elf_Internal_Shdr *output_rel_hdr;
6147 /* Adjust the reloc addresses and symbol indices. */
6149 irela = internal_relocs;
6150 irelaend = irela + o->reloc_count;
6151 rel_hash = (elf_section_data (o->output_section)->rel_hashes
6152 + o->output_section->reloc_count);
6153 for (; irela < irelaend; irela++, rel_hash++)
6156 Elf_Internal_Sym *isym;
6159 irela->r_offset += o->output_offset;
6161 r_symndx = ELF_R_SYM (irela->r_info);
6166 if (r_symndx >= locsymcount
6167 || (elf_bad_symtab (input_bfd)
6168 && finfo->sections[r_symndx] == NULL))
6172 /* This is a reloc against a global symbol. We
6173 have not yet output all the local symbols, so
6174 we do not know the symbol index of any global
6175 symbol. We set the rel_hash entry for this
6176 reloc to point to the global hash table entry
6177 for this symbol. The symbol index is then
6178 set at the end of elf_bfd_final_link. */
6179 indx = r_symndx - extsymoff;
6180 *rel_hash = elf_sym_hashes (input_bfd)[indx];
6182 /* Setting the index to -2 tells
6183 elf_link_output_extsym that this symbol is
6185 BFD_ASSERT ((*rel_hash)->indx < 0);
6186 (*rel_hash)->indx = -2;
6191 /* This is a reloc against a local symbol. */
6194 isym = finfo->internal_syms + r_symndx;
6195 sec = finfo->sections[r_symndx];
6196 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6198 /* I suppose the backend ought to fill in the
6199 section of any STT_SECTION symbol against a
6200 processor specific section. */
6201 if (sec != NULL && bfd_is_abs_section (sec))
6203 else if (sec == NULL || sec->owner == NULL)
6205 bfd_set_error (bfd_error_bad_value);
6210 r_symndx = sec->output_section->target_index;
6217 if (finfo->indices[r_symndx] == -1)
6223 if (finfo->info->strip == strip_all)
6225 /* You can't do ld -r -s. */
6226 bfd_set_error (bfd_error_invalid_operation);
6230 /* This symbol was skipped earlier, but
6231 since it is needed by a reloc, we
6232 must output it now. */
6233 link = symtab_hdr->sh_link;
6234 name = elf_string_from_elf_section (input_bfd,
6240 osec = sec->output_section;
6242 elf_section_from_bfd_section (output_bfd,
6244 if (isym->st_shndx == (unsigned short) -1)
6247 isym->st_value += sec->output_offset;
6248 if (! finfo->info->relocateable)
6249 isym->st_value += osec->vma;
6251 finfo->indices[r_symndx] = output_bfd->symcount;
6253 if (! elf_link_output_sym (finfo, name, isym, sec))
6257 r_symndx = finfo->indices[r_symndx];
6260 irela->r_info = ELF_R_INFO (r_symndx,
6261 ELF_R_TYPE (irela->r_info));
6264 /* Swap out the relocs. */
6265 input_rel_hdr = &elf_section_data (o)->rel_hdr;
6266 output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
6267 BFD_ASSERT (output_rel_hdr->sh_entsize
6268 == input_rel_hdr->sh_entsize);
6269 irela = internal_relocs;
6270 irelaend = irela + o->reloc_count;
6271 if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
6273 Elf_External_Rel *erel;
6275 erel = ((Elf_External_Rel *) output_rel_hdr->contents
6276 + o->output_section->reloc_count);
6277 for (; irela < irelaend; irela++, erel++)
6279 Elf_Internal_Rel irel;
6281 irel.r_offset = irela->r_offset;
6282 irel.r_info = irela->r_info;
6283 BFD_ASSERT (irela->r_addend == 0);
6284 elf_swap_reloc_out (output_bfd, &irel, erel);
6289 Elf_External_Rela *erela;
6291 BFD_ASSERT (input_rel_hdr->sh_entsize
6292 == sizeof (Elf_External_Rela));
6293 erela = ((Elf_External_Rela *) output_rel_hdr->contents
6294 + o->output_section->reloc_count);
6295 for (; irela < irelaend; irela++, erela++)
6296 elf_swap_reloca_out (output_bfd, irela, erela);
6299 o->output_section->reloc_count += o->reloc_count;
6303 /* Write out the modified section contents. */
6304 if (! bfd_set_section_contents (output_bfd, o->output_section,
6305 finfo->contents, o->output_offset,
6306 (o->_cooked_size != 0
6315 /* Generate a reloc when linking an ELF file. This is a reloc
6316 requested by the linker, and does come from any input file. This
6317 is used to build constructor and destructor tables when linking
6321 elf_reloc_link_order (output_bfd, info, output_section, link_order)
6323 struct bfd_link_info *info;
6324 asection *output_section;
6325 struct bfd_link_order *link_order;
6327 const reloc_howto_type *howto;
6330 struct elf_link_hash_entry **rel_hash_ptr;
6331 Elf_Internal_Shdr *rel_hdr;
6333 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
6336 bfd_set_error (bfd_error_bad_value);
6340 /* If this is an inplace reloc, we must write the addend into the
6342 if (howto->partial_inplace
6343 && link_order->u.reloc.p->addend != 0)
6346 bfd_reloc_status_type rstat;
6350 size = bfd_get_reloc_size (howto);
6351 buf = (bfd_byte *) bfd_zmalloc (size);
6352 if (buf == (bfd_byte *) NULL)
6354 bfd_set_error (bfd_error_no_memory);
6357 rstat = _bfd_relocate_contents (howto, output_bfd,
6358 link_order->u.reloc.p->addend, buf);
6364 case bfd_reloc_outofrange:
6366 case bfd_reloc_overflow:
6367 if (! ((*info->callbacks->reloc_overflow)
6369 (link_order->type == bfd_section_reloc_link_order
6370 ? bfd_section_name (output_bfd,
6371 link_order->u.reloc.p->u.section)
6372 : link_order->u.reloc.p->u.name),
6373 howto->name, link_order->u.reloc.p->addend,
6374 (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
6381 ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
6382 (file_ptr) link_order->offset, size);
6388 /* Figure out the symbol index. */
6389 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
6390 + output_section->reloc_count);
6391 if (link_order->type == bfd_section_reloc_link_order)
6393 indx = link_order->u.reloc.p->u.section->target_index;
6396 *rel_hash_ptr = NULL;
6400 struct elf_link_hash_entry *h;
6402 h = elf_link_hash_lookup (elf_hash_table (info),
6403 link_order->u.reloc.p->u.name,
6404 false, false, true);
6407 /* Setting the index to -2 tells elf_link_output_extsym that
6408 this symbol is used by a reloc. */
6415 if (! ((*info->callbacks->unattached_reloc)
6416 (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
6417 (asection *) NULL, (bfd_vma) 0)))
6423 /* The address of a reloc is relative to the section in a
6424 relocateable file, and is a virtual address in an executable
6426 offset = link_order->offset;
6427 if (! info->relocateable)
6428 offset += output_section->vma;
6430 rel_hdr = &elf_section_data (output_section)->rel_hdr;
6432 if (rel_hdr->sh_type == SHT_REL)
6434 Elf_Internal_Rel irel;
6435 Elf_External_Rel *erel;
6437 irel.r_offset = offset;
6438 irel.r_info = ELF_R_INFO (indx, howto->type);
6439 erel = ((Elf_External_Rel *) rel_hdr->contents
6440 + output_section->reloc_count);
6441 elf_swap_reloc_out (output_bfd, &irel, erel);
6445 Elf_Internal_Rela irela;
6446 Elf_External_Rela *erela;
6448 irela.r_offset = offset;
6449 irela.r_info = ELF_R_INFO (indx, howto->type);
6450 irela.r_addend = link_order->u.reloc.p->addend;
6451 erela = ((Elf_External_Rela *) rel_hdr->contents
6452 + output_section->reloc_count);
6453 elf_swap_reloca_out (output_bfd, &irela, erela);
6456 ++output_section->reloc_count;