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