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