1 /* ELF executable support for BFD.
2 Copyright 1991, 1992, 1993 Free Software Foundation, Inc.
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.
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.
16 This file is part of BFD, the Binary File Descriptor library.
18 This program is free software; you can redistribute it and/or modify
19 it under the terms of the GNU General Public License as published by
20 the Free Software Foundation; either version 2 of the License, or
21 (at your option) any later version.
23 This program is distributed in the hope that it will be useful,
24 but WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 GNU General Public License for more details.
28 You should have received a copy of the GNU General Public License
29 along with this program; if not, write to the Free Software
30 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
32 /* Problems and other issues to resolve.
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.
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
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)
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
57 (3) ELF section symbols are handled rather sloppily now. This should
58 be cleaned up, and ELF section symbols reconciled with BFD section
63 #include <string.h> /* For strrchr and friends */
73 /* Renaming structures, typedefs, macros and functions to be size-specific. */
74 #define Elf_External_Ehdr NAME(Elf,External_Ehdr)
75 #define Elf_External_Sym NAME(Elf,External_Sym)
76 #define Elf_External_Shdr NAME(Elf,External_Shdr)
77 #define Elf_External_Phdr NAME(Elf,External_Phdr)
78 #define Elf_External_Rel NAME(Elf,External_Rel)
79 #define Elf_External_Rela NAME(Elf,External_Rela)
81 #define elf_core_file_failing_command NAME(bfd_elf,core_file_failing_command)
82 #define elf_core_file_failing_signal NAME(bfd_elf,core_file_failing_signal)
83 #define elf_core_file_matches_executable_p NAME(bfd_elf,core_file_matches_executable_p)
84 #define elf_object_p NAME(bfd_elf,object_p)
85 #define elf_core_file_p NAME(bfd_elf,core_file_p)
86 #define elf_get_symtab_upper_bound NAME(bfd_elf,get_symtab_upper_bound)
87 #define elf_get_reloc_upper_bound NAME(bfd_elf,get_reloc_upper_bound)
88 #define elf_canonicalize_reloc NAME(bfd_elf,canonicalize_reloc)
89 #define elf_get_symtab NAME(bfd_elf,get_symtab)
90 #define elf_make_empty_symbol NAME(bfd_elf,make_empty_symbol)
91 #define elf_get_symbol_info NAME(bfd_elf,get_symbol_info)
92 #define elf_print_symbol NAME(bfd_elf,print_symbol)
93 #define elf_get_lineno NAME(bfd_elf,get_lineno)
94 #define elf_set_arch_mach NAME(bfd_elf,set_arch_mach)
95 #define elf_find_nearest_line NAME(bfd_elf,find_nearest_line)
96 #define elf_sizeof_headers NAME(bfd_elf,sizeof_headers)
97 #define elf_set_section_contents NAME(bfd_elf,set_section_contents)
98 #define elf_no_info_to_howto NAME(bfd_elf,no_info_to_howto)
99 #define elf_no_info_to_howto_rel NAME(bfd_elf,no_info_to_howto_rel)
100 #define elf_new_section_hook NAME(bfd_elf,new_section_hook)
101 #define write_relocs NAME(bfd_elf,_write_relocs)
102 #define elf_find_section NAME(bfd_elf,find_section)
105 #define ELF_R_INFO(X,Y) ELF64_R_INFO(X,Y)
106 #define ELF_R_SYM(X) ELF64_R_SYM(X)
107 #define ELFCLASS ELFCLASS64
111 #define ELF_R_INFO(X,Y) ELF32_R_INFO(X,Y)
112 #define ELF_R_SYM(X) ELF32_R_SYM(X)
113 #define ELFCLASS ELFCLASS32
117 static int shstrtab_length_fixed;
119 struct elf_sect_data {
124 /* Forward declarations of static functions */
126 static struct sec * section_from_elf_index PARAMS ((bfd *, int));
128 static int elf_section_from_bfd_section PARAMS ((bfd *, struct sec *));
130 static boolean elf_slurp_symbol_table PARAMS ((bfd *, asymbol **));
132 static int elf_symbol_from_bfd_symbol PARAMS ((bfd *,
133 struct symbol_cache_entry **));
135 static void elf_map_symbols PARAMS ((bfd *));
136 static void swap_out_syms PARAMS ((bfd *));
139 static void elf_debug_section PARAMS ((char *, int, Elf_Internal_Shdr *));
140 static void elf_debug_file PARAMS ((Elf_Internal_Ehdr *));
143 #define elf_string_from_elf_strtab(abfd,strindex) \
144 elf_string_from_elf_section(abfd,elf_elfheader(abfd)->e_shstrndx,strindex)
147 /* Structure swapping routines */
149 /* Should perhaps use put_offset, put_word, etc. For now, the two versions
150 can be handled by explicitly specifying 32 bits or "the long type". */
152 #define put_word bfd_h_put_64
153 #define get_word bfd_h_get_64
156 #define put_word bfd_h_put_32
157 #define get_word bfd_h_get_32
160 /* Translate an ELF symbol in external format into an ELF symbol in internal
164 DEFUN (elf_swap_symbol_in, (abfd, src, dst),
166 Elf_External_Sym * src AND
167 Elf_Internal_Sym * dst)
169 dst->st_name = bfd_h_get_32 (abfd, (bfd_byte *) src->st_name);
170 dst->st_value = get_word (abfd, (bfd_byte *) src->st_value);
171 dst->st_size = get_word (abfd, (bfd_byte *) src->st_size);
172 dst->st_info = bfd_h_get_8 (abfd, (bfd_byte *) src->st_info);
173 dst->st_other = bfd_h_get_8 (abfd, (bfd_byte *) src->st_other);
174 dst->st_shndx = bfd_h_get_16 (abfd, (bfd_byte *) src->st_shndx);
177 /* Translate an ELF symbol in internal format into an ELF symbol in external
181 DEFUN (elf_swap_symbol_out, (abfd, src, dst),
183 Elf_Internal_Sym * src AND
184 Elf_External_Sym * dst)
186 bfd_h_put_32 (abfd, src->st_name, dst->st_name);
187 put_word (abfd, src->st_value, dst->st_value);
188 put_word (abfd, src->st_size, dst->st_size);
189 bfd_h_put_8 (abfd, src->st_info, dst->st_info);
190 bfd_h_put_8 (abfd, src->st_other, dst->st_other);
191 bfd_h_put_16 (abfd, src->st_shndx, dst->st_shndx);
195 /* Translate an ELF file header in external format into an ELF file header in
199 DEFUN (elf_swap_ehdr_in, (abfd, src, dst),
201 Elf_External_Ehdr * src AND
202 Elf_Internal_Ehdr * dst)
204 memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
205 dst->e_type = bfd_h_get_16 (abfd, (bfd_byte *) src->e_type);
206 dst->e_machine = bfd_h_get_16 (abfd, (bfd_byte *) src->e_machine);
207 dst->e_version = bfd_h_get_32 (abfd, (bfd_byte *) src->e_version);
208 dst->e_entry = get_word (abfd, (bfd_byte *) src->e_entry);
209 dst->e_phoff = get_word (abfd, (bfd_byte *) src->e_phoff);
210 dst->e_shoff = get_word (abfd, (bfd_byte *) src->e_shoff);
211 dst->e_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->e_flags);
212 dst->e_ehsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_ehsize);
213 dst->e_phentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phentsize);
214 dst->e_phnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_phnum);
215 dst->e_shentsize = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shentsize);
216 dst->e_shnum = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shnum);
217 dst->e_shstrndx = bfd_h_get_16 (abfd, (bfd_byte *) src->e_shstrndx);
220 /* Translate an ELF file header in internal format into an ELF file header in
224 DEFUN (elf_swap_ehdr_out, (abfd, src, dst),
226 Elf_Internal_Ehdr * src AND
227 Elf_External_Ehdr * dst)
229 memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
230 /* note that all elements of dst are *arrays of unsigned char* already... */
231 bfd_h_put_16 (abfd, src->e_type, dst->e_type);
232 bfd_h_put_16 (abfd, src->e_machine, dst->e_machine);
233 bfd_h_put_32 (abfd, src->e_version, dst->e_version);
234 put_word (abfd, src->e_entry, dst->e_entry);
235 put_word (abfd, src->e_phoff, dst->e_phoff);
236 put_word (abfd, src->e_shoff, dst->e_shoff);
237 bfd_h_put_32 (abfd, src->e_flags, dst->e_flags);
238 bfd_h_put_16 (abfd, src->e_ehsize, dst->e_ehsize);
239 bfd_h_put_16 (abfd, src->e_phentsize, dst->e_phentsize);
240 bfd_h_put_16 (abfd, src->e_phnum, dst->e_phnum);
241 bfd_h_put_16 (abfd, src->e_shentsize, dst->e_shentsize);
242 bfd_h_put_16 (abfd, src->e_shnum, dst->e_shnum);
243 bfd_h_put_16 (abfd, src->e_shstrndx, dst->e_shstrndx);
247 /* Translate an ELF section header table entry in external format into an
248 ELF section header table entry in internal format. */
251 DEFUN (elf_swap_shdr_in, (abfd, src, dst),
253 Elf_External_Shdr * src AND
254 Elf_Internal_Shdr * dst)
256 dst->sh_name = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_name);
257 dst->sh_type = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_type);
258 dst->sh_flags = get_word (abfd, (bfd_byte *) src->sh_flags);
259 dst->sh_addr = get_word (abfd, (bfd_byte *) src->sh_addr);
260 dst->sh_offset = get_word (abfd, (bfd_byte *) src->sh_offset);
261 dst->sh_size = get_word (abfd, (bfd_byte *) src->sh_size);
262 dst->sh_link = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_link);
263 dst->sh_info = bfd_h_get_32 (abfd, (bfd_byte *) src->sh_info);
264 dst->sh_addralign = get_word (abfd, (bfd_byte *) src->sh_addralign);
265 dst->sh_entsize = get_word (abfd, (bfd_byte *) src->sh_entsize);
266 /* we haven't done any processing on it yet, so... */
267 dst->rawdata = (void *) 0;
270 /* Translate an ELF section header table entry in internal format into an
271 ELF section header table entry in external format. */
274 DEFUN (elf_swap_shdr_out, (abfd, src, dst),
276 Elf_Internal_Shdr * src AND
277 Elf_External_Shdr * dst)
279 /* note that all elements of dst are *arrays of unsigned char* already... */
280 bfd_h_put_32 (abfd, src->sh_name, dst->sh_name);
281 bfd_h_put_32 (abfd, src->sh_type, dst->sh_type);
282 put_word (abfd, src->sh_flags, dst->sh_flags);
283 put_word (abfd, src->sh_addr, dst->sh_addr);
284 put_word (abfd, src->sh_offset, dst->sh_offset);
285 put_word (abfd, src->sh_size, dst->sh_size);
286 bfd_h_put_32 (abfd, src->sh_link, dst->sh_link);
287 bfd_h_put_32 (abfd, src->sh_info, dst->sh_info);
288 put_word (abfd, src->sh_addralign, dst->sh_addralign);
289 put_word (abfd, src->sh_entsize, dst->sh_entsize);
293 /* Translate an ELF program header table entry in external format into an
294 ELF program header table entry in internal format. */
297 DEFUN (elf_swap_phdr_in, (abfd, src, dst),
299 Elf_External_Phdr * src AND
300 Elf_Internal_Phdr * dst)
302 dst->p_type = bfd_h_get_32 (abfd, (bfd_byte *) src->p_type);
303 dst->p_flags = bfd_h_get_32 (abfd, (bfd_byte *) src->p_flags);
304 dst->p_offset = get_word (abfd, (bfd_byte *) src->p_offset);
305 dst->p_vaddr = get_word (abfd, (bfd_byte *) src->p_vaddr);
306 dst->p_paddr = get_word (abfd, (bfd_byte *) src->p_paddr);
307 dst->p_filesz = get_word (abfd, (bfd_byte *) src->p_filesz);
308 dst->p_memsz = get_word (abfd, (bfd_byte *) src->p_memsz);
309 dst->p_align = get_word (abfd, (bfd_byte *) src->p_align);
313 DEFUN (elf_swap_phdr_out, (abfd, src, dst),
315 Elf_Internal_Phdr * src AND
316 Elf_External_Phdr * dst)
318 /* note that all elements of dst are *arrays of unsigned char* already... */
319 bfd_h_put_32 (abfd, src->p_type, dst->p_type);
320 put_word (abfd, src->p_offset, dst->p_offset);
321 put_word (abfd, src->p_vaddr, dst->p_vaddr);
322 put_word (abfd, src->p_paddr, dst->p_paddr);
323 put_word (abfd, src->p_filesz, dst->p_filesz);
324 put_word (abfd, src->p_memsz, dst->p_memsz);
325 bfd_h_put_32 (abfd, src->p_flags, dst->p_flags);
326 put_word (abfd, src->p_align, dst->p_align);
329 /* Translate an ELF reloc from external format to internal format. */
331 DEFUN (elf_swap_reloc_in, (abfd, src, dst),
333 Elf_External_Rel * src AND
334 Elf_Internal_Rel * dst)
336 dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
337 dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
341 DEFUN (elf_swap_reloca_in, (abfd, src, dst),
343 Elf_External_Rela * src AND
344 Elf_Internal_Rela * dst)
346 dst->r_offset = get_word (abfd, (bfd_byte *) src->r_offset);
347 dst->r_info = get_word (abfd, (bfd_byte *) src->r_info);
348 dst->r_addend = get_word (abfd, (bfd_byte *) src->r_addend);
351 /* Translate an ELF reloc from internal format to external format. */
353 DEFUN (elf_swap_reloc_out, (abfd, src, dst),
355 Elf_Internal_Rel * src AND
356 Elf_External_Rel * dst)
358 put_word (abfd, src->r_offset, dst->r_offset);
359 put_word (abfd, src->r_info, dst->r_info);
363 DEFUN (elf_swap_reloca_out, (abfd, src, dst),
365 Elf_Internal_Rela * src AND
366 Elf_External_Rela * dst)
368 put_word (abfd, src->r_offset, dst->r_offset);
369 put_word (abfd, src->r_info, dst->r_info);
370 put_word (abfd, src->r_addend, dst->r_addend);
375 /* String table creation/manipulation routines */
377 static struct strtab *
378 DEFUN (bfd_new_strtab, (abfd),
383 ss = (struct strtab *) bfd_xmalloc (sizeof (struct strtab));
384 ss->tab = bfd_xmalloc (1);
385 BFD_ASSERT (ss->tab != 0);
394 DEFUN (bfd_add_to_strtab, (abfd, ss, str),
396 struct strtab *ss AND
399 /* should search first, but for now: */
400 /* include the trailing NUL */
401 int ln = strlen (str) + 1;
403 /* should this be using obstacks? */
404 ss->tab = realloc (ss->tab, ss->length + ln);
406 BFD_ASSERT (ss->tab != 0);
407 strcpy (ss->tab + ss->length, str);
411 return ss->length - ln;
415 DEFUN (bfd_add_2_to_strtab, (abfd, ss, str, str2),
417 struct strtab *ss AND
421 /* should search first, but for now: */
422 /* include the trailing NUL */
423 int ln = strlen (str) + strlen (str2) + 1;
425 /* should this be using obstacks? */
427 ss->tab = realloc (ss->tab, ss->length + ln);
429 ss->tab = bfd_xmalloc (ln);
431 BFD_ASSERT (ss->tab != 0);
432 strcpy (ss->tab + ss->length, str);
433 strcpy (ss->tab + ss->length + strlen (str), str2);
437 return ss->length - ln;
441 /* ELF .o/exec file reading */
443 /* Create a new bfd section from an ELF section header. */
446 DEFUN (bfd_section_from_shdr, (abfd, shindex),
448 unsigned int shindex)
450 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
451 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
455 name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
457 switch (hdr->sh_type)
461 /* inactive section. Throw it away. */
465 /* Bits that get saved. This one is real. */
468 newsect = bfd_make_section (abfd, name);
471 newsect->filepos = hdr->sh_offset; /* so we can read back the bits */
472 newsect->flags |= SEC_HAS_CONTENTS;
473 newsect->vma = hdr->sh_addr;
474 newsect->_raw_size = hdr->sh_size;
475 newsect->alignment_power = bfd_log2 (hdr->sh_addralign);
477 if (hdr->sh_flags & SHF_ALLOC)
479 newsect->flags |= SEC_ALLOC;
480 newsect->flags |= SEC_LOAD;
483 if (!(hdr->sh_flags & SHF_WRITE))
484 newsect->flags |= SEC_READONLY;
486 if (hdr->sh_flags & SHF_EXECINSTR)
487 newsect->flags |= SEC_CODE; /* FIXME: may only contain SOME code */
488 else if (newsect->flags & SEC_ALLOC)
489 newsect->flags |= SEC_DATA;
491 /* The debugging sections appear to recognized only by
493 if (strncmp (name, ".debug", sizeof ".debug" - 1) == 0
494 || strncmp (name, ".line", sizeof ".line" - 1) == 0
495 || strncmp (name, ".stab", sizeof ".stab" - 1) == 0)
496 newsect->flags |= SEC_DEBUGGING;
498 hdr->rawdata = (void *) newsect;
501 hdr->rawdata = (void *) bfd_get_section_by_name (abfd, name);
506 /* Bits that get saved. This one is real. */
509 newsect = bfd_make_section (abfd, name);
512 newsect->vma = hdr->sh_addr;
513 newsect->_raw_size = hdr->sh_size;
514 newsect->filepos = hdr->sh_offset; /* fake */
515 newsect->alignment_power = bfd_log2 (hdr->sh_addralign);
516 if (hdr->sh_flags & SHF_ALLOC)
517 newsect->flags |= SEC_ALLOC;
519 if (!(hdr->sh_flags & SHF_WRITE))
520 newsect->flags |= SEC_READONLY;
522 /* FIXME: This section is empty. Does it really make
523 sense to set SEC_CODE for it? */
524 if (hdr->sh_flags & SHF_EXECINSTR)
525 newsect->flags |= SEC_CODE; /* FIXME: may only contain SOME code */
527 hdr->rawdata = (void *) newsect;
532 case SHT_SYMTAB: /* A symbol table */
533 if (elf_onesymtab (abfd) == shindex)
536 BFD_ASSERT (hdr->sh_entsize == sizeof (Elf_External_Sym));
537 BFD_ASSERT (elf_onesymtab (abfd) == 0);
538 elf_onesymtab (abfd) = shindex;
539 elf_tdata(abfd)->symtab_hdr = *hdr;
540 elf_elfsections(abfd)[shindex] = &elf_tdata(abfd)->symtab_hdr;
541 abfd->flags |= HAS_SYMS;
544 case SHT_STRTAB: /* A string table */
547 if (ehdr->e_shstrndx == shindex)
549 elf_tdata(abfd)->shstrtab_hdr = *hdr;
550 elf_elfsections(abfd)[shindex] = &elf_tdata(abfd)->shstrtab_hdr;
551 hdr->rawdata = (PTR) &elf_tdata(abfd)->shstrtab_hdr;
557 for (i = 1; i < ehdr->e_shnum; i++)
559 Elf_Internal_Shdr *hdr2 = elf_elfsections(abfd)[i];
560 if (hdr2->sh_link == shindex)
562 bfd_section_from_shdr (abfd, i);
563 if (elf_onesymtab (abfd) == i)
565 elf_tdata(abfd)->strtab_hdr = *hdr;
566 elf_elfsections(abfd)[shindex] = &elf_tdata(abfd)->strtab_hdr;
569 #if 0 /* Not handling other string tables specially right now. */
570 hdr2 = elf_elfsections(abfd)[i]; /* in case it moved */
571 /* We have a strtab for some random other section. */
572 newsect = (asection *) hdr2->rawdata;
575 hdr->rawdata = (PTR) newsect;
576 hdr2 = &elf_section_data (newsect)->str_hdr;
578 elf_elfsections(abfd)[shindex] = hdr2;
584 newsect = bfd_make_section (abfd, name);
587 newsect->flags = SEC_HAS_CONTENTS;
588 hdr->rawdata = (PTR) newsect;
589 newsect->_raw_size = hdr->sh_size;
590 newsect->alignment_power = 0;
592 newsect->filepos = hdr->sh_offset;
594 if (hdr->sh_flags & SHF_ALLOC)
595 newsect->flags |= SEC_ALLOC|SEC_LOAD;
596 if (!(hdr->sh_flags & SHF_WRITE))
597 newsect->flags |= SEC_READONLY;
598 if (hdr->sh_flags & SHF_EXECINSTR)
599 newsect->flags |= SEC_CODE;
600 else if (newsect->flags & SEC_ALLOC)
601 newsect->flags |= SEC_DATA;
603 /* Check for debugging string tables. */
604 if (strncmp (name, ".debug", sizeof ".debug" - 1) == 0
605 || strncmp (name, ".stab", sizeof ".stab" - 1) == 0)
606 newsect->flags |= SEC_DEBUGGING;
613 /* *These* do a lot of work -- but build no sections!
614 The spec says there can be multiple strtabs, but only one symtab,
615 but there can be lots of REL* sections. */
616 /* FIXME: The above statement is wrong! There are typically at least
617 two symbol tables in a dynamically linked executable, ".dynsym"
618 which is the dynamic linkage symbol table and ".symtab", which is
619 the "traditional" symbol table. -fnf */
622 asection *target_sect;
623 Elf_Internal_Shdr *hdr2;
624 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
626 /* Don't allow REL relocations on a machine that uses RELA and
628 /* @@ Actually, the generic ABI does suggest that both might be
629 used in one file. But the four ABI Processor Supplements I
630 have access to right now all specify that only one is used on
631 each of those architectures. It's conceivable that, e.g., a
632 bunch of absolute 32-bit relocs might be more compact in REL
633 form even on a RELA machine... */
634 BFD_ASSERT (!(use_rela_p && (hdr->sh_type == SHT_REL)));
635 BFD_ASSERT (!(!use_rela_p && (hdr->sh_type == SHT_RELA)));
636 BFD_ASSERT (hdr->sh_entsize ==
638 ? sizeof (Elf_External_Rela)
639 : sizeof (Elf_External_Rel)));
641 bfd_section_from_shdr (abfd, hdr->sh_info); /* target */
642 bfd_section_from_shdr (abfd, hdr->sh_link); /* symbol table */
643 target_sect = section_from_elf_index (abfd, hdr->sh_info);
644 if (target_sect == NULL
645 || elf_section_data (target_sect) == NULL)
648 hdr2 = &elf_section_data (target_sect)->rel_hdr;
650 elf_elfsections(abfd)[shindex] = hdr2;
651 target_sect->reloc_count = hdr->sh_size / hdr->sh_entsize;
652 target_sect->flags |= SEC_RELOC;
653 target_sect->relocation = 0;
654 target_sect->rel_filepos = hdr->sh_offset;
655 abfd->flags |= HAS_RELOC;
662 case SHT_DYNSYM: /* could treat this like symtab... */
664 fprintf (stderr, "Dynamic Linking sections not yet supported.\n");
671 fprintf (stderr, "Note Sections not yet supported.\n");
678 fprintf (stderr, "SHLIB Sections not supported (and non conforming.)\n");
683 /* Check for any processor-specific section types. */
685 struct elf_backend_data *bed = get_elf_backend_data (abfd);
687 if (bed->elf_backend_section_from_shdr)
688 (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
697 DEFUN (elf_new_section_hook, (abfd, sec),
701 struct bfd_elf_section_data *sdata;
703 sdata = (struct bfd_elf_section_data *) bfd_alloc (abfd, sizeof (*sdata));
704 sec->used_by_bfd = (PTR) sdata;
705 memset (sdata, 0, sizeof (*sdata));
709 /* Create a new bfd section from an ELF program header.
711 Since program segments have no names, we generate a synthetic name
712 of the form segment<NUM>, where NUM is generally the index in the
713 program header table. For segments that are split (see below) we
714 generate the names segment<NUM>a and segment<NUM>b.
716 Note that some program segments may have a file size that is different than
717 (less than) the memory size. All this means is that at execution the
718 system must allocate the amount of memory specified by the memory size,
719 but only initialize it with the first "file size" bytes read from the
720 file. This would occur for example, with program segments consisting
721 of combined data+bss.
723 To handle the above situation, this routine generates TWO bfd sections
724 for the single program segment. The first has the length specified by
725 the file size of the segment, and the second has the length specified
726 by the difference between the two sizes. In effect, the segment is split
727 into it's initialized and uninitialized parts.
732 DEFUN (bfd_section_from_phdr, (abfd, hdr, index),
734 Elf_Internal_Phdr * hdr AND
742 split = ((hdr->p_memsz > 0) &&
743 (hdr->p_filesz > 0) &&
744 (hdr->p_memsz > hdr->p_filesz));
745 sprintf (namebuf, split ? "segment%da" : "segment%d", index);
746 name = bfd_alloc (abfd, strlen (namebuf) + 1);
747 strcpy (name, namebuf);
748 newsect = bfd_make_section (abfd, name);
749 newsect->vma = hdr->p_vaddr;
750 newsect->_raw_size = hdr->p_filesz;
751 newsect->filepos = hdr->p_offset;
752 newsect->flags |= SEC_HAS_CONTENTS;
753 if (hdr->p_type == PT_LOAD)
755 newsect->flags |= SEC_ALLOC;
756 newsect->flags |= SEC_LOAD;
757 if (hdr->p_flags & PF_X)
759 /* FIXME: all we known is that it has execute PERMISSION,
761 newsect->flags |= SEC_CODE;
764 if (!(hdr->p_flags & PF_W))
766 newsect->flags |= SEC_READONLY;
771 sprintf (namebuf, "segment%db", index);
772 name = bfd_alloc (abfd, strlen (namebuf) + 1);
773 strcpy (name, namebuf);
774 newsect = bfd_make_section (abfd, name);
775 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
776 newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
777 if (hdr->p_type == PT_LOAD)
779 newsect->flags |= SEC_ALLOC;
780 if (hdr->p_flags & PF_X)
781 newsect->flags |= SEC_CODE;
783 if (!(hdr->p_flags & PF_W))
784 newsect->flags |= SEC_READONLY;
790 /* Begin processing a given object.
792 First we validate the file by reading in the ELF header and checking
795 static INLINE boolean
796 DEFUN (elf_file_p, (x_ehdrp), Elf_External_Ehdr * x_ehdrp)
798 return ((x_ehdrp->e_ident[EI_MAG0] == ELFMAG0)
799 && (x_ehdrp->e_ident[EI_MAG1] == ELFMAG1)
800 && (x_ehdrp->e_ident[EI_MAG2] == ELFMAG2)
801 && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3));
804 /* Check to see if the file associated with ABFD matches the target vector
807 Note that we may be called several times with the same ABFD, but different
808 target vectors, most of which will not match. We have to avoid leaving
809 any side effects in ABFD, or any data it points to (like tdata), if the
810 file does not match the target vector.
812 FIXME: There is memory leak if we are called more than once with the same
813 ABFD, and that bfd already has tdata allocated, since we allocate more tdata
814 and the old tdata is orphaned. Since it's in the bfd obstack, there isn't
815 much we can do about this except possibly rewrite the code. There are
816 also other bfd_allocs that may be the source of memory leaks as well. */
819 DEFUN (elf_object_p, (abfd), bfd * abfd)
821 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
822 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
823 Elf_External_Shdr x_shdr; /* Section header table entry, external form */
824 Elf_Internal_Shdr *i_shdrp; /* Section header table, internal form */
826 char *shstrtab; /* Internal copy of section header stringtab */
827 struct elf_backend_data *ebd;
828 struct elf_obj_tdata *preserved_tdata = elf_tdata (abfd);
830 /* Read in the ELF header in external format. */
832 if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
833 goto got_system_call_error;
835 /* Now check to see if we have a valid ELF file, and one that BFD can
836 make use of. The magic number must match, the address size ('class')
837 and byte-swapping must match our XVEC entry, and it must have a
838 section header table (FIXME: See comments re sections at top of this
841 if ((elf_file_p (&x_ehdr) == false) ||
842 (x_ehdr.e_ident[EI_VERSION] != EV_CURRENT) ||
843 (x_ehdr.e_ident[EI_CLASS] != ELFCLASS))
844 goto got_wrong_format_error;
846 /* Check that file's byte order matches xvec's */
847 switch (x_ehdr.e_ident[EI_DATA])
849 case ELFDATA2MSB: /* Big-endian */
850 if (!abfd->xvec->header_byteorder_big_p)
851 goto got_wrong_format_error;
853 case ELFDATA2LSB: /* Little-endian */
854 if (abfd->xvec->header_byteorder_big_p)
855 goto got_wrong_format_error;
857 case ELFDATANONE: /* No data encoding specified */
858 default: /* Unknown data encoding specified */
859 goto got_wrong_format_error;
862 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
863 the tdata pointer in the bfd. FIXME: memory leak, see above. */
866 (struct elf_obj_tdata *) bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
867 if (elf_tdata (abfd) == NULL)
868 goto got_no_memory_error;
870 /* Now that we know the byte order, swap in the rest of the header */
871 i_ehdrp = elf_elfheader (abfd);
872 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
874 elf_debug_file (i_ehdrp);
877 /* If there is no section header table, we're hosed. */
878 if (i_ehdrp->e_shoff == 0)
879 goto got_wrong_format_error;
881 /* As a simple sanity check, verify that the what BFD thinks is the
882 size of each section header table entry actually matches the size
883 recorded in the file. */
884 if (i_ehdrp->e_shentsize != sizeof (x_shdr))
885 goto got_wrong_format_error;
887 ebd = get_elf_backend_data (abfd);
889 /* Check that the ELF e_machine field matches what this particular
890 BFD format expects. */
891 if (ebd->elf_machine_code != i_ehdrp->e_machine)
893 bfd_target **target_ptr;
895 if (ebd->elf_machine_code != EM_NONE)
896 goto got_wrong_format_error;
898 /* This is the generic ELF target. Let it match any ELF target
899 for which we do not have a specific backend. */
900 for (target_ptr = target_vector; *target_ptr != NULL; target_ptr++)
902 struct elf_backend_data *back;
904 if ((*target_ptr)->flavour != bfd_target_elf_flavour)
906 back = (struct elf_backend_data *) (*target_ptr)->backend_data;
907 if (back->elf_machine_code == i_ehdrp->e_machine)
909 /* target_ptr is an ELF backend which matches this
910 object file, so reject the generic ELF target. */
911 goto got_wrong_format_error;
917 /* Set the flags and architecture before calling the backend so that
918 it can override them. */
919 if (i_ehdrp->e_type == ET_EXEC)
920 abfd->flags |= EXEC_P;
921 else if (i_ehdrp->e_type == ET_DYN)
922 abfd->flags |= DYNAMIC;
924 bfd_default_set_arch_mach (abfd, ebd->arch, 0);
926 /* Remember the entry point specified in the ELF file header. */
927 bfd_get_start_address (abfd) = i_ehdrp->e_entry;
929 /* Let the backend double check the format and override global
931 if (ebd->elf_backend_object_p)
933 if ((*ebd->elf_backend_object_p) (abfd) == false)
934 goto got_wrong_format_error;
937 /* Allocate space for a copy of the section header table in
938 internal form, seek to the section header table in the file,
939 read it in, and convert it to internal form. */
940 i_shdrp = (Elf_Internal_Shdr *)
941 bfd_alloc (abfd, sizeof (*i_shdrp) * i_ehdrp->e_shnum);
942 elf_elfsections (abfd) =
943 (Elf_Internal_Shdr **) bfd_alloc (abfd, sizeof (i_shdrp) * i_ehdrp->e_shnum);
944 if (!i_shdrp || !elf_elfsections(abfd))
945 goto got_no_memory_error;
946 if (bfd_seek (abfd, i_ehdrp->e_shoff, SEEK_SET) == -1)
947 goto got_system_call_error;
948 for (shindex = 0; shindex < i_ehdrp->e_shnum; shindex++)
950 if (bfd_read ((PTR) & x_shdr, sizeof x_shdr, 1, abfd) != sizeof (x_shdr))
951 goto got_system_call_error;
952 elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
953 elf_elfsections(abfd)[shindex] = i_shdrp + shindex;
955 /* If this is a .dynamic section, mark the object file as being
956 dynamically linked. */
957 if (i_shdrp[shindex].sh_type == SHT_DYNAMIC)
958 abfd->flags |= DYNAMIC;
960 if (i_ehdrp->e_shstrndx)
962 bfd_section_from_shdr (abfd, i_ehdrp->e_shstrndx);
966 for (shindex = i_ehdrp->e_shnum - 1; shindex >= 0; shindex--)
968 if (!strcmp (elf_string_from_elf_strtab (abfd,
969 i_shdrp[shindex].sh_name),
972 elf_tdata(abfd)->strtab_hdr = i_shdrp[shindex];
973 elf_elfsections(abfd)[shindex] = &elf_tdata(abfd)->strtab_hdr;
975 else if (!strcmp (elf_string_from_elf_strtab (abfd,
976 i_shdrp[shindex].sh_name),
979 elf_tdata(abfd)->symtab_hdr = i_shdrp[shindex];
980 elf_elfsections(abfd)[shindex] = &elf_tdata(abfd)->symtab_hdr;
981 elf_onesymtab (abfd) = shindex;
986 /* Read in the string table containing the names of the sections. We
987 will need the base pointer to this table later. */
988 /* We read this inline now, so that we don't have to go through
989 bfd_section_from_shdr with it (since this particular strtab is
990 used to find all of the ELF section names.) */
992 shstrtab = elf_get_str_section (abfd, i_ehdrp->e_shstrndx);
994 goto got_wrong_format_error;
996 /* Once all of the section headers have been read and converted, we
997 can start processing them. Note that the first section header is
998 a dummy placeholder entry, so we ignore it.
1000 We also watch for the symbol table section and remember the file
1001 offset and section size for both the symbol table section and the
1002 associated string table section. */
1004 for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
1006 bfd_section_from_shdr (abfd, shindex);
1009 return (abfd->xvec);
1011 /* If we are going to use goto's to avoid duplicating error setting
1012 and return(NULL) code, then this at least makes it more maintainable. */
1014 got_system_call_error:
1015 bfd_error = system_call_error;
1017 got_wrong_format_error:
1018 bfd_error = wrong_format;
1020 got_no_memory_error:
1021 bfd_error = no_memory;
1024 elf_tdata (abfd) = preserved_tdata;
1029 /* ELF .o/exec file writing */
1031 /* Takes a bfd and a symbol, returns a pointer to the elf specific area
1032 of the symbol if there is one. */
1033 static INLINE elf_symbol_type *
1034 DEFUN (elf_symbol_from, (ignore_abfd, symbol),
1035 bfd * ignore_abfd AND
1038 if (symbol->the_bfd->xvec->flavour != bfd_target_elf_flavour)
1041 if (symbol->the_bfd->tdata.elf_obj_data == (struct elf_obj_tdata *) NULL)
1044 return (elf_symbol_type *) symbol;
1047 /* Create ELF output from BFD sections.
1049 Essentially, just create the section header and forget about the program
1053 DEFUN (elf_make_sections, (abfd, asect, obj),
1055 asection * asect AND
1058 /* most of what is in bfd_shdr_from_section goes in here... */
1059 /* and all of these sections generate at *least* one ELF section. */
1060 Elf_Internal_Shdr *this_hdr;
1061 this_hdr = &elf_section_data (asect)->this_hdr;
1063 this_hdr->sh_addr = asect->vma;
1064 this_hdr->sh_size = asect->_raw_size;
1065 /* contents already set by elf_set_section_contents */
1067 if (asect->flags & SEC_RELOC)
1069 /* emit a reloc section, and thus strtab and symtab... */
1070 Elf_Internal_Shdr *rela_hdr;
1071 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1073 rela_hdr = &elf_section_data (asect)->rel_hdr;
1075 /* orelocation has the data, reloc_count has the count... */
1078 rela_hdr->sh_type = SHT_RELA;
1079 rela_hdr->sh_entsize = sizeof (Elf_External_Rela);
1082 /* REL relocations */
1084 rela_hdr->sh_type = SHT_REL;
1085 rela_hdr->sh_entsize = sizeof (Elf_External_Rel);
1087 rela_hdr->sh_flags = 0;
1088 rela_hdr->sh_addr = 0;
1089 rela_hdr->sh_offset = 0;
1091 /* FIXME: Systems I've checked use an alignment of 4, but it is
1092 possible that some systems use a different alignment. */
1093 rela_hdr->sh_addralign = 4;
1097 if (asect->flags & SEC_ALLOC)
1099 this_hdr->sh_flags |= SHF_ALLOC;
1100 if (asect->flags & SEC_LOAD)
1102 /* @@ Do something with sh_type? */
1107 /* If this section is not part of the program image during
1108 execution, leave the address fields at 0. */
1109 this_hdr->sh_addr = 0;
1112 if (!(asect->flags & SEC_READONLY))
1113 this_hdr->sh_flags |= SHF_WRITE;
1115 if (asect->flags & SEC_CODE)
1116 this_hdr->sh_flags |= SHF_EXECINSTR;
1120 write_relocs (abfd, sec, xxx)
1125 Elf_Internal_Shdr *rela_hdr;
1126 Elf_External_Rela *outbound_relocas;
1127 Elf_External_Rel *outbound_relocs;
1129 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1130 asymbol *last_sym = 0;
1131 int last_sym_idx = 9999999; /* should always be written before use */
1133 if ((sec->flags & SEC_RELOC) == 0)
1135 /* Flags are sometimes inconsistent. */
1136 if (sec->reloc_count == 0)
1139 rela_hdr = &elf_section_data (sec)->rel_hdr;
1141 rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count;
1142 rela_hdr->contents = (void *) bfd_alloc (abfd, rela_hdr->sh_size);
1144 /* orelocation has the data, reloc_count has the count... */
1147 outbound_relocas = (Elf_External_Rela *) rela_hdr->contents;
1149 for (idx = 0; idx < sec->reloc_count; idx++)
1151 Elf_Internal_Rela dst_rela;
1152 Elf_External_Rela *src_rela;
1157 ptr = sec->orelocation[idx];
1158 src_rela = outbound_relocas + idx;
1159 if (!(abfd->flags & EXEC_P))
1160 dst_rela.r_offset = ptr->address - sec->vma;
1162 dst_rela.r_offset = ptr->address;
1164 sym = *ptr->sym_ptr_ptr;
1165 if (sym == last_sym)
1170 last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1172 dst_rela.r_info = ELF_R_INFO (n, ptr->howto->type);
1174 dst_rela.r_addend = ptr->addend;
1175 elf_swap_reloca_out (abfd, &dst_rela, src_rela);
1179 /* REL relocations */
1181 outbound_relocs = (Elf_External_Rel *) rela_hdr->contents;
1183 for (idx = 0; idx < sec->reloc_count; idx++)
1185 Elf_Internal_Rel dst_rel;
1186 Elf_External_Rel *src_rel;
1191 ptr = sec->orelocation[idx];
1192 sym = *ptr->sym_ptr_ptr;
1193 src_rel = outbound_relocs + idx;
1194 if (!(abfd->flags & EXEC_P))
1195 dst_rel.r_offset = ptr->address - sec->vma;
1197 dst_rel.r_offset = ptr->address;
1199 if (sym == last_sym)
1204 last_sym_idx = n = elf_symbol_from_bfd_symbol (abfd, &sym);
1206 dst_rel.r_info = ELF_R_INFO (n, ptr->howto->type);
1208 elf_swap_reloc_out (abfd, &dst_rel, src_rel);
1214 fix_up_strtabs (abfd, asect, obj)
1219 Elf_Internal_Shdr *this_hdr = &elf_section_data (asect)->this_hdr;
1220 int this_idx = elf_section_data(asect)->this_idx;
1222 /* @@ Check flags! */
1223 if (!strncmp (asect->name, ".stab", 5)
1224 && !strcmp ("str", asect->name + strlen (asect->name) - 3))
1226 size_t len = strlen (asect->name) + 1;
1227 char *s = (char *) alloca (len);
1228 strcpy (s, asect->name);
1230 asect = bfd_get_section_by_name (abfd, s);
1233 elf_section_data(asect)->this_hdr.sh_link = this_idx;
1234 /* @@ Assuming 32 bits! */
1235 elf_section_data(asect)->this_hdr.sh_entsize = 0xc;
1237 this_hdr->sh_type = SHT_STRTAB;
1242 DEFUN (elf_fake_sections, (abfd, asect, obj),
1244 asection * asect AND
1247 /* most of what is in bfd_shdr_from_section goes in here... */
1248 /* and all of these sections generate at *least* one ELF section. */
1250 Elf_Internal_Shdr *this_hdr;
1251 this_hdr = &elf_section_data (asect)->this_hdr;
1253 bfd_add_to_strtab (abfd, elf_shstrtab (abfd), asect->name);
1254 /* We need to log the type *now* so that elf_section_from_bfd_section
1255 can find us... have to set rawdata too. */
1256 this_hdr->rawdata = (void *) asect;
1257 this_hdr->sh_addralign = 1 << asect->alignment_power;
1258 if ((asect->flags & SEC_ALLOC) && (asect->flags & SEC_LOAD))
1259 this_hdr->sh_type = SHT_PROGBITS;
1260 else if ((asect->flags & SEC_ALLOC) && ((asect->flags & SEC_LOAD) == 0))
1262 BFD_ASSERT (strcmp (asect->name, ".bss") == 0
1263 || strcmp (asect->name, ".sbss") == 0);
1264 this_hdr->sh_type = SHT_NOBITS;
1266 /* FIXME I am not sure how to detect a .note section from the flags
1267 word of an `asection'. */
1268 else if (!strcmp (asect->name, ".note"))
1269 this_hdr->sh_type = SHT_NOTE;
1271 this_hdr->sh_type = SHT_PROGBITS;
1273 this_hdr->sh_flags = 0;
1274 this_hdr->sh_addr = 0;
1275 this_hdr->sh_size = 0;
1276 this_hdr->sh_entsize = 0;
1277 this_hdr->sh_info = 0;
1278 this_hdr->sh_link = 0;
1279 this_hdr->sh_offset = 0;
1282 /* Now, check for processor-specific section types. */
1284 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1286 if (bed->elf_backend_fake_sections)
1287 (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1291 /* Emit a strtab and symtab, and possibly a reloc section. */
1292 Elf_Internal_Shdr *rela_hdr;
1294 /* Note that only one symtab is used, so just remember it
1297 if (asect->flags & SEC_RELOC)
1299 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1301 rela_hdr = &elf_section_data (asect)->rel_hdr;
1303 bfd_add_2_to_strtab (abfd, elf_shstrtab (abfd),
1304 use_rela_p ? ".rela" : ".rel",
1306 rela_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1307 rela_hdr->sh_entsize = (use_rela_p
1308 ? sizeof (Elf_External_Rela)
1309 : sizeof (Elf_External_Rel));
1311 rela_hdr->sh_flags = 0;
1312 rela_hdr->sh_addr = 0;
1313 rela_hdr->sh_size = 0;
1314 rela_hdr->sh_offset = 0;
1316 /* FIXME: Systems I've checked use an alignment of 4, but some
1317 systems may use a different alignment. */
1318 rela_hdr->sh_addralign = 4;
1323 if (asect->flags & SEC_ALLOC)
1325 this_hdr->sh_flags |= SHF_ALLOC;
1326 if (asect->flags & SEC_LOAD)
1328 /* @@ Do something with sh_type? */
1331 if (!(asect->flags & SEC_READONLY))
1332 this_hdr->sh_flags |= SHF_WRITE;
1333 if (asect->flags & SEC_CODE)
1334 this_hdr->sh_flags |= SHF_EXECINSTR;
1337 /* Map symbol from it's internal number to the external number, moving
1338 all local symbols to be at the head of the list. */
1341 sym_is_global (abfd, sym)
1345 /* If the backend has a special mapping, use it. */
1346 if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1347 return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1350 if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
1352 if (sym->flags & BSF_LOCAL)
1356 if (sym->section == 0)
1358 /* Is this valid? */
1363 if (sym->section == &bfd_und_section)
1365 if (bfd_is_com_section (sym->section))
1367 if (sym->flags & (BSF_LOCAL | BSF_SECTION_SYM | BSF_FILE))
1373 DEFUN (elf_map_symbols, (abfd), bfd * abfd)
1375 int symcount = bfd_get_symcount (abfd);
1376 asymbol **syms = bfd_get_outsymbols (abfd);
1377 asymbol **sect_syms;
1379 int num_globals = 0;
1380 int num_locals2 = 0;
1381 int num_globals2 = 0;
1383 int num_sections = 0;
1384 Elf_Sym_Extra *sym_extra;
1389 fprintf (stderr, "elf_map_symbols\n");
1393 /* Add local symbols for each section for which there are relocs.
1394 FIXME: How can we tell which sections have relocs at this point?
1395 Will reloc_count always be accurate? Actually, I think most ELF
1396 targets create section symbols for all sections anyhow. */
1397 for (asect = abfd->sections; asect; asect = asect->next)
1399 if (max_index < asect->index)
1400 max_index = asect->index;
1404 elf_num_section_syms (abfd) = max_index;
1405 sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1406 elf_section_syms (abfd) = sect_syms;
1408 BFD_ASSERT (sect_syms != 0);
1410 for (asect = abfd->sections; asect; asect = asect->next)
1412 asymbol *sym = bfd_make_empty_symbol (abfd);
1413 sym->the_bfd = abfd;
1414 sym->name = asect->name;
1415 sym->value = asect->vma;
1416 sym->flags = BSF_SECTION_SYM;
1417 sym->section = asect;
1418 sect_syms[asect->index] = sym;
1422 "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n",
1423 asect->name, (long) asect->vma, asect->index, (long) asect);
1430 syms = (asymbol **) bfd_realloc (abfd, syms,
1431 ((symcount + num_sections + 1)
1432 * sizeof (asymbol *)));
1434 syms = (asymbol **) bfd_alloc (abfd,
1435 (num_sections + 1) * sizeof (asymbol *));
1437 for (asect = abfd->sections; asect; asect = asect->next)
1439 if (sect_syms[asect->index])
1440 syms[symcount++] = sect_syms[asect->index];
1443 syms[symcount] = (asymbol *) 0;
1444 bfd_set_symtab (abfd, syms, symcount);
1447 elf_sym_extra (abfd) = sym_extra
1448 = (Elf_Sym_Extra *) bfd_alloc (abfd, symcount * sizeof (Elf_Sym_Extra));
1450 /* Identify and classify all of the symbols. */
1451 for (idx = 0; idx < symcount; idx++)
1453 if (!sym_is_global (abfd, syms[idx]))
1459 /* Now provide mapping information. Add +1 for skipping over the
1461 for (idx = 0; idx < symcount; idx++)
1463 syms[idx]->udata = (PTR) &sym_extra[idx];
1464 if (!sym_is_global (abfd, syms[idx]))
1465 sym_extra[idx].elf_sym_num = 1 + num_locals2++;
1467 sym_extra[idx].elf_sym_num = 1 + num_locals + num_globals2++;
1470 elf_num_locals (abfd) = num_locals;
1471 elf_num_globals (abfd) = num_globals;
1474 static void assign_section_numbers ();
1475 static void assign_file_positions_except_relocs ();
1478 DEFUN (elf_compute_section_file_positions, (abfd), bfd * abfd)
1480 bfd_map_over_sections (abfd, elf_fake_sections, 0);
1482 assign_section_numbers (abfd);
1484 bfd_map_over_sections (abfd, elf_make_sections, 0);
1486 bfd_map_over_sections (abfd, fix_up_strtabs, 0); /* .stab/.stabstr &c */
1488 swap_out_syms (abfd);
1490 assign_file_positions_except_relocs (abfd);
1496 DEFUN (elf_write_phdrs, (abfd, i_ehdrp, i_phdrp, phdr_cnt),
1498 Elf_Internal_Ehdr * i_ehdrp AND
1499 Elf_Internal_Phdr * i_phdrp AND
1500 Elf32_Half phdr_cnt)
1502 /* first program header entry goes after the file header */
1503 int outbase = i_ehdrp->e_phoff;
1505 Elf_External_Phdr x_phdr;
1507 for (i = 0; i < phdr_cnt; i++)
1509 elf_swap_phdr_out (abfd, i_phdrp + i, &x_phdr);
1510 bfd_seek (abfd, outbase, SEEK_SET);
1511 bfd_write ((PTR) & x_phdr, sizeof (x_phdr), 1, abfd);
1512 outbase += sizeof (x_phdr);
1518 static const Elf_Internal_Shdr null_shdr;
1520 /* Assign all ELF section numbers. The dummy first section is handled here
1521 too. The link/info pointers for the standard section types are filled
1522 in here too, while we're at it. (Link pointers for .stab sections are
1523 not filled in here.) */
1525 assign_section_numbers (abfd)
1528 struct elf_obj_tdata *t = elf_tdata (abfd);
1530 int section_number = 1;
1532 Elf_Internal_Shdr **i_shdrp;
1534 t->shstrtab_hdr.sh_size = elf_shstrtab(abfd)->length;
1535 t->shstrtab_hdr.contents = (void *) elf_shstrtab(abfd)->tab;
1536 shstrtab_length_fixed = 1;
1538 t->shstrtab_section = section_number++;
1539 elf_elfheader(abfd)->e_shstrndx = t->shstrtab_section;
1542 t->symtab_section = section_number++;
1543 t->strtab_section = section_number++;
1544 t->symtab_hdr.sh_link = t->strtab_section;
1546 for (sec = abfd->sections; sec; sec = sec->next)
1548 struct bfd_elf_section_data *d = elf_section_data (sec);
1549 d->this_idx = section_number++;
1550 if (sec->flags & SEC_RELOC)
1552 d->rel_idx = section_number++;
1553 d->rel_hdr.sh_link = t->symtab_section;
1554 d->rel_hdr.sh_info = d->this_idx;
1558 /* No handling for per-section string tables currently. */
1560 elf_elfheader(abfd)->e_shnum = section_number;
1562 /* Set up the list of section header pointers, in agreement with the
1564 i_shdrp = (Elf_Internal_Shdr **)
1565 bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *));
1566 elf_elfsections(abfd) = i_shdrp;
1567 for (i = 0; i < section_number; i++)
1570 i_shdrp[0] = (Elf_Internal_Shdr *) &null_shdr;
1571 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1574 i_shdrp[t->symtab_section] = &t->symtab_hdr;
1575 i_shdrp[t->strtab_section] = &t->strtab_hdr;
1577 for (sec = abfd->sections; sec; sec = sec->next)
1579 struct bfd_elf_section_data *d = elf_section_data (sec);
1580 i_shdrp[d->this_idx] = &d->this_hdr;
1582 i_shdrp[d->rel_idx] = &d->rel_hdr;
1584 /* Make sure we got everything.... */
1585 for (i = 0; i < section_number; i++)
1586 if (i_shdrp[i] == 0)
1590 static INLINE file_ptr
1591 assign_file_position_for_section (i_shdrp, offset)
1592 Elf_Internal_Shdr *i_shdrp;
1597 if (i_shdrp->sh_addralign != 0)
1598 align = i_shdrp->sh_addralign;
1601 i_shdrp->sh_offset = offset = BFD_ALIGN (offset, align);
1602 if (i_shdrp->rawdata != NULL)
1603 ((asection *) i_shdrp->rawdata)->filepos = offset;
1604 if (i_shdrp->sh_type != SHT_NOBITS)
1605 offset += i_shdrp->sh_size;
1609 static INLINE file_ptr
1610 align_file_position (off)
1613 return (off + FILE_ALIGN - 1) & ~(FILE_ALIGN - 1);
1616 static INLINE file_ptr
1617 assign_file_positions_for_symtab_and_strtabs (abfd, off)
1621 struct elf_obj_tdata *t = elf_tdata (abfd);
1623 off = align_file_position (off);
1624 off = assign_file_position_for_section (&t->symtab_hdr, off);
1625 off = assign_file_position_for_section (&t->shstrtab_hdr, off);
1626 off = assign_file_position_for_section (&t->strtab_hdr, off);
1631 bfd_vma low, mem_size;
1635 struct seg_info *next;
1639 map_program_segments (abfd)
1642 Elf_Internal_Shdr **i_shdrpp = elf_elfsections (abfd);
1643 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
1644 Elf_Internal_Shdr *i_shdrp;
1645 Elf_Internal_Phdr *phdr;
1648 file_ptr lowest_offset = 0;
1649 struct seg_info *seg = 0;
1651 done = (char *) alloca (i_ehdrp->e_shnum);
1652 memset (done, 0, i_ehdrp->e_shnum);
1653 for (i = 1; i < i_ehdrp->e_shnum; i++)
1655 i_shdrp = i_shdrpp[i];
1656 /* If it's going to be mapped in, it's been assigned a position. */
1657 if (i_shdrp->sh_offset + 1 == 0)
1659 /* Well, not really, but we won't process it here. */
1663 if (i_shdrp->sh_offset < lowest_offset
1664 || lowest_offset == 0)
1665 lowest_offset = i_shdrp->sh_offset;
1666 /* Only interested in PROGBITS or NOBITS for generating segments. */
1667 switch (i_shdrp->sh_type)
1680 bfd_vma lowest_vma = -1, high;
1685 for (i = 1; i < i_ehdrp->e_shnum; i++)
1687 i_shdrp = i_shdrpp[i];
1688 if (!done[i] && i_shdrp->sh_addr < lowest_vma)
1690 lowest_vma = i_shdrp->sh_addr;
1696 /* So now we know the lowest vma of any unassigned sections; start
1700 s = (struct seg_info *) bfd_alloc (abfd, sizeof (struct seg_info));
1704 seg->low = lowest_vma;
1705 i_shdrp = i_shdrpp[low_sec];
1706 seg->start_pos = i_shdrp->sh_offset;
1707 seg->sh_flags = i_shdrp->sh_flags;
1708 done[low_sec] = 1, n_left--;
1709 mem_size = i_shdrp->sh_size;
1710 high = lowest_vma + i_shdrp->sh_size;
1712 if (i_shdrp->sh_type == SHT_PROGBITS)
1713 file_size = i_shdrp->sh_size;
1715 for (i = 1; i < i_ehdrp->e_shnum; i++)
1721 i_shdrp = i_shdrpp[i];
1722 /* position of next byte on disk */
1723 f1 = seg->start_pos + file_size;
1724 if (i_shdrp->sh_type == SHT_PROGBITS)
1726 if (i_shdrp->sh_offset - f1 != i_shdrp->sh_addr - high)
1728 if (file_size != mem_size)
1731 else /* sh_type == NOBITS */
1733 /* If the section in question has no contents in the disk
1734 file, we really don't care where it supposedly starts.
1735 But we don't want to bother merging it into this segment
1736 if it doesn't start on this memory page. */
1737 bfd_vma page1, page2;
1738 bfd_vma maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
1740 /* page number in address space of current end of seg */
1741 page1 = (high - 1 + maxpagesize - 1) / maxpagesize;
1742 /* page number in address space of start of this section */
1743 page2 = (i_shdrp->sh_addr + maxpagesize - 1) / maxpagesize;
1748 done[i] = 1, n_left--;
1749 if (i_shdrp->sh_type == SHT_PROGBITS)
1750 file_size = i_shdrp->sh_offset + i_shdrp->sh_size - seg->start_pos;
1751 mem_size = i_shdrp->sh_addr + i_shdrp->sh_size - seg->low;
1752 high = i_shdrp->sh_addr + i_shdrp->sh_size;
1755 seg->file_size = file_size;
1756 seg->mem_size = mem_size;
1758 /* Now do something with the list of segments we've built up. */
1760 bfd_vma maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
1765 for (s = seg; s; s = s->next)
1769 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
1770 sz = sizeof (Elf_External_Phdr) * n_segs;
1771 if (align_file_position (i_ehdrp->e_ehsize) + sz <= lowest_offset)
1772 i_ehdrp->e_phoff = align_file_position (i_ehdrp->e_ehsize);
1775 i_ehdrp->e_phoff = align_file_position (elf_tdata (abfd)->next_file_pos);
1776 elf_tdata (abfd)->next_file_pos = i_ehdrp->e_phoff + sz;
1778 phdr = (Elf_Internal_Phdr*) bfd_alloc (abfd,
1779 n_segs * sizeof (Elf_Internal_Phdr));
1780 elf_tdata (abfd)->phdr = phdr;
1783 phdr->p_type = PT_LOAD; /* only type we really support so far */
1784 phdr->p_offset = seg->start_pos;
1785 phdr->p_vaddr = seg->low;
1787 phdr->p_filesz = seg->file_size;
1788 phdr->p_memsz = seg->mem_size;
1789 phdr->p_flags = PF_R;
1790 phdr->p_align = maxpagesize; /* ? */
1791 if (seg->sh_flags & SHF_WRITE)
1792 /* SysVr4 ELF docs say "data segments normally have read, write,
1793 and execute permissions." */
1794 phdr->p_flags |= (PF_W | PF_X);
1795 if (seg->sh_flags & SHF_EXECINSTR)
1796 phdr->p_flags |= PF_X;
1800 i_ehdrp->e_phnum = n_segs;
1802 elf_write_phdrs (abfd, i_ehdrp, elf_tdata (abfd)->phdr, i_ehdrp->e_phnum);
1806 assign_file_positions_except_relocs (abfd)
1809 /* For now, we ignore the possibility of having program segments, which
1810 may require some alignment in the file. That'll require padding, and
1811 some interesting calculations to optimize file space usage.
1813 Also, since the application may change the list of relocations for
1814 a given section, we don't figure them in here. We'll put them at the
1815 end of the file, at positions computed during bfd_close.
1817 The order, for now: <ehdr> <shdr> <sec1> <sec2> <sec3> ... <rel1> ...
1818 or: <ehdr> <phdr> <sec1> <sec2> ... <shdr> <rel1> ... */
1820 struct elf_obj_tdata *t = elf_tdata (abfd);
1823 Elf_Internal_Shdr **i_shdrpp = elf_elfsections (abfd);
1824 Elf_Internal_Shdr *i_shdrp;
1825 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
1826 int exec_p = (abfd->flags & EXEC_P) != 0;
1827 bfd_vma maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
1829 /* Everything starts after the ELF file header. */
1830 off = i_ehdrp->e_ehsize;
1834 /* Section headers. */
1835 off = align_file_position (off);
1836 i_ehdrp->e_shoff = off;
1837 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
1838 off = assign_file_positions_for_symtab_and_strtabs (abfd, off);
1840 for (i = 1; i < i_ehdrp->e_shnum; i++)
1842 /* The symtab and strtab sections are placed by
1843 assign_file_positions_for_symtab_and_strtabs. */
1844 if (i == t->symtab_section
1845 || i == t->strtab_section
1846 || i == t->shstrtab_section)
1849 i_shdrp = i_shdrpp[i];
1850 if (i_shdrp->sh_type == SHT_REL || i_shdrp->sh_type == SHT_RELA)
1852 i_shdrp->sh_offset = -1;
1857 if (maxpagesize == 0)
1858 maxpagesize = 1; /* make the arithmetic work */
1859 /* This isn't necessarily going to give the best packing, if the
1860 segments require padding between them, but since that isn't
1861 usually the case, this'll do. */
1862 if ((i_shdrp->sh_flags & SHF_ALLOC) == 0)
1864 i_shdrp->sh_offset = -1;
1867 /* Blindly assume that the segments are ordered optimally. With
1868 the default LD script, they will be. */
1869 if (i_shdrp->sh_type != SHT_NOBITS)
1871 /* need big unsigned type */
1873 addtl_off = i_shdrp->sh_addr - off;
1874 addtl_off = addtl_off % maxpagesize;
1881 off = assign_file_position_for_section (i_shdrp, off);
1884 && i_shdrp->sh_type == SHT_NOBITS
1885 && (i == i_ehdrp->e_shnum
1886 || i_shdrpp[i + 1]->sh_type != SHT_NOBITS))
1888 /* Skip to the next page to ensure that when the file is
1889 loaded the bss section is loaded with zeroes. I don't
1890 know if this is required on all platforms, but it
1891 shouldn't really hurt. */
1892 off = BFD_ALIGN (off, maxpagesize);
1896 && get_elf_backend_data(abfd)->maxpagesize > 1
1897 && i_shdrp->sh_type == SHT_PROGBITS
1898 && (i_shdrp->sh_flags & SHF_ALLOC)
1899 && (i_shdrp->sh_offset - i_shdrp->sh_addr) % get_elf_backend_data (abfd)->maxpagesize != 0)
1904 elf_tdata (abfd)->next_file_pos = off;
1905 map_program_segments (abfd);
1906 off = elf_tdata (abfd)->next_file_pos;
1908 /* Section headers. */
1909 off = align_file_position (off);
1910 i_ehdrp->e_shoff = off;
1911 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
1913 off = assign_file_positions_for_symtab_and_strtabs (abfd, off);
1915 for (i = 1; i < i_ehdrp->e_shnum; i++)
1917 i_shdrp = i_shdrpp[i];
1918 if (i_shdrp->sh_offset + 1 == 0
1919 && i_shdrp->sh_type != SHT_REL
1920 && i_shdrp->sh_type != SHT_RELA)
1921 off = assign_file_position_for_section (i_shdrp, off);
1924 elf_tdata (abfd)->next_file_pos = off;
1931 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
1932 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
1933 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
1935 struct strtab *shstrtab;
1937 i_ehdrp = elf_elfheader (abfd);
1938 i_shdrp = elf_elfsections (abfd);
1940 shstrtab = bfd_new_strtab (abfd);
1941 elf_shstrtab (abfd) = shstrtab;
1943 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
1944 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
1945 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
1946 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
1948 i_ehdrp->e_ident[EI_CLASS] = ELFCLASS;
1949 i_ehdrp->e_ident[EI_DATA] =
1950 abfd->xvec->byteorder_big_p ? ELFDATA2MSB : ELFDATA2LSB;
1951 i_ehdrp->e_ident[EI_VERSION] = EV_CURRENT;
1953 for (count = EI_PAD; count < EI_NIDENT; count++)
1954 i_ehdrp->e_ident[count] = 0;
1956 i_ehdrp->e_type = (abfd->flags & EXEC_P) ? ET_EXEC : ET_REL;
1957 switch (bfd_get_arch (abfd))
1959 case bfd_arch_unknown:
1960 i_ehdrp->e_machine = EM_NONE;
1962 case bfd_arch_sparc:
1963 i_ehdrp->e_machine = EM_SPARC;
1964 /* start-sanitize-v9 */
1966 i_ehdrp->e_machine = EM_SPARC64;
1968 /* end-sanitize-v9 */
1971 i_ehdrp->e_machine = EM_386;
1974 i_ehdrp->e_machine = EM_68K;
1977 i_ehdrp->e_machine = EM_88K;
1980 i_ehdrp->e_machine = EM_860;
1982 case bfd_arch_mips: /* MIPS Rxxxx */
1983 i_ehdrp->e_machine = EM_MIPS; /* only MIPS R3000 */
1986 i_ehdrp->e_machine = EM_HPPA;
1988 /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
1990 i_ehdrp->e_machine = EM_NONE;
1992 i_ehdrp->e_version = EV_CURRENT;
1993 i_ehdrp->e_ehsize = sizeof (Elf_External_Ehdr);
1995 /* no program header, for now. */
1996 i_ehdrp->e_phoff = 0;
1997 i_ehdrp->e_phentsize = 0;
1998 i_ehdrp->e_phnum = 0;
2000 /* each bfd section is section header entry */
2001 i_ehdrp->e_entry = bfd_get_start_address (abfd);
2002 i_ehdrp->e_shentsize = sizeof (Elf_External_Shdr);
2004 /* if we're building an executable, we'll need a program header table */
2005 if (abfd->flags & EXEC_P)
2007 /* it all happens later */
2009 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2011 /* elf_build_phdrs() returns a (NULL-terminated) array of
2012 Elf_Internal_Phdrs */
2013 i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
2014 i_ehdrp->e_phoff = outbase;
2015 outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
2020 i_ehdrp->e_phentsize = 0;
2022 i_ehdrp->e_phoff = 0;
2025 elf_tdata (abfd)->symtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2027 elf_tdata (abfd)->strtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2029 elf_tdata (abfd)->shstrtab_hdr.sh_name = bfd_add_to_strtab (abfd, shstrtab,
2035 swap_out_syms (abfd)
2038 elf_map_symbols (abfd);
2040 /* Dump out the symtabs. */
2042 int symcount = bfd_get_symcount (abfd);
2043 asymbol **syms = bfd_get_outsymbols (abfd);
2044 struct strtab *stt = bfd_new_strtab (abfd);
2045 Elf_Internal_Shdr *symtab_hdr;
2046 Elf_Internal_Shdr *symstrtab_hdr;
2047 Elf_External_Sym *outbound_syms;
2050 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2051 symtab_hdr->sh_type = SHT_SYMTAB;
2052 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
2053 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
2054 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
2056 /* FIXME: Systems I've checked use 4 byte alignment for .symtab,
2057 but it is possible that there are systems which use a different
2059 symtab_hdr->sh_addralign = 4;
2061 /* see assert in elf_fake_sections that supports this: */
2062 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2063 symstrtab_hdr->sh_type = SHT_STRTAB;
2065 outbound_syms = (Elf_External_Sym *)
2066 bfd_alloc (abfd, (1 + symcount) * sizeof (Elf_External_Sym));
2067 /* now generate the data (for "contents") */
2069 /* Fill in zeroth symbol and swap it out. */
2070 Elf_Internal_Sym sym;
2076 sym.st_shndx = SHN_UNDEF;
2077 elf_swap_symbol_out (abfd, &sym, outbound_syms);
2079 for (idx = 0; idx < symcount; idx++)
2081 Elf_Internal_Sym sym;
2082 bfd_vma value = syms[idx]->value;
2084 if (syms[idx]->flags & BSF_SECTION_SYM)
2085 /* Section symbols have no names. */
2088 sym.st_name = bfd_add_to_strtab (abfd, stt, syms[idx]->name);
2090 if (bfd_is_com_section (syms[idx]->section))
2092 /* ELF common symbols put the alignment into the `value' field,
2093 and the size into the `size' field. This is backwards from
2094 how BFD handles it, so reverse it here. */
2095 sym.st_size = value;
2096 /* Should retrieve this from somewhere... */
2098 sym.st_shndx = SHN_COMMON;
2102 asection *sec = syms[idx]->section;
2103 elf_symbol_type *type_ptr;
2106 if (sec->output_section)
2108 value += sec->output_offset;
2109 sec = sec->output_section;
2112 sym.st_value = value;
2113 type_ptr = elf_symbol_from (abfd, syms[idx]);
2114 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
2115 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec);
2119 /* Writing this would be a hell of a lot easier if we had
2120 some decent documentation on bfd, and knew what to expect
2121 of the library, and what to demand of applications. For
2122 example, it appears that `objcopy' might not set the
2123 section of a symbol to be a section that is actually in
2125 sec2 = bfd_get_section_by_name (abfd, sec->name);
2127 sym.st_shndx = shndx = elf_section_from_bfd_section (abfd, sec2);
2128 assert (shndx != -1);
2132 if (bfd_is_com_section (syms[idx]->section))
2133 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_OBJECT);
2134 else if (syms[idx]->section == &bfd_und_section)
2135 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_NOTYPE);
2136 else if (syms[idx]->flags & BSF_SECTION_SYM)
2137 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
2138 else if (syms[idx]->flags & BSF_FILE)
2139 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
2142 int bind = STB_LOCAL;
2143 int type = STT_OBJECT;
2144 unsigned int flags = syms[idx]->flags;
2146 if (flags & BSF_LOCAL)
2148 else if (flags & BSF_WEAK)
2150 else if (flags & BSF_GLOBAL)
2153 if (flags & BSF_FUNCTION)
2156 sym.st_info = ELF_ST_INFO (bind, type);
2160 elf_swap_symbol_out (abfd, &sym,
2162 + elf_sym_extra (abfd)[idx].elf_sym_num));
2165 symtab_hdr->contents = (PTR) outbound_syms;
2166 symstrtab_hdr->contents = (PTR) stt->tab;
2167 symstrtab_hdr->sh_size = stt->length;
2168 symstrtab_hdr->sh_type = SHT_STRTAB;
2170 symstrtab_hdr->sh_flags = 0;
2171 symstrtab_hdr->sh_addr = 0;
2172 symstrtab_hdr->sh_entsize = 0;
2173 symstrtab_hdr->sh_link = 0;
2174 symstrtab_hdr->sh_info = 0;
2175 symstrtab_hdr->sh_addralign = 1;
2176 symstrtab_hdr->size = 0;
2179 /* put the strtab out too... */
2181 Elf_Internal_Shdr *this_hdr;
2183 this_hdr = &elf_tdata(abfd)->shstrtab_hdr;
2184 this_hdr->contents = (PTR) elf_shstrtab (abfd)->tab;
2185 this_hdr->sh_size = elf_shstrtab (abfd)->length;
2186 this_hdr->sh_type = SHT_STRTAB;
2187 this_hdr->sh_flags = 0;
2188 this_hdr->sh_addr = 0;
2189 this_hdr->sh_entsize = 0;
2190 this_hdr->sh_addralign = 1;
2196 write_shdrs_and_ehdr (abfd)
2199 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
2200 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2201 Elf_External_Shdr *x_shdrp; /* Section header table, external form */
2202 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2204 struct strtab *shstrtab;
2206 i_ehdrp = elf_elfheader (abfd);
2207 i_shdrp = elf_elfsections (abfd);
2208 shstrtab = elf_shstrtab (abfd);
2210 /* swap the header before spitting it out... */
2213 elf_debug_file (i_ehdrp);
2215 elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr);
2216 bfd_seek (abfd, (file_ptr) 0, SEEK_SET);
2217 bfd_write ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd);
2219 /* at this point we've concocted all the ELF sections... */
2220 x_shdrp = (Elf_External_Shdr *)
2221 bfd_alloc (abfd, sizeof (*x_shdrp) * (i_ehdrp->e_shnum));
2224 bfd_error = no_memory;
2228 for (count = 0; count < i_ehdrp->e_shnum; count++)
2231 elf_debug_section (shstrtab->tab + i_shdrp[count]->sh_name, count,
2234 elf_swap_shdr_out (abfd, i_shdrp[count], x_shdrp + count);
2236 bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET);
2237 bfd_write ((PTR) x_shdrp, sizeof (*x_shdrp), i_ehdrp->e_shnum, abfd);
2238 /* need to dump the string table too... */
2244 assign_file_positions_for_relocs (abfd)
2247 file_ptr off = elf_tdata(abfd)->next_file_pos;
2249 Elf_Internal_Shdr **shdrpp = elf_elfsections (abfd);
2250 Elf_Internal_Shdr *shdrp;
2251 for (i = 1; i < elf_elfheader(abfd)->e_shnum; i++)
2254 if (shdrp->sh_type != SHT_REL && shdrp->sh_type != SHT_RELA)
2256 off = align_file_position (off);
2257 off = assign_file_position_for_section (shdrp, off);
2259 elf_tdata(abfd)->next_file_pos = off;
2263 DEFUN (NAME(bfd_elf,write_object_contents), (abfd), bfd * abfd)
2265 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2266 Elf_Internal_Ehdr *i_ehdrp;
2267 Elf_Internal_Shdr **i_shdrp;
2270 /* We don't know how to write dynamic objects. Specifically, we
2271 don't know how to construct the program header. */
2272 if ((abfd->flags & DYNAMIC) != 0)
2274 fprintf (stderr, "Writing ELF dynamic objects is not supported\n");
2275 bfd_error = wrong_format;
2279 if (abfd->output_has_begun == false)
2281 prep_headers (abfd);
2282 elf_compute_section_file_positions (abfd);
2283 abfd->output_has_begun = true;
2286 i_shdrp = elf_elfsections (abfd);
2287 i_ehdrp = elf_elfheader (abfd);
2289 bfd_map_over_sections (abfd, write_relocs, (PTR) 0);
2290 assign_file_positions_for_relocs (abfd);
2292 /* After writing the headers, we need to write the sections too... */
2293 for (count = 1; count < i_ehdrp->e_shnum; count++)
2295 if (bed->elf_backend_section_processing)
2296 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
2297 if (i_shdrp[count]->contents)
2299 bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET);
2300 bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size, 1,
2305 if (bed->elf_backend_final_write_processing)
2306 (*bed->elf_backend_final_write_processing) (abfd);
2308 return write_shdrs_and_ehdr (abfd);
2311 /* Given an index of a section, retrieve a pointer to it. Note
2312 that for our purposes, sections are indexed by {1, 2, ...} with
2313 0 being an illegal index. */
2315 /* In the original, each ELF section went into exactly one BFD
2316 section. This doesn't really make sense, so we need a real mapping.
2317 The mapping has to hide in the Elf_Internal_Shdr since asection
2318 doesn't have anything like a tdata field... */
2321 DEFUN (section_from_elf_index, (abfd, index),
2325 /* @@ Is bfd_com_section really correct in all the places it could
2326 be returned from this routine? */
2328 if (index == SHN_ABS)
2329 return &bfd_com_section; /* not abs? */
2330 if (index == SHN_COMMON)
2331 return &bfd_com_section;
2333 if (index > elf_elfheader (abfd)->e_shnum)
2337 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[index];
2339 switch (hdr->sh_type)
2341 /* ELF sections that map to BFD sections */
2345 bfd_section_from_shdr (abfd, index);
2346 return (struct sec *) hdr->rawdata;
2349 return (struct sec *) &bfd_abs_section;
2354 /* given a section, search the header to find them... */
2356 DEFUN (elf_section_from_bfd_section, (abfd, asect),
2360 Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
2362 Elf_Internal_Shdr *hdr;
2363 int maxindex = elf_elfheader (abfd)->e_shnum;
2365 if (asect == &bfd_abs_section)
2367 if (asect == &bfd_com_section)
2369 if (asect == &bfd_und_section)
2372 for (index = 0; index < maxindex; index++)
2374 hdr = i_shdrp[index];
2375 switch (hdr->sh_type)
2377 /* ELF sections that map to BFD sections */
2383 if (((struct sec *) (hdr->rawdata)) == asect)
2389 /* fix_up_strtabs will generate STRTAB sections with names
2391 if (!strncmp (asect->name, ".stab", 5)
2392 && !strcmp ("str", asect->name + strlen (asect->name) - 3))
2396 if (((struct sec *) (hdr->rawdata)) == asect)
2404 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2406 if (bed->elf_backend_section_from_bfd_section)
2411 if ((*bed->elf_backend_section_from_bfd_section)
2412 (abfd, hdr, asect, &retval))
2422 /* given a symbol, return the bfd index for that symbol. */
2424 DEFUN (elf_symbol_from_bfd_symbol, (abfd, asym_ptr_ptr),
2426 struct symbol_cache_entry **asym_ptr_ptr)
2428 struct symbol_cache_entry *asym_ptr = *asym_ptr_ptr;
2430 flagword flags = asym_ptr->flags;
2432 /* When gas creates relocations against local labels, it creates its
2433 own symbol for the section, but does put the symbol into the
2434 symbol chain, so udata is 0. When the linker is generating
2435 relocatable output, this section symbol may be for one of the
2436 input sections rather than the output section. */
2437 if (asym_ptr->udata == (PTR) 0
2438 && (flags & BSF_SECTION_SYM)
2439 && asym_ptr->section)
2443 if (asym_ptr->section->output_section != NULL)
2444 indx = asym_ptr->section->output_section->index;
2446 indx = asym_ptr->section->index;
2447 if (elf_section_syms (abfd)[indx])
2448 asym_ptr->udata = elf_section_syms (abfd)[indx]->udata;
2451 if (asym_ptr->udata)
2452 idx = ((Elf_Sym_Extra *)asym_ptr->udata)->elf_sym_num;
2462 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx %s\n",
2463 (long) asym_ptr, asym_ptr->name, idx, flags, elf_symbol_flags (flags));
2472 DEFUN (elf_slurp_symbol_table, (abfd, symptrs),
2474 asymbol ** symptrs) /* Buffer for generated bfd symbols */
2476 Elf_Internal_Shdr *hdr = &elf_tdata(abfd)->symtab_hdr;
2477 int symcount; /* Number of external ELF symbols */
2479 elf_symbol_type *sym; /* Pointer to current bfd symbol */
2480 elf_symbol_type *symbase; /* Buffer for generated bfd symbols */
2481 Elf_Internal_Sym i_sym;
2482 Elf_External_Sym *x_symp;
2484 /* this is only valid because there is only one symtab... */
2485 /* FIXME: This is incorrect, there may also be a dynamic symbol
2486 table which is a subset of the full symbol table. We either need
2487 to be prepared to read both (and merge them) or ensure that we
2488 only read the full symbol table. Currently we only get called to
2489 read the full symbol table. -fnf */
2491 /* Read each raw ELF symbol, converting from external ELF form to
2492 internal ELF form, and then using the information to create a
2493 canonical bfd symbol table entry.
2495 Note that we allocate the initial bfd canonical symbol buffer
2496 based on a one-to-one mapping of the ELF symbols to canonical
2497 symbols. We actually use all the ELF symbols, so there will be no
2498 space left over at the end. When we have all the symbols, we
2499 build the caller's pointer vector. */
2501 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) == -1)
2503 bfd_error = system_call_error;
2507 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2508 symbase = (elf_symbol_type *) bfd_zalloc (abfd, symcount * sizeof (elf_symbol_type));
2511 /* Temporarily allocate room for the raw ELF symbols. */
2512 x_symp = (Elf_External_Sym *) bfd_xmalloc (symcount * sizeof (Elf_External_Sym));
2514 if (bfd_read ((PTR) x_symp, sizeof (Elf_External_Sym), symcount, abfd)
2515 != symcount * sizeof (Elf_External_Sym))
2517 free ((PTR) x_symp);
2518 bfd_error = system_call_error;
2521 /* Skip first symbol, which is a null dummy. */
2522 for (i = 1; i < symcount; i++)
2524 elf_swap_symbol_in (abfd, x_symp + i, &i_sym);
2525 memcpy (&sym->internal_elf_sym, &i_sym, sizeof (Elf_Internal_Sym));
2526 #ifdef ELF_KEEP_EXTSYM
2527 memcpy (&sym->native_elf_sym, x_symp + i, sizeof (Elf_External_Sym));
2529 sym->symbol.the_bfd = abfd;
2531 sym->symbol.name = elf_string_from_elf_section (abfd, hdr->sh_link,
2534 sym->symbol.value = i_sym.st_value;
2536 if (i_sym.st_shndx > 0 && i_sym.st_shndx < SHN_LORESERV)
2538 sym->symbol.section = section_from_elf_index (abfd, i_sym.st_shndx);
2540 else if (i_sym.st_shndx == SHN_ABS)
2542 sym->symbol.section = &bfd_abs_section;
2544 else if (i_sym.st_shndx == SHN_COMMON)
2546 sym->symbol.section = &bfd_com_section;
2547 /* Elf puts the alignment into the `value' field, and the size
2548 into the `size' field. BFD wants to see the size in the
2549 value field, and doesn't care (at the moment) about the
2551 sym->symbol.value = i_sym.st_size;
2553 else if (i_sym.st_shndx == SHN_UNDEF)
2555 sym->symbol.section = &bfd_und_section;
2558 sym->symbol.section = &bfd_abs_section;
2560 sym->symbol.value -= sym->symbol.section->vma;
2562 switch (ELF_ST_BIND (i_sym.st_info))
2565 sym->symbol.flags |= BSF_LOCAL;
2568 sym->symbol.flags |= BSF_GLOBAL;
2571 sym->symbol.flags |= BSF_WEAK;
2575 switch (ELF_ST_TYPE (i_sym.st_info))
2578 sym->symbol.flags |= BSF_SECTION_SYM | BSF_DEBUGGING;
2581 sym->symbol.flags |= BSF_FILE | BSF_DEBUGGING;
2584 sym->symbol.flags |= BSF_FUNCTION;
2588 /* Do some backend-specific processing on this symbol. */
2590 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2591 if (ebd->elf_backend_symbol_processing)
2592 (*ebd->elf_backend_symbol_processing) (abfd, &sym->symbol);
2598 /* Do some backend-specific processing on this symbol table. */
2600 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2601 if (ebd->elf_backend_symbol_table_processing)
2602 (*ebd->elf_backend_symbol_table_processing) (abfd, symbase, symcount);
2605 /* We rely on the zalloc to clear out the final symbol entry. */
2607 bfd_get_symcount (abfd) = symcount = sym - symbase;
2609 /* Fill in the user's symbol pointer vector if needed. */
2613 while (symcount-- > 0)
2615 *symptrs++ = &sym->symbol;
2618 *symptrs = 0; /* Final null pointer */
2621 free ((PTR) x_symp);
2625 /* Return the number of bytes required to hold the symtab vector.
2627 Note that we base it on the count plus 1, since we will null terminate
2628 the vector allocated based on this size. However, the ELF symbol table
2629 always has a dummy entry as symbol #0, so it ends up even. */
2632 DEFUN (elf_get_symtab_upper_bound, (abfd), bfd * abfd)
2634 unsigned int symcount;
2635 unsigned int symtab_size = 0;
2637 Elf_Internal_Shdr *hdr = &elf_tdata(abfd)->symtab_hdr;
2638 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
2639 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol));
2645 This function return the number of bytes required to store the
2646 relocation information associated with section <<sect>>
2647 attached to bfd <<abfd>>
2651 elf_get_reloc_upper_bound (abfd, asect)
2655 if (asect->flags & SEC_RELOC)
2657 /* either rel or rela */
2658 return elf_section_data(asect)->rel_hdr.sh_size;
2665 DEFUN (elf_slurp_reloca_table, (abfd, asect, symbols),
2670 Elf_External_Rela *native_relocs;
2671 arelent *reloc_cache;
2676 if (asect->relocation)
2678 if (asect->reloc_count == 0)
2680 if (asect->flags & SEC_CONSTRUCTOR)
2683 bfd_seek (abfd, asect->rel_filepos, SEEK_SET);
2684 native_relocs = (Elf_External_Rela *)
2685 bfd_alloc (abfd, asect->reloc_count * sizeof (Elf_External_Rela));
2686 bfd_read ((PTR) native_relocs,
2687 sizeof (Elf_External_Rela), asect->reloc_count, abfd);
2689 reloc_cache = (arelent *)
2690 bfd_alloc (abfd, (size_t) (asect->reloc_count * sizeof (arelent)));
2694 bfd_error = no_memory;
2698 for (idx = 0; idx < asect->reloc_count; idx++)
2700 Elf_Internal_Rela dst;
2701 Elf_External_Rela *src;
2703 cache_ptr = reloc_cache + idx;
2704 src = native_relocs + idx;
2705 elf_swap_reloca_in (abfd, src, &dst);
2707 #ifdef RELOC_PROCESSING
2708 RELOC_PROCESSING (cache_ptr, &dst, symbols, abfd, asect);
2710 if (asect->flags & SEC_RELOC)
2712 /* relocatable, so the offset is off of the section */
2713 cache_ptr->address = dst.r_offset + asect->vma;
2717 /* non-relocatable, so the offset a virtual address */
2718 cache_ptr->address = dst.r_offset;
2721 /* ELF_R_SYM(dst.r_info) is the symbol table offset. An offset
2722 of zero points to the dummy symbol, which was not read into
2723 the symbol table SYMBOLS. */
2724 if (ELF_R_SYM (dst.r_info) == 0)
2725 cache_ptr->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
2730 cache_ptr->sym_ptr_ptr = symbols + ELF_R_SYM (dst.r_info) - 1;
2732 /* Translate any ELF section symbol into a BFD section
2734 s = *(cache_ptr->sym_ptr_ptr);
2735 if (s->flags & BSF_SECTION_SYM)
2737 cache_ptr->sym_ptr_ptr = s->section->symbol_ptr_ptr;
2738 s = *cache_ptr->sym_ptr_ptr;
2739 if (s->name == 0 || s->name[0] == 0)
2743 cache_ptr->addend = dst.r_addend;
2745 /* Fill in the cache_ptr->howto field from dst.r_type */
2747 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2748 (*ebd->elf_info_to_howto) (abfd, cache_ptr, &dst);
2753 asect->relocation = reloc_cache;
2759 elf_debug_section (str, num, hdr)
2762 Elf_Internal_Shdr *hdr;
2764 fprintf (stderr, "\nSection#%d '%s' 0x%.8lx\n", num, str, (long) hdr);
2766 "sh_name = %ld\tsh_type = %ld\tsh_flags = %ld\n",
2767 (long) hdr->sh_name,
2768 (long) hdr->sh_type,
2769 (long) hdr->sh_flags);
2771 "sh_addr = %ld\tsh_offset = %ld\tsh_size = %ld\n",
2772 (long) hdr->sh_addr,
2773 (long) hdr->sh_offset,
2774 (long) hdr->sh_size);
2776 "sh_link = %ld\tsh_info = %ld\tsh_addralign = %ld\n",
2777 (long) hdr->sh_link,
2778 (long) hdr->sh_info,
2779 (long) hdr->sh_addralign);
2780 fprintf (stderr, "sh_entsize = %ld\n",
2781 (long) hdr->sh_entsize);
2782 fprintf (stderr, "rawdata = 0x%.8lx\n", (long) hdr->rawdata);
2783 fprintf (stderr, "contents = 0x%.8lx\n", (long) hdr->contents);
2784 fprintf (stderr, "size = %ld\n", (long) hdr->size);
2789 elf_debug_file (ehdrp)
2790 Elf_Internal_Ehdr *ehdrp;
2792 fprintf (stderr, "e_entry = 0x%.8lx\n", (long) ehdrp->e_entry);
2793 fprintf (stderr, "e_phoff = %ld\n", (long) ehdrp->e_phoff);
2794 fprintf (stderr, "e_phnum = %ld\n", (long) ehdrp->e_phnum);
2795 fprintf (stderr, "e_phentsize = %ld\n", (long) ehdrp->e_phentsize);
2796 fprintf (stderr, "e_shoff = %ld\n", (long) ehdrp->e_shoff);
2797 fprintf (stderr, "e_shnum = %ld\n", (long) ehdrp->e_shnum);
2798 fprintf (stderr, "e_shentsize = %ld\n", (long) ehdrp->e_shentsize);
2803 DEFUN (elf_slurp_reloc_table, (abfd, asect, symbols),
2808 Elf_External_Rel *native_relocs;
2809 arelent *reloc_cache;
2811 Elf_Internal_Shdr *data_hdr;
2812 ElfNAME (Off) data_off;
2813 ElfNAME (Word) data_max;
2814 char buf[4]; /* FIXME -- might be elf64 */
2818 if (asect->relocation)
2820 if (asect->reloc_count == 0)
2822 if (asect->flags & SEC_CONSTRUCTOR)
2825 bfd_seek (abfd, asect->rel_filepos, SEEK_SET);
2826 native_relocs = (Elf_External_Rel *)
2827 bfd_alloc (abfd, asect->reloc_count * sizeof (Elf_External_Rel));
2828 bfd_read ((PTR) native_relocs,
2829 sizeof (Elf_External_Rel), asect->reloc_count, abfd);
2831 reloc_cache = (arelent *)
2832 bfd_alloc (abfd, (size_t) (asect->reloc_count * sizeof (arelent)));
2836 bfd_error = no_memory;
2840 /* Get the offset of the start of the segment we are relocating to read in
2841 the implicit addend. */
2842 data_hdr = &elf_section_data(asect)->this_hdr;
2843 data_off = data_hdr->sh_offset;
2844 data_max = data_hdr->sh_size - sizeof (buf) + 1;
2847 elf_debug_section ("data section", -1, data_hdr);
2850 for (idx = 0; idx < asect->reloc_count; idx++)
2852 #ifdef RELOC_PROCESSING
2853 Elf_Internal_Rel dst;
2854 Elf_External_Rel *src;
2856 cache_ptr = reloc_cache + idx;
2857 src = native_relocs + idx;
2858 elf_swap_reloc_in (abfd, src, &dst);
2860 RELOC_PROCESSING (cache_ptr, &dst, symbols, abfd, asect);
2862 Elf_Internal_Rel dst;
2863 Elf_External_Rel *src;
2865 cache_ptr = reloc_cache + idx;
2866 src = native_relocs + idx;
2868 elf_swap_reloc_in (abfd, src, &dst);
2870 if (asect->flags & SEC_RELOC)
2872 /* relocatable, so the offset is off of the section */
2873 cache_ptr->address = dst.r_offset + asect->vma;
2877 /* non-relocatable, so the offset a virtual address */
2878 cache_ptr->address = dst.r_offset;
2881 /* ELF_R_SYM(dst.r_info) is the symbol table offset. An offset
2882 of zero points to the dummy symbol, which was not read into
2883 the symbol table SYMBOLS. */
2884 if (ELF_R_SYM (dst.r_info) == 0)
2885 cache_ptr->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
2890 cache_ptr->sym_ptr_ptr = symbols + ELF_R_SYM (dst.r_info) - 1;
2892 /* Translate any ELF section symbol into a BFD section
2894 s = *(cache_ptr->sym_ptr_ptr);
2895 if (s->flags & BSF_SECTION_SYM)
2897 cache_ptr->sym_ptr_ptr = s->section->symbol_ptr_ptr;
2898 s = *cache_ptr->sym_ptr_ptr;
2899 if (s->name == 0 || s->name[0] == 0)
2903 BFD_ASSERT (dst.r_offset <= data_max);
2904 cache_ptr->addend = 0;
2906 /* Fill in the cache_ptr->howto field from dst.r_type */
2908 struct elf_backend_data *ebd = get_elf_backend_data (abfd);
2909 (*ebd->elf_info_to_howto_rel) (abfd, cache_ptr, &dst);
2914 asect->relocation = reloc_cache;
2919 elf_canonicalize_reloc (abfd, section, relptr, symbols)
2925 arelent *tblptr = section->relocation;
2926 unsigned int count = 0;
2927 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
2929 /* snarfed from coffcode.h */
2931 elf_slurp_reloca_table (abfd, section, symbols);
2933 elf_slurp_reloc_table (abfd, section, symbols);
2935 tblptr = section->relocation;
2939 for (; count++ < section->reloc_count;)
2940 *relptr++ = tblptr++;
2943 return section->reloc_count;
2947 DEFUN (elf_get_symtab, (abfd, alocation),
2949 asymbol ** alocation)
2952 if (!elf_slurp_symbol_table (abfd, alocation))
2955 return bfd_get_symcount (abfd);
2959 DEFUN (elf_make_empty_symbol, (abfd),
2962 elf_symbol_type *newsym;
2964 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
2967 bfd_error = no_memory;
2972 newsym->symbol.the_bfd = abfd;
2973 return &newsym->symbol;
2978 DEFUN (elf_get_symbol_info, (ignore_abfd, symbol, ret),
2979 bfd * ignore_abfd AND
2980 asymbol * symbol AND
2983 bfd_symbol_info (symbol, ret);
2987 DEFUN (elf_print_symbol, (ignore_abfd, filep, symbol, how),
2988 bfd * ignore_abfd AND
2990 asymbol * symbol AND
2991 bfd_print_symbol_type how)
2993 FILE *file = (FILE *) filep;
2996 case bfd_print_symbol_name:
2997 fprintf (file, "%s", symbol->name);
2999 case bfd_print_symbol_more:
3000 fprintf (file, "elf ");
3001 fprintf_vma (file, symbol->value);
3002 fprintf (file, " %lx", (long) symbol->flags);
3004 case bfd_print_symbol_all:
3006 CONST char *section_name;
3007 section_name = symbol->section ? symbol->section->name : "(*none*)";
3008 bfd_print_symbol_vandf ((PTR) file, symbol);
3009 fprintf (file, " %s\t%s",
3019 DEFUN (elf_get_lineno, (ignore_abfd, symbol),
3020 bfd * ignore_abfd AND
3023 fprintf (stderr, "elf_get_lineno unimplemented\n");
3030 DEFUN (elf_set_arch_mach, (abfd, arch, machine),
3032 enum bfd_architecture arch AND
3033 unsigned long machine)
3035 /* Allow any architecture to be supported by the elf backend */
3038 case bfd_arch_unknown: /* EM_NONE */
3039 case bfd_arch_sparc: /* EM_SPARC */
3040 case bfd_arch_i386: /* EM_386 */
3041 case bfd_arch_m68k: /* EM_68K */
3042 case bfd_arch_m88k: /* EM_88K */
3043 case bfd_arch_i860: /* EM_860 */
3044 case bfd_arch_mips: /* EM_MIPS (MIPS R3000) */
3045 case bfd_arch_hppa: /* EM_HPPA (HP PA_RISC) */
3046 return bfd_default_set_arch_mach (abfd, arch, machine);
3053 DEFUN (elf_find_nearest_line, (abfd,
3061 asection * section AND
3062 asymbol ** symbols AND
3064 CONST char **filename_ptr AND
3065 CONST char **functionname_ptr AND
3066 unsigned int *line_ptr)
3072 DEFUN (elf_sizeof_headers, (abfd, reloc),
3076 fprintf (stderr, "elf_sizeof_headers unimplemented\n");
3083 DEFUN (elf_set_section_contents, (abfd, section, location, offset, count),
3088 bfd_size_type count)
3090 Elf_Internal_Shdr *hdr;
3092 if (abfd->output_has_begun == false) /* set by bfd.c handler? */
3094 /* do setup calculations (FIXME) */
3095 prep_headers (abfd);
3096 elf_compute_section_file_positions (abfd);
3097 abfd->output_has_begun = true;
3100 hdr = &elf_section_data(section)->this_hdr;
3102 if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
3104 if (bfd_write (location, 1, count, abfd) != count)
3111 DEFUN (elf_no_info_to_howto, (abfd, cache_ptr, dst),
3113 arelent * cache_ptr AND
3114 Elf_Internal_Rela * dst)
3116 fprintf (stderr, "elf RELA relocation support for target machine unimplemented\n");
3122 DEFUN (elf_no_info_to_howto_rel, (abfd, cache_ptr, dst),
3124 arelent * cache_ptr AND
3125 Elf_Internal_Rel * dst)
3127 fprintf (stderr, "elf REL relocation support for target machine unimplemented\n");
3133 /* Core file support */
3135 #ifdef HAVE_PROCFS /* Some core file support requires host /proc files */
3136 #include <sys/procfs.h>
3138 #define bfd_prstatus(abfd, descdata, descsz, filepos) /* Define away */
3139 #define bfd_fpregset(abfd, descdata, descsz, filepos) /* Define away */
3140 #define bfd_prpsinfo(abfd, descdata, descsz, filepos) /* Define away */
3146 DEFUN (bfd_prstatus, (abfd, descdata, descsz, filepos),
3153 prstatus_t *status = (prstatus_t *) 0;
3155 if (descsz == sizeof (prstatus_t))
3157 newsect = bfd_make_section (abfd, ".reg");
3158 newsect->_raw_size = sizeof (status->pr_reg);
3159 newsect->filepos = filepos + (long) &status->pr_reg;
3160 newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3161 newsect->alignment_power = 2;
3162 if ((core_prstatus (abfd) = bfd_alloc (abfd, descsz)) != NULL)
3164 memcpy (core_prstatus (abfd), descdata, descsz);
3169 /* Stash a copy of the prpsinfo structure away for future use. */
3172 DEFUN (bfd_prpsinfo, (abfd, descdata, descsz, filepos),
3180 if (descsz == sizeof (prpsinfo_t))
3182 if ((core_prpsinfo (abfd) = bfd_alloc (abfd, descsz)) != NULL)
3184 memcpy (core_prpsinfo (abfd), descdata, descsz);
3190 DEFUN (bfd_fpregset, (abfd, descdata, descsz, filepos),
3198 newsect = bfd_make_section (abfd, ".reg2");
3199 newsect->_raw_size = descsz;
3200 newsect->filepos = filepos;
3201 newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3202 newsect->alignment_power = 2;
3205 #endif /* HAVE_PROCFS */
3207 /* Return a pointer to the args (including the command name) that were
3208 seen by the program that generated the core dump. Note that for
3209 some reason, a spurious space is tacked onto the end of the args
3210 in some (at least one anyway) implementations, so strip it off if
3214 DEFUN (elf_core_file_failing_command, (abfd),
3218 if (core_prpsinfo (abfd))
3220 prpsinfo_t *p = core_prpsinfo (abfd);
3221 char *scan = p->pr_psargs;
3226 if ((scan > p->pr_psargs) && (*scan == ' '))
3230 return p->pr_psargs;
3236 /* Return the number of the signal that caused the core dump. Presumably,
3237 since we have a core file, we got a signal of some kind, so don't bother
3238 checking the other process status fields, just return the signal number.
3242 DEFUN (elf_core_file_failing_signal, (abfd),
3246 if (core_prstatus (abfd))
3248 return ((prstatus_t *) (core_prstatus (abfd)))->pr_cursig;
3254 /* Check to see if the core file could reasonably be expected to have
3255 come for the current executable file. Note that by default we return
3256 true unless we find something that indicates that there might be a
3261 DEFUN (elf_core_file_matches_executable_p, (core_bfd, exec_bfd),
3270 /* First, xvecs must match since both are ELF files for the same target. */
3272 if (core_bfd->xvec != exec_bfd->xvec)
3274 bfd_error = system_call_error;
3280 /* If no prpsinfo, just return true. Otherwise, grab the last component
3281 of the exec'd pathname from the prpsinfo. */
3283 if (core_prpsinfo (core_bfd))
3285 corename = (((struct prpsinfo *) core_prpsinfo (core_bfd))->pr_fname);
3292 /* Find the last component of the executable pathname. */
3294 if ((execname = strrchr (exec_bfd->filename, '/')) != NULL)
3300 execname = (char *) exec_bfd->filename;
3303 /* See if they match */
3305 return strcmp (execname, corename) ? false : true;
3311 #endif /* HAVE_PROCFS */
3314 /* ELF core files contain a segment of type PT_NOTE, that holds much of
3315 the information that would normally be available from the /proc interface
3316 for the process, at the time the process dumped core. Currently this
3317 includes copies of the prstatus, prpsinfo, and fpregset structures.
3319 Since these structures are potentially machine dependent in size and
3320 ordering, bfd provides two levels of support for them. The first level,
3321 available on all machines since it does not require that the host
3322 have /proc support or the relevant include files, is to create a bfd
3323 section for each of the prstatus, prpsinfo, and fpregset structures,
3324 without any interpretation of their contents. With just this support,
3325 the bfd client will have to interpret the structures itself. Even with
3326 /proc support, it might want these full structures for it's own reasons.
3328 In the second level of support, where HAVE_PROCFS is defined, bfd will
3329 pick apart the structures to gather some additional information that
3330 clients may want, such as the general register set, the name of the
3331 exec'ed file and its arguments, the signal (if any) that caused the
3337 DEFUN (elf_corefile_note, (abfd, hdr),
3339 Elf_Internal_Phdr * hdr)
3341 Elf_External_Note *x_note_p; /* Elf note, external form */
3342 Elf_Internal_Note i_note; /* Elf note, internal form */
3343 char *buf = NULL; /* Entire note segment contents */
3344 char *namedata; /* Name portion of the note */
3345 char *descdata; /* Descriptor portion of the note */
3346 char *sectname; /* Name to use for new section */
3347 long filepos; /* File offset to descriptor data */
3350 if (hdr->p_filesz > 0
3351 && (buf = (char *) bfd_xmalloc (hdr->p_filesz)) != NULL
3352 && bfd_seek (abfd, hdr->p_offset, SEEK_SET) != -1
3353 && bfd_read ((PTR) buf, hdr->p_filesz, 1, abfd) == hdr->p_filesz)
3355 x_note_p = (Elf_External_Note *) buf;
3356 while ((char *) x_note_p < (buf + hdr->p_filesz))
3358 i_note.namesz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->namesz);
3359 i_note.descsz = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->descsz);
3360 i_note.type = bfd_h_get_32 (abfd, (bfd_byte *) x_note_p->type);
3361 namedata = x_note_p->name;
3362 descdata = namedata + BFD_ALIGN (i_note.namesz, 4);
3363 filepos = hdr->p_offset + (descdata - buf);
3364 switch (i_note.type)
3367 /* process descdata as prstatus info */
3368 bfd_prstatus (abfd, descdata, i_note.descsz, filepos);
3369 sectname = ".prstatus";
3372 /* process descdata as fpregset info */
3373 bfd_fpregset (abfd, descdata, i_note.descsz, filepos);
3374 sectname = ".fpregset";
3377 /* process descdata as prpsinfo */
3378 bfd_prpsinfo (abfd, descdata, i_note.descsz, filepos);
3379 sectname = ".prpsinfo";
3382 /* Unknown descriptor, just ignore it. */
3386 if (sectname != NULL)
3388 newsect = bfd_make_section (abfd, sectname);
3389 newsect->_raw_size = i_note.descsz;
3390 newsect->filepos = filepos;
3391 newsect->flags = SEC_ALLOC | SEC_HAS_CONTENTS;
3392 newsect->alignment_power = 2;
3394 x_note_p = (Elf_External_Note *)
3395 (descdata + BFD_ALIGN (i_note.descsz, 4));
3406 /* Core files are simply standard ELF formatted files that partition
3407 the file using the execution view of the file (program header table)
3408 rather than the linking view. In fact, there is no section header
3409 table in a core file.
3411 The process status information (including the contents of the general
3412 register set) and the floating point register set are stored in a
3413 segment of type PT_NOTE. We handcraft a couple of extra bfd sections
3414 that allow standard bfd access to the general registers (.reg) and the
3415 floating point registers (.reg2).
3420 DEFUN (elf_core_file_p, (abfd), bfd * abfd)
3422 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */
3423 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
3424 Elf_External_Phdr x_phdr; /* Program header table entry, external form */
3425 Elf_Internal_Phdr *i_phdrp; /* Program header table, internal form */
3426 unsigned int phindex;
3428 /* Read in the ELF header in external format. */
3430 if (bfd_read ((PTR) & x_ehdr, sizeof (x_ehdr), 1, abfd) != sizeof (x_ehdr))
3432 bfd_error = system_call_error;
3436 /* Now check to see if we have a valid ELF file, and one that BFD can
3437 make use of. The magic number must match, the address size ('class')
3438 and byte-swapping must match our XVEC entry, and it must have a
3439 program header table (FIXME: See comments re segments at top of this
3442 if (elf_file_p (&x_ehdr) == false)
3445 bfd_error = wrong_format;
3449 /* FIXME, Check EI_VERSION here ! */
3453 int desired_address_size = ELFCLASS32;
3456 int desired_address_size = ELFCLASS64;
3459 if (x_ehdr.e_ident[EI_CLASS] != desired_address_size)
3463 /* Switch xvec to match the specified byte order. */
3464 switch (x_ehdr.e_ident[EI_DATA])
3466 case ELFDATA2MSB: /* Big-endian */
3467 if (abfd->xvec->byteorder_big_p == false)
3470 case ELFDATA2LSB: /* Little-endian */
3471 if (abfd->xvec->byteorder_big_p == true)
3474 case ELFDATANONE: /* No data encoding specified */
3475 default: /* Unknown data encoding specified */
3479 /* Allocate an instance of the elf_obj_tdata structure and hook it up to
3480 the tdata pointer in the bfd. */
3483 (struct elf_obj_tdata *) bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
3484 if (elf_tdata (abfd) == NULL)
3486 bfd_error = no_memory;
3490 /* FIXME, `wrong' returns from this point onward, leak memory. */
3492 /* Now that we know the byte order, swap in the rest of the header */
3493 i_ehdrp = elf_elfheader (abfd);
3494 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
3496 elf_debug_file (i_ehdrp);
3499 /* If there is no program header, or the type is not a core file, then
3501 if (i_ehdrp->e_phoff == 0 || i_ehdrp->e_type != ET_CORE)
3504 /* Allocate space for a copy of the program header table in
3505 internal form, seek to the program header table in the file,
3506 read it in, and convert it to internal form. As a simple sanity
3507 check, verify that the what BFD thinks is the size of each program
3508 header table entry actually matches the size recorded in the file. */
3510 if (i_ehdrp->e_phentsize != sizeof (x_phdr))
3512 i_phdrp = (Elf_Internal_Phdr *)
3513 bfd_alloc (abfd, sizeof (*i_phdrp) * i_ehdrp->e_phnum);
3516 bfd_error = no_memory;
3519 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) == -1)
3521 bfd_error = system_call_error;
3524 for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3526 if (bfd_read ((PTR) & x_phdr, sizeof (x_phdr), 1, abfd)
3529 bfd_error = system_call_error;
3532 elf_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
3535 /* Once all of the program headers have been read and converted, we
3536 can start processing them. */
3538 for (phindex = 0; phindex < i_ehdrp->e_phnum; phindex++)
3540 bfd_section_from_phdr (abfd, i_phdrp + phindex, phindex);
3541 if ((i_phdrp + phindex)->p_type == PT_NOTE)
3543 elf_corefile_note (abfd, i_phdrp + phindex);
3547 /* Remember the entry point specified in the ELF file header. */
3549 bfd_get_start_address (abfd) = i_ehdrp->e_entry;