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