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