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