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