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