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