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
62 #include <string.h> /* For strrchr and friends */
69 /* Renaming structures, typedefs, macros and functions to be size-specific. */
70 #define Elf_External_Ehdr NAME(Elf,External_Ehdr)
71 #define Elf_External_Sym NAME(Elf,External_Sym)
72 #define Elf_External_Shdr NAME(Elf,External_Shdr)
73 #define Elf_External_Phdr NAME(Elf,External_Phdr)
74 #define Elf_External_Rel NAME(Elf,External_Rel)
75 #define Elf_External_Rela NAME(Elf,External_Rela)
76 #define Elf_External_Dyn NAME(Elf,External_Dyn)
78 #define elf_core_file_failing_command NAME(bfd_elf,core_file_failing_command)
79 #define elf_core_file_failing_signal NAME(bfd_elf,core_file_failing_signal)
80 #define elf_core_file_matches_executable_p \
81 NAME(bfd_elf,core_file_matches_executable_p)
82 #define elf_object_p NAME(bfd_elf,object_p)
83 #define elf_core_file_p NAME(bfd_elf,core_file_p)
84 #define elf_get_symtab_upper_bound NAME(bfd_elf,get_symtab_upper_bound)
85 #define elf_get_dynamic_symtab_upper_bound \
86 NAME(bfd_elf,get_dynamic_symtab_upper_bound)
87 #define elf_swap_reloc_in NAME(bfd_elf,swap_reloc_in)
88 #define elf_swap_reloca_in NAME(bfd_elf,swap_reloca_in)
89 #define elf_swap_reloc_out NAME(bfd_elf,swap_reloc_out)
90 #define elf_swap_reloca_out NAME(bfd_elf,swap_reloca_out)
91 #define elf_swap_dyn_in NAME(bfd_elf,swap_dyn_in)
92 #define elf_swap_dyn_out NAME(bfd_elf,swap_dyn_out)
93 #define elf_get_reloc_upper_bound NAME(bfd_elf,get_reloc_upper_bound)
94 #define elf_canonicalize_reloc NAME(bfd_elf,canonicalize_reloc)
95 #define elf_get_symtab NAME(bfd_elf,get_symtab)
96 #define elf_canonicalize_dynamic_symtab \
97 NAME(bfd_elf,canonicalize_dynamic_symtab)
98 #define elf_make_empty_symbol NAME(bfd_elf,make_empty_symbol)
99 #define elf_get_symbol_info NAME(bfd_elf,get_symbol_info)
100 #define elf_print_symbol NAME(bfd_elf,print_symbol)
101 #define elf_get_lineno NAME(bfd_elf,get_lineno)
102 #define elf_set_arch_mach NAME(bfd_elf,set_arch_mach)
103 #define elf_find_nearest_line NAME(bfd_elf,find_nearest_line)
104 #define elf_sizeof_headers NAME(bfd_elf,sizeof_headers)
105 #define elf_set_section_contents NAME(bfd_elf,set_section_contents)
106 #define elf_no_info_to_howto NAME(bfd_elf,no_info_to_howto)
107 #define elf_no_info_to_howto_rel NAME(bfd_elf,no_info_to_howto_rel)
108 #define elf_new_section_hook NAME(bfd_elf,new_section_hook)
109 #define write_relocs NAME(bfd_elf,_write_relocs)
110 #define elf_find_section NAME(bfd_elf,find_section)
111 #define elf_bfd_link_add_symbols NAME(bfd_elf,bfd_link_add_symbols)
112 #define elf_add_dynamic_entry NAME(bfd_elf,add_dynamic_entry)
113 #define elf_bfd_final_link NAME(bfd_elf,bfd_final_link)
116 #define ELF_R_INFO(X,Y) ELF64_R_INFO(X,Y)
117 #define ELF_R_SYM(X) ELF64_R_SYM(X)
118 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
119 #define ELFCLASS ELFCLASS64
121 #define LOG_FILE_ALIGN 3
124 #define ELF_R_INFO(X,Y) ELF32_R_INFO(X,Y)
125 #define ELF_R_SYM(X) ELF32_R_SYM(X)
126 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
127 #define ELFCLASS ELFCLASS32
129 #define LOG_FILE_ALIGN 2
132 /* Forward declarations of static functions */
134 static unsigned long bfd_add_to_strtab
135 PARAMS ((bfd *, struct strtab *, const char *));
136 static asection *section_from_elf_index PARAMS ((bfd *, unsigned int));
138 static int elf_section_from_bfd_section PARAMS ((bfd *, struct sec *));
140 static long elf_slurp_symbol_table PARAMS ((bfd *, asymbol **, boolean));
142 static int elf_symbol_from_bfd_symbol PARAMS ((bfd *,
143 struct symbol_cache_entry **));
145 static boolean elf_compute_section_file_positions
146 PARAMS ((bfd *, struct bfd_link_info *));
147 static boolean prep_headers PARAMS ((bfd *));
148 static void elf_fake_sections PARAMS ((bfd *, asection *, PTR));
149 static boolean assign_section_numbers PARAMS ((bfd *));
150 static file_ptr align_file_position PARAMS ((file_ptr));
151 static file_ptr assign_file_position_for_section
152 PARAMS ((Elf_Internal_Shdr *, file_ptr, boolean));
153 static boolean assign_file_positions_except_relocs PARAMS ((bfd *, boolean));
154 static void assign_file_positions_for_relocs PARAMS ((bfd *));
155 static bfd_size_type get_program_header_size PARAMS ((bfd *));
156 static file_ptr map_program_segments
157 PARAMS ((bfd *, file_ptr, Elf_Internal_Shdr *, bfd_size_type));
159 static boolean elf_map_symbols PARAMS ((bfd *));
160 static boolean swap_out_syms PARAMS ((bfd *));
162 static boolean bfd_section_from_shdr PARAMS ((bfd *, unsigned int shindex));
165 static void elf_debug_section PARAMS ((char *, int, Elf_Internal_Shdr *));
166 static void elf_debug_file PARAMS ((Elf_Internal_Ehdr *));
169 #define elf_string_from_elf_strtab(abfd,strindex) \
170 elf_string_from_elf_section(abfd,elf_elfheader(abfd)->e_shstrndx,strindex)
173 /* Structure swapping routines */
175 /* Should perhaps use put_offset, put_word, etc. For now, the two versions
176 can be handled by explicitly specifying 32 bits or "the long type". */
178 #define put_word bfd_h_put_64
179 #define get_word bfd_h_get_64
182 #define put_word bfd_h_put_32
183 #define get_word bfd_h_get_32
186 /* Translate an ELF symbol in external format into an ELF symbol in internal
190 elf_swap_symbol_in (abfd, src, dst)
192 Elf_External_Sym *src;
193 Elf_Internal_Sym *dst;
195 dst->st_name = bfd_h_get_32 (abfd, (bfd_byte *) src->st_name);
196 dst->st_value = get_word (abfd, (bfd_byte *) src->st_value);
197 dst->st_size = get_word (abfd, (bfd_byte *) src->st_size);
198 dst->st_info = bfd_h_get_8 (abfd, (bfd_byte *) src->st_info);
199 dst->st_other = bfd_h_get_8 (abfd, (bfd_byte *) src->st_other);
200 dst->st_shndx = bfd_h_get_16 (abfd, (bfd_byte *) src->st_shndx);
203 /* Translate an ELF symbol in internal format into an ELF symbol in external
207 elf_swap_symbol_out (abfd, src, dst)
209 Elf_Internal_Sym *src;
210 Elf_External_Sym *dst;
212 bfd_h_put_32 (abfd, src->st_name, dst->st_name);
213 put_word (abfd, src->st_value, dst->st_value);
214 put_word (abfd, src->st_size, dst->st_size);
215 bfd_h_put_8 (abfd, src->st_info, dst->st_info);
216 bfd_h_put_8 (abfd, src->st_other, dst->st_other);
217 bfd_h_put_16 (abfd, src->st_shndx, dst->st_shndx);
221 /* Translate an ELF file header in external format into an ELF file header in
225 elf_swap_ehdr_in (abfd, src, dst)
227 Elf_External_Ehdr *src;
228 Elf_Internal_Ehdr *dst;
230 memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
231 dst->e_type = bfd_h_get_16 (abfd, (bfd_byte *) src->e_type);
232 dst->e_machine = bfd_h_get_16 (abfd, (bfd_byte *) src->e_machine);
233 dst->e_version = bfd_h_get_32 (abfd, (bfd_byte *) src->e_version);
234 dst->e_entry = get_word (abfd, (bfd_byte *) src->e_entry);
235 dst->e_phoff = get_word (abfd, (bfd_byte *) src->e_phoff);
236 dst->e_shoff = get_word (abfd, (bfd_byte *) src->e_shoff);
237 dst->e_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->e_flags);
238 dst->e_ehsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_ehsize);
239 dst->e_phentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phentsize);
240 dst->e_phnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phnum);
241 dst->e_shentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shentsize);
242 dst->e_shnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shnum);
243 dst->e_shstrndx = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shstrndx);
246 /* Translate an ELF file header in internal format into an ELF file header in
250 elf_swap_ehdr_out (abfd, src, dst)
252 Elf_Internal_Ehdr *src;
253 Elf_External_Ehdr *dst;
255 memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
256 /* note that all elements of dst are *arrays of unsigned char* already... */
257 bfd_h_put_16 (abfd, src->e_type, dst->e_type);
258 bfd_h_put_16 (abfd, src->e_machine, dst->e_machine);
259 bfd_h_put_32 (abfd, src->e_version, dst->e_version);
260 put_word (abfd, src->e_entry, dst->e_entry);
261 put_word (abfd, src->e_phoff, dst->e_phoff);
262 put_word (abfd, src->e_shoff, dst->e_shoff);
263 bfd_h_put_32 (abfd, src->e_flags, dst->e_flags);
264 bfd_h_put_16 (abfd, src->e_ehsize, dst->e_ehsize);
265 bfd_h_put_16 (abfd, src->e_phentsize, dst->e_phentsize);
266 bfd_h_put_16 (abfd, src->e_phnum, dst->e_phnum);
267 bfd_h_put_16 (abfd, src->e_shentsize, dst->e_shentsize);
268 bfd_h_put_16 (abfd, src->e_shnum, dst->e_shnum);
269 bfd_h_put_16 (abfd, src->e_shstrndx, dst->e_shstrndx);
273 /* Translate an ELF section header table entry in external format into an
274 ELF section header table entry in internal format. */
277 elf_swap_shdr_in (abfd, src, dst)
279 Elf_External_Shdr *src;
280 Elf_Internal_Shdr *dst;
282 dst->sh_name = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_name);
283 dst->sh_type = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_type);
284 dst->sh_flags = get_word (abfd, (bfd_byte *) src->sh_flags);
285 dst->sh_addr = get_word (abfd, (bfd_byte *) src->sh_addr);
286 dst->sh_offset = get_word (abfd, (bfd_byte *) src->sh_offset);
287 dst->sh_size = get_word (abfd, (bfd_byte *) src->sh_size);
288 dst->sh_link = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_link);
289 dst->sh_info = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_info);
290 dst->sh_addralign = get_word (abfd, (bfd_byte *) src->sh_addralign);
291 dst->sh_entsize = get_word (abfd, (bfd_byte *) src->sh_entsize);
292 /* we haven't done any processing on it yet, so... */
293 dst->rawdata = (void *) 0;
296 /* Translate an ELF section header table entry in internal format into an
297 ELF section header table entry in external format. */
300 elf_swap_shdr_out (abfd, src, dst)
302 Elf_Internal_Shdr *src;
303 Elf_External_Shdr *dst;
305 /* note that all elements of dst are *arrays of unsigned char* already... */
306 bfd_h_put_32 (abfd, src->sh_name, dst->sh_name);
307 bfd_h_put_32 (abfd, src->sh_type, dst->sh_type);
308 put_word (abfd, src->sh_flags, dst->sh_flags);
309 put_word (abfd, src->sh_addr, dst->sh_addr);
310 put_word (abfd, src->sh_offset, dst->sh_offset);
311 put_word (abfd, src->sh_size, dst->sh_size);
312 bfd_h_put_32 (abfd, src->sh_link, dst->sh_link);
313 bfd_h_put_32 (abfd, src->sh_info, dst->sh_info);
314 put_word (abfd, src->sh_addralign, dst->sh_addralign);
315 put_word (abfd, src->sh_entsize, dst->sh_entsize);
319 /* Translate an ELF program header table entry in external format into an
320 ELF program header table entry in internal format. */
323 elf_swap_phdr_in (abfd, src, dst)
325 Elf_External_Phdr *src;
326 Elf_Internal_Phdr *dst;
328 dst->p_type = bfd_h_get_32 (abfd, (bfd_byte *) src->p_type);
329 dst->p_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->p_flags);
330 dst->p_offset = get_word (abfd, (bfd_byte *) src->p_offset);
331 dst->p_vaddr = get_word (abfd, (bfd_byte *) src->p_vaddr);
332 dst->p_paddr = get_word (abfd, (bfd_byte *) src->p_paddr);
333 dst->p_filesz = get_word (abfd, (bfd_byte *) src->p_filesz);
334 dst->p_memsz = get_word (abfd, (bfd_byte *) src->p_memsz);
335 dst->p_align = get_word (abfd, (bfd_byte *) src->p_align);
339 elf_swap_phdr_out (abfd, src, dst)
341 Elf_Internal_Phdr *src;
342 Elf_External_Phdr *dst;
344 /* note that all elements of dst are *arrays of unsigned char* already... */
345 bfd_h_put_32 (abfd, src->p_type, dst->p_type);
346 put_word (abfd, src->p_offset, dst->p_offset);
347 put_word (abfd, src->p_vaddr, dst->p_vaddr);
348 put_word (abfd, src->p_paddr, dst->p_paddr);
349 put_word (abfd, src->p_filesz, dst->p_filesz);
350 put_word (abfd, src->p_memsz, dst->p_memsz);
351 bfd_h_put_32 (abfd, src->p_flags, dst->p_flags);
352 put_word (abfd, src->p_align, dst->p_align);
355 /* Translate an ELF reloc from external format to internal format. */
357 elf_swap_reloc_in (abfd, src, dst)
359 Elf_External_Rel *src;
360 Elf_Internal_Rel *dst;
362 dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
363 dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
367 elf_swap_reloca_in (abfd, src, dst)
369 Elf_External_Rela *src;
370 Elf_Internal_Rela *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);
374 dst->r_addend = get_word (abfd, (bfd_byte *) src->r_addend);
377 /* Translate an ELF reloc from internal format to external format. */
379 elf_swap_reloc_out (abfd, src, dst)
381 Elf_Internal_Rel *src;
382 Elf_External_Rel *dst;
384 put_word (abfd, src->r_offset, dst->r_offset);
385 put_word (abfd, src->r_info, dst->r_info);
389 elf_swap_reloca_out (abfd, src, dst)
391 Elf_Internal_Rela *src;
392 Elf_External_Rela *dst;
394 put_word (abfd, src->r_offset, dst->r_offset);
395 put_word (abfd, src->r_info, dst->r_info);
396 put_word (abfd, src->r_addend, dst->r_addend);
400 elf_swap_dyn_in (abfd, src, dst)
402 const Elf_External_Dyn *src;
403 Elf_Internal_Dyn *dst;
405 dst->d_tag = get_word (abfd, src->d_tag);
406 dst->d_un.d_val = get_word (abfd, src->d_un.d_val);
410 elf_swap_dyn_out (abfd, src, dst)
412 const Elf_Internal_Dyn *src;
413 Elf_External_Dyn *dst;
415 put_word (abfd, src->d_tag, dst->d_tag);
416 put_word (abfd, src->d_un.d_val, dst->d_un.d_val);
419 /* String table creation/manipulation routines */
421 static struct strtab *
422 bfd_new_strtab (abfd)
427 ss = (struct strtab *) malloc (sizeof (struct strtab));
430 bfd_set_error (bfd_error_no_memory);
433 ss->tab = malloc (1);
436 bfd_set_error (bfd_error_no_memory);
447 bfd_add_to_strtab (abfd, ss, str)
452 /* should search first, but for now: */
453 /* include the trailing NUL */
454 int ln = strlen (str) + 1;
456 /* FIXME: This is slow. Also, we could combine this with the a.out
457 string table building and use a hash table, although it might not
458 be worth it since ELF symbols don't include debugging information
459 and thus have much less overlap. */
460 ss->tab = realloc (ss->tab, ss->length + ln);
463 bfd_set_error (bfd_error_no_memory);
464 return (unsigned long) -1;
467 strcpy (ss->tab + ss->length, str);
471 return ss->length - ln;
475 bfd_add_2_to_strtab (abfd, ss, str, str2)
481 /* should search first, but for now: */
482 /* include the trailing NUL */
483 int ln = strlen (str) + strlen (str2) + 1;
485 /* should this be using obstacks? */
487 ss->tab = realloc (ss->tab, ss->length + ln);
489 ss->tab = malloc (ln);
491 BFD_ASSERT (ss->tab != 0); /* FIXME */
492 strcpy (ss->tab + ss->length, str);
493 strcpy (ss->tab + ss->length + strlen (str), str2);
497 return ss->length - ln;
500 /* ELF .o/exec file reading */
502 /* Create a new bfd section from an ELF section header. */
505 bfd_section_from_shdr (abfd, shindex)
507 unsigned int shindex;
509 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
510 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
513 name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
515 switch (hdr->sh_type)
518 /* Inactive section. Throw it away. */
521 case SHT_PROGBITS: /* Normal section with contents. */
522 case SHT_DYNAMIC: /* Dynamic linking information. */
523 case SHT_NOBITS: /* .bss section. */
524 case SHT_HASH: /* .hash section. */
525 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
527 case SHT_SYMTAB: /* A symbol table */
528 if (elf_onesymtab (abfd) == shindex)
531 BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
532 BFD_ASSERT (elf_onesymtab (abfd) == 0);
533 elf_onesymtab (abfd) = shindex;
534 elf_tdata (abfd)->symtab_hdr = *hdr;
535 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_hdr;
536 abfd->flags |= HAS_SYMS;
539 case SHT_DYNSYM: /* A dynamic symbol table */
540 if (elf_dynsymtab (abfd) == shindex)
543 BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
544 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
545 elf_dynsymtab (abfd) = shindex;
546 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
547 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->dynsymtab_hdr;
548 abfd->flags |= HAS_SYMS;
550 /* Besides being a symbol table, we also treat this as a regular
551 section, so that objcopy can handle it. */
552 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
554 case SHT_STRTAB: /* A string table */
555 if (hdr->rawdata != NULL)
557 if (ehdr->e_shstrndx == shindex)
559 elf_tdata (abfd)->shstrtab_hdr = *hdr;
560 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
561 hdr->rawdata = (PTR) & elf_tdata (abfd)->shstrtab_hdr;
567 for (i = 1; i < ehdr->e_shnum; i++)
569 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
570 if (hdr2->sh_link == shindex)
572 if (! bfd_section_from_shdr (abfd, i))
574 if (elf_onesymtab (abfd) == i)
576 elf_tdata (abfd)->strtab_hdr = *hdr;
577 elf_elfsections (abfd)[shindex] =
578 &elf_tdata (abfd)->strtab_hdr;
581 if (elf_dynsymtab (abfd) == i)
583 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
584 elf_elfsections (abfd)[shindex] =
585 &elf_tdata (abfd)->dynstrtab_hdr;
586 /* We also treat this as a regular section, so
587 that objcopy can handle it. */
590 #if 0 /* Not handling other string tables specially right now. */
591 hdr2 = elf_elfsections (abfd)[i]; /* in case it moved */
592 /* We have a strtab for some random other section. */
593 newsect = (asection *) hdr2->rawdata;
596 hdr->rawdata = (PTR) newsect;
597 hdr2 = &elf_section_data (newsect)->str_hdr;
599 elf_elfsections (abfd)[shindex] = hdr2;
605 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
609 /* *These* do a lot of work -- but build no sections! */
611 asection *target_sect;
612 Elf_Internal_Shdr *hdr2;
613 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
615 /* Get the symbol table. */
616 if (! bfd_section_from_shdr (abfd, hdr->sh_link))
619 /* If this reloc section does not use the main symbol table,
620 or if it is in the process image, we don't treat it as a
621 reloc section. BFD can't adequately represent such a
622 section, so at least for now, we don't try. We just
623 present it as a normal section. */
624 if ((hdr->sh_flags & SHF_ALLOC) != 0
625 || hdr->sh_link != elf_onesymtab (abfd))
626 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
628 /* Don't allow REL relocations on a machine that uses RELA and
630 /* @@ Actually, the generic ABI does suggest that both might be
631 used in one file. But the four ABI Processor Supplements I
632 have access to right now all specify that only one is used on
633 each of those architectures. It's conceivable that, e.g., a
634 bunch of absolute 32-bit relocs might be more compact in REL
635 form even on a RELA machine... */
636 BFD_ASSERT (use_rela_p
637 ? (hdr->sh_type == SHT_RELA
638 && hdr->sh_entsize == sizeof (Elf_External_Rela))
639 : (hdr->sh_type == SHT_REL
640 && hdr->sh_entsize == sizeof (Elf_External_Rel)));
642 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
644 target_sect = section_from_elf_index (abfd, hdr->sh_info);
645 if (target_sect == NULL
646 || elf_section_data (target_sect) == NULL)
649 hdr2 = &elf_section_data (target_sect)->rel_hdr;
651 elf_elfsections (abfd)[shindex] = hdr2;
652 target_sect->reloc_count = hdr->sh_size / hdr->sh_entsize;
653 target_sect->flags |= SEC_RELOC;
654 target_sect->relocation = NULL;
655 target_sect->rel_filepos = hdr->sh_offset;
656 abfd->flags |= HAS_RELOC;
663 fprintf (stderr, "Note Sections not yet supported.\n");
670 fprintf (stderr, "SHLIB Sections not supported (and non conforming.)\n");
675 /* Check for any processor-specific section types. */
677 struct elf_backend_data *bed = get_elf_backend_data (abfd);
679 if (bed->elf_backend_section_from_shdr)
680 (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
689 elf_new_section_hook (abfd, sec)
694 struct bfd_elf_section_data *sdata;
696 sdata = (struct bfd_elf_section_data *) bfd_alloc (abfd, sizeof (*sdata));
699 bfd_set_error (bfd_error_no_memory);
702 sec->used_by_bfd = (PTR) sdata;
703 memset (sdata, 0, sizeof (*sdata));
707 /* Create a new bfd section from an ELF program header.
709 Since program segments have no names, we generate a synthetic name
710 of the form segment<NUM>, where NUM is generally the index in the
711 program header table. For segments that are split (see below) we
712 generate the names segment<NUM>a and segment<NUM>b.
714 Note that some program segments may have a file size that is different than
715 (less than) the memory size. All this means is that at execution the
716 system must allocate the amount of memory specified by the memory size,
717 but only initialize it with the first "file size" bytes read from the
718 file. This would occur for example, with program segments consisting
719 of combined data+bss.
721 To handle the above situation, this routine generates TWO bfd sections
722 for the single program segment. The first has the length specified by
723 the file size of the segment, and the second has the length specified
724 by the difference between the two sizes. In effect, the segment is split
725 into it's initialized and uninitialized parts.
730 bfd_section_from_phdr (abfd, hdr, index)
732 Elf_Internal_Phdr *hdr;
740 split = ((hdr->p_memsz > 0) &&
741 (hdr->p_filesz > 0) &&
742 (hdr->p_memsz > hdr->p_filesz));
743 sprintf (namebuf, split ? "segment%da" : "segment%d", index);
744 name = bfd_alloc (abfd, strlen (namebuf) + 1);
747 bfd_set_error (bfd_error_no_memory);
750 strcpy (name, namebuf);
751 newsect = bfd_make_section (abfd, name);
754 newsect->vma = hdr->p_vaddr;
755 newsect->_raw_size = hdr->p_filesz;
756 newsect->filepos = hdr->p_offset;
757 newsect->flags |= SEC_HAS_CONTENTS;
758 if (hdr->p_type == PT_LOAD)
760 newsect->flags |= SEC_ALLOC;
761 newsect->flags |= SEC_LOAD;
762 if (hdr->p_flags & PF_X)
764 /* FIXME: all we known is that it has execute PERMISSION,
766 newsect->flags |= SEC_CODE;
769 if (!(hdr->p_flags & PF_W))
771 newsect->flags |= SEC_READONLY;
776 sprintf (namebuf, "segment%db", index);
777 name = bfd_alloc (abfd, strlen (namebuf) + 1);
780 bfd_set_error (bfd_error_no_memory);
783 strcpy (name, namebuf);
784 newsect = bfd_make_section (abfd, name);
787 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
788 newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
789 if (hdr->p_type == PT_LOAD)
791 newsect->flags |= SEC_ALLOC;
792 if (hdr->p_flags & PF_X)
793 newsect->flags |= SEC_CODE;
795 if (!(hdr->p_flags & PF_W))
796 newsect->flags |= SEC_READONLY;
802 /* Begin processing a given object.
804 First we validate the file by reading in the ELF header and checking
807 static INLINE boolean
809 Elf_External_Ehdr *x_ehdrp;
811 return ((x_ehdrp->e_ident[EI_MAG0] == ELFMAG0)
812 && (x_ehdrp->e_ident[EI_MAG1] == ELFMAG1)
813 && (x_ehdrp->e_ident[EI_MAG2] == ELFMAG2)
814 && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3));
817 /* Check to see if the file associated with ABFD matches the target vector
820 Note that we may be called several times with the same ABFD, but different
821 target vectors, most of which will not match. We have to avoid leaving
822 any side effects in ABFD, or any data it points to (like tdata), if the
823 file does not match the target vector. */
829 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
830 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
831 Elf_External_Shdr x_shdr; /* Section header table entry, external form */
832 Elf_Internal_Shdr *i_shdrp = NULL; /* Section header table, internal form */
833 unsigned int shindex;
834 char *shstrtab; /* Internal copy of section header stringtab */
835 struct elf_backend_data *ebd;
836 struct elf_obj_tdata *preserved_tdata = elf_tdata (abfd);
837 struct elf_obj_tdata *new_tdata = NULL;
839 /* Read in the ELF header in external format. */
841 if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
843 if (bfd_get_error () != bfd_error_system_call)
844 goto got_wrong_format_error;
849 /* Now check to see if we have a valid ELF file, and one that BFD can
850 make use of. The magic number must match, the address size ('class')
851 and byte-swapping must match our XVEC entry, and it must have a
852 section header table (FIXME: See comments re sections at top of this
855 if ((elf_file_p (&x_ehdr) == false) ||
856 (x_ehdr.e_ident[EI_VERSION] != EV_CURRENT) ||
857 (x_ehdr.e_ident[EI_CLASS] != ELFCLASS))
858 goto got_wrong_format_error;
860 /* Check that file's byte order matches xvec's */
861 switch (x_ehdr.e_ident[EI_DATA])
863 case ELFDATA2MSB: /* Big-endian */
864 if (!abfd->xvec->header_byteorder_big_p)
865 goto got_wrong_format_error;
867 case ELFDATA2LSB: /* Little-endian */
868 if (abfd->xvec->header_byteorder_big_p)
869 goto got_wrong_format_error;
871 case ELFDATANONE: /* No data encoding specified */
872 default: /* Unknown data encoding specified */
873 goto got_wrong_format_error;
876 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
877 the tdata pointer in the bfd. */
879 new_tdata = ((struct elf_obj_tdata *)
880 bfd_zalloc (abfd, sizeof (struct elf_obj_tdata)));
881 if (new_tdata == NULL)
882 goto got_no_memory_error;
883 elf_tdata (abfd) = new_tdata;
885 /* Now that we know the byte order, swap in the rest of the header */
886 i_ehdrp = elf_elfheader (abfd);
887 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
889 elf_debug_file (i_ehdrp);
892 /* If there is no section header table, we're hosed. */
893 if (i_ehdrp->e_shoff == 0)
894 goto got_wrong_format_error;
896 /* As a simple sanity check, verify that the what BFD thinks is the
897 size of each section header table entry actually matches the size
898 recorded in the file. */
899 if (i_ehdrp->e_shentsize != sizeof (x_shdr))
900 goto got_wrong_format_error;
902 ebd = get_elf_backend_data (abfd);
904 /* Check that the ELF e_machine field matches what this particular
905 BFD format expects. */
906 if (ebd->elf_machine_code != i_ehdrp->e_machine)
908 bfd_target **target_ptr;
910 if (ebd->elf_machine_code != EM_NONE)
911 goto got_wrong_format_error;
913 /* This is the generic ELF target. Let it match any ELF target
914 for which we do not have a specific backend. */
915 for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
917 struct elf_backend_data *back;
919 if ((*target_ptr)->flavour != bfd_target_elf_flavour)
921 back = (struct elf_backend_data *) (*target_ptr)->backend_data;
922 if (back->elf_machine_code == i_ehdrp->e_machine)
924 /* target_ptr is an ELF backend which matches this
925 object file, so reject the generic ELF target. */
926 goto got_wrong_format_error;
931 if (i_ehdrp->e_type == ET_EXEC)
932 abfd->flags |= EXEC_P;
933 else if (i_ehdrp->e_type == ET_DYN)
934 abfd->flags |= DYNAMIC;
936 if (i_ehdrp->e_phnum > 0)
937 abfd->flags |= D_PAGED;
939 if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
942 /* Remember the entry point specified in the ELF file header. */
943 bfd_get_start_address (abfd) = i_ehdrp->e_entry;
945 /* Allocate space for a copy of the section header table in
946 internal form, seek to the section header table in the file,
947 read it in, and convert it to internal form. */
948 i_shdrp = ((Elf_Internal_Shdr *)
949 bfd_alloc (abfd, sizeof (*i_shdrp) * i_ehdrp->e_shnum));
950 elf_elfsections (abfd) = ((Elf_Internal_Shdr **)
952 sizeof (i_shdrp) * i_ehdrp->e_shnum));
953 if (!i_shdrp || !elf_elfsections (abfd))
954 goto got_no_memory_error;
955 if (bfd_seek (abfd, i_ehdrp->e_shoff, SEEK_SET) != 0)
957 for (shindex = 0; shindex < i_ehdrp->e_shnum; shindex++)
959 if (bfd_read ((PTR) & x_shdr, sizeof x_shdr, 1, abfd) != sizeof (x_shdr))
961 elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
962 elf_elfsections (abfd)[shindex] = i_shdrp + shindex;
964 /* If this is a .dynamic section, mark the object file as being
965 dynamically linked. */
966 if (i_shdrp[shindex].sh_type == SHT_DYNAMIC)
967 abfd->flags |= DYNAMIC;
969 if (i_ehdrp->e_shstrndx)
971 if (! bfd_section_from_shdr (abfd, i_ehdrp->e_shstrndx))
975 /* Read in the string table containing the names of the sections. We
976 will need the base pointer to this table later. */
977 /* We read this inline now, so that we don't have to go through
978 bfd_section_from_shdr with it (since this particular strtab is
979 used to find all of the ELF section names.) */
981 shstrtab = elf_get_str_section (abfd, i_ehdrp->e_shstrndx);
985 /* Once all of the section headers have been read and converted, we
986 can start processing them. Note that the first section header is
987 a dummy placeholder entry, so we ignore it. */
989 for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
991 if (! bfd_section_from_shdr (abfd, shindex))
995 /* Let the backend double check the format and override global
997 if (ebd->elf_backend_object_p)
999 if ((*ebd->elf_backend_object_p) (abfd) == false)
1000 goto got_wrong_format_error;
1003 return (abfd->xvec);
1005 got_wrong_format_error:
1006 bfd_set_error (bfd_error_wrong_format);
1008 got_no_memory_error:
1009 bfd_set_error (bfd_error_no_memory);
1012 if (new_tdata != NULL
1013 && new_tdata->elf_sect_ptr != NULL)
1014 bfd_release (abfd, new_tdata->elf_sect_ptr);
1015 if (i_shdrp != NULL)
1016 bfd_release (abfd, i_shdrp);
1017 if (new_tdata != NULL)
1018 bfd_release (abfd, new_tdata);
1019 elf_tdata (abfd) = preserved_tdata;
1024 /* ELF .o/exec file writing */
1026 /* Takes a bfd and a symbol, returns a pointer to the elf specific area
1027 of the symbol if there is one. */
1028 static INLINE elf_symbol_type *
1029 elf_symbol_from (ignore_abfd, symbol)
1033 if (symbol->the_bfd->xvec->flavour != bfd_target_elf_flavour)
1036 if (symbol->the_bfd->tdata.elf_obj_data == (struct elf_obj_tdata *) NULL)
1039 return (elf_symbol_type *) symbol;
1043 write_relocs (abfd, sec, xxx)
1048 Elf_Internal_Shdr *rela_hdr;
1049 Elf_External_Rela *outbound_relocas;
1050 Elf_External_Rel *outbound_relocs;
1052 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1053 asymbol *last_sym = 0;
1054 int last_sym_idx = 9999999; /* should always be written before use */
1056 if ((sec->flags & SEC_RELOC) == 0)
1059 /* The linker backend writes the relocs out itself, and sets the
1060 reloc_count field to zero to inhibit writing them here. Also,
1061 sometimes the SEC_RELOC flag gets set even when there aren't any
1063 if (sec->reloc_count == 0)
1066 rela_hdr = &elf_section_data (sec)->rel_hdr;
1068 rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count;
1069 rela_hdr->contents = (void *) bfd_alloc (abfd, rela_hdr->sh_size);
1070 if (!rela_hdr->contents)
1072 bfd_set_error (bfd_error_no_memory);
1073 abort (); /* FIXME */
1076 /* orelocation has the data, reloc_count has the count... */
1079 outbound_relocas = (Elf_External_Rela *) rela_hdr->contents;
1081 for (idx = 0; idx < sec->reloc_count; idx++)
1083 Elf_Internal_Rela dst_rela;
1084 Elf_External_Rela *src_rela;
1089 ptr = sec->orelocation[idx];
1090 src_rela = outbound_relocas + idx;
1091 if (!(abfd->flags & EXEC_P))
1092 dst_rela.r_offset = ptr->address - sec->vma;
1094 dst_rela.r_offset = ptr->address;
1096 sym = *ptr->sym_ptr_ptr;
1097 if (sym == last_sym)
1102 last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1104 dst_rela.r_info = ELF_R_INFO (n, ptr->howto->type);
1106 dst_rela.r_addend = ptr->addend;
1107 elf_swap_reloca_out (abfd, &dst_rela, src_rela);
1111 /* REL relocations */
1113 outbound_relocs = (Elf_External_Rel *) rela_hdr->contents;
1115 for (idx = 0; idx < sec->reloc_count; idx++)
1117 Elf_Internal_Rel dst_rel;
1118 Elf_External_Rel *src_rel;
1123 ptr = sec->orelocation[idx];
1124 sym = *ptr->sym_ptr_ptr;
1125 src_rel = outbound_relocs + idx;
1126 if (!(abfd->flags & EXEC_P))
1127 dst_rel.r_offset = ptr->address - sec->vma;
1129 dst_rel.r_offset = ptr->address;
1131 if (sym == last_sym)
1136 last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1138 dst_rel.r_info = ELF_R_INFO (n, ptr->howto->type);
1140 elf_swap_reloc_out (abfd, &dst_rel, src_rel);
1145 /* Set up an ELF internal section header for a section. */
1149 elf_fake_sections (abfd, asect, ignore)
1154 Elf_Internal_Shdr *this_hdr;
1156 this_hdr = &elf_section_data (asect)->this_hdr;
1158 this_hdr->sh_name = bfd_add_to_strtab (abfd, elf_shstrtab (abfd),
1160 if (this_hdr->sh_name == (unsigned long) -1)
1161 abort (); /* FIXME */
1163 this_hdr->sh_flags = 0;
1164 if ((asect->flags & SEC_ALLOC) != 0)
1165 this_hdr->sh_addr = asect->vma;
1167 this_hdr->sh_addr = 0;
1168 this_hdr->sh_offset = 0;
1169 this_hdr->sh_size = asect->_raw_size;
1170 this_hdr->sh_link = 0;
1171 this_hdr->sh_info = 0;
1172 this_hdr->sh_addralign = 1 << asect->alignment_power;
1173 this_hdr->sh_entsize = 0;
1175 this_hdr->rawdata = (PTR) asect;
1176 this_hdr->contents = NULL;
1179 /* FIXME: This should not be based on section names. */
1180 if (strcmp (asect->name, ".dynstr") == 0)
1181 this_hdr->sh_type = SHT_STRTAB;
1182 else if (strcmp (asect->name, ".hash") == 0)
1184 this_hdr->sh_type = SHT_HASH;
1185 this_hdr->sh_entsize = ARCH_SIZE / 8;
1187 else if (strcmp (asect->name, ".dynsym") == 0)
1189 this_hdr->sh_type = SHT_DYNSYM;
1190 this_hdr->sh_entsize = sizeof (Elf_External_Sym);
1192 else if (strcmp (asect->name, ".dynamic") == 0)
1194 this_hdr->sh_type = SHT_DYNAMIC;
1195 this_hdr->sh_entsize = sizeof (Elf_External_Dyn);
1197 else if (strncmp (asect->name, ".rel.", 5) == 0)
1199 this_hdr->sh_type = SHT_REL;
1200 this_hdr->sh_entsize = sizeof (Elf_External_Rel);
1202 else if (strncmp (asect->name, ".rela.", 6) == 0)
1204 this_hdr->sh_type = SHT_RELA;
1205 this_hdr->sh_entsize = sizeof (Elf_External_Rela);
1207 else if (strcmp (asect->name, ".note") == 0)
1208 this_hdr->sh_type = SHT_NOTE;
1209 else if (strncmp (asect->name, ".stab", 5) == 0
1210 && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1211 this_hdr->sh_type = SHT_STRTAB;
1212 else if ((asect->flags & SEC_ALLOC) != 0
1213 && (asect->flags & SEC_LOAD) != 0)
1214 this_hdr->sh_type = SHT_PROGBITS;
1215 else if ((asect->flags & SEC_ALLOC) != 0
1216 && ((asect->flags & SEC_LOAD) == 0))
1218 BFD_ASSERT (strcmp (asect->name, ".bss") == 0
1219 || strcmp (asect->name, ".sbss") == 0);
1220 this_hdr->sh_type = SHT_NOBITS;
1225 this_hdr->sh_type = SHT_PROGBITS;
1228 if ((asect->flags & SEC_ALLOC) != 0)
1229 this_hdr->sh_flags |= SHF_ALLOC;
1230 if ((asect->flags & SEC_READONLY) == 0)
1231 this_hdr->sh_flags |= SHF_WRITE;
1232 if ((asect->flags & SEC_CODE) != 0)
1233 this_hdr->sh_flags |= SHF_EXECINSTR;
1235 /* Check for processor-specific section types. */
1237 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1239 if (bed->elf_backend_fake_sections)
1240 (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1243 /* If the section has relocs, set up a section header for the
1244 SHT_REL[A] section. */
1245 if ((asect->flags & SEC_RELOC) != 0)
1247 Elf_Internal_Shdr *rela_hdr;
1248 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1250 rela_hdr = &elf_section_data (asect)->rel_hdr;
1252 bfd_add_2_to_strtab (abfd, elf_shstrtab (abfd),
1253 use_rela_p ? ".rela" : ".rel",
1255 rela_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1256 rela_hdr->sh_entsize = (use_rela_p
1257 ? sizeof (Elf_External_Rela)
1258 : sizeof (Elf_External_Rel));
1259 rela_hdr->sh_addralign = FILE_ALIGN;
1260 rela_hdr->sh_flags = 0;
1261 rela_hdr->sh_addr = 0;
1262 rela_hdr->sh_size = 0;
1263 rela_hdr->sh_offset = 0;
1268 /* Assign all ELF section numbers. The dummy first section is handled here
1269 too. The link/info pointers for the standard section types are filled
1270 in here too, while we're at it. (Link pointers for .stab sections are
1271 not filled in here.) */
1274 assign_section_numbers (abfd)
1277 struct elf_obj_tdata *t = elf_tdata (abfd);
1279 unsigned int section_number;
1280 Elf_Internal_Shdr **i_shdrp;
1284 t->shstrtab_section = section_number++;
1285 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
1286 t->shstrtab_hdr.sh_size = elf_shstrtab (abfd)->length;
1287 t->shstrtab_hdr.contents = (PTR) elf_shstrtab (abfd)->tab;
1289 if (abfd->symcount > 0)
1291 t->symtab_section = section_number++;
1292 t->strtab_section = section_number++;
1295 for (sec = abfd->sections; sec; sec = sec->next)
1297 struct bfd_elf_section_data *d = elf_section_data (sec);
1299 d->this_idx = section_number++;
1300 if ((sec->flags & SEC_RELOC) == 0)
1303 d->rel_idx = section_number++;
1306 elf_elfheader (abfd)->e_shnum = section_number;
1308 /* Set up the list of section header pointers, in agreement with the
1310 i_shdrp = ((Elf_Internal_Shdr **)
1311 bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *)));
1312 if (i_shdrp == NULL)
1314 bfd_set_error (bfd_error_no_memory);
1318 i_shdrp[0] = ((Elf_Internal_Shdr *)
1319 bfd_alloc (abfd, sizeof (Elf_Internal_Shdr)));
1320 if (i_shdrp[0] == NULL)
1322 bfd_release (abfd, i_shdrp);
1323 bfd_set_error (bfd_error_no_memory);
1326 memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
1328 elf_elfsections (abfd) = i_shdrp;
1330 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1331 if (abfd->symcount > 0)
1333 i_shdrp[t->symtab_section] = &t->symtab_hdr;
1334 i_shdrp[t->strtab_section] = &t->strtab_hdr;
1335 t->symtab_hdr.sh_link = t->strtab_section;
1337 for (sec = abfd->sections; sec; sec = sec->next)
1339 struct bfd_elf_section_data *d = elf_section_data (sec);
1343 i_shdrp[d->this_idx] = &d->this_hdr;
1344 if (d->rel_idx != 0)
1345 i_shdrp[d->rel_idx] = &d->rel_hdr;
1347 /* Fill in the sh_link and sh_info fields while we're at it. */
1349 /* sh_link of a reloc section is the section index of the symbol
1350 table. sh_info is the section index of the section to which
1351 the relocation entries apply. */
1352 if (d->rel_idx != 0)
1354 d->rel_hdr.sh_link = t->symtab_section;
1355 d->rel_hdr.sh_info = d->this_idx;
1358 switch (d->this_hdr.sh_type)
1362 /* A reloc section which we are treating as a normal BFD
1363 section. sh_link is the section index of the symbol
1364 table. sh_info is the section index of the section to
1365 which the relocation entries apply. We assume that an
1366 allocated reloc section uses the dynamic symbol table.
1367 FIXME: How can we be sure? */
1368 s = bfd_get_section_by_name (abfd, ".dynsym");
1370 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1372 /* We look up the section the relocs apply to by name. */
1374 if (d->this_hdr.sh_type == SHT_REL)
1378 s = bfd_get_section_by_name (abfd, name);
1380 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
1384 /* We assume that a section named .stab*str is a stabs
1385 string section. We look for a section with the same name
1386 but without the trailing ``str'', and set its sh_link
1387 field to point to this section. */
1388 if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
1389 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
1394 len = strlen (sec->name);
1395 alc = (char *) malloc (len - 2);
1398 bfd_set_error (bfd_error_no_memory);
1401 strncpy (alc, sec->name, len - 3);
1402 alc[len - 3] = '\0';
1403 s = bfd_get_section_by_name (abfd, alc);
1407 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1409 /* This is a .stab section. */
1410 elf_section_data (s)->this_hdr.sh_entsize =
1411 4 + 2 * (ARCH_SIZE / 8);
1418 /* sh_link is the section header index of the string table
1419 used for the dynamic entries or symbol table. */
1420 s = bfd_get_section_by_name (abfd, ".dynstr");
1422 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1426 /* sh_link is the section header index of the symbol table
1427 this hash table is for. */
1428 s = bfd_get_section_by_name (abfd, ".dynsym");
1430 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1438 /* Map symbol from it's internal number to the external number, moving
1439 all local symbols to be at the head of the list. */
1442 sym_is_global (abfd, sym)
1446 /* If the backend has a special mapping, use it. */
1447 if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1448 return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1451 if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
1453 if (sym->flags & BSF_LOCAL)
1457 if (sym->section == 0)
1459 /* Is this valid? */
1464 if (sym->section == &bfd_und_section)
1466 if (bfd_is_com_section (sym->section))
1468 if (sym->flags & (BSF_LOCAL | BSF_SECTION_SYM | BSF_FILE))
1474 elf_map_symbols (abfd)
1477 int symcount = bfd_get_symcount (abfd);
1478 asymbol **syms = bfd_get_outsymbols (abfd);
1479 asymbol **sect_syms;
1481 int num_globals = 0;
1482 int num_locals2 = 0;
1483 int num_globals2 = 0;
1485 int num_sections = 0;
1486 Elf_Sym_Extra *sym_extra;
1491 fprintf (stderr, "elf_map_symbols\n");
1495 /* Add local symbols for each section for which there are relocs.
1496 FIXME: How can we tell which sections have relocs at this point?
1497 Will reloc_count always be accurate? Actually, I think most ELF
1498 targets create section symbols for all sections anyhow. */
1499 for (asect = abfd->sections; asect; asect = asect->next)
1501 if (max_index < asect->index)
1502 max_index = asect->index;
1506 elf_num_section_syms (abfd) = max_index;
1507 sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1508 elf_section_syms (abfd) = sect_syms;
1512 bfd_set_error (bfd_error_no_memory);
1516 for (asect = abfd->sections; asect; asect = asect->next)
1518 asymbol *sym = bfd_make_empty_symbol (abfd);
1521 bfd_set_error (bfd_error_no_memory);
1524 sym->the_bfd = abfd;
1525 sym->name = asect->name;
1526 sym->value = asect->vma;
1527 sym->flags = BSF_SECTION_SYM;
1528 sym->section = asect;
1529 sect_syms[asect->index] = sym;
1533 "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n",
1534 asect->name, (long) asect->vma, asect->index, (long) asect);
1541 syms = (asymbol **) bfd_realloc (abfd, syms,
1542 ((symcount + num_sections + 1)
1543 * sizeof (asymbol *)));
1545 syms = (asymbol **) bfd_alloc (abfd,
1546 (num_sections + 1) * sizeof (asymbol *));
1549 bfd_set_error (bfd_error_no_memory);
1553 for (asect = abfd->sections; asect; asect = asect->next)
1555 if (sect_syms[asect->index])
1556 syms[symcount++] = sect_syms[asect->index];
1559 syms[symcount] = (asymbol *) 0;
1560 bfd_set_symtab (abfd, syms, symcount);
1563 elf_sym_extra (abfd) = sym_extra
1564 = (Elf_Sym_Extra *) bfd_alloc (abfd, symcount * sizeof (Elf_Sym_Extra));
1567 bfd_set_error (bfd_error_no_memory);
1571 /* Identify and classify all of the symbols. */
1572 for (idx = 0; idx < symcount; idx++)
1574 if (!sym_is_global (abfd, syms[idx]))
1580 /* Now provide mapping information. Add +1 for skipping over the
1582 for (idx = 0; idx < symcount; idx++)
1584 syms[idx]->udata = (PTR) & sym_extra[idx];
1585 if (!sym_is_global (abfd, syms[idx]))
1586 sym_extra[idx].elf_sym_num = 1 + num_locals2++;
1588 sym_extra[idx].elf_sym_num = 1 + num_locals + num_globals2++;
1591 elf_num_locals (abfd) = num_locals;
1592 elf_num_globals (abfd) = num_globals;
1596 /* Compute the file positions we are going to put the sections at, and
1597 otherwise prepare to begin writing out the ELF file. If LINK_INFO
1598 is not NULL, this is being called by the ELF backend linker. */
1601 elf_compute_section_file_positions (abfd, link_info)
1603 struct bfd_link_info *link_info;
1605 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1606 Elf_Internal_Shdr *shstrtab_hdr;
1608 if (abfd->output_has_begun)
1611 /* Do any elf backend specific processing first. */
1612 if (bed->elf_backend_begin_write_processing)
1613 (*bed->elf_backend_begin_write_processing) (abfd);
1615 if (! prep_headers (abfd))
1618 bfd_map_over_sections (abfd, elf_fake_sections, 0);
1620 if (!assign_section_numbers (abfd))
1623 /* The backend linker builds symbol table information itself. */
1624 if (link_info == NULL)
1626 if (! swap_out_syms (abfd))
1630 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
1631 /* sh_name was set in prep_headers. */
1632 shstrtab_hdr->sh_type = SHT_STRTAB;
1633 shstrtab_hdr->sh_flags = 0;
1634 shstrtab_hdr->sh_addr = 0;
1635 shstrtab_hdr->sh_size = elf_shstrtab (abfd)->length;
1636 shstrtab_hdr->sh_entsize = 0;
1637 shstrtab_hdr->sh_link = 0;
1638 shstrtab_hdr->sh_info = 0;
1639 /* sh_offset is set in assign_file_positions_for_symtabs_and_strtabs. */
1640 shstrtab_hdr->sh_addralign = 1;
1641 shstrtab_hdr->contents = (PTR) elf_shstrtab (abfd)->tab;
1643 if (!assign_file_positions_except_relocs (abfd,
1644 link_info == NULL ? true : false))
1647 abfd->output_has_begun = true;
1653 /* Align to the maximum file alignment that could be required for any
1654 ELF data structure. */
1656 static INLINE file_ptr
1657 align_file_position (off)
1660 return (off + FILE_ALIGN - 1) & ~(FILE_ALIGN - 1);
1663 /* Assign a file position to a section, optionally aligning to the
1664 required section alignment. */
1666 static INLINE file_ptr
1667 assign_file_position_for_section (i_shdrp, offset, align)
1668 Elf_Internal_Shdr *i_shdrp;
1676 al = i_shdrp->sh_addralign;
1678 offset = BFD_ALIGN (offset, al);
1680 i_shdrp->sh_offset = offset;
1681 if (i_shdrp->rawdata != NULL)
1682 ((asection *) i_shdrp->rawdata)->filepos = offset;
1683 if (i_shdrp->sh_type != SHT_NOBITS)
1684 offset += i_shdrp->sh_size;
1688 /* Get the size of the program header. This is called by the linker
1689 before any of the section VMA's are set, so it can't calculate the
1690 correct value for a strange memory layout. */
1692 static bfd_size_type
1693 get_program_header_size (abfd)
1699 /* Assume we will need exactly two PT_LOAD segments: one for text
1700 and one for data. */
1703 s = bfd_get_section_by_name (abfd, ".interp");
1704 if (s != NULL && (s->flags & SEC_LOAD) != 0)
1706 /* If we have a loadable interpreter section, we need a
1707 PT_INTERP segment. In this case, assume we also need a
1708 PT_PHDR segment, although that may not be true for all
1713 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
1715 /* We need a PT_DYNAMIC segment. */
1719 return segs * sizeof (Elf_External_Phdr);
1722 /* Create the program header. OFF is the file offset where the
1723 program header should be written. FIRST is the first loadable ELF
1724 section. PHDR_SIZE is the size of the program header as returned
1725 by get_program_header_size. */
1728 map_program_segments (abfd, off, first, phdr_size)
1731 Elf_Internal_Shdr *first;
1732 bfd_size_type phdr_size;
1734 Elf_Internal_Phdr phdrs[10];
1735 unsigned int phdr_count;
1736 Elf_Internal_Phdr *phdr;
1737 int phdr_size_adjust;
1739 Elf_Internal_Shdr **hdrpp;
1740 asection *sinterp, *sdyn;
1741 unsigned int last_type;
1742 Elf_Internal_Ehdr *i_ehdrp;
1744 BFD_ASSERT ((abfd->flags & EXEC_P) != 0);
1745 BFD_ASSERT (phdr_size / sizeof (Elf_Internal_Phdr)
1746 <= sizeof phdrs / sizeof (phdrs[0]));
1751 phdr_size_adjust = 0;
1753 /* If we have a loadable .interp section, we must create a PT_INTERP
1754 segment which must precede all PT_LOAD segments. We assume that
1755 we must also create a PT_PHDR segment, although that may not be
1756 true for all targets. */
1757 sinterp = bfd_get_section_by_name (abfd, ".interp");
1758 if (sinterp != NULL && (sinterp->flags & SEC_LOAD) != 0)
1760 BFD_ASSERT (first != NULL);
1762 phdr->p_type = PT_PHDR;
1764 phdr->p_offset = off;
1766 /* Account for any adjustment made because of the alignment of
1767 the first loadable section. */
1768 phdr_size_adjust = (first->sh_offset - phdr_size) - off;
1769 BFD_ASSERT (phdr_size_adjust >= 0 && phdr_size_adjust < 128);
1771 /* The program header precedes all loadable sections. This lets
1772 us compute its loadable address. This depends on the linker
1774 phdr->p_vaddr = first->sh_addr - (phdr_size + phdr_size_adjust);
1777 phdr->p_filesz = phdr_size;
1778 phdr->p_memsz = phdr_size;
1780 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
1781 phdr->p_flags = PF_R | PF_X;
1783 phdr->p_align = FILE_ALIGN;
1784 BFD_ASSERT ((phdr->p_vaddr - phdr->p_offset) % FILE_ALIGN == 0);
1786 /* Include the ELF header in the first loadable segment. */
1787 phdr_size_adjust += off;
1792 phdr->p_type = PT_INTERP;
1793 phdr->p_offset = sinterp->filepos;
1794 phdr->p_vaddr = sinterp->vma;
1796 phdr->p_filesz = sinterp->_raw_size;
1797 phdr->p_memsz = sinterp->_raw_size;
1798 phdr->p_flags = PF_R;
1799 phdr->p_align = 1 << bfd_get_section_alignment (abfd, sinterp);
1805 /* Look through the sections to see how they will be divided into
1806 program segments. The sections must be arranged in order by
1807 sh_addr for this to work correctly. */
1808 phdr->p_type = PT_NULL;
1809 last_type = SHT_PROGBITS;
1810 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
1811 i < elf_elfheader (abfd)->e_shnum;
1814 Elf_Internal_Shdr *hdr;
1818 /* Ignore any section which will not be part of the process
1820 if ((hdr->sh_flags & SHF_ALLOC) == 0)
1823 /* If this section fits in the segment we are constructing, add
1825 if (phdr->p_type != PT_NULL
1826 && (hdr->sh_offset - (phdr->p_offset + phdr->p_memsz)
1827 == hdr->sh_addr - (phdr->p_vaddr + phdr->p_memsz))
1828 && (last_type != SHT_NOBITS || hdr->sh_type == SHT_NOBITS))
1830 bfd_size_type adjust;
1832 adjust = hdr->sh_addr - (phdr->p_vaddr + phdr->p_memsz);
1833 phdr->p_memsz += hdr->sh_size + adjust;
1834 if (hdr->sh_type != SHT_NOBITS)
1835 phdr->p_filesz += hdr->sh_size + adjust;
1836 if ((hdr->sh_flags & SHF_WRITE) != 0)
1837 phdr->p_flags |= PF_W;
1838 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1839 phdr->p_flags |= PF_X;
1840 last_type = hdr->sh_type;
1844 /* If we have a segment, move to the next one. */
1845 if (phdr->p_type != PT_NULL)
1851 /* Start a new segment. */
1852 phdr->p_type = PT_LOAD;
1853 phdr->p_offset = hdr->sh_offset;
1854 phdr->p_vaddr = hdr->sh_addr;
1856 if (hdr->sh_type == SHT_NOBITS)
1859 phdr->p_filesz = hdr->sh_size;
1860 phdr->p_memsz = hdr->sh_size;
1861 phdr->p_flags = PF_R;
1862 if ((hdr->sh_flags & SHF_WRITE) != 0)
1863 phdr->p_flags |= PF_W;
1864 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1865 phdr->p_flags |= PF_X;
1866 phdr->p_align = get_elf_backend_data (abfd)->maxpagesize;
1870 && (sinterp->flags & SEC_LOAD) != 0)
1872 phdr->p_offset -= phdr_size + phdr_size_adjust;
1873 phdr->p_vaddr -= phdr_size + phdr_size_adjust;
1874 phdr->p_filesz += phdr_size + phdr_size_adjust;
1875 phdr->p_memsz += phdr_size + phdr_size_adjust;
1878 last_type = hdr->sh_type;
1881 if (phdr->p_type != PT_NULL)
1887 /* If we have a .dynamic section, create a PT_DYNAMIC segment. */
1888 sdyn = bfd_get_section_by_name (abfd, ".dynamic");
1889 if (sdyn != NULL && (sdyn->flags & SEC_LOAD) != 0)
1891 phdr->p_type = PT_DYNAMIC;
1892 phdr->p_offset = sdyn->filepos;
1893 phdr->p_vaddr = sdyn->vma;
1895 phdr->p_filesz = sdyn->_raw_size;
1896 phdr->p_memsz = sdyn->_raw_size;
1897 phdr->p_flags = PF_R;
1898 if ((sdyn->flags & SEC_READONLY) == 0)
1899 phdr->p_flags |= PF_W;
1900 if ((sdyn->flags & SEC_CODE) != 0)
1901 phdr->p_flags |= PF_X;
1902 phdr->p_align = 1 << bfd_get_section_alignment (abfd, sdyn);
1908 /* Make sure the return value from get_program_header_size matches
1909 what we computed here. */
1910 if (phdr_count != phdr_size / sizeof (Elf_External_Phdr))
1913 /* Set up program header information. */
1914 i_ehdrp = elf_elfheader (abfd);
1915 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
1916 i_ehdrp->e_phoff = off;
1917 i_ehdrp->e_phnum = phdr_count;
1919 /* Save the program headers away. I don't think anybody uses this
1920 information right now. */
1921 elf_tdata (abfd)->phdr = ((Elf_Internal_Phdr *)
1924 * sizeof (Elf_Internal_Phdr))));
1925 if (elf_tdata (abfd)->phdr == NULL && phdr_count != 0)
1927 bfd_set_error (bfd_error_no_memory);
1928 return (file_ptr) -1;
1930 memcpy (elf_tdata (abfd)->phdr, phdrs,
1931 phdr_count * sizeof (Elf_Internal_Phdr));
1933 /* Write out the program headers. */
1934 if (bfd_seek (abfd, off, SEEK_SET) != 0)
1935 return (file_ptr) -1;
1937 for (i = 0, phdr = phdrs; i < phdr_count; i++, phdr++)
1939 Elf_External_Phdr extphdr;
1941 elf_swap_phdr_out (abfd, phdr, &extphdr);
1942 if (bfd_write (&extphdr, sizeof (Elf_External_Phdr), 1, abfd)
1943 != sizeof (Elf_External_Phdr))
1944 return (file_ptr) -1;
1947 return off + phdr_count * sizeof (Elf_External_Phdr);
1950 /* Work out the file positions of all the sections. This is called by
1951 elf_compute_section_file_positions. All the section sizes and VMAs
1952 must be known before this is called.
1954 We do not consider reloc sections at this point, unless they form
1955 part of the loadable image. Reloc sections are assigned file
1956 positions in assign_file_positions_for_relocs, which is called by
1957 write_object_contents and final_link.
1959 If DOSYMS is false, we do not assign file positions for the symbol
1960 table or the string table. */
1963 assign_file_positions_except_relocs (abfd, dosyms)
1967 struct elf_obj_tdata * const tdata = elf_tdata (abfd);
1968 Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
1969 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
1972 /* Start after the ELF header. */
1973 off = i_ehdrp->e_ehsize;
1975 if ((abfd->flags & EXEC_P) == 0)
1977 Elf_Internal_Shdr **hdrpp;
1980 /* We are not creating an executable, which means that we are
1981 not creating a program header, and that the actual order of
1982 the sections in the file is unimportant. */
1983 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
1985 Elf_Internal_Shdr *hdr;
1988 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
1990 hdr->sh_offset = -1;
1994 && (i == tdata->symtab_section
1995 || i == tdata->strtab_section))
1997 hdr->sh_offset = -1;
2001 off = assign_file_position_for_section (hdr, off, true);
2007 bfd_size_type phdr_size;
2008 bfd_vma maxpagesize;
2009 Elf_Internal_Shdr **hdrpp;
2011 Elf_Internal_Shdr *first;
2014 /* We are creating an executable. We must create a program
2015 header. We can't actually create the program header until we
2016 have set the file positions for the sections, but we can
2017 figure out how big it is going to be. */
2018 off = align_file_position (off);
2019 phdr_size = get_program_header_size (abfd);
2020 if (phdr_size == (file_ptr) -1)
2025 maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
2026 if (maxpagesize == 0)
2029 /* FIXME: We might want to sort the sections on the sh_addr
2030 field here. For now, we just assume that the linker will
2031 create the sections in an appropriate order. */
2033 /* Assign file positions in two passes. In the first pass, we
2034 assign a file position to every section which forms part of
2035 the executable image. */
2037 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2039 Elf_Internal_Shdr *hdr;
2042 if ((hdr->sh_flags & SHF_ALLOC) == 0)
2048 if ((abfd->flags & D_PAGED) != 0)
2050 /* The section VMA must equal the file position modulo
2051 the page size. This is required by the program
2053 off += (hdr->sh_addr - off) % maxpagesize;
2056 off = assign_file_position_for_section (hdr, off, false);
2059 /* Assign file positions to all the sections which do not form
2060 part of the loadable image, except for the relocs. */
2061 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2063 Elf_Internal_Shdr *hdr;
2066 if ((hdr->sh_flags & SHF_ALLOC) != 0)
2068 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2070 hdr->sh_offset = -1;
2074 && (i == tdata->symtab_section
2075 || i == tdata->strtab_section))
2077 hdr->sh_offset = -1;
2081 off = assign_file_position_for_section (hdr, off, true);
2084 phdr_map = map_program_segments (abfd, phdr_off, first, phdr_size);
2085 if (phdr_map == (file_ptr) -1)
2087 BFD_ASSERT (phdr_map == phdr_off + phdr_size);
2090 /* Place the section headers. */
2091 off = align_file_position (off);
2092 i_ehdrp->e_shoff = off;
2093 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
2095 elf_tdata (abfd)->next_file_pos = off;
2104 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2105 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
2106 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2108 struct strtab *shstrtab;
2110 i_ehdrp = elf_elfheader (abfd);
2111 i_shdrp = elf_elfsections (abfd);
2113 shstrtab = bfd_new_strtab (abfd);
2117 elf_shstrtab (abfd) = shstrtab;
2119 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
2120 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
2121 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
2122 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
2124 i_ehdrp->e_ident[EI_CLASS] = ELFCLASS;
2125 i_ehdrp->e_ident[EI_DATA] =
2126 abfd->xvec->byteorder_big_p ? ELFDATA2MSB : ELFDATA2LSB;
2127 i_ehdrp->e_ident[EI_VERSION] = EV_CURRENT;
2129 for (count = EI_PAD; count < EI_NIDENT; count++)
2130 i_ehdrp->e_ident[count] = 0;
2132 i_ehdrp->e_type = (abfd->flags & EXEC_P) ? ET_EXEC : ET_REL;
2133 switch (bfd_get_arch (abfd))
2135 case bfd_arch_unknown:
2136 i_ehdrp->e_machine = EM_NONE;
2138 case bfd_arch_sparc:
2139 i_ehdrp->e_machine = EM_SPARC;
2140 /* start-sanitize-v9 */
2142 i_ehdrp->e_machine = EM_SPARC64;
2144 /* end-sanitize-v9 */
2147 i_ehdrp->e_machine = EM_386;
2150 i_ehdrp->e_machine = EM_68K;
2153 i_ehdrp->e_machine = EM_88K;
2156 i_ehdrp->e_machine = EM_860;
2158 case bfd_arch_mips: /* MIPS Rxxxx */
2159 i_ehdrp->e_machine = EM_MIPS; /* only MIPS R3000 */
2162 i_ehdrp->e_machine = EM_PARISC;
2164 case bfd_arch_powerpc:
2165 i_ehdrp->e_machine = EM_CYGNUS_POWERPC;
2167 /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
2169 i_ehdrp->e_machine = EM_NONE;
2171 i_ehdrp->e_version = EV_CURRENT;
2172 i_ehdrp->e_ehsize = sizeof (Elf_External_Ehdr);
2174 /* no program header, for now. */
2175 i_ehdrp->e_phoff = 0;
2176 i_ehdrp->e_phentsize = 0;
2177 i_ehdrp->e_phnum = 0;
2179 /* each bfd section is section header entry */
2180 i_ehdrp->e_entry = bfd_get_start_address (abfd);
2181 i_ehdrp->e_shentsize = sizeof (Elf_External_Shdr);
2183 /* if we're building an executable, we'll need a program header table */
2184 if (abfd->flags & EXEC_P)
2186 /* it all happens later */
2188 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2190 /* elf_build_phdrs() returns a (NULL-terminated) array of
2191 Elf_Internal_Phdrs */
2192 i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
2193 i_ehdrp->e_phoff = outbase;
2194 outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
2199 i_ehdrp->e_phentsize = 0;
2201 i_ehdrp->e_phoff = 0;
2204 elf_tdata (abfd)->symtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2206 elf_tdata (abfd)->strtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2208 elf_tdata (abfd)->shstrtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2210 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2211 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2212 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
2219 swap_out_syms (abfd)
2222 if (!elf_map_symbols (abfd))
2225 /* Dump out the symtabs. */
2227 int symcount = bfd_get_symcount (abfd);
2228 asymbol **syms = bfd_get_outsymbols (abfd);
2229 struct strtab *stt = bfd_new_strtab (abfd);
2230 Elf_Internal_Shdr *symtab_hdr;
2231 Elf_Internal_Shdr *symstrtab_hdr;
2232 Elf_External_Sym *outbound_syms;
2237 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2238 symtab_hdr->sh_type = SHT_SYMTAB;
2239 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
2240 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
2241 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
2242 symtab_hdr->sh_addralign = FILE_ALIGN;
2244 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2245 symstrtab_hdr->sh_type = SHT_STRTAB;
2247 outbound_syms = (Elf_External_Sym *)
2248 bfd_alloc (abfd, (1 + symcount) * sizeof (Elf_External_Sym));
2251 bfd_set_error (bfd_error_no_memory);
2254 /* now generate the data (for "contents") */
2256 /* Fill in zeroth symbol and swap it out. */
2257 Elf_Internal_Sym sym;
2263 sym.st_shndx = SHN_UNDEF;
2264 elf_swap_symbol_out (abfd, &sym, outbound_syms);
2266 for (idx = 0; idx < symcount; idx++)
2268 Elf_Internal_Sym sym;
2269 bfd_vma value = syms[idx]->value;
2271 if (syms[idx]->flags & BSF_SECTION_SYM)
2272 /* Section symbols have no names. */
2276 sym.st_name = bfd_add_to_strtab (abfd, stt, syms[idx]->name);
2277 if (sym.st_name == (unsigned long) -1)
2281 if (bfd_is_com_section (syms[idx]->section))
2283 /* ELF common symbols put the alignment into the `value' field,
2284 and the size into the `size' field. This is backwards from
2285 how BFD handles it, so reverse it here. */
2286 sym.st_size = value;
2287 /* Should retrieve this from somewhere... */
2289 sym.st_shndx = elf_section_from_bfd_section (abfd,
2290 syms[idx]->section);
2294 asection *sec = syms[idx]->section;
2295 elf_symbol_type *type_ptr;
2298 if (sec->output_section)
2300 value += sec->output_offset;
2301 sec = sec->output_section;
2304 sym.st_value = value;
2305 type_ptr = elf_symbol_from (abfd, syms[idx]);
2306 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
2307 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec);
2311 /* Writing this would be a hell of a lot easier if we had
2312 some decent documentation on bfd, and knew what to expect
2313 of the library, and what to demand of applications. For
2314 example, it appears that `objcopy' might not set the
2315 section of a symbol to be a section that is actually in
2317 sec2 = bfd_get_section_by_name (abfd, sec->name);
2318 BFD_ASSERT (sec2 != 0);
2319 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec2);
2320 BFD_ASSERT (shndx != -1);
2324 if (bfd_is_com_section (syms[idx]->section))
2325 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_OBJECT);
2326 else if (syms[idx]->section == &bfd_und_section)
2327 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_NOTYPE);
2328 else if (syms[idx]->flags & BSF_SECTION_SYM)
2329 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
2330 else if (syms[idx]->flags & BSF_FILE)
2331 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
2334 int bind = STB_LOCAL;
2335 int type = STT_OBJECT;
2336 unsigned int flags = syms[idx]->flags;
2338 if (flags & BSF_LOCAL)
2340 else if (flags & BSF_WEAK)
2342 else if (flags & BSF_GLOBAL)
2345 if (flags & BSF_FUNCTION)
2348 sym.st_info = ELF_ST_INFO (bind, type);
2352 elf_swap_symbol_out (abfd, &sym,
2354 + elf_sym_extra (abfd)[idx].elf_sym_num));
2357 symtab_hdr->contents = (PTR) outbound_syms;
2358 symstrtab_hdr->contents = (PTR) stt->tab;
2359 symstrtab_hdr->sh_size = stt->length;
2360 symstrtab_hdr->sh_type = SHT_STRTAB;
2362 symstrtab_hdr->sh_flags = 0;
2363 symstrtab_hdr->sh_addr = 0;
2364 symstrtab_hdr->sh_entsize = 0;
2365 symstrtab_hdr->sh_link = 0;
2366 symstrtab_hdr->sh_info = 0;
2367 symstrtab_hdr->sh_addralign = 1;
2368 symstrtab_hdr->size = 0;
2375 write_shdrs_and_ehdr (abfd)
2378 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
2379 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2380 Elf_External_Shdr *x_shdrp; /* Section header table, external form */
2381 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2383 struct strtab *shstrtab;
2385 i_ehdrp = elf_elfheader (abfd);
2386 i_shdrp = elf_elfsections (abfd);
2387 shstrtab = elf_shstrtab (abfd);
2389 /* swap the header before spitting it out... */
2392 elf_debug_file (i_ehdrp);
2394 elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr);
2395 if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
2396 || (bfd_write ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd)
2397 != sizeof (x_ehdr)))
2400 /* at this point we've concocted all the ELF sections... */
2401 x_shdrp = (Elf_External_Shdr *)
2402 bfd_alloc (abfd, sizeof (*x_shdrp) * (i_ehdrp->e_shnum));
2405 bfd_set_error (bfd_error_no_memory);
2409 for (count = 0; count < i_ehdrp->e_shnum; count++)
2412 elf_debug_section (shstrtab->tab + i_shdrp[count]->sh_name, count,
2415 elf_swap_shdr_out (abfd, i_shdrp[count], x_shdrp + count);
2417 if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET) != 0
2418 || (bfd_write ((PTR) x_shdrp, sizeof (*x_shdrp), i_ehdrp->e_shnum, abfd)
2419 != sizeof (*x_shdrp) * i_ehdrp->e_shnum))
2422 /* need to dump the string table too... */
2427 /* Assign file positions for all the reloc sections which are not part
2428 of the loadable file image. */
2431 assign_file_positions_for_relocs (abfd)
2436 Elf_Internal_Shdr **shdrpp;
2438 off = elf_tdata (abfd)->next_file_pos;
2440 for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
2441 i < elf_elfheader (abfd)->e_shnum;
2444 Elf_Internal_Shdr *shdrp;
2447 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
2448 && shdrp->sh_offset == -1)
2449 off = assign_file_position_for_section (shdrp, off, true);
2452 elf_tdata (abfd)->next_file_pos = off;
2456 NAME(bfd_elf,write_object_contents) (abfd)
2459 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2460 Elf_Internal_Ehdr *i_ehdrp;
2461 Elf_Internal_Shdr **i_shdrp;
2464 if (! abfd->output_has_begun
2465 && ! elf_compute_section_file_positions (abfd,
2466 (struct bfd_link_info *) NULL))
2469 i_shdrp = elf_elfsections (abfd);
2470 i_ehdrp = elf_elfheader (abfd);
2472 bfd_map_over_sections (abfd, write_relocs, (PTR) 0);
2473 assign_file_positions_for_relocs (abfd);
2475 /* After writing the headers, we need to write the sections too... */
2476 for (count = 1; count < i_ehdrp->e_shnum; count++)
2478 if (bed->elf_backend_section_processing)
2479 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
2480 if (i_shdrp[count]->contents)
2482 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
2483 || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
2485 != i_shdrp[count]->sh_size))
2490 if (bed->elf_backend_final_write_processing)
2491 (*bed->elf_backend_final_write_processing) (abfd);
2493 return write_shdrs_and_ehdr (abfd);
2496 /* Given an index of a section, retrieve a pointer to it. Note
2497 that for our purposes, sections are indexed by {1, 2, ...} with
2498 0 being an illegal index. */
2500 /* In the original, each ELF section went into exactly one BFD
2501 section. This doesn't really make sense, so we need a real mapping.
2502 The mapping has to hide in the Elf_Internal_Shdr since asection
2503 doesn't have anything like a tdata field... */
2506 section_from_elf_index (abfd, index)
2510 /* @@ Is bfd_com_section really correct in all the places it could
2511 be returned from this routine? */
2513 if (index == SHN_ABS)
2514 return &bfd_com_section; /* not abs? */
2515 if (index == SHN_COMMON)
2516 return &bfd_com_section;
2518 if (index > elf_elfheader (abfd)->e_shnum)
2522 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[index];
2524 switch (hdr->sh_type)
2526 /* ELF sections that map to BFD sections */
2531 if (hdr->rawdata == NULL)
2533 if (! bfd_section_from_shdr (abfd, index))
2536 return (struct sec *) hdr->rawdata;
2539 return (struct sec *) &bfd_abs_section;
2544 /* given a section, search the header to find them... */
2546 elf_section_from_bfd_section (abfd, asect)
2550 Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
2552 Elf_Internal_Shdr *hdr;
2553 int maxindex = elf_elfheader (abfd)->e_shnum;
2555 if (asect == &bfd_abs_section)
2557 if (asect == &bfd_com_section)
2559 if (asect == &bfd_und_section)
2562 for (index = 0; index < maxindex; index++)
2564 hdr = i_shdrp[index];
2565 switch (hdr->sh_type)
2567 /* ELF sections that map to BFD sections */
2576 if (((struct sec *) (hdr->rawdata)) == asect)
2583 /* We sometimes map a reloc section to a BFD section. */
2584 if (((hdr->sh_flags & SHF_ALLOC) != 0
2585 || hdr->sh_link != elf_onesymtab (abfd))
2586 && (asection *) hdr->rawdata == asect)
2591 /* We map most string tables to BFD sections. */
2592 if (index != elf_elfheader (abfd)->e_shstrndx
2593 && index != elf_onesymtab (abfd)
2594 && (asection *) hdr->rawdata == asect)
2600 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2602 if (bed->elf_backend_section_from_bfd_section)
2607 if ((*bed->elf_backend_section_from_bfd_section)
2608 (abfd, hdr, asect, &retval))
2618 /* given a symbol, return the bfd index for that symbol. */
2620 elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
2622 struct symbol_cache_entry **asym_ptr_ptr;
2624 struct symbol_cache_entry *asym_ptr = *asym_ptr_ptr;
2626 flagword flags = asym_ptr->flags;
2628 /* When gas creates relocations against local labels, it creates its
2629 own symbol for the section, but does put the symbol into the
2630 symbol chain, so udata is 0. When the linker is generating
2631 relocatable output, this section symbol may be for one of the
2632 input sections rather than the output section. */
2633 if (asym_ptr->udata == (PTR) 0
2634 && (flags & BSF_SECTION_SYM)
2635 && asym_ptr->section)
2639 if (asym_ptr->section->output_section != NULL)
2640 indx = asym_ptr->section->output_section->index;
2642 indx = asym_ptr->section->index;
2643 if (elf_section_syms (abfd)[indx])
2644 asym_ptr->udata = elf_section_syms (abfd)[indx]->udata;
2647 if (asym_ptr->udata)
2648 idx = ((Elf_Sym_Extra *) asym_ptr->udata)->elf_sym_num;
2658 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx %s\n",
2659 (long) asym_ptr, asym_ptr->name, idx, flags, elf_symbol_flags (flags));
2668 elf_slurp_symbol_table (abfd, symptrs, dynamic)
2670 asymbol **symptrs; /* Buffer for generated bfd symbols */
2673 Elf_Internal_Shdr *hdr;
2674 long symcount; /* Number of external ELF symbols */
2675 elf_symbol_type *sym; /* Pointer to current bfd symbol */
2676 elf_symbol_type *symbase; /* Buffer for generated bfd symbols */
2677 Elf_Internal_Sym i_sym;
2678 Elf_External_Sym *x_symp = NULL;
2680 /* Read each raw ELF symbol, converting from external ELF form to
2681 internal ELF form, and then using the information to create a
2682 canonical bfd symbol table entry.
2684 Note that we allocate the initial bfd canonical symbol buffer
2685 based on a one-to-one mapping of the ELF symbols to canonical
2686 symbols. We actually use all the ELF symbols, so there will be no
2687 space left over at the end. When we have all the symbols, we
2688 build the caller's pointer vector. */
2691 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2693 hdr = &elf_tdata (abfd)->symtab_hdr;
2694 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2697 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2700 sym = symbase = NULL;
2705 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2708 symbase = ((elf_symbol_type *)
2709 bfd_zalloc (abfd, symcount * sizeof (elf_symbol_type)));
2710 if (symbase == (elf_symbol_type *) NULL)
2712 bfd_set_error (bfd_error_no_memory);
2717 /* Temporarily allocate room for the raw ELF symbols. */
2718 x_symp = ((Elf_External_Sym *)
2719 malloc (symcount * sizeof (Elf_External_Sym)));
2720 if (x_symp == NULL && symcount != 0)
2722 bfd_set_error (bfd_error_no_memory);
2726 if (bfd_read ((PTR) x_symp, sizeof (Elf_External_Sym), symcount, abfd)
2727 != symcount * sizeof (Elf_External_Sym))
2729 /* Skip first symbol, which is a null dummy. */
2730 for (i = 1; i < symcount; i++)
2732 elf_swap_symbol_in (abfd, x_symp + i, &i_sym);
2733 memcpy (&sym->internal_elf_sym, &i_sym, sizeof (Elf_Internal_Sym));
2734 #ifdef ELF_KEEP_EXTSYM
2735 memcpy (&sym->native_elf_sym, x_symp + i, sizeof (Elf_External_Sym));
2737 sym->symbol.the_bfd = abfd;
2739 sym->symbol.name = elf_string_from_elf_section (abfd, hdr->sh_link,
2742 sym->symbol.value = i_sym.st_value;
2744 if (i_sym.st_shndx > 0 && i_sym.st_shndx < SHN_LORESERVE)
2746 sym->symbol.section = section_from_elf_index (abfd,
2748 if (sym->symbol.section == NULL)
2750 /* This symbol is in a section for which we did not
2751 create a BFD section. Just use bfd_abs_section,
2752 although it is wrong. FIXME. */
2753 sym->symbol.section = &bfd_abs_section;
2756 else if (i_sym.st_shndx == SHN_ABS)
2758 sym->symbol.section = &bfd_abs_section;
2760 else if (i_sym.st_shndx == SHN_COMMON)
2762 sym->symbol.section = &bfd_com_section;
2763 /* Elf puts the alignment into the `value' field, and
2764 the size into the `size' field. BFD wants to see the
2765 size in the value field, and doesn't care (at the
2766 moment) about the alignment. */
2767 sym->symbol.value = i_sym.st_size;
2769 else if (i_sym.st_shndx == SHN_UNDEF)
2771 sym->symbol.section = &bfd_und_section;
2774 sym->symbol.section = &bfd_abs_section;
2776 sym->symbol.value -= sym->symbol.section->vma;
2778 switch (ELF_ST_BIND (i_sym.st_info))
2781 sym->symbol.flags |= BSF_LOCAL;
2784 sym->symbol.flags |= BSF_GLOBAL;
2787 sym->symbol.flags |= BSF_WEAK;
2791 switch (ELF_ST_TYPE (i_sym.st_info))
2794 sym->symbol.flags |= BSF_SECTION_SYM | BSF_DEBUGGING;
2797 sym->symbol.flags |= BSF_FILE | BSF_DEBUGGING;
2800 sym->symbol.flags |= BSF_FUNCTION;
2805 sym->symbol.flags |= BSF_DYNAMIC;
2807 /* Do some backend-specific processing on this symbol. */
2809 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2810 if (ebd->elf_backend_symbol_processing)
2811 (*ebd->elf_backend_symbol_processing) (abfd, &sym->symbol);
2818 /* Do some backend-specific processing on this symbol table. */
2820 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2821 if (ebd->elf_backend_symbol_table_processing)
2822 (*ebd->elf_backend_symbol_table_processing) (abfd, symbase, symcount);
2825 /* We rely on the zalloc to clear out the final symbol entry. */
2827 symcount = sym - symbase;
2829 /* Fill in the user's symbol pointer vector if needed. */
2837 *symptrs++ = &sym->symbol;
2840 *symptrs = 0; /* Final null pointer */
2852 /* Return the number of bytes required to hold the symtab vector.
2854 Note that we base it on the count plus 1, since we will null terminate
2855 the vector allocated based on this size. However, the ELF symbol table
2856 always has a dummy entry as symbol #0, so it ends up even. */
2859 elf_get_symtab_upper_bound (abfd)
2864 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
2866 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2867 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
2873 elf_get_dynamic_symtab_upper_bound (abfd)
2878 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2880 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2881 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
2887 This function return the number of bytes required to store the
2888 relocation information associated with section <<sect>>
2889 attached to bfd <<abfd>>
2893 elf_get_reloc_upper_bound (abfd, asect)
2897 if (asect->flags & SEC_RELOC)
2899 /* either rel or rela */
2900 return elf_section_data (asect)->rel_hdr.sh_size;
2907 elf_slurp_reloca_table (abfd, asect, symbols)
2912 Elf_External_Rela *native_relocs;
2913 arelent *reloc_cache;
2918 if (asect->relocation)
2920 if (asect->reloc_count == 0)
2922 if (asect->flags & SEC_CONSTRUCTOR)
2925 if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
2927 native_relocs = (Elf_External_Rela *)
2928 bfd_alloc (abfd, asect->reloc_count * sizeof (Elf_External_Rela));
2931 bfd_set_error (bfd_error_no_memory);
2934 if (bfd_read ((PTR) native_relocs,
2935 sizeof (Elf_External_Rela), asect->reloc_count, abfd)
2936 != sizeof (Elf_External_Rela) * asect->reloc_count)
2939 reloc_cache = (arelent *)
2940 bfd_alloc (abfd, (size_t) (asect->reloc_count * sizeof (arelent)));
2944 bfd_set_error (bfd_error_no_memory);
2948 for (idx = 0; idx < asect->reloc_count; idx++)
2950 Elf_Internal_Rela dst;
2951 Elf_External_Rela *src;
2953 cache_ptr = reloc_cache + idx;
2954 src = native_relocs + idx;
2955 elf_swap_reloca_in (abfd, src, &dst);
2957 #ifdef RELOC_PROCESSING
2958 RELOC_PROCESSING (cache_ptr, &dst, symbols, abfd, asect);
2960 if (asect->flags & SEC_RELOC)
2962 /* relocatable, so the offset is off of the section */
2963 cache_ptr->address = dst.r_offset + asect->vma;
2967 /* non-relocatable, so the offset a virtual address */
2968 cache_ptr->address = dst.r_offset;
2971 /* ELF_R_SYM(dst.r_info) is the symbol table offset. An offset
2972 of zero points to the dummy symbol, which was not read into
2973 the symbol table SYMBOLS. */
2974 if (ELF_R_SYM (dst.r_info) == 0)
2975 cache_ptr->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
2980 cache_ptr->sym_ptr_ptr = symbols + ELF_R_SYM (dst.r_info) - 1;
2982 /* Translate any ELF section symbol into a BFD section
2984 s = *(cache_ptr->sym_ptr_ptr);
2985 if (s->flags & BSF_SECTION_SYM)
2987 cache_ptr->sym_ptr_ptr = s->section->symbol_ptr_ptr;
2988 s = *cache_ptr->sym_ptr_ptr;
2989 if (s->name == 0 || s->name[0] == 0)
2993 cache_ptr->addend = dst.r_addend;
2995 /* Fill in the cache_ptr->howto field from dst.r_type */
2997 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2998 (*ebd->elf_info_to_howto) (abfd, cache_ptr, &dst);
3003 asect->relocation = reloc_cache;
3009 elf_debug_section (str, num, hdr)
3012 Elf_Internal_Shdr *hdr;
3014 fprintf (stderr, "\nSection#%d '%s' 0x%.8lx\n", num, str, (long) hdr);
3016 "sh_name = %ld\tsh_type = %ld\tsh_flags = %ld\n",
3017 (long) hdr->sh_name,
3018 (long) hdr->sh_type,
3019 (long) hdr->sh_flags);
3021 "sh_addr = %ld\tsh_offset = %ld\tsh_size = %ld\n",
3022 (long) hdr->sh_addr,
3023 (long) hdr->sh_offset,
3024 (long) hdr->sh_size);
3026 "sh_link = %ld\tsh_info = %ld\tsh_addralign = %ld\n",
3027 (long) hdr->sh_link,
3028 (long) hdr->sh_info,
3029 (long) hdr->sh_addralign);
3030 fprintf (stderr, "sh_entsize = %ld\n",
3031 (long) hdr->sh_entsize);
3032 fprintf (stderr, "rawdata = 0x%.8lx\n", (long) hdr->rawdata);
3033 fprintf (stderr, "contents = 0x%.8lx\n", (long) hdr->contents);
3034 fprintf (stderr, "size = %ld\n", (long) hdr->size);
3039 elf_debug_file (ehdrp)
3040 Elf_Internal_Ehdr *ehdrp;
3042 fprintf (stderr, "e_entry = 0x%.8lx\n", (long) ehdrp->e_entry);
3043 fprintf (stderr, "e_phoff = %ld\n", (long) ehdrp->e_phoff);
3044 fprintf (stderr, "e_phnum = %ld\n", (long) ehdrp->e_phnum);
3045 fprintf (stderr, "e_phentsize = %ld\n", (long) ehdrp->e_phentsize);
3046 fprintf (stderr, "e_shoff = %ld\n", (long) ehdrp->e_shoff);
3047 fprintf (stderr, "e_shnum = %ld\n", (long) ehdrp->e_shnum);
3048 fprintf (stderr, "e_shentsize = %ld\n", (long) ehdrp->e_shentsize);
3053 elf_slurp_reloc_table (abfd, asect, symbols)
3058 Elf_External_Rel *native_relocs;
3059 arelent *reloc_cache;
3061 Elf_Internal_Shdr *data_hdr;
3063 unsigned long data_max;
3064 char buf[4]; /* FIXME -- might be elf64 */
3068 if (asect->relocation)
3070 if (asect->reloc_count == 0)
3072 if (asect->flags & SEC_CONSTRUCTOR)
3075 if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
3077 native_relocs = (Elf_External_Rel *)
3078 bfd_alloc (abfd, asect->reloc_count * sizeof (Elf_External_Rel));
3081 bfd_set_error (bfd_error_no_memory);
3084 if (bfd_read ((PTR) native_relocs,
3085 sizeof (Elf_External_Rel), asect->reloc_count, abfd)
3086 != sizeof (Elf_External_Rel) * asect->reloc_count)
3089 reloc_cache = (arelent *)
3090 bfd_alloc (abfd, (size_t) (asect->reloc_count * sizeof (arelent)));
3094 bfd_set_error (bfd_error_no_memory);
3098 /* Get the offset of the start of the segment we are relocating to read in
3099 the implicit addend. */
3100 data_hdr = &elf_section_data (asect)->this_hdr;
3101 data_off = data_hdr->sh_offset;
3102 data_max = data_hdr->sh_size - sizeof (buf) + 1;
3105 elf_debug_section ("data section", -1, data_hdr);
3108 for (idx = 0; idx < asect->reloc_count; idx++)
3110 #ifdef RELOC_PROCESSING
3111 Elf_Internal_Rel dst;
3112 Elf_External_Rel *src;
3114 cache_ptr = reloc_cache + idx;
3115 src = native_relocs + idx;
3116 elf_swap_reloc_in (abfd, src, &dst);
3118 RELOC_PROCESSING (cache_ptr, &dst, symbols, abfd, asect);
3120 Elf_Internal_Rel dst;
3121 Elf_External_Rel *src;
3123 cache_ptr = reloc_cache + idx;
3124 src = native_relocs + idx;
3126 elf_swap_reloc_in (abfd, src, &dst);
3128 if (asect->flags & SEC_RELOC)
3130 /* relocatable, so the offset is off of the section */
3131 cache_ptr->address = dst.r_offset + asect->vma;
3135 /* non-relocatable, so the offset a virtual address */
3136 cache_ptr->address = dst.r_offset;
3139 /* ELF_R_SYM(dst.r_info) is the symbol table offset. An offset
3140 of zero points to the dummy symbol, which was not read into
3141 the symbol table SYMBOLS. */
3142 if (ELF_R_SYM (dst.r_info) == 0)
3143 cache_ptr->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
3148 cache_ptr->sym_ptr_ptr = symbols + ELF_R_SYM (dst.r_info) - 1;
3150 /* Translate any ELF section symbol into a BFD section
3152 s = *(cache_ptr->sym_ptr_ptr);
3153 if (s->flags & BSF_SECTION_SYM)
3155 cache_ptr->sym_ptr_ptr = s->section->symbol_ptr_ptr;
3156 s = *cache_ptr->sym_ptr_ptr;
3157 if (s->name == 0 || s->name[0] == 0)
3161 BFD_ASSERT (dst.r_offset <= data_max);
3162 cache_ptr->addend = 0;
3164 /* Fill in the cache_ptr->howto field from dst.r_type */
3166 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
3167 (*ebd->elf_info_to_howto_rel) (abfd, cache_ptr, &dst);
3172 asect->relocation = reloc_cache;
3177 elf_canonicalize_reloc (abfd, section, relptr, symbols)
3183 arelent *tblptr = section->relocation;
3184 unsigned int count = 0;
3185 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
3187 /* snarfed from coffcode.h */
3190 if (! elf_slurp_reloca_table (abfd, section, symbols))
3195 if (! elf_slurp_reloc_table (abfd, section, symbols))
3199 tblptr = section->relocation;
3201 for (; count++ < section->reloc_count;)
3202 *relptr++ = tblptr++;
3205 return section->reloc_count;
3209 elf_get_symtab (abfd, alocation)
3211 asymbol **alocation;
3213 long symcount = elf_slurp_symbol_table (abfd, alocation, false);
3216 bfd_get_symcount (abfd) = symcount;
3221 elf_canonicalize_dynamic_symtab (abfd, alocation)
3223 asymbol **alocation;
3225 return elf_slurp_symbol_table (abfd, alocation, true);
3229 elf_make_empty_symbol (abfd)
3232 elf_symbol_type *newsym;
3234 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
3237 bfd_set_error (bfd_error_no_memory);
3242 newsym->symbol.the_bfd = abfd;
3243 return &newsym->symbol;
3248 elf_get_symbol_info (ignore_abfd, symbol, ret)
3253 bfd_symbol_info (symbol, ret);
3257 elf_print_symbol (ignore_abfd, filep, symbol, how)
3261 bfd_print_symbol_type how;
3263 FILE *file = (FILE *) filep;
3266 case bfd_print_symbol_name:
3267 fprintf (file, "%s", symbol->name);
3269 case bfd_print_symbol_more:
3270 fprintf (file, "elf ");
3271 fprintf_vma (file, symbol->value);
3272 fprintf (file, " %lx", (long) symbol->flags);
3274 case bfd_print_symbol_all:
3276 CONST char *section_name;
3277 section_name = symbol->section ? symbol->section->name : "(*none*)";
3278 bfd_print_symbol_vandf ((PTR) file, symbol);
3279 fprintf (file, " %s\t%s",
3289 elf_get_lineno (ignore_abfd, symbol)
3293 fprintf (stderr, "elf_get_lineno unimplemented\n");
3300 elf_set_arch_mach (abfd, arch, machine)
3302 enum bfd_architecture arch;
3303 unsigned long machine;
3305 /* If this isn't the right architecture for this backend, and this
3306 isn't the generic backend, fail. */
3307 if (arch != get_elf_backend_data (abfd)->arch
3308 && arch != bfd_arch_unknown
3309 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
3312 return bfd_default_set_arch_mach (abfd, arch, machine);
3316 elf_find_nearest_line (abfd,
3327 CONST char **filename_ptr;
3328 CONST char **functionname_ptr;
3329 unsigned int *line_ptr;
3335 elf_sizeof_headers (abfd, reloc)
3341 ret = sizeof (Elf_External_Ehdr);
3343 ret += get_program_header_size (abfd);
3348 elf_set_section_contents (abfd, section, location, offset, count)
3353 bfd_size_type count;
3355 Elf_Internal_Shdr *hdr;
3357 if (! abfd->output_has_begun
3358 && ! elf_compute_section_file_positions (abfd,
3359 (struct bfd_link_info *) NULL))
3362 hdr = &elf_section_data (section)->this_hdr;
3364 if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
3366 if (bfd_write (location, 1, count, abfd) != count)
3373 elf_no_info_to_howto (abfd, cache_ptr, dst)
3376 Elf_Internal_Rela *dst;
3378 fprintf (stderr, "elf RELA relocation support for target machine unimplemented\n");
3384 elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
3387 Elf_Internal_Rel *dst;
3389 fprintf (stderr, "elf REL relocation support for target machine unimplemented\n");
3395 /* Core file support */
3397 #ifdef HAVE_PROCFS /* Some core file support requires host /proc files */
3398 #include <sys/procfs.h>
3400 #define bfd_prstatus(abfd, descdata, descsz, filepos) true
3401 #define bfd_fpregset(abfd, descdata, descsz, filepos) true
3402 #define bfd_prpsinfo(abfd, descdata, descsz, filepos) true
3408 bfd_prstatus (abfd, descdata, descsz, filepos)
3415 prstatus_t *status = (prstatus_t *) 0;
3417 if (descsz == sizeof (prstatus_t))
3419 newsect = bfd_make_section (abfd, ".reg");
3420 if (newsect == NULL)
3422 newsect->_raw_size = sizeof (status->pr_reg);
3423 newsect->filepos = filepos + (long) &status->pr_reg;
3424 newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3425 newsect->alignment_power = 2;
3426 if ((core_prstatus (abfd) = bfd_alloc (abfd, descsz)) != NULL)
3428 memcpy (core_prstatus (abfd), descdata, descsz);
3434 /* Stash a copy of the prpsinfo structure away for future use. */
3437 bfd_prpsinfo (abfd, descdata, descsz, filepos)
3443 if (descsz == sizeof (prpsinfo_t))
3445 if ((core_prpsinfo (abfd) = bfd_alloc (abfd, descsz)) == NULL)
3447 bfd_set_error (bfd_error_no_memory);
3450 memcpy (core_prpsinfo (abfd), descdata, descsz);
3456 bfd_fpregset (abfd, descdata, descsz, filepos)
3464 newsect = bfd_make_section (abfd, ".reg2");
3465 if (newsect == NULL)
3467 newsect->_raw_size = descsz;
3468 newsect->filepos = filepos;
3469 newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3470 newsect->alignment_power = 2;
3474 #endif /* HAVE_PROCFS */
3476 /* Return a pointer to the args (including the command name) that were
3477 seen by the program that generated the core dump. Note that for
3478 some reason, a spurious space is tacked onto the end of the args
3479 in some (at least one anyway) implementations, so strip it off if
3483 elf_core_file_failing_command (abfd)
3487 if (core_prpsinfo (abfd))
3489 prpsinfo_t *p = core_prpsinfo (abfd);
3490 char *scan = p->pr_psargs;
3495 if ((scan > p->pr_psargs) && (*scan == ' '))
3499 return p->pr_psargs;
3505 /* Return the number of the signal that caused the core dump. Presumably,
3506 since we have a core file, we got a signal of some kind, so don't bother
3507 checking the other process status fields, just return the signal number.
3511 elf_core_file_failing_signal (abfd)
3515 if (core_prstatus (abfd))
3517 return ((prstatus_t *) (core_prstatus (abfd)))->pr_cursig;
3523 /* Check to see if the core file could reasonably be expected to have
3524 come for the current executable file. Note that by default we return
3525 true unless we find something that indicates that there might be a
3530 elf_core_file_matches_executable_p (core_bfd, exec_bfd)
3539 /* First, xvecs must match since both are ELF files for the same target. */
3541 if (core_bfd->xvec != exec_bfd->xvec)
3543 bfd_set_error (bfd_error_system_call);
3549 /* If no prpsinfo, just return true. Otherwise, grab the last component
3550 of the exec'd pathname from the prpsinfo. */
3552 if (core_prpsinfo (core_bfd))
3554 corename = (((struct prpsinfo *) core_prpsinfo (core_bfd))->pr_fname);
3561 /* Find the last component of the executable pathname. */
3563 if ((execname = strrchr (exec_bfd->filename, '/')) != NULL)
3569 execname = (char *) exec_bfd->filename;
3572 /* See if they match */
3574 return strcmp (execname, corename) ? false : true;
3580 #endif /* HAVE_PROCFS */
3583 /* ELF core files contain a segment of type PT_NOTE, that holds much of
3584 the information that would normally be available from the /proc interface
3585 for the process, at the time the process dumped core. Currently this
3586 includes copies of the prstatus, prpsinfo, and fpregset structures.
3588 Since these structures are potentially machine dependent in size and
3589 ordering, bfd provides two levels of support for them. The first level,
3590 available on all machines since it does not require that the host
3591 have /proc support or the relevant include files, is to create a bfd
3592 section for each of the prstatus, prpsinfo, and fpregset structures,
3593 without any interpretation of their contents. With just this support,
3594 the bfd client will have to interpret the structures itself. Even with
3595 /proc support, it might want these full structures for it's own reasons.
3597 In the second level of support, where HAVE_PROCFS is defined, bfd will
3598 pick apart the structures to gather some additional information that
3599 clients may want, such as the general register set, the name of the
3600 exec'ed file and its arguments, the signal (if any) that caused the
3606 elf_corefile_note (abfd, hdr)
3608 Elf_Internal_Phdr *hdr;
3610 Elf_External_Note *x_note_p; /* Elf note, external form */
3611 Elf_Internal_Note i_note; /* Elf note, internal form */
3612 char *buf = NULL; /* Entire note segment contents */
3613 char *namedata; /* Name portion of the note */
3614 char *descdata; /* Descriptor portion of the note */
3615 char *sectname; /* Name to use for new section */
3616 long filepos; /* File offset to descriptor data */
3619 if (hdr->p_filesz > 0
3620 && (buf = (char *) malloc (hdr->p_filesz)) != NULL
3621 && bfd_seek (abfd, hdr->p_offset, SEEK_SET) != -1
3622 && bfd_read ((PTR) buf, hdr->p_filesz, 1, abfd) == hdr->p_filesz)
3624 x_note_p = (Elf_External_Note *) buf;
3625 while ((char *) x_note_p < (buf + hdr->p_filesz))
3627 i_note.namesz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->namesz);
3628 i_note.descsz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->descsz);
3629 i_note.type = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->type);
3630 namedata = x_note_p->name;
3631 descdata = namedata + BFD_ALIGN (i_note.namesz, 4);
3632 filepos = hdr->p_offset + (descdata - buf);
3633 switch (i_note.type)
3636 /* process descdata as prstatus info */
3637 if (! bfd_prstatus (abfd, descdata, i_note.descsz, filepos))
3639 sectname = ".prstatus";
3642 /* process descdata as fpregset info */
3643 if (! bfd_fpregset (abfd, descdata, i_note.descsz, filepos))
3645 sectname = ".fpregset";
3648 /* process descdata as prpsinfo */
3649 if (! bfd_prpsinfo (abfd, descdata, i_note.descsz, filepos))
3651 sectname = ".prpsinfo";
3654 /* Unknown descriptor, just ignore it. */
3658 if (sectname != NULL)
3660 newsect = bfd_make_section (abfd, sectname);
3661 if (newsect == NULL)
3663 newsect->_raw_size = i_note.descsz;
3664 newsect->filepos = filepos;
3665 newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3666 newsect->alignment_power = 2;
3668 x_note_p = (Elf_External_Note *)
3669 (descdata + BFD_ALIGN (i_note.descsz, 4));
3676 else if (hdr->p_filesz > 0)
3678 bfd_set_error (bfd_error_no_memory);
3685 /* Core files are simply standard ELF formatted files that partition
3686 the file using the execution view of the file (program header table)
3687 rather than the linking view. In fact, there is no section header
3688 table in a core file.
3690 The process status information (including the contents of the general
3691 register set) and the floating point register set are stored in a
3692 segment of type PT_NOTE. We handcraft a couple of extra bfd sections
3693 that allow standard bfd access to the general registers (.reg) and the
3694 floating point registers (.reg2).
3699 elf_core_file_p (abfd)
3702 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
3703 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
3704 Elf_External_Phdr x_phdr; /* Program header table entry, external form */
3705 Elf_Internal_Phdr *i_phdrp; /* Program header table, internal form */
3706 unsigned int phindex;
3707 struct elf_backend_data *ebd;
3709 /* Read in the ELF header in external format. */
3711 if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
3713 if (bfd_get_error () != bfd_error_system_call)
3714 bfd_set_error (bfd_error_wrong_format);
3718 /* Now check to see if we have a valid ELF file, and one that BFD can
3719 make use of. The magic number must match, the address size ('class')
3720 and byte-swapping must match our XVEC entry, and it must have a
3721 program header table (FIXME: See comments re segments at top of this
3724 if (elf_file_p (&x_ehdr) == false)
3727 bfd_set_error (bfd_error_wrong_format);
3731 /* FIXME, Check EI_VERSION here ! */
3735 int desired_address_size = ELFCLASS32;
3738 int desired_address_size = ELFCLASS64;
3741 if (x_ehdr.e_ident[EI_CLASS] != desired_address_size)
3745 /* Switch xvec to match the specified byte order. */
3746 switch (x_ehdr.e_ident[EI_DATA])
3748 case ELFDATA2MSB: /* Big-endian */
3749 if (abfd->xvec->byteorder_big_p == false)
3752 case ELFDATA2LSB: /* Little-endian */
3753 if (abfd->xvec->byteorder_big_p == true)
3756 case ELFDATANONE: /* No data encoding specified */
3757 default: /* Unknown data encoding specified */
3761 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
3762 the tdata pointer in the bfd. */
3765 (struct elf_obj_tdata *) bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
3766 if (elf_tdata (abfd) == NULL)
3768 bfd_set_error (bfd_error_no_memory);
3772 /* FIXME, `wrong' returns from this point onward, leak memory. */
3774 /* Now that we know the byte order, swap in the rest of the header */
3775 i_ehdrp = elf_elfheader (abfd);
3776 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
3778 elf_debug_file (i_ehdrp);
3781 ebd = get_elf_backend_data (abfd);
3783 /* Check that the ELF e_machine field matches what this particular
3784 BFD format expects. */
3785 if (ebd->elf_machine_code != i_ehdrp->e_machine)
3787 bfd_target **target_ptr;
3789 if (ebd->elf_machine_code != EM_NONE)
3792 /* This is the generic ELF target. Let it match any ELF target
3793 for which we do not have a specific backend. */
3794 for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++)
3796 struct elf_backend_data *back;
3798 if ((*target_ptr)->flavour != bfd_target_elf_flavour)
3800 back = (struct elf_backend_data *) (*target_ptr)->backend_data;
3801 if (back->elf_machine_code == i_ehdrp->e_machine)
3803 /* target_ptr is an ELF backend which matches this
3804 object file, so reject the generic ELF target. */
3810 /* If there is no program header, or the type is not a core file, then
3812 if (i_ehdrp->e_phoff == 0 || i_ehdrp->e_type != ET_CORE)
3815 /* Allocate space for a copy of the program header table in
3816 internal form, seek to the program header table in the file,
3817 read it in, and convert it to internal form. As a simple sanity
3818 check, verify that the what BFD thinks is the size of each program
3819 header table entry actually matches the size recorded in the file. */
3821 if (i_ehdrp->e_phentsize != sizeof (x_phdr))
3823 i_phdrp = (Elf_Internal_Phdr *)
3824 bfd_alloc (abfd, sizeof (*i_phdrp) * i_ehdrp->e_phnum);
3827 bfd_set_error (bfd_error_no_memory);
3830 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) == -1)
3832 for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3834 if (bfd_read ((PTR) & x_phdr, sizeof (x_phdr), 1, abfd)
3837 elf_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
3840 /* Once all of the program headers have been read and converted, we
3841 can start processing them. */
3843 for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3845 bfd_section_from_phdr (abfd, i_phdrp + phindex, phindex);
3846 if ((i_phdrp + phindex)->p_type == PT_NOTE)
3848 if (! elf_corefile_note (abfd, i_phdrp + phindex))
3853 /* Remember the entry point specified in the ELF file header. */
3855 bfd_get_start_address (abfd) = i_ehdrp->e_entry;
3860 /* ELF linker code. */
3862 static boolean elf_link_add_object_symbols
3863 PARAMS ((bfd *, struct bfd_link_info *));
3864 static boolean elf_link_add_archive_symbols
3865 PARAMS ((bfd *, struct bfd_link_info *));
3866 static INLINE boolean elf_link_record_dynamic_symbol
3867 PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
3868 static boolean elf_link_create_dynamic_sections
3869 PARAMS ((bfd *, struct bfd_link_info *));
3870 static boolean elf_adjust_dynamic_symbol
3871 PARAMS ((struct elf_link_hash_entry *, PTR));
3873 /* Given an ELF BFD, add symbols to the global hash table as
3877 elf_bfd_link_add_symbols (abfd, info)
3879 struct bfd_link_info *info;
3881 switch (bfd_get_format (abfd))
3884 return elf_link_add_object_symbols (abfd, info);
3886 return elf_link_add_archive_symbols (abfd, info);
3888 bfd_set_error (bfd_error_wrong_format);
3893 /* Add symbols from an ELF archive file to the linker hash table. We
3894 don't use _bfd_generic_link_add_archive_symbols because of a
3895 problem which arises on UnixWare. The UnixWare libc.so is an
3896 archive which includes an entry libc.so.1 which defines a bunch of
3897 symbols. The libc.so archive also includes a number of other
3898 object files, which also define symbols, some of which are the same
3899 as those defined in libc.so.1. Correct linking requires that we
3900 consider each object file in turn, and include it if it defines any
3901 symbols we need. _bfd_generic_link_add_archive_symbols does not do
3902 this; it looks through the list of undefined symbols, and includes
3903 any object file which defines them. When this algorithm is used on
3904 UnixWare, it winds up pulling in libc.so.1 early and defining a
3905 bunch of symbols. This means that some of the other objects in the
3906 archive are not included in the link, which is incorrect since they
3907 precede libc.so.1 in the archive.
3909 Fortunately, ELF archive handling is simpler than that done by
3910 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
3911 oddities. In ELF, if we find a symbol in the archive map, and the
3912 symbol is currently undefined, we know that we must pull in that
3915 Unfortunately, we do have to make multiple passes over the symbol
3916 table until nothing further is resolved. */
3919 elf_link_add_archive_symbols (abfd, info)
3921 struct bfd_link_info *info;
3924 boolean *defined = NULL;
3925 boolean *included = NULL;
3929 if (! bfd_has_map (abfd))
3931 bfd_set_error (bfd_error_no_symbols);
3935 /* Keep track of all symbols we know to be already defined, and all
3936 files we know to be already included. This is to speed up the
3937 second and subsequent passes. */
3938 c = bfd_ardata (abfd)->symdef_count;
3941 defined = (boolean *) malloc (c * sizeof (boolean));
3942 included = (boolean *) malloc (c * sizeof (boolean));
3943 if (defined == (boolean *) NULL || included == (boolean *) NULL)
3945 bfd_set_error (bfd_error_no_memory);
3948 memset (defined, 0, c * sizeof (boolean));
3949 memset (included, 0, c * sizeof (boolean));
3951 symdefs = bfd_ardata (abfd)->symdefs;
3964 symdefend = symdef + c;
3965 for (i = 0; symdef < symdefend; symdef++, i++)
3967 struct elf_link_hash_entry *h;
3969 struct bfd_link_hash_entry *undefs_tail;
3972 if (defined[i] || included[i])
3974 if (symdef->file_offset == last)
3980 h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
3981 false, false, false);
3982 if (h == (struct elf_link_hash_entry *) NULL)
3984 if (h->root.type != bfd_link_hash_undefined)
3990 /* We need to include this archive member. */
3992 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
3993 if (element == (bfd *) NULL)
3996 if (! bfd_check_format (element, bfd_object))
3999 /* Doublecheck that we have not included this object
4000 already--it should be impossible, but there may be
4001 something wrong with the archive. */
4002 if (element->archive_pass != 0)
4004 bfd_set_error (bfd_error_bad_value);
4007 element->archive_pass = 1;
4009 undefs_tail = info->hash->undefs_tail;
4011 if (! (*info->callbacks->add_archive_element) (info, element,
4014 if (! elf_link_add_object_symbols (element, info))
4017 /* If there are any new undefined symbols, we need to make
4018 another pass through the archive in order to see whether
4019 they can be defined. FIXME: This isn't perfect, because
4020 common symbols wind up on undefs_tail and because an
4021 undefined symbol which is defined later on in this pass
4022 does not require another pass. This isn't a bug, but it
4023 does make the code less efficient than it could be. */
4024 if (undefs_tail != info->hash->undefs_tail)
4027 /* Look backward to mark all symbols from this object file
4028 which we have already seen in this pass. */
4032 included[mark] = true;
4037 while (symdefs[mark].file_offset == symdef->file_offset);
4039 /* We mark subsequent symbols from this object file as we go
4040 on through the loop. */
4041 last = symdef->file_offset;
4052 if (defined != (boolean *) NULL)
4054 if (included != (boolean *) NULL)
4059 /* Record a new dynamic symbol. We record the dynamic symbols as we
4060 read the input files, since we need to have a list of all of them
4061 before we can determine the final sizes of the output sections. */
4063 static INLINE boolean
4064 elf_link_record_dynamic_symbol (info, h)
4065 struct bfd_link_info *info;
4066 struct elf_link_hash_entry *h;
4068 if (h->dynindx == -1)
4070 h->dynindx = elf_hash_table (info)->dynsymcount;
4071 ++elf_hash_table (info)->dynsymcount;
4072 h->dynstr_index = bfd_add_to_strtab (elf_hash_table (info)->dynobj,
4073 elf_hash_table (info)->dynstr,
4074 h->root.root.string);
4075 if (h->dynstr_index == (unsigned long) -1)
4082 /* Add symbols from an ELF object file to the linker hash table. */
4085 elf_link_add_object_symbols (abfd, info)
4087 struct bfd_link_info *info;
4089 boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
4090 const Elf_Internal_Sym *,
4091 const char **, flagword *,
4092 asection **, bfd_vma *));
4094 Elf_Internal_Shdr *hdr;
4098 Elf_External_Sym *buf = NULL;
4099 struct elf_link_hash_entry **sym_hash;
4101 Elf_External_Dyn *dynbuf = NULL;
4102 struct elf_link_hash_entry *weaks;
4103 Elf_External_Sym *esym;
4104 Elf_External_Sym *esymend;
4106 add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
4107 collect = get_elf_backend_data (abfd)->collect;
4109 hdr = &elf_tdata (abfd)->symtab_hdr;
4110 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
4112 /* The sh_info field of the symtab header tells us where the
4113 external symbols start. We don't care about the local symbols at
4115 if (elf_bad_symtab (abfd))
4117 extsymcount = symcount;
4122 extsymcount = symcount - hdr->sh_info;
4123 extsymoff = hdr->sh_info;
4126 buf = (Elf_External_Sym *) malloc (extsymcount * sizeof (Elf_External_Sym));
4127 if (buf == NULL && extsymcount != 0)
4129 bfd_set_error (bfd_error_no_memory);
4133 /* We store a pointer to the hash table entry for each external
4135 sym_hash = ((struct elf_link_hash_entry **)
4137 extsymcount * sizeof (struct elf_link_hash_entry *)));
4138 if (sym_hash == NULL)
4140 bfd_set_error (bfd_error_no_memory);
4143 elf_sym_hashes (abfd) = sym_hash;
4145 if (elf_elfheader (abfd)->e_type != ET_DYN)
4151 unsigned long strindex;
4155 /* You can't use -r against a dynamic object. There's no hope
4156 of using a dynamic object which does not exactly match the
4157 format of the output file. */
4158 if (info->relocateable
4159 || info->hash->creator != abfd->xvec)
4161 bfd_set_error (bfd_error_invalid_operation);
4165 /* Find the name to use in a DT_NEEDED entry that refers to this
4166 object. If the object has a DT_SONAME entry, we use it.
4167 Otherwise, we use the file name. */
4168 name = bfd_get_filename (abfd);
4169 s = bfd_get_section_by_name (abfd, ".dynamic");
4172 Elf_External_Dyn *extdyn;
4173 Elf_External_Dyn *extdynend;
4175 dynbuf = (Elf_External_Dyn *) malloc (s->_raw_size);
4178 bfd_set_error (bfd_error_no_memory);
4182 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
4183 (file_ptr) 0, s->_raw_size))
4187 extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
4188 for (; extdyn < extdynend; extdyn++)
4190 Elf_Internal_Dyn dyn;
4192 elf_swap_dyn_in (abfd, extdyn, &dyn);
4193 if (dyn.d_tag == DT_SONAME)
4198 elfsec = elf_section_from_bfd_section (abfd, s);
4201 link = elf_elfsections (abfd)[elfsec]->sh_link;
4202 name = elf_string_from_elf_section (abfd, link,
4215 /* We do not want to include any of the sections in a dynamic
4216 object in the output file. We hack by simply clobbering the
4217 list of sections in the BFD. This could be handled more
4218 cleanly by, say, a new section flag; the existing
4219 SEC_NEVER_LOAD flag is not the one we want, because that one
4220 still implies that the section takes up space in the output
4222 abfd->sections = NULL;
4224 /* If this is the first dynamic object found in the link, create
4225 the special sections required for dynamic linking. We need
4226 to put them somewhere, and attaching them to the first
4227 dynamic object is as good place as any. */
4228 if (elf_hash_table (info)->dynobj == NULL)
4230 if (! elf_link_create_dynamic_sections (abfd, info))
4232 elf_hash_table (info)->dynobj = abfd;
4235 /* Add a DT_NEEDED entry for this dynamic object. */
4236 strindex = bfd_add_to_strtab (abfd,
4237 elf_hash_table (info)->dynstr,
4240 if (strindex == (unsigned long) -1)
4242 if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
4247 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
4249 || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
4250 != extsymcount * sizeof (Elf_External_Sym)))
4255 esymend = buf + extsymcount;
4256 for (esym = buf; esym < esymend; esym++, sym_hash++)
4258 Elf_Internal_Sym sym;
4264 struct elf_link_hash_entry *h = NULL;
4267 elf_swap_symbol_in (abfd, esym, &sym);
4269 flags = BSF_NO_FLAGS;
4271 value = sym.st_value;
4274 bind = ELF_ST_BIND (sym.st_info);
4275 if (bind == STB_LOCAL)
4277 /* This should be impossible, since ELF requires that all
4278 global symbols follow all local symbols, and that sh_info
4279 point to the first global symbol. Unfortunatealy, Irix 5
4283 else if (bind == STB_GLOBAL)
4285 else if (bind == STB_WEAK)
4289 /* Leave it up to the processor backend. */
4292 if (sym.st_shndx == SHN_UNDEF)
4293 sec = &bfd_und_section;
4294 else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
4296 sec = section_from_elf_index (abfd, sym.st_shndx);
4301 else if (sym.st_shndx == SHN_ABS)
4302 sec = &bfd_abs_section;
4303 else if (sym.st_shndx == SHN_COMMON)
4305 sec = &bfd_com_section;
4306 /* What ELF calls the size we call the value. What ELF
4307 calls the value we call the alignment. */
4308 value = sym.st_size;
4312 /* Leave it up to the processor backend. */
4315 name = elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
4316 if (name == (const char *) NULL)
4319 if (add_symbol_hook)
4321 if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
4325 /* The hook function sets the name to NULL if this symbol
4326 should be skipped for some reason. */
4327 if (name == (const char *) NULL)
4331 /* Sanity check that all possibilities were handled. */
4332 if (flags == BSF_NO_FLAGS || sec == (asection *) NULL)
4334 bfd_set_error (bfd_error_bad_value);
4338 if (sec == &bfd_und_section
4339 || bfd_is_com_section (sec))
4344 if (info->hash->creator->flavour == bfd_target_elf_flavour)
4346 /* We need to look up the symbol now in order to get some of
4347 the dynamic object handling right. We pass the hash
4348 table entry in to _bfd_generic_link_add_one_symbol so
4349 that it does not have to look it up again. */
4350 h = elf_link_hash_lookup (elf_hash_table (info), name,
4351 true, false, false);
4356 /* If we are looking at a dynamic object, and this is a
4357 definition, we need to see if it has already been defined
4358 by some other object. If it has, we want to use the
4359 existing definition, and we do not want to report a
4360 multiple symbol definition error; we do this by
4361 clobbering sec to be bfd_und_section. */
4362 if (dynamic && definition)
4364 if (h->root.type == bfd_link_hash_defined)
4365 sec = &bfd_und_section;
4368 /* Similarly, if we are not looking at a dynamic object, and
4369 we have a definition, we want to override any definition
4370 we may have from a dynamic object. Symbols from regular
4371 files always take precedence over symbols from dynamic
4372 objects, even if they are defined after the dynamic
4373 object in the link. */
4376 && h->root.type == bfd_link_hash_defined
4377 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
4378 && (bfd_get_flavour (h->root.u.def.section->owner)
4379 == bfd_target_elf_flavour)
4380 && (elf_elfheader (h->root.u.def.section->owner)->e_type
4383 /* Change the hash table entry to undefined, and let
4384 _bfd_generic_link_add_one_symbol do the right thing
4385 with the new definition. */
4386 h->root.type = bfd_link_hash_undefined;
4387 h->root.u.undef.abfd = h->root.u.def.section->owner;
4391 if (! (_bfd_generic_link_add_one_symbol
4392 (info, abfd, name, flags, sec, value, (const char *) NULL,
4393 false, collect, (struct bfd_link_hash_entry **) sym_hash)))
4398 && (flags & BSF_WEAK) != 0
4399 && ELF_ST_TYPE (sym.st_info) != STT_FUNC
4400 && (*sym_hash)->weakdef == NULL)
4402 /* Keep a list of all weak defined non function symbols from
4403 a dynamic object, using the weakdef field. Later in this
4404 function we will set the weakdef field to the correct
4405 value. We only put non-function symbols from dynamic
4406 objects on this list, because that happens to be the only
4407 time we need to know the normal symbol corresponding to a
4408 weak symbol, and the information is time consuming to
4409 figure out. If the weakdef field is not already NULL,
4410 then this symbol was already defined by some previous
4411 dynamic object, and we will be using that previous
4412 definition anyhow. */
4414 (*sym_hash)->weakdef = weaks;
4418 if (info->hash->creator->flavour == bfd_target_elf_flavour)
4424 /* Remember the symbol size, type and alignment. */
4425 if (sym.st_size != 0)
4427 /* FIXME: We should probably somehow give a warning if
4428 the symbol size changes. */
4429 h->size = sym.st_size;
4431 if (sym.st_shndx == SHN_COMMON
4432 && sym.st_value > h->align)
4433 h->align = sym.st_value;
4434 if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE)
4436 /* FIXME: We should probably somehow give a warning if
4437 the symbol type changes. */
4438 h->type = ELF_ST_TYPE (sym.st_info);
4441 /* Set a flag in the hash table entry indicating the type of
4442 reference or definition we just found. Keep a count of
4443 the number of dynamic symbols we find. A dynamic symbol
4444 is one which is referenced or defined by both a regular
4445 object and a shared object, or one which is referenced or
4446 defined by more than one shared object. */
4447 old_flags = h->elf_link_hash_flags;
4452 new_flag = ELF_LINK_HASH_REF_REGULAR;
4454 new_flag = ELF_LINK_HASH_DEF_REGULAR;
4455 if ((old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
4456 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
4462 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
4464 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
4465 if ((old_flags & new_flag) != 0)
4468 new_flag = ELF_LINK_HASH_REF_DYNAMIC_MULTIPLE;
4470 new_flag = ELF_LINK_HASH_DEF_DYNAMIC_MULTIPLE;
4475 if ((old_flags & (ELF_LINK_HASH_DEF_REGULAR
4476 | ELF_LINK_HASH_REF_REGULAR)) != 0)
4481 h->elf_link_hash_flags |= new_flag;
4482 if (dynsym && h->dynindx == -1)
4484 if (! elf_link_record_dynamic_symbol (info, h))
4490 /* Now set the weakdefs field correctly for all the weak defined
4491 symbols we found. The only way to do this is to search all the
4492 symbols. Since we only need the information for non functions in
4493 dynamic objects, that's the only time we actually put anything on
4494 the list WEAKS. We need this information so that if a regular
4495 object refers to a symbol defined weakly in a dynamic object, the
4496 real symbol in the dynamic object is also put in the dynamic
4497 symbols; we also must arrange for both symbols to point to the
4498 same memory location. We could handle the general case of symbol
4499 aliasing, but a general symbol alias can only be generated in
4500 assembler code, handling it correctly would be very time
4501 consuming, and other ELF linkers don't handle general aliasing
4503 while (weaks != NULL)
4505 struct elf_link_hash_entry *hlook;
4508 struct elf_link_hash_entry **hpp;
4509 struct elf_link_hash_entry **hppend;
4512 weaks = hlook->weakdef;
4513 hlook->weakdef = NULL;
4515 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined);
4516 slook = hlook->root.u.def.section;
4517 vlook = hlook->root.u.def.value;
4519 hpp = elf_sym_hashes (abfd);
4520 hppend = hpp + extsymcount;
4521 for (; hpp < hppend; hpp++)
4523 struct elf_link_hash_entry *h;
4527 && h->root.type == bfd_link_hash_defined
4528 && h->root.u.def.section == slook
4529 && h->root.u.def.value == vlook)
4533 /* If the weak definition is in the list of dynamic
4534 symbols, make sure the real definition is put there
4536 if (hlook->dynindx != -1
4537 && h->dynindx == -1)
4539 if (! elf_link_record_dynamic_symbol (info, h))
4561 /* Create some sections which will be filled in with dynamic linking
4562 information. The ABFD argument is an input file which is a dynamic
4563 object. The dynamic sections take up virtual memory space when the
4564 final executable is run, so we need to create them before addresses
4565 are assigned to the output sections. We work out the actual
4566 contents and size of these sections later. */
4569 elf_link_create_dynamic_sections (abfd, info)
4571 struct bfd_link_info *info;
4574 register asection *s;
4575 struct elf_link_hash_entry *h;
4576 struct elf_backend_data *bed;
4578 /* Note that we set the SEC_IN_MEMORY flag for all of these
4580 flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
4582 s = bfd_make_section (abfd, ".interp");
4584 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
4587 s = bfd_make_section (abfd, ".dynamic");
4589 || ! bfd_set_section_flags (abfd, s, flags)
4590 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4593 /* The special symbol _DYNAMIC is always set to the start of the
4594 .dynamic section. This call occurs before we have processed the
4595 symbols for any dynamic object, so we don't have to worry about
4596 overriding a dynamic definition. We could set _DYNAMIC in a
4597 linker script, but we only want to define it if we are, in fact,
4598 creating a .dynamic section. We don't want to define it if there
4599 is no .dynamic section, since on some ELF platforms the start up
4600 code examines it to decide how to initialize the process. */
4602 if (! (_bfd_generic_link_add_one_symbol
4603 (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
4604 (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
4605 (struct bfd_link_hash_entry **) &h)))
4607 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4609 s = bfd_make_section (abfd, ".dynsym");
4611 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
4612 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4615 /* The first .dynsym symbol is a dummy. */
4616 elf_hash_table (info)->dynsymcount = 1;
4618 s = bfd_make_section (abfd, ".dynstr");
4620 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
4623 /* Create a strtab to hold the dynamic symbol names. */
4624 elf_hash_table (info)->dynstr = bfd_new_strtab (abfd);
4625 if (elf_hash_table (info)->dynstr == NULL)
4628 s = bfd_make_section (abfd, ".hash");
4630 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
4631 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
4634 /* Let the backend create the rest of the sections. This lets the
4635 backend set the right flags. The backend will normally create
4636 the .got and .plt sections. */
4637 bed = get_elf_backend_data (abfd);
4638 return (*bed->elf_backend_create_dynamic_sections) (abfd, info);
4641 /* Add an entry to the .dynamic table. */
4644 elf_add_dynamic_entry (info, tag, val)
4645 struct bfd_link_info *info;
4649 Elf_Internal_Dyn dyn;
4653 bfd_byte *newcontents;
4655 dynobj = elf_hash_table (info)->dynobj;
4657 s = bfd_get_section_by_name (dynobj, ".dynamic");
4658 BFD_ASSERT (s != NULL);
4660 newsize = s->_raw_size + sizeof (Elf_External_Dyn);
4661 if (s->contents == NULL)
4662 newcontents = (bfd_byte *) malloc (newsize);
4664 newcontents = (bfd_byte *) realloc (s->contents, newsize);
4665 if (newcontents == NULL)
4667 bfd_set_error (bfd_error_no_memory);
4672 dyn.d_un.d_val = val;
4673 elf_swap_dyn_out (dynobj, &dyn,
4674 (Elf_External_Dyn *) (newcontents + s->_raw_size));
4676 s->_raw_size = newsize;
4677 s->contents = newcontents;
4682 /* Record an assignment to a symbol made by a linker script. We need
4683 this in case some dynamic object refers to this symbol. */
4687 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name)
4689 struct bfd_link_info *info;
4692 struct elf_link_hash_entry *h;
4694 /* This is called after we have examined all the input objects. If
4695 the symbol does not exist, it merely means that no object refers
4696 to it, and we can just ignore it at this point. */
4697 h = elf_link_hash_lookup (elf_hash_table (info), name,
4698 false, false, false);
4702 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4704 if ((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
4705 | ELF_LINK_HASH_REF_DYNAMIC)) != 0
4706 && h->dynindx == -1)
4708 if (! elf_link_record_dynamic_symbol (info, h))
4711 /* If this is a weak defined symbol, and we know a corresponding
4712 real symbol from the same dynamic object, make sure the real
4713 symbol is also made into a dynamic symbol. */
4714 if (h->weakdef != NULL
4715 && h->weakdef->dynindx == -1)
4717 if (! elf_link_record_dynamic_symbol (info, h->weakdef))
4725 /* Array used to determine the number of hash table buckets to use
4726 based on the number of symbols there are. If there are fewer than
4727 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
4728 fewer than 37 we use 17 buckets, and so forth. We never use more
4729 than 521 buckets. */
4731 static const size_t elf_buckets[] =
4733 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 0
4736 /* Set up the sizes and contents of the ELF dynamic sections. This is
4737 called by the ELF linker emulation before_allocation routine. We
4738 must set the sizes of the sections before the linker sets the
4739 addresses of the various sections. */
4742 NAME(bfd_elf,size_dynamic_sections) (output_bfd, info)
4744 struct bfd_link_info *info;
4749 Elf_Internal_Sym isym;
4752 struct elf_backend_data *bed;
4754 dynobj = elf_hash_table (info)->dynobj;
4755 dynsymcount = elf_hash_table (info)->dynsymcount;
4757 /* If there were no dynamic objects in the link, there is nothing to
4762 /* Set the size of the .dynsym and .hash sections. We counted the
4763 number of dynamic symbols in elf_link_add_object_symbols. We
4764 will build the contents of .dynsym and .hash when we build the
4765 final symbol table, because until then we do not know the correct
4766 value to give the symbols. We built the .dynstr section as we
4767 went along in elf_link_add_object_symbols. */
4768 s = bfd_get_section_by_name (dynobj, ".dynsym");
4769 BFD_ASSERT (s != NULL);
4770 s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
4771 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
4772 if (s->contents == NULL && s->_raw_size != 0)
4774 bfd_set_error (bfd_error_no_memory);
4778 /* The first entry in .dynsym is a dummy symbol. */
4785 elf_swap_symbol_out (output_bfd, &isym,
4786 (Elf_External_Sym *) s->contents);
4788 for (i = 0; elf_buckets[i] != 0; i++)
4790 bucketcount = elf_buckets[i];
4791 if (dynsymcount < elf_buckets[i + 1])
4795 s = bfd_get_section_by_name (dynobj, ".hash");
4796 BFD_ASSERT (s != NULL);
4797 s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
4798 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
4799 if (s->contents == NULL)
4801 bfd_set_error (bfd_error_no_memory);
4804 memset (s->contents, 0, s->_raw_size);
4806 put_word (output_bfd, bucketcount, s->contents);
4807 put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
4809 elf_hash_table (info)->bucketcount = bucketcount;
4811 s = bfd_get_section_by_name (dynobj, ".dynstr");
4812 BFD_ASSERT (s != NULL);
4813 s->_raw_size = elf_hash_table (info)->dynstr->length;
4814 s->contents = (unsigned char *) elf_hash_table (info)->dynstr->tab;
4816 /* Find all symbols which were defined in a dynamic object and make
4817 the backend pick a reasonable value for them. */
4818 elf_link_hash_traverse (elf_hash_table (info),
4819 elf_adjust_dynamic_symbol,
4822 /* Add some entries to the .dynamic section. We fill in some of the
4823 values later, in elf_bfd_final_link, but we must add the entries
4824 now so that we know the final size of the .dynamic section. */
4825 if (bfd_get_section_by_name (output_bfd, ".init") != NULL)
4827 if (! elf_add_dynamic_entry (info, DT_INIT, 0))
4830 if (bfd_get_section_by_name (output_bfd, ".fini") != NULL)
4832 if (! elf_add_dynamic_entry (info, DT_FINI, 0))
4835 if (! elf_add_dynamic_entry (info, DT_HASH, 0)
4836 || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
4837 || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
4838 || ! elf_add_dynamic_entry (info, DT_STRSZ,
4839 elf_hash_table (info)->dynstr->length)
4840 || ! elf_add_dynamic_entry (info, DT_SYMENT,
4841 sizeof (Elf_External_Sym)))
4844 /* The backend must work out the sizes of all the other dynamic
4846 bed = get_elf_backend_data (output_bfd);
4847 if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
4850 return elf_add_dynamic_entry (info, DT_NULL, 0);
4853 /* Make the backend pick a good value for a dynamic symbol. This is
4854 called via elf_link_hash_traverse, and also calls itself
4858 elf_adjust_dynamic_symbol (h, data)
4859 struct elf_link_hash_entry *h;
4862 struct bfd_link_info *info = (struct bfd_link_info *) data;
4864 struct elf_backend_data *bed;
4866 /* If this symbol is not defined by a dynamic object, or is not
4867 referenced by a regular object, ignore it. FIXME: Do we need to
4868 worry about symbols which are defined by one dynamic object and
4869 referenced by another one? */
4870 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
4871 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
4872 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
4875 /* If we've already adjusted this symbol, don't do it again. This
4876 can happen via a recursive call. */
4877 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
4880 /* Don't look at this symbol again. Note that we must set this
4881 after checking the above conditions, because we may look at a
4882 symbol once, decide not to do anything, and then get called
4883 recursively later after REF_REGULAR is set below. */
4884 h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
4886 /* If this is a weak definition, and we know a real definition, and
4887 the real symbol is not itself defined by a regular object file,
4888 then get a good value for the real definition. We handle the
4889 real symbol first, for the convenience of the backend routine.
4891 Note that there is a confusing case here. If the real definition
4892 is defined by a regular object file, we don't get the real symbol
4893 from the dynamic object, but we do get the weak symbol. If the
4894 processor backend uses a COPY reloc, then if some routine in the
4895 dynamic object changes the real symbol, we will not see that
4896 change in the corresponding weak symbol. This is the way other
4897 ELF linkers work as well, and seems to be a result of the shared
4900 I will clarify this issue. Most SVR4 shared libraries define the
4901 variable _timezone and define timezone as a weak synonym. The
4902 tzset call changes _timezone. If you write
4903 extern int timezone;
4905 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
4906 you might expect that, since timezone is a synonym for _timezone,
4907 the same number will print both times. However, if the processor
4908 backend uses a COPY reloc, then actually timezone will be copied
4909 into your process image, and, since you define _timezone
4910 yourself, _timezone will not. Thus timezone and _timezone will
4911 wind up at different memory locations. The tzset call will set
4912 _timezone, leaving timezone unchanged. */
4914 if (h->weakdef != NULL)
4916 struct elf_link_hash_entry *weakdef;
4918 BFD_ASSERT (h->root.type == bfd_link_hash_defined);
4919 weakdef = h->weakdef;
4920 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined);
4921 BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
4922 if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
4923 || (weakdef->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
4925 /* This symbol is defined or referenced by a regular object
4926 file, so we will not do anything special. Clear weakdef
4927 for the convenience of the processor backend. */
4932 /* There is an implicit reference by a regular object file
4933 via the weak symbol. */
4934 weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
4935 if (! elf_adjust_dynamic_symbol (weakdef, (PTR) info))
4940 dynobj = elf_hash_table (info)->dynobj;
4941 bed = get_elf_backend_data (dynobj);
4942 if (! (*bed->elf_backend_adjust_dynamic_symbol) (info, h))
4944 /* FIXME: No way to return error. */
4951 /* Final phase of ELF linker. */
4953 /* A structure we use to avoid passing large numbers of arguments. */
4955 struct elf_final_link_info
4957 /* General link information. */
4958 struct bfd_link_info *info;
4961 /* Symbol string table. */
4962 struct strtab *symstrtab;
4963 /* .dynsym section. */
4964 asection *dynsym_sec;
4965 /* .hash section. */
4967 /* Buffer large enough to hold contents of any section. */
4969 /* Buffer large enough to hold external relocs of any section. */
4970 PTR external_relocs;
4971 /* Buffer large enough to hold internal relocs of any section. */
4972 Elf_Internal_Rela *internal_relocs;
4973 /* Buffer large enough to hold external local symbols of any input
4975 Elf_External_Sym *external_syms;
4976 /* Buffer large enough to hold internal local symbols of any input
4978 Elf_Internal_Sym *internal_syms;
4979 /* Array large enough to hold a symbol index for each local symbol
4980 of any input BFD. */
4982 /* Array large enough to hold a section pointer for each local
4983 symbol of any input BFD. */
4984 asection **sections;
4985 /* Buffer to hold swapped out symbols. */
4986 Elf_External_Sym *symbuf;
4987 /* Number of swapped out symbols in buffer. */
4988 size_t symbuf_count;
4989 /* Number of symbols which fit in symbuf. */
4993 static boolean elf_link_output_sym
4994 PARAMS ((struct elf_final_link_info *, const char *, Elf_Internal_Sym *));
4995 static boolean elf_link_flush_output_syms
4996 PARAMS ((struct elf_final_link_info *));
4997 static boolean elf_link_output_extsym
4998 PARAMS ((struct elf_link_hash_entry *, PTR));
4999 static boolean elf_link_input_bfd
5000 PARAMS ((struct elf_final_link_info *, bfd *));
5001 static boolean elf_reloc_link_order
5002 PARAMS ((bfd *, struct bfd_link_info *, asection *,
5003 struct bfd_link_order *));
5005 /* Do the final step of an ELF link. */
5008 elf_bfd_final_link (abfd, info)
5010 struct bfd_link_info *info;
5013 struct elf_final_link_info finfo;
5014 register asection *o;
5015 register struct bfd_link_order *p;
5017 size_t max_contents_size;
5018 size_t max_external_reloc_size;
5019 size_t max_internal_reloc_count;
5020 size_t max_sym_count;
5022 Elf_Internal_Sym elfsym;
5024 Elf_Internal_Shdr *symtab_hdr;
5025 Elf_Internal_Shdr *symstrtab_hdr;
5027 dynobj = elf_hash_table (info)->dynobj;
5030 finfo.output_bfd = abfd;
5031 finfo.symstrtab = bfd_new_strtab (abfd);
5032 if (finfo.symstrtab == NULL)
5036 finfo.dynsym_sec = NULL;
5037 finfo.hash_sec = NULL;
5041 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
5042 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
5043 if (finfo.dynsym_sec == NULL
5044 || finfo.hash_sec == NULL)
5047 finfo.contents = NULL;
5048 finfo.external_relocs = NULL;
5049 finfo.internal_relocs = NULL;
5050 finfo.external_syms = NULL;
5051 finfo.internal_syms = NULL;
5052 finfo.indices = NULL;
5053 finfo.sections = NULL;
5054 finfo.symbuf = NULL;
5055 finfo.symbuf_count = 0;
5057 /* Count up the number of relocations we will output for each output
5058 section, so that we know the sizes of the reloc sections. We
5059 also figure out some maximum sizes. */
5060 max_contents_size = 0;
5061 max_external_reloc_size = 0;
5062 max_internal_reloc_count = 0;
5064 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
5068 for (p = o->link_order_head; p != NULL; p = p->next)
5070 if (p->type == bfd_section_reloc_link_order
5071 || p->type == bfd_symbol_reloc_link_order)
5073 else if (p->type == bfd_indirect_link_order)
5077 sec = p->u.indirect.section;
5079 if (info->relocateable)
5080 o->reloc_count += sec->reloc_count;
5082 if (sec->_raw_size > max_contents_size)
5083 max_contents_size = sec->_raw_size;
5084 if (sec->_cooked_size > max_contents_size)
5085 max_contents_size = sec->_cooked_size;
5087 /* We are interested in just local symbols, not all
5089 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
5093 if (elf_bad_symtab (sec->owner))
5094 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
5095 / sizeof (Elf_External_Sym));
5097 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
5099 if (sym_count > max_sym_count)
5100 max_sym_count = sym_count;
5103 if ((sec->flags & SEC_RELOC) != 0)
5107 ext_size = elf_section_data (sec)->rel_hdr.sh_size;
5108 if (ext_size > max_external_reloc_size)
5109 max_external_reloc_size = ext_size;
5110 if (sec->reloc_count > max_internal_reloc_count)
5111 max_internal_reloc_count = sec->reloc_count;
5116 if (o->reloc_count > 0)
5117 o->flags |= SEC_RELOC;
5120 /* Explicitly clear the SEC_RELOC flag. The linker tends to
5121 set it (this is probably a bug) and if it is set
5122 assign_section_numbers will create a reloc section. */
5123 o->flags &=~ SEC_RELOC;
5127 /* Figure out the file positions for everything but the symbol table
5128 and the relocs. We set symcount to force assign_section_numbers
5129 to create a symbol table. */
5130 abfd->symcount = info->strip == strip_all ? 0 : 1;
5131 BFD_ASSERT (! abfd->output_has_begun);
5132 if (! elf_compute_section_file_positions (abfd, info))
5135 /* That created the reloc sections. Set their sizes, and assign
5136 them file positions, and allocate some buffers. */
5137 for (o = abfd->sections; o != NULL; o = o->next)
5139 if ((o->flags & SEC_RELOC) != 0)
5141 Elf_Internal_Shdr *rel_hdr;
5142 register struct elf_link_hash_entry **p, **pend;
5144 rel_hdr = &elf_section_data (o)->rel_hdr;
5146 rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
5148 /* The contents field must last into write_object_contents,
5149 so we allocate it with bfd_alloc rather than malloc. */
5150 rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
5151 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
5153 bfd_set_error (bfd_error_no_memory);
5157 p = ((struct elf_link_hash_entry **)
5158 malloc (o->reloc_count
5159 * sizeof (struct elf_link_hash_entry *)));
5160 if (p == NULL && o->reloc_count != 0)
5162 bfd_set_error (bfd_error_no_memory);
5165 elf_section_data (o)->rel_hashes = p;
5166 pend = p + o->reloc_count;
5167 for (; p < pend; p++)
5170 /* Use the reloc_count field as an index when outputting the
5176 assign_file_positions_for_relocs (abfd);
5178 /* We have now assigned file positions for all the sections except
5179 .symtab and .strtab. We start the .symtab section at the current
5180 file position, and write directly to it. We build the .strtab
5181 section in memory. When we add .dynsym support, we will build
5182 that in memory as well (.dynsym is smaller than .symtab). */
5184 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5185 /* sh_name is set in prep_headers. */
5186 symtab_hdr->sh_type = SHT_SYMTAB;
5187 symtab_hdr->sh_flags = 0;
5188 symtab_hdr->sh_addr = 0;
5189 symtab_hdr->sh_size = 0;
5190 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
5191 /* sh_link is set in assign_section_numbers. */
5192 /* sh_info is set below. */
5193 /* sh_offset is set just below. */
5194 symtab_hdr->sh_addralign = 4; /* FIXME: system dependent? */
5196 off = elf_tdata (abfd)->next_file_pos;
5197 off = assign_file_position_for_section (symtab_hdr, off, true);
5199 /* Note that at this point elf_tdata (abfd)->next_file_pos is
5200 incorrect. We do not yet know the size of the .symtab section.
5201 We correct next_file_pos below, after we do know the size. */
5203 /* Allocate a buffer to hold swapped out symbols. This is to avoid
5204 continuously seeking to the right position in the file. */
5205 if (! info->keep_memory || max_sym_count < 20)
5206 finfo.symbuf_size = 20;
5208 finfo.symbuf_size = max_sym_count;
5209 finfo.symbuf = ((Elf_External_Sym *)
5210 malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
5211 if (finfo.symbuf == NULL)
5213 bfd_set_error (bfd_error_no_memory);
5217 /* Start writing out the symbol table. The first symbol is always a
5219 elfsym.st_value = 0;
5222 elfsym.st_other = 0;
5223 elfsym.st_shndx = SHN_UNDEF;
5224 if (! elf_link_output_sym (&finfo, (const char *) NULL, &elfsym))
5228 /* Some standard ELF linkers do this, but we don't because it causes
5229 bootstrap comparison failures. */
5230 /* Output a file symbol for the output file as the second symbol.
5231 We output this even if we are discarding local symbols, although
5232 I'm not sure if this is correct. */
5233 elfsym.st_value = 0;
5235 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
5236 elfsym.st_other = 0;
5237 elfsym.st_shndx = SHN_ABS;
5238 if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd), &elfsym))
5242 /* Output a symbol for each section. We output these even if we are
5243 discarding local symbols, since they are used for relocs. These
5244 symbols have no names. We store the index of each one in the
5245 index field of the section, so that we can find it again when
5246 outputting relocs. */
5247 elfsym.st_value = 0;
5249 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
5250 elfsym.st_other = 0;
5251 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
5253 o = section_from_elf_index (abfd, i);
5254 if (o != &bfd_abs_section)
5255 o->target_index = abfd->symcount;
5256 elfsym.st_shndx = i;
5257 if (! elf_link_output_sym (&finfo, (const char *) NULL, &elfsym))
5261 /* Allocate some memory to hold information read in from the input
5263 finfo.contents = (bfd_byte *) malloc (max_contents_size);
5264 finfo.external_relocs = (PTR) malloc (max_external_reloc_size);
5265 finfo.internal_relocs = ((Elf_Internal_Rela *)
5266 malloc (max_internal_reloc_count
5267 * sizeof (Elf_Internal_Rela)));
5268 finfo.external_syms = ((Elf_External_Sym *)
5269 malloc (max_sym_count * sizeof (Elf_External_Sym)));
5270 finfo.internal_syms = ((Elf_Internal_Sym *)
5271 malloc (max_sym_count * sizeof (Elf_Internal_Sym)));
5272 finfo.indices = (long *) malloc (max_sym_count * sizeof (long));
5273 finfo.sections = (asection **) malloc (max_sym_count * sizeof (asection *));
5274 if ((finfo.contents == NULL && max_contents_size != 0)
5275 || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
5276 || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
5277 || (finfo.external_syms == NULL && max_sym_count != 0)
5278 || (finfo.internal_syms == NULL && max_sym_count != 0)
5279 || (finfo.indices == NULL && max_sym_count != 0)
5280 || (finfo.sections == NULL && max_sym_count != 0))
5282 bfd_set_error (bfd_error_no_memory);
5286 /* Since ELF permits relocations to be against local symbols, we
5287 must have the local symbols available when we do the relocations.
5288 Since we would rather only read the local symbols once, and we
5289 would rather not keep them in memory, we handle all the
5290 relocations for a single input file at the same time.
5292 Unfortunately, there is no way to know the total number of local
5293 symbols until we have seen all of them, and the local symbol
5294 indices precede the global symbol indices. This means that when
5295 we are generating relocateable output, and we see a reloc against
5296 a global symbol, we can not know the symbol index until we have
5297 finished examining all the local symbols to see which ones we are
5298 going to output. To deal with this, we keep the relocations in
5299 memory, and don't output them until the end of the link. This is
5300 an unfortunate waste of memory, but I don't see a good way around
5301 it. Fortunately, it only happens when performing a relocateable
5302 link, which is not the common case. FIXME: If keep_memory is set
5303 we could write the relocs out and then read them again; I don't
5304 know how bad the memory loss will be. */
5306 for (sub = info->input_bfds; sub != NULL; sub = sub->next)
5307 sub->output_has_begun = false;
5308 for (o = abfd->sections; o != NULL; o = o->next)
5310 for (p = o->link_order_head; p != NULL; p = p->next)
5312 if (p->type == bfd_indirect_link_order
5313 && (bfd_get_flavour (p->u.indirect.section->owner)
5314 == bfd_target_elf_flavour))
5316 sub = p->u.indirect.section->owner;
5317 if (! sub->output_has_begun)
5319 if (! elf_link_input_bfd (&finfo, sub))
5321 sub->output_has_begun = true;
5324 else if (p->type == bfd_section_reloc_link_order
5325 || p->type == bfd_symbol_reloc_link_order)
5327 if (! elf_reloc_link_order (abfd, info, o, p))
5332 if (! _bfd_default_link_order (abfd, info, o, p))
5338 /* That wrote out all the local symbols. Finish up the symbol table
5339 with the global symbols. */
5341 /* The sh_info field records the index of the first non local
5343 symtab_hdr->sh_info = abfd->symcount;
5345 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
5347 /* We get the global symbols from the hash table. */
5348 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
5351 /* Flush all symbols to the file. */
5352 if (! elf_link_flush_output_syms (&finfo))
5355 /* Now we know the size of the symtab section. */
5356 off += symtab_hdr->sh_size;
5358 /* Finish up the symbol string table (.strtab) section. */
5359 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
5360 /* sh_name was set in prep_headers. */
5361 symstrtab_hdr->sh_type = SHT_STRTAB;
5362 symstrtab_hdr->sh_flags = 0;
5363 symstrtab_hdr->sh_addr = 0;
5364 symstrtab_hdr->sh_size = finfo.symstrtab->length;
5365 symstrtab_hdr->sh_entsize = 0;
5366 symstrtab_hdr->sh_link = 0;
5367 symstrtab_hdr->sh_info = 0;
5368 /* sh_offset is set just below. */
5369 symstrtab_hdr->sh_addralign = 1;
5370 symstrtab_hdr->contents = (PTR) finfo.symstrtab->tab;
5372 off = assign_file_position_for_section (symstrtab_hdr, off, true);
5373 elf_tdata (abfd)->next_file_pos = off;
5375 /* Adjust the relocs to have the correct symbol indices. */
5376 for (o = abfd->sections; o != NULL; o = o->next)
5378 struct elf_link_hash_entry **rel_hash;
5379 Elf_Internal_Shdr *rel_hdr;
5381 if ((o->flags & SEC_RELOC) == 0)
5384 rel_hash = elf_section_data (o)->rel_hashes;
5385 rel_hdr = &elf_section_data (o)->rel_hdr;
5386 for (i = 0; i < o->reloc_count; i++, rel_hash++)
5388 if (*rel_hash == NULL)
5391 BFD_ASSERT ((*rel_hash)->indx >= 0);
5393 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
5395 Elf_External_Rel *erel;
5396 Elf_Internal_Rel irel;
5398 erel = (Elf_External_Rel *) rel_hdr->contents + i;
5399 elf_swap_reloc_in (abfd, erel, &irel);
5400 irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
5401 ELF_R_TYPE (irel.r_info));
5402 elf_swap_reloc_out (abfd, &irel, erel);
5406 Elf_External_Rela *erela;
5407 Elf_Internal_Rela irela;
5409 BFD_ASSERT (rel_hdr->sh_entsize
5410 == sizeof (Elf_External_Rela));
5412 erela = (Elf_External_Rela *) rel_hdr->contents + i;
5413 elf_swap_reloca_in (abfd, erela, &irela);
5414 irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
5415 ELF_R_TYPE (irela.r_info));
5416 elf_swap_reloca_out (abfd, &irela, erela);
5420 /* Set the reloc_count field to 0 to prevent write_relocs from
5421 trying to swap the relocs out itself. */
5425 /* If we are linking against a dynamic object, finish up the dynamic
5426 linking information. */
5429 Elf_External_Dyn *dyncon, *dynconend;
5430 struct elf_backend_data *bed;
5432 /* Fix up .dynamic entries. */
5433 o = bfd_get_section_by_name (dynobj, ".dynamic");
5434 BFD_ASSERT (o != NULL);
5436 dyncon = (Elf_External_Dyn *) o->contents;
5437 dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
5438 for (; dyncon < dynconend; dyncon++)
5440 Elf_Internal_Dyn dyn;
5444 elf_swap_dyn_in (dynobj, dyncon, &dyn);
5466 o = bfd_get_section_by_name (abfd, name);
5467 BFD_ASSERT (o != NULL);
5468 dyn.d_un.d_ptr = o->vma;
5469 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5476 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
5481 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
5483 Elf_Internal_Shdr *hdr;
5485 hdr = elf_elfsections (abfd)[i];
5486 if (hdr->sh_type == type
5487 && (hdr->sh_flags & SHF_ALLOC) != 0)
5489 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
5490 dyn.d_un.d_val += hdr->sh_size;
5493 if (dyn.d_un.d_val == 0
5494 || hdr->sh_addr < dyn.d_un.d_val)
5495 dyn.d_un.d_val = hdr->sh_addr;
5499 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5504 bed = get_elf_backend_data (abfd);
5505 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
5508 for (o = dynobj->sections; o != NULL; o = o->next)
5510 if ((o->flags & SEC_HAS_CONTENTS) == 0)
5512 BFD_ASSERT ((o->flags & SEC_IN_MEMORY) != 0);
5513 if (! bfd_set_section_contents (abfd, o->output_section,
5514 o->contents, o->output_offset,
5520 if (finfo.contents != NULL)
5521 free (finfo.contents);
5522 if (finfo.external_relocs != NULL)
5523 free (finfo.external_relocs);
5524 if (finfo.internal_relocs != NULL)
5525 free (finfo.internal_relocs);
5526 if (finfo.external_syms != NULL)
5527 free (finfo.external_syms);
5528 if (finfo.internal_syms != NULL)
5529 free (finfo.internal_syms);
5530 if (finfo.indices != NULL)
5531 free (finfo.indices);
5532 if (finfo.sections != NULL)
5533 free (finfo.sections);
5534 if (finfo.symbuf != NULL)
5535 free (finfo.symbuf);
5536 for (o = abfd->sections; o != NULL; o = o->next)
5538 if ((o->flags & SEC_RELOC) != 0
5539 && elf_section_data (o)->rel_hashes != NULL)
5540 free (elf_section_data (o)->rel_hashes);
5546 if (finfo.contents != NULL)
5547 free (finfo.contents);
5548 if (finfo.external_relocs != NULL)
5549 free (finfo.external_relocs);
5550 if (finfo.internal_relocs != NULL)
5551 free (finfo.internal_relocs);
5552 if (finfo.external_syms != NULL)
5553 free (finfo.external_syms);
5554 if (finfo.internal_syms != NULL)
5555 free (finfo.internal_syms);
5556 if (finfo.indices != NULL)
5557 free (finfo.indices);
5558 if (finfo.sections != NULL)
5559 free (finfo.sections);
5560 if (finfo.symbuf != NULL)
5561 free (finfo.symbuf);
5562 for (o = abfd->sections; o != NULL; o = o->next)
5564 if ((o->flags & SEC_RELOC) != 0
5565 && elf_section_data (o)->rel_hashes != NULL)
5566 free (elf_section_data (o)->rel_hashes);
5572 /* Add a symbol to the output symbol table. */
5575 elf_link_output_sym (finfo, name, elfsym)
5576 struct elf_final_link_info *finfo;
5578 Elf_Internal_Sym *elfsym;
5580 if (name == (const char *) NULL || *name == '\0')
5581 elfsym->st_name = 0;
5584 elfsym->st_name = bfd_add_to_strtab (finfo->output_bfd,
5585 finfo->symstrtab, name);
5586 if (elfsym->st_name == (unsigned long) -1)
5590 if (finfo->symbuf_count >= finfo->symbuf_size)
5592 if (! elf_link_flush_output_syms (finfo))
5596 elf_swap_symbol_out (finfo->output_bfd, elfsym,
5597 finfo->symbuf + finfo->symbuf_count);
5598 ++finfo->symbuf_count;
5600 ++finfo->output_bfd->symcount;
5605 /* Flush the output symbols to the file. */
5608 elf_link_flush_output_syms (finfo)
5609 struct elf_final_link_info *finfo;
5611 Elf_Internal_Shdr *symtab;
5613 symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
5615 if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
5617 || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
5618 sizeof (Elf_External_Sym), finfo->output_bfd)
5619 != finfo->symbuf_count * sizeof (Elf_External_Sym)))
5622 symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
5624 finfo->symbuf_count = 0;
5629 /* Add an external symbol to the symbol table. This is called from
5630 the hash table traversal routine. */
5633 elf_link_output_extsym (h, data)
5634 struct elf_link_hash_entry *h;
5637 struct elf_final_link_info *finfo = (struct elf_final_link_info *) data;
5639 Elf_Internal_Sym sym;
5641 /* We don't want to output symbols that have never been mentioned by
5642 a regular file, or that we have been told to strip. However, if
5643 h->indx is set to -2, the symbol is used by a reloc and we must
5647 else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
5648 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
5649 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
5650 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
5652 else if (finfo->info->strip == strip_all
5653 || (finfo->info->strip == strip_some
5654 && bfd_hash_lookup (finfo->info->keep_hash,
5655 h->root.root.string,
5656 false, false) == NULL))
5661 /* If we're stripping it, and it's not a dynamic symbol, there's
5662 nothing else to do. */
5663 if (strip && h->dynindx == -1)
5667 sym.st_size = h->size;
5668 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
5671 switch (h->root.type)
5674 case bfd_link_hash_new:
5678 case bfd_link_hash_undefined:
5679 sym.st_shndx = SHN_UNDEF;
5682 case bfd_link_hash_weak:
5683 sym.st_shndx = SHN_UNDEF;
5684 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
5687 case bfd_link_hash_defined:
5691 sec = h->root.u.def.section;
5692 if (sec->output_section != NULL)
5694 sym.st_shndx = elf_section_from_bfd_section (finfo->output_bfd,
5695 sec->output_section);
5696 if (sym.st_shndx == (unsigned short) -1)
5698 /* FIXME: No way to handle errors. */
5702 /* ELF symbols in relocateable files are section relative,
5703 but in nonrelocateable files they are virtual
5705 sym.st_value = h->root.u.def.value + sec->output_offset;
5706 if (! finfo->info->relocateable)
5707 sym.st_value += sec->output_section->vma;
5711 BFD_ASSERT (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
5712 && elf_elfheader (sec->owner)->e_type == ET_DYN);
5713 sym.st_shndx = SHN_UNDEF;
5718 case bfd_link_hash_common:
5719 sym.st_shndx = SHN_COMMON;
5723 sym.st_value = h->align;
5726 case bfd_link_hash_indirect:
5727 case bfd_link_hash_warning:
5728 /* I have no idea how these should be handled. */
5732 /* If this symbol should be put in the .dynsym section, then put it
5733 there now. We have already know the symbol index. We also fill
5734 in the entry in the .hash section. */
5735 if (h->dynindx != -1)
5737 struct elf_backend_data *bed;
5740 bfd_byte *bucketpos;
5743 sym.st_name = h->dynstr_index;
5745 /* Give the processor backend a chance to tweak the symbol
5746 value, and also to finish up anything that needs to be done
5748 bed = get_elf_backend_data (finfo->output_bfd);
5749 if (! ((*bed->elf_backend_finish_dynamic_symbol)
5750 (finfo->output_bfd, finfo->info, h, &sym)))
5752 /* FIXME: No way to return error. */
5756 elf_swap_symbol_out (finfo->output_bfd, &sym,
5757 ((Elf_External_Sym *) finfo->dynsym_sec->contents
5760 bucketcount = elf_hash_table (finfo->info)->bucketcount;
5761 bucket = bfd_elf_hash (h->root.root.string) % bucketcount;
5762 bucketpos = ((bfd_byte *) finfo->hash_sec->contents
5763 + (bucket + 2) * (ARCH_SIZE / 8));
5764 chain = get_word (finfo->output_bfd, bucketpos);
5765 put_word (finfo->output_bfd, h->dynindx, bucketpos);
5766 put_word (finfo->output_bfd, chain,
5767 ((bfd_byte *) finfo->hash_sec->contents
5768 + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
5771 /* If we're stripping it, then it was just a dynamic symbol, and
5772 there's nothing else to do. */
5776 h->indx = finfo->output_bfd->symcount;
5778 if (! elf_link_output_sym (finfo, h->root.root.string, &sym))
5780 /* FIXME: No way to return error. */
5787 /* Link an input file into the linker output file. This function
5788 handles all the sections and relocations of the input file at once.
5789 This is so that we only have to read the local symbols once, and
5790 don't have to keep them in memory. */
5793 elf_link_input_bfd (finfo, input_bfd)
5794 struct elf_final_link_info *finfo;
5797 boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
5798 bfd *, asection *, bfd_byte *,
5799 Elf_Internal_Rela *,
5803 Elf_Internal_Shdr *symtab_hdr;
5806 Elf_External_Sym *esym;
5807 Elf_External_Sym *esymend;
5808 Elf_Internal_Sym *isym;
5810 asection **ppsection;
5813 output_bfd = finfo->output_bfd;
5815 get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
5817 /* If this is a dynamic object, we don't want to do anything here:
5818 we don't want the local symbols, and we don't want the section
5820 if (elf_elfheader (input_bfd)->e_type == ET_DYN)
5823 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5824 if (elf_bad_symtab (input_bfd))
5826 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
5831 locsymcount = symtab_hdr->sh_info;
5832 extsymoff = symtab_hdr->sh_info;
5835 /* Read the local symbols. */
5836 if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
5837 || (bfd_read (finfo->external_syms, sizeof (Elf_External_Sym),
5838 locsymcount, input_bfd)
5839 != locsymcount * sizeof (Elf_External_Sym)))
5842 /* Swap in the local symbols and write out the ones which we know
5843 are going into the output file. */
5844 esym = finfo->external_syms;
5845 esymend = esym + locsymcount;
5846 isym = finfo->internal_syms;
5847 pindex = finfo->indices;
5848 ppsection = finfo->sections;
5849 for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
5855 elf_swap_symbol_in (input_bfd, esym, isym);
5858 if (elf_bad_symtab (input_bfd))
5860 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
5867 if (isym->st_shndx == SHN_UNDEF)
5868 isec = &bfd_und_section;
5869 else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
5871 isec = section_from_elf_index (input_bfd, isym->st_shndx);
5875 else if (isym->st_shndx == SHN_ABS)
5876 isec = &bfd_abs_section;
5877 else if (isym->st_shndx == SHN_COMMON)
5878 isec = &bfd_com_section;
5887 /* Don't output the first, undefined, symbol. */
5888 if (esym == finfo->external_syms)
5891 /* If we are stripping all symbols, we don't want to output this
5893 if (finfo->info->strip == strip_all)
5896 /* We never output section symbols. Instead, we use the section
5897 symbol of the corresponding section in the output file. */
5898 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
5901 /* If we are discarding all local symbols, we don't want to
5902 output this one. If we are generating a relocateable output
5903 file, then some of the local symbols may be required by
5904 relocs; we output them below as we discover that they are
5906 if (finfo->info->discard == discard_all)
5909 /* Get the name of the symbol. */
5910 name = elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
5915 /* See if we are discarding symbols with this name. */
5916 if ((finfo->info->strip == strip_some
5917 && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
5919 || (finfo->info->discard == discard_l
5920 && strncmp (name, finfo->info->lprefix,
5921 finfo->info->lprefix_len) == 0))
5924 /* If we get here, we are going to output this symbol. */
5926 /* Adjust the section index for the output file. */
5927 isym->st_shndx = elf_section_from_bfd_section (output_bfd,
5928 isec->output_section);
5929 if (isym->st_shndx == (unsigned short) -1)
5932 *pindex = output_bfd->symcount;
5934 /* ELF symbols in relocateable files are section relative, but
5935 in executable files they are virtual addresses. Note that
5936 this code assumes that all ELF sections have an associated
5937 BFD section with a reasonable value for output_offset; below
5938 we assume that they also have a reasonable value for
5939 output_section. Any special sections must be set up to meet
5940 these requirements. */
5941 oldval = isym->st_value;
5942 isym->st_value += isec->output_offset;
5943 if (! finfo->info->relocateable)
5944 isym->st_value += isec->output_section->vma;
5946 if (! elf_link_output_sym (finfo, name, isym))
5949 /* Restore the old value for reloc handling. */
5950 isym->st_value = oldval;
5953 /* Relocate the contents of each section. */
5954 for (o = input_bfd->sections; o != NULL; o = o->next)
5956 Elf_Internal_Shdr *input_rel_hdr;
5958 if ((o->flags & SEC_HAS_CONTENTS) == 0)
5961 /* Read the contents of the section. */
5962 if (! bfd_get_section_contents (input_bfd, o, finfo->contents,
5963 (file_ptr) 0, o->_raw_size))
5966 if ((o->flags & SEC_RELOC) != 0)
5968 /* Read in the relocs. */
5969 input_rel_hdr = &elf_section_data (o)->rel_hdr;
5970 if (bfd_seek (input_bfd, input_rel_hdr->sh_offset, SEEK_SET) != 0
5971 || bfd_read (finfo->external_relocs, 1, input_rel_hdr->sh_size,
5972 input_bfd) != input_rel_hdr->sh_size)
5975 /* Swap in the relocs. For convenience, we always produce
5976 an Elf_Internal_Rela array; if the relocs are Rel, we set
5978 if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
5980 Elf_External_Rel *erel;
5981 Elf_External_Rel *erelend;
5982 Elf_Internal_Rela *irela;
5984 erel = (Elf_External_Rel *) finfo->external_relocs;
5985 erelend = erel + o->reloc_count;
5986 irela = finfo->internal_relocs;
5987 for (; erel < erelend; erel++, irela++)
5989 Elf_Internal_Rel irel;
5991 elf_swap_reloc_in (input_bfd, erel, &irel);
5992 irela->r_offset = irel.r_offset;
5993 irela->r_info = irel.r_info;
5994 irela->r_addend = 0;
5999 Elf_External_Rela *erela;
6000 Elf_External_Rela *erelaend;
6001 Elf_Internal_Rela *irela;
6003 BFD_ASSERT (input_rel_hdr->sh_entsize
6004 == sizeof (Elf_External_Rela));
6006 erela = (Elf_External_Rela *) finfo->external_relocs;
6007 erelaend = erela + o->reloc_count;
6008 irela = finfo->internal_relocs;
6009 for (; erela < erelaend; erela++, irela++)
6010 elf_swap_reloca_in (input_bfd, erela, irela);
6013 /* Relocate the section by invoking a back end routine.
6015 The back end routine is responsible for adjusting the
6016 section contents as necessary, and (if using Rela relocs
6017 and generating a relocateable output file) adjusting the
6018 reloc addend as necessary.
6020 The back end routine does not have to worry about setting
6021 the reloc address or the reloc symbol index.
6023 The back end routine is given a pointer to the swapped in
6024 internal symbols, and can access the hash table entries
6025 for the external symbols via elf_sym_hashes (input_bfd).
6027 When generating relocateable output, the back end routine
6028 must handle STB_LOCAL/STT_SECTION symbols specially. The
6029 output symbol is going to be a section symbol
6030 corresponding to the output section, which will require
6031 the addend to be adjusted. */
6033 if (! (*relocate_section) (output_bfd, finfo->info,
6036 finfo->internal_relocs,
6037 finfo->internal_syms,
6041 if (finfo->info->relocateable)
6043 Elf_Internal_Rela *irela;
6044 Elf_Internal_Rela *irelaend;
6045 struct elf_link_hash_entry **rel_hash;
6046 Elf_Internal_Shdr *output_rel_hdr;
6048 /* Adjust the reloc addresses and symbol indices. */
6050 irela = finfo->internal_relocs;
6051 irelaend = irela + o->reloc_count;
6052 rel_hash = (elf_section_data (o->output_section)->rel_hashes
6053 + o->output_section->reloc_count);
6054 for (; irela < irelaend; irela++, rel_hash++)
6057 Elf_Internal_Sym *isym;
6060 irela->r_offset += o->output_offset;
6062 r_symndx = ELF_R_SYM (irela->r_info);
6067 if (r_symndx >= locsymcount
6068 || (elf_bad_symtab (input_bfd)
6069 && finfo->sections[r_symndx] == NULL))
6073 /* This is a reloc against a global symbol. We
6074 have not yet output all the local symbols, so
6075 we do not know the symbol index of any global
6076 symbol. We set the rel_hash entry for this
6077 reloc to point to the global hash table entry
6078 for this symbol. The symbol index is then
6079 set at the end of elf_bfd_final_link. */
6080 indx = r_symndx - extsymoff;
6081 *rel_hash = elf_sym_hashes (input_bfd)[indx];
6083 /* Setting the index to -2 tells
6084 elf_link_output_extsym that this symbol is
6086 BFD_ASSERT ((*rel_hash)->indx < 0);
6087 (*rel_hash)->indx = -2;
6092 /* This is a reloc against a local symbol. */
6095 isym = finfo->internal_syms + r_symndx;
6096 sec = finfo->sections[r_symndx];
6097 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6099 /* I suppose the backend ought to fill in the
6100 section of any STT_SECTION symbol against a
6101 processor specific section. */
6103 || sec == &bfd_und_section
6104 || sec == &bfd_com_section)
6106 bfd_set_error (bfd_error_bad_value);
6109 else if (sec == &bfd_abs_section)
6113 r_symndx = sec->output_section->target_index;
6120 if (finfo->indices[r_symndx] == -1)
6126 if (finfo->info->strip == strip_all)
6128 /* You can't do ld -r -s. */
6129 bfd_set_error (bfd_error_invalid_operation);
6133 /* This symbol was skipped earlier, but
6134 since it is needed by a reloc, we
6135 must output it now. */
6136 link = symtab_hdr->sh_link;
6137 name = elf_string_from_elf_section (input_bfd,
6143 osec = sec->output_section;
6145 elf_section_from_bfd_section (output_bfd,
6147 if (isym->st_shndx == (unsigned short) -1)
6150 isym->st_value += sec->output_offset;
6151 if (! finfo->info->relocateable)
6152 isym->st_value += osec->vma;
6154 finfo->indices[r_symndx] = output_bfd->symcount;
6156 if (! elf_link_output_sym (finfo, name, isym))
6160 r_symndx = finfo->indices[r_symndx];
6163 irela->r_info = ELF_R_INFO (r_symndx,
6164 ELF_R_TYPE (irela->r_info));
6167 /* Swap out the relocs. */
6168 output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
6169 BFD_ASSERT (output_rel_hdr->sh_entsize
6170 == input_rel_hdr->sh_entsize);
6171 irela = finfo->internal_relocs;
6172 irelaend = irela + o->reloc_count;
6173 if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
6175 Elf_External_Rel *erel;
6177 erel = ((Elf_External_Rel *) output_rel_hdr->contents
6178 + o->output_section->reloc_count);
6179 for (; irela < irelaend; irela++, erel++)
6181 Elf_Internal_Rel irel;
6183 irel.r_offset = irela->r_offset;
6184 irel.r_info = irela->r_info;
6185 BFD_ASSERT (irela->r_addend == 0);
6186 elf_swap_reloc_out (output_bfd, &irel, erel);
6191 Elf_External_Rela *erela;
6193 BFD_ASSERT (input_rel_hdr->sh_entsize
6194 == sizeof (Elf_External_Rela));
6195 erela = ((Elf_External_Rela *) output_rel_hdr->contents
6196 + o->output_section->reloc_count);
6197 for (; irela < irelaend; irela++, erela++)
6198 elf_swap_reloca_out (output_bfd, irela, erela);
6201 o->output_section->reloc_count += o->reloc_count;
6205 /* Write out the modified section contents. */
6206 if (! bfd_set_section_contents (output_bfd, o->output_section,
6207 finfo->contents, o->output_offset,
6208 (o->_cooked_size != 0
6217 /* Generate a reloc when linking an ELF file. This is a reloc
6218 requested by the linker, and does come from any input file. This
6219 is used to build constructor and destructor tables when linking
6223 elf_reloc_link_order (output_bfd, info, output_section, link_order)
6225 struct bfd_link_info *info;
6226 asection *output_section;
6227 struct bfd_link_order *link_order;
6229 const reloc_howto_type *howto;
6232 struct elf_link_hash_entry **rel_hash_ptr;
6233 Elf_Internal_Shdr *rel_hdr;
6235 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
6238 bfd_set_error (bfd_error_bad_value);
6242 /* If this is an inplace reloc, we must write the addend into the
6244 if (howto->partial_inplace
6245 && link_order->u.reloc.p->addend != 0)
6248 bfd_reloc_status_type rstat;
6252 size = bfd_get_reloc_size (howto);
6253 buf = (bfd_byte *) bfd_zmalloc (size);
6254 if (buf == (bfd_byte *) NULL)
6256 bfd_set_error (bfd_error_no_memory);
6259 rstat = _bfd_relocate_contents (howto, output_bfd,
6260 link_order->u.reloc.p->addend, buf);
6266 case bfd_reloc_outofrange:
6268 case bfd_reloc_overflow:
6269 if (! ((*info->callbacks->reloc_overflow)
6271 (link_order->type == bfd_section_reloc_link_order
6272 ? bfd_section_name (output_bfd,
6273 link_order->u.reloc.p->u.section)
6274 : link_order->u.reloc.p->u.name),
6275 howto->name, link_order->u.reloc.p->addend,
6276 (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
6283 ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
6284 (file_ptr) link_order->offset, size);
6290 /* Figure out the symbol index. */
6291 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
6292 + output_section->reloc_count);
6293 if (link_order->type == bfd_section_reloc_link_order)
6295 indx = link_order->u.reloc.p->u.section->target_index;
6298 *rel_hash_ptr = NULL;
6302 struct elf_link_hash_entry *h;
6304 h = elf_link_hash_lookup (elf_hash_table (info),
6305 link_order->u.reloc.p->u.name,
6306 false, false, true);
6309 /* Setting the index to -2 tells elf_link_output_extsym that
6310 this symbol is used by a reloc. */
6317 if (! ((*info->callbacks->unattached_reloc)
6318 (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
6319 (asection *) NULL, (bfd_vma) 0)))
6325 /* The address of a reloc is relative to the section in a
6326 relocateable file, and is a virtual address in an executable
6328 offset = link_order->offset;
6329 if (! info->relocateable)
6330 offset += output_section->vma;
6332 rel_hdr = &elf_section_data (output_section)->rel_hdr;
6334 if (rel_hdr->sh_type == SHT_REL)
6336 Elf_Internal_Rel irel;
6337 Elf_External_Rel *erel;
6339 irel.r_offset = offset;
6340 irel.r_info = ELF_R_INFO (indx, howto->type);
6341 erel = ((Elf_External_Rel *) rel_hdr->contents
6342 + output_section->reloc_count);
6343 elf_swap_reloc_out (output_bfd, &irel, erel);
6347 Elf_Internal_Rela irela;
6348 Elf_External_Rela *erela;
6350 irela.r_offset = offset;
6351 irela.r_info = ELF_R_INFO (indx, howto->type);
6352 irela.r_addend = link_order->u.reloc.p->addend;
6353 erela = ((Elf_External_Rela *) rel_hdr->contents
6354 + output_section->reloc_count);
6355 elf_swap_reloca_out (output_bfd, &irela, erela);
6358 ++output_section->reloc_count;