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