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