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