1 /* ELF executable support for BFD.
2 Copyright 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
4 This file is part of BFD, the Binary File Descriptor library.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
25 BFD support for ELF formats is being worked on.
26 Currently, the best supported back ends are for sparc and i386
27 (running svr4 or Solaris 2).
29 Documentation of the internals of the support code still needs
30 to be written. The code is changing quickly enough that we
41 static INLINE struct elf_segment_map *make_mapping
42 PARAMS ((bfd *, asection **, unsigned int, unsigned int, boolean));
43 static boolean map_sections_to_segments PARAMS ((bfd *));
44 static int elf_sort_sections PARAMS ((const PTR, const PTR));
45 static boolean assign_file_positions_for_segments PARAMS ((bfd *));
46 static boolean assign_file_positions_except_relocs PARAMS ((bfd *));
47 static boolean prep_headers PARAMS ((bfd *));
48 static boolean swap_out_syms PARAMS ((bfd *, struct bfd_strtab_hash **));
49 static boolean copy_private_bfd_data PARAMS ((bfd *, bfd *));
50 static char *elf_read PARAMS ((bfd *, long, unsigned int));
51 static void elf_fake_sections PARAMS ((bfd *, asection *, PTR));
52 static boolean assign_section_numbers PARAMS ((bfd *));
53 static INLINE int sym_is_global PARAMS ((bfd *, asymbol *));
54 static boolean elf_map_symbols PARAMS ((bfd *));
55 static bfd_size_type get_program_header_size PARAMS ((bfd *));
57 /* Swap version information in and out. The version information is
58 currently size independent. If that ever changes, this code will
59 need to move into elfcode.h. */
61 /* Swap in a Verdef structure. */
64 _bfd_elf_swap_verdef_in (abfd, src, dst)
66 const Elf_External_Verdef *src;
67 Elf_Internal_Verdef *dst;
69 dst->vd_version = bfd_h_get_16 (abfd, src->vd_version);
70 dst->vd_flags = bfd_h_get_16 (abfd, src->vd_flags);
71 dst->vd_ndx = bfd_h_get_16 (abfd, src->vd_ndx);
72 dst->vd_cnt = bfd_h_get_16 (abfd, src->vd_cnt);
73 dst->vd_hash = bfd_h_get_32 (abfd, src->vd_hash);
74 dst->vd_aux = bfd_h_get_32 (abfd, src->vd_aux);
75 dst->vd_next = bfd_h_get_32 (abfd, src->vd_next);
78 /* Swap out a Verdef structure. */
81 _bfd_elf_swap_verdef_out (abfd, src, dst)
83 const Elf_Internal_Verdef *src;
84 Elf_External_Verdef *dst;
86 bfd_h_put_16 (abfd, src->vd_version, dst->vd_version);
87 bfd_h_put_16 (abfd, src->vd_flags, dst->vd_flags);
88 bfd_h_put_16 (abfd, src->vd_ndx, dst->vd_ndx);
89 bfd_h_put_16 (abfd, src->vd_cnt, dst->vd_cnt);
90 bfd_h_put_32 (abfd, src->vd_hash, dst->vd_hash);
91 bfd_h_put_32 (abfd, src->vd_aux, dst->vd_aux);
92 bfd_h_put_32 (abfd, src->vd_next, dst->vd_next);
95 /* Swap in a Verdaux structure. */
98 _bfd_elf_swap_verdaux_in (abfd, src, dst)
100 const Elf_External_Verdaux *src;
101 Elf_Internal_Verdaux *dst;
103 dst->vda_name = bfd_h_get_32 (abfd, src->vda_name);
104 dst->vda_next = bfd_h_get_32 (abfd, src->vda_next);
107 /* Swap out a Verdaux structure. */
110 _bfd_elf_swap_verdaux_out (abfd, src, dst)
112 const Elf_Internal_Verdaux *src;
113 Elf_External_Verdaux *dst;
115 bfd_h_put_32 (abfd, src->vda_name, dst->vda_name);
116 bfd_h_put_32 (abfd, src->vda_next, dst->vda_next);
119 /* Swap in a Verneed structure. */
122 _bfd_elf_swap_verneed_in (abfd, src, dst)
124 const Elf_External_Verneed *src;
125 Elf_Internal_Verneed *dst;
127 dst->vn_version = bfd_h_get_16 (abfd, src->vn_version);
128 dst->vn_cnt = bfd_h_get_16 (abfd, src->vn_cnt);
129 dst->vn_file = bfd_h_get_32 (abfd, src->vn_file);
130 dst->vn_aux = bfd_h_get_32 (abfd, src->vn_aux);
131 dst->vn_next = bfd_h_get_32 (abfd, src->vn_next);
134 /* Swap out a Verneed structure. */
137 _bfd_elf_swap_verneed_out (abfd, src, dst)
139 const Elf_Internal_Verneed *src;
140 Elf_External_Verneed *dst;
142 bfd_h_put_16 (abfd, src->vn_version, dst->vn_version);
143 bfd_h_put_16 (abfd, src->vn_cnt, dst->vn_cnt);
144 bfd_h_put_32 (abfd, src->vn_file, dst->vn_file);
145 bfd_h_put_32 (abfd, src->vn_aux, dst->vn_aux);
146 bfd_h_put_32 (abfd, src->vn_next, dst->vn_next);
149 /* Swap in a Vernaux structure. */
152 _bfd_elf_swap_vernaux_in (abfd, src, dst)
154 const Elf_External_Vernaux *src;
155 Elf_Internal_Vernaux *dst;
157 dst->vna_hash = bfd_h_get_32 (abfd, src->vna_hash);
158 dst->vna_flags = bfd_h_get_16 (abfd, src->vna_flags);
159 dst->vna_other = bfd_h_get_16 (abfd, src->vna_other);
160 dst->vna_name = bfd_h_get_32 (abfd, src->vna_name);
161 dst->vna_next = bfd_h_get_32 (abfd, src->vna_next);
164 /* Swap out a Vernaux structure. */
167 _bfd_elf_swap_vernaux_out (abfd, src, dst)
169 const Elf_Internal_Vernaux *src;
170 Elf_External_Vernaux *dst;
172 bfd_h_put_32 (abfd, src->vna_hash, dst->vna_hash);
173 bfd_h_put_16 (abfd, src->vna_flags, dst->vna_flags);
174 bfd_h_put_16 (abfd, src->vna_other, dst->vna_other);
175 bfd_h_put_32 (abfd, src->vna_name, dst->vna_name);
176 bfd_h_put_32 (abfd, src->vna_next, dst->vna_next);
179 /* Swap in a Versym structure. */
182 _bfd_elf_swap_versym_in (abfd, src, dst)
184 const Elf_External_Versym *src;
185 Elf_Internal_Versym *dst;
187 dst->vs_vers = bfd_h_get_16 (abfd, src->vs_vers);
190 /* Swap out a Versym structure. */
193 _bfd_elf_swap_versym_out (abfd, src, dst)
195 const Elf_Internal_Versym *src;
196 Elf_External_Versym *dst;
198 bfd_h_put_16 (abfd, src->vs_vers, dst->vs_vers);
201 /* Standard ELF hash function. Do not change this function; you will
202 cause invalid hash tables to be generated. (Well, you would if this
203 were being used yet.) */
206 CONST unsigned char *name;
212 while ((ch = *name++) != '\0')
215 if ((g = (h & 0xf0000000)) != 0)
224 /* Read a specified number of bytes at a specified offset in an ELF
225 file, into a newly allocated buffer, and return a pointer to the
229 elf_read (abfd, offset, size)
236 if ((buf = bfd_alloc (abfd, size)) == NULL)
238 if (bfd_seek (abfd, offset, SEEK_SET) == -1)
240 if (bfd_read ((PTR) buf, size, 1, abfd) != size)
242 if (bfd_get_error () != bfd_error_system_call)
243 bfd_set_error (bfd_error_file_truncated);
250 bfd_elf_mkobject (abfd)
253 /* this just does initialization */
254 /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
255 elf_tdata (abfd) = (struct elf_obj_tdata *)
256 bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
257 if (elf_tdata (abfd) == 0)
259 /* since everything is done at close time, do we need any
266 bfd_elf_get_str_section (abfd, shindex)
268 unsigned int shindex;
270 Elf_Internal_Shdr **i_shdrp;
271 char *shstrtab = NULL;
273 unsigned int shstrtabsize;
275 i_shdrp = elf_elfsections (abfd);
276 if (i_shdrp == 0 || i_shdrp[shindex] == 0)
279 shstrtab = (char *) i_shdrp[shindex]->contents;
280 if (shstrtab == NULL)
282 /* No cached one, attempt to read, and cache what we read. */
283 offset = i_shdrp[shindex]->sh_offset;
284 shstrtabsize = i_shdrp[shindex]->sh_size;
285 shstrtab = elf_read (abfd, offset, shstrtabsize);
286 i_shdrp[shindex]->contents = (PTR) shstrtab;
292 bfd_elf_string_from_elf_section (abfd, shindex, strindex)
294 unsigned int shindex;
295 unsigned int strindex;
297 Elf_Internal_Shdr *hdr;
302 hdr = elf_elfsections (abfd)[shindex];
304 if (hdr->contents == NULL
305 && bfd_elf_get_str_section (abfd, shindex) == NULL)
308 return ((char *) hdr->contents) + strindex;
311 /* Make a BFD section from an ELF section. We store a pointer to the
312 BFD section in the bfd_section field of the header. */
315 _bfd_elf_make_section_from_shdr (abfd, hdr, name)
317 Elf_Internal_Shdr *hdr;
323 if (hdr->bfd_section != NULL)
325 BFD_ASSERT (strcmp (name,
326 bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
330 newsect = bfd_make_section_anyway (abfd, name);
334 newsect->filepos = hdr->sh_offset;
336 if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
337 || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
338 || ! bfd_set_section_alignment (abfd, newsect,
339 bfd_log2 (hdr->sh_addralign)))
342 flags = SEC_NO_FLAGS;
343 if (hdr->sh_type != SHT_NOBITS)
344 flags |= SEC_HAS_CONTENTS;
345 if ((hdr->sh_flags & SHF_ALLOC) != 0)
348 if (hdr->sh_type != SHT_NOBITS)
351 if ((hdr->sh_flags & SHF_WRITE) == 0)
352 flags |= SEC_READONLY;
353 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
355 else if ((flags & SEC_LOAD) != 0)
358 /* The debugging sections appear to be recognized only by name, not
360 if (strncmp (name, ".debug", sizeof ".debug" - 1) == 0
361 || strncmp (name, ".line", sizeof ".line" - 1) == 0
362 || strncmp (name, ".stab", sizeof ".stab" - 1) == 0)
363 flags |= SEC_DEBUGGING;
365 /* As a GNU extension, if the name begins with .gnu.linkonce, we
366 only link a single copy of the section. This is used to support
367 g++. g++ will emit each template expansion in its own section.
368 The symbols will be defined as weak, so that multiple definitions
369 are permitted. The GNU linker extension is to actually discard
370 all but one of the sections. */
371 if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0)
372 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
374 if (! bfd_set_section_flags (abfd, newsect, flags))
377 if ((flags & SEC_ALLOC) != 0)
379 Elf_Internal_Phdr *phdr;
382 /* Look through the phdrs to see if we need to adjust the lma. */
383 phdr = elf_tdata (abfd)->phdr;
384 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
386 if (phdr->p_type == PT_LOAD
387 && phdr->p_paddr != 0
388 && phdr->p_vaddr != phdr->p_paddr
389 && phdr->p_vaddr <= hdr->sh_addr
390 && phdr->p_vaddr + phdr->p_memsz >= hdr->sh_addr + hdr->sh_size
391 && ((flags & SEC_LOAD) == 0
392 || (phdr->p_offset <= hdr->sh_offset
393 && (phdr->p_offset + phdr->p_filesz
394 >= hdr->sh_offset + hdr->sh_size))))
396 newsect->lma += phdr->p_paddr - phdr->p_vaddr;
402 hdr->bfd_section = newsect;
403 elf_section_data (newsect)->this_hdr = *hdr;
413 struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
416 Helper functions for GDB to locate the string tables.
417 Since BFD hides string tables from callers, GDB needs to use an
418 internal hook to find them. Sun's .stabstr, in particular,
419 isn't even pointed to by the .stab section, so ordinary
420 mechanisms wouldn't work to find it, even if we had some.
423 struct elf_internal_shdr *
424 bfd_elf_find_section (abfd, name)
428 Elf_Internal_Shdr **i_shdrp;
433 i_shdrp = elf_elfsections (abfd);
436 shstrtab = bfd_elf_get_str_section (abfd, elf_elfheader (abfd)->e_shstrndx);
437 if (shstrtab != NULL)
439 max = elf_elfheader (abfd)->e_shnum;
440 for (i = 1; i < max; i++)
441 if (!strcmp (&shstrtab[i_shdrp[i]->sh_name], name))
448 const char *const bfd_elf_section_type_names[] = {
449 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
450 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
451 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
454 /* ELF relocs are against symbols. If we are producing relocateable
455 output, and the reloc is against an external symbol, and nothing
456 has given us any additional addend, the resulting reloc will also
457 be against the same symbol. In such a case, we don't want to
458 change anything about the way the reloc is handled, since it will
459 all be done at final link time. Rather than put special case code
460 into bfd_perform_relocation, all the reloc types use this howto
461 function. It just short circuits the reloc if producing
462 relocateable output against an external symbol. */
465 bfd_reloc_status_type
466 bfd_elf_generic_reloc (abfd,
474 arelent *reloc_entry;
477 asection *input_section;
479 char **error_message;
481 if (output_bfd != (bfd *) NULL
482 && (symbol->flags & BSF_SECTION_SYM) == 0
483 && (! reloc_entry->howto->partial_inplace
484 || reloc_entry->addend == 0))
486 reloc_entry->address += input_section->output_offset;
490 return bfd_reloc_continue;
493 /* Print out the program headers. */
496 _bfd_elf_print_private_bfd_data (abfd, farg)
500 FILE *f = (FILE *) farg;
501 Elf_Internal_Phdr *p;
503 bfd_byte *dynbuf = NULL;
505 p = elf_tdata (abfd)->phdr;
510 fprintf (f, "\nProgram Header:\n");
511 c = elf_elfheader (abfd)->e_phnum;
512 for (i = 0; i < c; i++, p++)
519 case PT_NULL: s = "NULL"; break;
520 case PT_LOAD: s = "LOAD"; break;
521 case PT_DYNAMIC: s = "DYNAMIC"; break;
522 case PT_INTERP: s = "INTERP"; break;
523 case PT_NOTE: s = "NOTE"; break;
524 case PT_SHLIB: s = "SHLIB"; break;
525 case PT_PHDR: s = "PHDR"; break;
526 default: sprintf (buf, "0x%lx", p->p_type); s = buf; break;
528 fprintf (f, "%8s off 0x", s);
529 fprintf_vma (f, p->p_offset);
530 fprintf (f, " vaddr 0x");
531 fprintf_vma (f, p->p_vaddr);
532 fprintf (f, " paddr 0x");
533 fprintf_vma (f, p->p_paddr);
534 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
535 fprintf (f, " filesz 0x");
536 fprintf_vma (f, p->p_filesz);
537 fprintf (f, " memsz 0x");
538 fprintf_vma (f, p->p_memsz);
539 fprintf (f, " flags %c%c%c",
540 (p->p_flags & PF_R) != 0 ? 'r' : '-',
541 (p->p_flags & PF_W) != 0 ? 'w' : '-',
542 (p->p_flags & PF_X) != 0 ? 'x' : '-');
543 if ((p->p_flags &~ (PF_R | PF_W | PF_X)) != 0)
544 fprintf (f, " %lx", p->p_flags &~ (PF_R | PF_W | PF_X));
549 s = bfd_get_section_by_name (abfd, ".dynamic");
554 bfd_byte *extdyn, *extdynend;
556 void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
558 fprintf (f, "\nDynamic Section:\n");
560 dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
563 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
567 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
570 link = elf_elfsections (abfd)[elfsec]->sh_link;
572 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
573 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
576 extdynend = extdyn + s->_raw_size;
577 for (; extdyn < extdynend; extdyn += extdynsize)
579 Elf_Internal_Dyn dyn;
584 (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
586 if (dyn.d_tag == DT_NULL)
593 sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
597 case DT_NEEDED: name = "NEEDED"; stringp = true; break;
598 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
599 case DT_PLTGOT: name = "PLTGOT"; break;
600 case DT_HASH: name = "HASH"; break;
601 case DT_STRTAB: name = "STRTAB"; break;
602 case DT_SYMTAB: name = "SYMTAB"; break;
603 case DT_RELA: name = "RELA"; break;
604 case DT_RELASZ: name = "RELASZ"; break;
605 case DT_RELAENT: name = "RELAENT"; break;
606 case DT_STRSZ: name = "STRSZ"; break;
607 case DT_SYMENT: name = "SYMENT"; break;
608 case DT_INIT: name = "INIT"; break;
609 case DT_FINI: name = "FINI"; break;
610 case DT_SONAME: name = "SONAME"; stringp = true; break;
611 case DT_RPATH: name = "RPATH"; stringp = true; break;
612 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
613 case DT_REL: name = "REL"; break;
614 case DT_RELSZ: name = "RELSZ"; break;
615 case DT_RELENT: name = "RELENT"; break;
616 case DT_PLTREL: name = "PLTREL"; break;
617 case DT_DEBUG: name = "DEBUG"; break;
618 case DT_TEXTREL: name = "TEXTREL"; break;
619 case DT_JMPREL: name = "JMPREL"; break;
620 case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
621 case DT_FILTER: name = "FILTER"; stringp = true; break;
622 case DT_VERSYM: name = "VERSYM"; break;
623 case DT_VERDEF: name = "VERDEF"; break;
624 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
625 case DT_VERNEED: name = "VERNEED"; break;
626 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
629 fprintf (f, " %-11s ", name);
631 fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val);
636 string = bfd_elf_string_from_elf_section (abfd, link,
640 fprintf (f, "%s", string);
649 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
650 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
652 if (! _bfd_elf_slurp_version_tables (abfd))
656 if (elf_dynverdef (abfd) != 0)
658 Elf_Internal_Verdef *t;
660 fprintf (f, "\nVersion definitions:\n");
661 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
663 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
664 t->vd_flags, t->vd_hash, t->vd_nodename);
665 if (t->vd_auxptr->vda_nextptr != NULL)
667 Elf_Internal_Verdaux *a;
670 for (a = t->vd_auxptr->vda_nextptr;
673 fprintf (f, "%s ", a->vda_nodename);
679 if (elf_dynverref (abfd) != 0)
681 Elf_Internal_Verneed *t;
683 fprintf (f, "\nVersion References:\n");
684 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
686 Elf_Internal_Vernaux *a;
688 fprintf (f, " required from %s:\n", t->vn_filename);
689 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
690 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
691 a->vna_flags, a->vna_other, a->vna_nodename);
703 /* Display ELF-specific fields of a symbol. */
706 bfd_elf_print_symbol (abfd, filep, symbol, how)
710 bfd_print_symbol_type how;
712 FILE *file = (FILE *) filep;
715 case bfd_print_symbol_name:
716 fprintf (file, "%s", symbol->name);
718 case bfd_print_symbol_more:
719 fprintf (file, "elf ");
720 fprintf_vma (file, symbol->value);
721 fprintf (file, " %lx", (long) symbol->flags);
723 case bfd_print_symbol_all:
725 CONST char *section_name;
726 section_name = symbol->section ? symbol->section->name : "(*none*)";
727 bfd_print_symbol_vandf ((PTR) file, symbol);
728 fprintf (file, " %s\t", section_name);
729 /* Print the "other" value for a symbol. For common symbols,
730 we've already printed the size; now print the alignment.
731 For other symbols, we have no specified alignment, and
732 we've printed the address; now print the size. */
734 (bfd_is_com_section (symbol->section)
735 ? ((elf_symbol_type *) symbol)->internal_elf_sym.st_value
736 : ((elf_symbol_type *) symbol)->internal_elf_sym.st_size));
738 /* If we have version information, print it. */
739 if (elf_tdata (abfd)->dynversym_section != 0
740 && (elf_tdata (abfd)->dynverdef_section != 0
741 || elf_tdata (abfd)->dynverref_section != 0))
744 const char *version_string;
746 vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
750 else if (vernum == 1)
751 version_string = "Base";
752 else if (vernum < elf_tdata (abfd)->cverdefs)
754 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
757 Elf_Internal_Verneed *t;
760 for (t = elf_tdata (abfd)->verref;
764 Elf_Internal_Vernaux *a;
766 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
768 if (a->vna_other == vernum)
770 version_string = a->vna_nodename;
777 if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
778 fprintf (file, " %-12s", version_string);
783 fprintf (file, " (%s)", version_string);
784 for (i = strlen (version_string) - 10; i > 0; --i)
789 /* If the st_other field is not zero, print it. */
790 if (((elf_symbol_type *) symbol)->internal_elf_sym.st_other != 0)
791 fprintf (file, " 0x%02x",
793 ((elf_symbol_type *) symbol)->internal_elf_sym.st_other));
795 fprintf (file, " %s", symbol->name);
801 /* Create an entry in an ELF linker hash table. */
803 struct bfd_hash_entry *
804 _bfd_elf_link_hash_newfunc (entry, table, string)
805 struct bfd_hash_entry *entry;
806 struct bfd_hash_table *table;
809 struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
811 /* Allocate the structure if it has not already been allocated by a
813 if (ret == (struct elf_link_hash_entry *) NULL)
814 ret = ((struct elf_link_hash_entry *)
815 bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry)));
816 if (ret == (struct elf_link_hash_entry *) NULL)
817 return (struct bfd_hash_entry *) ret;
819 /* Call the allocation method of the superclass. */
820 ret = ((struct elf_link_hash_entry *)
821 _bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret,
823 if (ret != (struct elf_link_hash_entry *) NULL)
825 /* Set local fields. */
829 ret->dynstr_index = 0;
831 ret->got_offset = (bfd_vma) -1;
832 ret->plt_offset = (bfd_vma) -1;
833 ret->linker_section_pointer = (elf_linker_section_pointers_t *)0;
834 ret->verinfo.verdef = NULL;
835 ret->type = STT_NOTYPE;
837 /* Assume that we have been called by a non-ELF symbol reader.
838 This flag is then reset by the code which reads an ELF input
839 file. This ensures that a symbol created by a non-ELF symbol
840 reader will have the flag set correctly. */
841 ret->elf_link_hash_flags = ELF_LINK_NON_ELF;
844 return (struct bfd_hash_entry *) ret;
847 /* Initialize an ELF linker hash table. */
850 _bfd_elf_link_hash_table_init (table, abfd, newfunc)
851 struct elf_link_hash_table *table;
853 struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
854 struct bfd_hash_table *,
857 table->dynamic_sections_created = false;
858 table->dynobj = NULL;
859 /* The first dynamic symbol is a dummy. */
860 table->dynsymcount = 1;
861 table->dynstr = NULL;
862 table->bucketcount = 0;
863 table->needed = NULL;
865 table->stab_info = NULL;
866 return _bfd_link_hash_table_init (&table->root, abfd, newfunc);
869 /* Create an ELF linker hash table. */
871 struct bfd_link_hash_table *
872 _bfd_elf_link_hash_table_create (abfd)
875 struct elf_link_hash_table *ret;
877 ret = ((struct elf_link_hash_table *)
878 bfd_alloc (abfd, sizeof (struct elf_link_hash_table)));
879 if (ret == (struct elf_link_hash_table *) NULL)
882 if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc))
884 bfd_release (abfd, ret);
891 /* This is a hook for the ELF emulation code in the generic linker to
892 tell the backend linker what file name to use for the DT_NEEDED
893 entry for a dynamic object. The generic linker passes name as an
894 empty string to indicate that no DT_NEEDED entry should be made. */
897 bfd_elf_set_dt_needed_name (abfd, name)
901 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
902 && bfd_get_format (abfd) == bfd_object)
903 elf_dt_name (abfd) = name;
906 /* Get the list of DT_NEEDED entries for a link. This is a hook for
907 the ELF emulation code. */
909 struct bfd_link_needed_list *
910 bfd_elf_get_needed_list (abfd, info)
912 struct bfd_link_info *info;
914 if (info->hash->creator->flavour != bfd_target_elf_flavour)
916 return elf_hash_table (info)->needed;
919 /* Get the name actually used for a dynamic object for a link. This
920 is the SONAME entry if there is one. Otherwise, it is the string
921 passed to bfd_elf_set_dt_needed_name, or it is the filename. */
924 bfd_elf_get_dt_soname (abfd)
927 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
928 && bfd_get_format (abfd) == bfd_object)
929 return elf_dt_name (abfd);
933 /* Allocate an ELF string table--force the first byte to be zero. */
935 struct bfd_strtab_hash *
936 _bfd_elf_stringtab_init ()
938 struct bfd_strtab_hash *ret;
940 ret = _bfd_stringtab_init ();
945 loc = _bfd_stringtab_add (ret, "", true, false);
946 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
947 if (loc == (bfd_size_type) -1)
949 _bfd_stringtab_free (ret);
956 /* ELF .o/exec file reading */
958 /* Create a new bfd section from an ELF section header. */
961 bfd_section_from_shdr (abfd, shindex)
963 unsigned int shindex;
965 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
966 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
967 struct elf_backend_data *bed = get_elf_backend_data (abfd);
970 name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
972 switch (hdr->sh_type)
975 /* Inactive section. Throw it away. */
978 case SHT_PROGBITS: /* Normal section with contents. */
979 case SHT_DYNAMIC: /* Dynamic linking information. */
980 case SHT_NOBITS: /* .bss section. */
981 case SHT_HASH: /* .hash section. */
982 case SHT_NOTE: /* .note section. */
983 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
985 case SHT_SYMTAB: /* A symbol table */
986 if (elf_onesymtab (abfd) == shindex)
989 BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
990 BFD_ASSERT (elf_onesymtab (abfd) == 0);
991 elf_onesymtab (abfd) = shindex;
992 elf_tdata (abfd)->symtab_hdr = *hdr;
993 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
994 abfd->flags |= HAS_SYMS;
996 /* Sometimes a shared object will map in the symbol table. If
997 SHF_ALLOC is set, and this is a shared object, then we also
998 treat this section as a BFD section. We can not base the
999 decision purely on SHF_ALLOC, because that flag is sometimes
1000 set in a relocateable object file, which would confuse the
1002 if ((hdr->sh_flags & SHF_ALLOC) != 0
1003 && (abfd->flags & DYNAMIC) != 0
1004 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
1009 case SHT_DYNSYM: /* A dynamic symbol table */
1010 if (elf_dynsymtab (abfd) == shindex)
1013 BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1014 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
1015 elf_dynsymtab (abfd) = shindex;
1016 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
1017 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1018 abfd->flags |= HAS_SYMS;
1020 /* Besides being a symbol table, we also treat this as a regular
1021 section, so that objcopy can handle it. */
1022 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1024 case SHT_STRTAB: /* A string table */
1025 if (hdr->bfd_section != NULL)
1027 if (ehdr->e_shstrndx == shindex)
1029 elf_tdata (abfd)->shstrtab_hdr = *hdr;
1030 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
1036 for (i = 1; i < ehdr->e_shnum; i++)
1038 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1039 if (hdr2->sh_link == shindex)
1041 if (! bfd_section_from_shdr (abfd, i))
1043 if (elf_onesymtab (abfd) == i)
1045 elf_tdata (abfd)->strtab_hdr = *hdr;
1046 elf_elfsections (abfd)[shindex] =
1047 &elf_tdata (abfd)->strtab_hdr;
1050 if (elf_dynsymtab (abfd) == i)
1052 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
1053 elf_elfsections (abfd)[shindex] = hdr =
1054 &elf_tdata (abfd)->dynstrtab_hdr;
1055 /* We also treat this as a regular section, so
1056 that objcopy can handle it. */
1059 #if 0 /* Not handling other string tables specially right now. */
1060 hdr2 = elf_elfsections (abfd)[i]; /* in case it moved */
1061 /* We have a strtab for some random other section. */
1062 newsect = (asection *) hdr2->bfd_section;
1065 hdr->bfd_section = newsect;
1066 hdr2 = &elf_section_data (newsect)->str_hdr;
1068 elf_elfsections (abfd)[shindex] = hdr2;
1074 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1078 /* *These* do a lot of work -- but build no sections! */
1080 asection *target_sect;
1081 Elf_Internal_Shdr *hdr2;
1083 /* For some incomprehensible reason Oracle distributes
1084 libraries for Solaris in which some of the objects have
1085 bogus sh_link fields. It would be nice if we could just
1086 reject them, but, unfortunately, some people need to use
1087 them. We scan through the section headers; if we find only
1088 one suitable symbol table, we clobber the sh_link to point
1089 to it. I hope this doesn't break anything. */
1090 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
1091 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
1097 for (scan = 1; scan < ehdr->e_shnum; scan++)
1099 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
1100 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
1111 hdr->sh_link = found;
1114 /* Get the symbol table. */
1115 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
1116 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
1119 /* If this reloc section does not use the main symbol table we
1120 don't treat it as a reloc section. BFD can't adequately
1121 represent such a section, so at least for now, we don't
1122 try. We just present it as a normal section. */
1123 if (hdr->sh_link != elf_onesymtab (abfd))
1124 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1126 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
1128 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
1129 if (target_sect == NULL)
1132 if ((target_sect->flags & SEC_RELOC) == 0
1133 || target_sect->reloc_count == 0)
1134 hdr2 = &elf_section_data (target_sect)->rel_hdr;
1137 BFD_ASSERT (elf_section_data (target_sect)->rel_hdr2 == NULL);
1138 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
1139 elf_section_data (target_sect)->rel_hdr2 = hdr2;
1142 elf_elfsections (abfd)[shindex] = hdr2;
1143 target_sect->reloc_count += hdr->sh_size / hdr->sh_entsize;
1144 target_sect->flags |= SEC_RELOC;
1145 target_sect->relocation = NULL;
1146 target_sect->rel_filepos = hdr->sh_offset;
1147 abfd->flags |= HAS_RELOC;
1152 case SHT_GNU_verdef:
1153 elf_dynverdef (abfd) = shindex;
1154 elf_tdata (abfd)->dynverdef_hdr = *hdr;
1155 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1158 case SHT_GNU_versym:
1159 elf_dynversym (abfd) = shindex;
1160 elf_tdata (abfd)->dynversym_hdr = *hdr;
1161 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1164 case SHT_GNU_verneed:
1165 elf_dynverref (abfd) = shindex;
1166 elf_tdata (abfd)->dynverref_hdr = *hdr;
1167 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1174 /* Check for any processor-specific section types. */
1176 if (bed->elf_backend_section_from_shdr)
1177 (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
1185 /* Given an ELF section number, retrieve the corresponding BFD
1189 bfd_section_from_elf_index (abfd, index)
1193 BFD_ASSERT (index > 0 && index < SHN_LORESERVE);
1194 if (index >= elf_elfheader (abfd)->e_shnum)
1196 return elf_elfsections (abfd)[index]->bfd_section;
1200 _bfd_elf_new_section_hook (abfd, sec)
1204 struct bfd_elf_section_data *sdata;
1206 sdata = (struct bfd_elf_section_data *) bfd_alloc (abfd, sizeof (*sdata));
1209 sec->used_by_bfd = (PTR) sdata;
1210 memset (sdata, 0, sizeof (*sdata));
1214 /* Create a new bfd section from an ELF program header.
1216 Since program segments have no names, we generate a synthetic name
1217 of the form segment<NUM>, where NUM is generally the index in the
1218 program header table. For segments that are split (see below) we
1219 generate the names segment<NUM>a and segment<NUM>b.
1221 Note that some program segments may have a file size that is different than
1222 (less than) the memory size. All this means is that at execution the
1223 system must allocate the amount of memory specified by the memory size,
1224 but only initialize it with the first "file size" bytes read from the
1225 file. This would occur for example, with program segments consisting
1226 of combined data+bss.
1228 To handle the above situation, this routine generates TWO bfd sections
1229 for the single program segment. The first has the length specified by
1230 the file size of the segment, and the second has the length specified
1231 by the difference between the two sizes. In effect, the segment is split
1232 into it's initialized and uninitialized parts.
1237 bfd_section_from_phdr (abfd, hdr, index)
1239 Elf_Internal_Phdr *hdr;
1247 split = ((hdr->p_memsz > 0) &&
1248 (hdr->p_filesz > 0) &&
1249 (hdr->p_memsz > hdr->p_filesz));
1250 sprintf (namebuf, split ? "segment%da" : "segment%d", index);
1251 name = bfd_alloc (abfd, strlen (namebuf) + 1);
1254 strcpy (name, namebuf);
1255 newsect = bfd_make_section (abfd, name);
1256 if (newsect == NULL)
1258 newsect->vma = hdr->p_vaddr;
1259 newsect->lma = hdr->p_paddr;
1260 newsect->_raw_size = hdr->p_filesz;
1261 newsect->filepos = hdr->p_offset;
1262 newsect->flags |= SEC_HAS_CONTENTS;
1263 if (hdr->p_type == PT_LOAD)
1265 newsect->flags |= SEC_ALLOC;
1266 newsect->flags |= SEC_LOAD;
1267 if (hdr->p_flags & PF_X)
1269 /* FIXME: all we known is that it has execute PERMISSION,
1271 newsect->flags |= SEC_CODE;
1274 if (!(hdr->p_flags & PF_W))
1276 newsect->flags |= SEC_READONLY;
1281 sprintf (namebuf, "segment%db", index);
1282 name = bfd_alloc (abfd, strlen (namebuf) + 1);
1285 strcpy (name, namebuf);
1286 newsect = bfd_make_section (abfd, name);
1287 if (newsect == NULL)
1289 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
1290 newsect->lma = hdr->p_paddr + hdr->p_filesz;
1291 newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
1292 if (hdr->p_type == PT_LOAD)
1294 newsect->flags |= SEC_ALLOC;
1295 if (hdr->p_flags & PF_X)
1296 newsect->flags |= SEC_CODE;
1298 if (!(hdr->p_flags & PF_W))
1299 newsect->flags |= SEC_READONLY;
1305 /* Set up an ELF internal section header for a section. */
1309 elf_fake_sections (abfd, asect, failedptrarg)
1314 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1315 boolean *failedptr = (boolean *) failedptrarg;
1316 Elf_Internal_Shdr *this_hdr;
1320 /* We already failed; just get out of the bfd_map_over_sections
1325 this_hdr = &elf_section_data (asect)->this_hdr;
1327 this_hdr->sh_name = (unsigned long) _bfd_stringtab_add (elf_shstrtab (abfd),
1330 if (this_hdr->sh_name == (unsigned long) -1)
1336 this_hdr->sh_flags = 0;
1338 if ((asect->flags & SEC_ALLOC) != 0
1339 || asect->user_set_vma)
1340 this_hdr->sh_addr = asect->vma;
1342 this_hdr->sh_addr = 0;
1344 this_hdr->sh_offset = 0;
1345 this_hdr->sh_size = asect->_raw_size;
1346 this_hdr->sh_link = 0;
1347 this_hdr->sh_addralign = 1 << asect->alignment_power;
1348 /* The sh_entsize and sh_info fields may have been set already by
1349 copy_private_section_data. */
1351 this_hdr->bfd_section = asect;
1352 this_hdr->contents = NULL;
1354 /* FIXME: This should not be based on section names. */
1355 if (strcmp (asect->name, ".dynstr") == 0)
1356 this_hdr->sh_type = SHT_STRTAB;
1357 else if (strcmp (asect->name, ".hash") == 0)
1359 this_hdr->sh_type = SHT_HASH;
1360 this_hdr->sh_entsize = bed->s->arch_size / 8;
1362 else if (strcmp (asect->name, ".dynsym") == 0)
1364 this_hdr->sh_type = SHT_DYNSYM;
1365 this_hdr->sh_entsize = bed->s->sizeof_sym;
1367 else if (strcmp (asect->name, ".dynamic") == 0)
1369 this_hdr->sh_type = SHT_DYNAMIC;
1370 this_hdr->sh_entsize = bed->s->sizeof_dyn;
1372 else if (strncmp (asect->name, ".rela", 5) == 0
1373 && get_elf_backend_data (abfd)->use_rela_p)
1375 this_hdr->sh_type = SHT_RELA;
1376 this_hdr->sh_entsize = bed->s->sizeof_rela;
1378 else if (strncmp (asect->name, ".rel", 4) == 0
1379 && ! get_elf_backend_data (abfd)->use_rela_p)
1381 this_hdr->sh_type = SHT_REL;
1382 this_hdr->sh_entsize = bed->s->sizeof_rel;
1384 else if (strncmp (asect->name, ".note", 5) == 0)
1385 this_hdr->sh_type = SHT_NOTE;
1386 else if (strncmp (asect->name, ".stab", 5) == 0
1387 && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1388 this_hdr->sh_type = SHT_STRTAB;
1389 else if (strcmp (asect->name, ".gnu.version") == 0)
1391 this_hdr->sh_type = SHT_GNU_versym;
1392 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
1394 else if (strcmp (asect->name, ".gnu.version_d") == 0)
1396 this_hdr->sh_type = SHT_GNU_verdef;
1397 this_hdr->sh_entsize = 0;
1398 /* objcopy or strip will copy over sh_info, but may not set
1399 cverdefs. The linker will set cverdefs, but sh_info will be
1401 if (this_hdr->sh_info == 0)
1402 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
1404 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
1405 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
1407 else if (strcmp (asect->name, ".gnu.version_r") == 0)
1409 this_hdr->sh_type = SHT_GNU_verneed;
1410 this_hdr->sh_entsize = 0;
1411 /* objcopy or strip will copy over sh_info, but may not set
1412 cverrefs. The linker will set cverrefs, but sh_info will be
1414 if (this_hdr->sh_info == 0)
1415 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
1417 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
1418 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
1420 else if ((asect->flags & SEC_ALLOC) != 0
1421 && (asect->flags & SEC_LOAD) != 0)
1422 this_hdr->sh_type = SHT_PROGBITS;
1423 else if ((asect->flags & SEC_ALLOC) != 0
1424 && ((asect->flags & SEC_LOAD) == 0))
1425 this_hdr->sh_type = SHT_NOBITS;
1429 this_hdr->sh_type = SHT_PROGBITS;
1432 if ((asect->flags & SEC_ALLOC) != 0)
1433 this_hdr->sh_flags |= SHF_ALLOC;
1434 if ((asect->flags & SEC_READONLY) == 0)
1435 this_hdr->sh_flags |= SHF_WRITE;
1436 if ((asect->flags & SEC_CODE) != 0)
1437 this_hdr->sh_flags |= SHF_EXECINSTR;
1439 /* Check for processor-specific section types. */
1441 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1443 if (bed->elf_backend_fake_sections)
1444 (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1447 /* If the section has relocs, set up a section header for the
1448 SHT_REL[A] section. */
1449 if ((asect->flags & SEC_RELOC) != 0)
1451 Elf_Internal_Shdr *rela_hdr;
1452 int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1455 rela_hdr = &elf_section_data (asect)->rel_hdr;
1456 name = bfd_alloc (abfd, sizeof ".rela" + strlen (asect->name));
1462 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
1464 (unsigned int) _bfd_stringtab_add (elf_shstrtab (abfd), name,
1466 if (rela_hdr->sh_name == (unsigned int) -1)
1471 rela_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1472 rela_hdr->sh_entsize = (use_rela_p
1473 ? bed->s->sizeof_rela
1474 : bed->s->sizeof_rel);
1475 rela_hdr->sh_addralign = bed->s->file_align;
1476 rela_hdr->sh_flags = 0;
1477 rela_hdr->sh_addr = 0;
1478 rela_hdr->sh_size = 0;
1479 rela_hdr->sh_offset = 0;
1483 /* Assign all ELF section numbers. The dummy first section is handled here
1484 too. The link/info pointers for the standard section types are filled
1485 in here too, while we're at it. */
1488 assign_section_numbers (abfd)
1491 struct elf_obj_tdata *t = elf_tdata (abfd);
1493 unsigned int section_number;
1494 Elf_Internal_Shdr **i_shdrp;
1495 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1499 for (sec = abfd->sections; sec; sec = sec->next)
1501 struct bfd_elf_section_data *d = elf_section_data (sec);
1503 d->this_idx = section_number++;
1504 if ((sec->flags & SEC_RELOC) == 0)
1507 d->rel_idx = section_number++;
1510 t->shstrtab_section = section_number++;
1511 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
1512 t->shstrtab_hdr.sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1514 if (abfd->symcount > 0)
1516 t->symtab_section = section_number++;
1517 t->strtab_section = section_number++;
1520 elf_elfheader (abfd)->e_shnum = section_number;
1522 /* Set up the list of section header pointers, in agreement with the
1524 i_shdrp = ((Elf_Internal_Shdr **)
1525 bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *)));
1526 if (i_shdrp == NULL)
1529 i_shdrp[0] = ((Elf_Internal_Shdr *)
1530 bfd_alloc (abfd, sizeof (Elf_Internal_Shdr)));
1531 if (i_shdrp[0] == NULL)
1533 bfd_release (abfd, i_shdrp);
1536 memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
1538 elf_elfsections (abfd) = i_shdrp;
1540 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1541 if (abfd->symcount > 0)
1543 i_shdrp[t->symtab_section] = &t->symtab_hdr;
1544 i_shdrp[t->strtab_section] = &t->strtab_hdr;
1545 t->symtab_hdr.sh_link = t->strtab_section;
1547 for (sec = abfd->sections; sec; sec = sec->next)
1549 struct bfd_elf_section_data *d = elf_section_data (sec);
1553 i_shdrp[d->this_idx] = &d->this_hdr;
1554 if (d->rel_idx != 0)
1555 i_shdrp[d->rel_idx] = &d->rel_hdr;
1557 /* Fill in the sh_link and sh_info fields while we're at it. */
1559 /* sh_link of a reloc section is the section index of the symbol
1560 table. sh_info is the section index of the section to which
1561 the relocation entries apply. */
1562 if (d->rel_idx != 0)
1564 d->rel_hdr.sh_link = t->symtab_section;
1565 d->rel_hdr.sh_info = d->this_idx;
1568 switch (d->this_hdr.sh_type)
1572 /* A reloc section which we are treating as a normal BFD
1573 section. sh_link is the section index of the symbol
1574 table. sh_info is the section index of the section to
1575 which the relocation entries apply. We assume that an
1576 allocated reloc section uses the dynamic symbol table.
1577 FIXME: How can we be sure? */
1578 s = bfd_get_section_by_name (abfd, ".dynsym");
1580 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1582 /* We look up the section the relocs apply to by name. */
1584 if (d->this_hdr.sh_type == SHT_REL)
1588 s = bfd_get_section_by_name (abfd, name);
1590 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
1594 /* We assume that a section named .stab*str is a stabs
1595 string section. We look for a section with the same name
1596 but without the trailing ``str'', and set its sh_link
1597 field to point to this section. */
1598 if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
1599 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
1604 len = strlen (sec->name);
1605 alc = (char *) bfd_malloc (len - 2);
1608 strncpy (alc, sec->name, len - 3);
1609 alc[len - 3] = '\0';
1610 s = bfd_get_section_by_name (abfd, alc);
1614 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1616 /* This is a .stab section. */
1617 elf_section_data (s)->this_hdr.sh_entsize =
1618 4 + 2 * (bed->s->arch_size / 8);
1625 case SHT_GNU_verneed:
1626 case SHT_GNU_verdef:
1627 /* sh_link is the section header index of the string table
1628 used for the dynamic entries, or the symbol table, or the
1630 s = bfd_get_section_by_name (abfd, ".dynstr");
1632 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1636 case SHT_GNU_versym:
1637 /* sh_link is the section header index of the symbol table
1638 this hash table or version table is for. */
1639 s = bfd_get_section_by_name (abfd, ".dynsym");
1641 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1649 /* Map symbol from it's internal number to the external number, moving
1650 all local symbols to be at the head of the list. */
1653 sym_is_global (abfd, sym)
1657 /* If the backend has a special mapping, use it. */
1658 if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1659 return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1662 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
1663 || bfd_is_und_section (bfd_get_section (sym))
1664 || bfd_is_com_section (bfd_get_section (sym)));
1668 elf_map_symbols (abfd)
1671 int symcount = bfd_get_symcount (abfd);
1672 asymbol **syms = bfd_get_outsymbols (abfd);
1673 asymbol **sect_syms;
1675 int num_globals = 0;
1676 int num_locals2 = 0;
1677 int num_globals2 = 0;
1679 int num_sections = 0;
1685 fprintf (stderr, "elf_map_symbols\n");
1689 /* Add a section symbol for each BFD section. FIXME: Is this really
1691 for (asect = abfd->sections; asect; asect = asect->next)
1693 if (max_index < asect->index)
1694 max_index = asect->index;
1698 sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1699 if (sect_syms == NULL)
1701 elf_section_syms (abfd) = sect_syms;
1703 for (idx = 0; idx < symcount; idx++)
1705 if ((syms[idx]->flags & BSF_SECTION_SYM) != 0
1706 && (syms[idx]->value + syms[idx]->section->vma) == 0)
1710 sec = syms[idx]->section;
1711 if (sec->owner != NULL)
1713 if (sec->owner != abfd)
1715 if (sec->output_offset != 0)
1717 sec = sec->output_section;
1718 BFD_ASSERT (sec->owner == abfd);
1720 sect_syms[sec->index] = syms[idx];
1725 for (asect = abfd->sections; asect; asect = asect->next)
1729 if (sect_syms[asect->index] != NULL)
1732 sym = bfd_make_empty_symbol (abfd);
1735 sym->the_bfd = abfd;
1736 sym->name = asect->name;
1738 /* Set the flags to 0 to indicate that this one was newly added. */
1740 sym->section = asect;
1741 sect_syms[asect->index] = sym;
1745 "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n",
1746 asect->name, (long) asect->vma, asect->index, (long) asect);
1750 /* Classify all of the symbols. */
1751 for (idx = 0; idx < symcount; idx++)
1753 if (!sym_is_global (abfd, syms[idx]))
1758 for (asect = abfd->sections; asect; asect = asect->next)
1760 if (sect_syms[asect->index] != NULL
1761 && sect_syms[asect->index]->flags == 0)
1763 sect_syms[asect->index]->flags = BSF_SECTION_SYM;
1764 if (!sym_is_global (abfd, sect_syms[asect->index]))
1768 sect_syms[asect->index]->flags = 0;
1772 /* Now sort the symbols so the local symbols are first. */
1773 new_syms = ((asymbol **)
1775 (num_locals + num_globals) * sizeof (asymbol *)));
1776 if (new_syms == NULL)
1779 for (idx = 0; idx < symcount; idx++)
1781 asymbol *sym = syms[idx];
1784 if (!sym_is_global (abfd, sym))
1787 i = num_locals + num_globals2++;
1789 sym->udata.i = i + 1;
1791 for (asect = abfd->sections; asect; asect = asect->next)
1793 if (sect_syms[asect->index] != NULL
1794 && sect_syms[asect->index]->flags == 0)
1796 asymbol *sym = sect_syms[asect->index];
1799 sym->flags = BSF_SECTION_SYM;
1800 if (!sym_is_global (abfd, sym))
1803 i = num_locals + num_globals2++;
1805 sym->udata.i = i + 1;
1809 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
1811 elf_num_locals (abfd) = num_locals;
1812 elf_num_globals (abfd) = num_globals;
1816 /* Align to the maximum file alignment that could be required for any
1817 ELF data structure. */
1819 static INLINE file_ptr align_file_position PARAMS ((file_ptr, int));
1820 static INLINE file_ptr
1821 align_file_position (off, align)
1825 return (off + align - 1) & ~(align - 1);
1828 /* Assign a file position to a section, optionally aligning to the
1829 required section alignment. */
1832 _bfd_elf_assign_file_position_for_section (i_shdrp, offset, align)
1833 Elf_Internal_Shdr *i_shdrp;
1841 al = i_shdrp->sh_addralign;
1843 offset = BFD_ALIGN (offset, al);
1845 i_shdrp->sh_offset = offset;
1846 if (i_shdrp->bfd_section != NULL)
1847 i_shdrp->bfd_section->filepos = offset;
1848 if (i_shdrp->sh_type != SHT_NOBITS)
1849 offset += i_shdrp->sh_size;
1853 /* Compute the file positions we are going to put the sections at, and
1854 otherwise prepare to begin writing out the ELF file. If LINK_INFO
1855 is not NULL, this is being called by the ELF backend linker. */
1858 _bfd_elf_compute_section_file_positions (abfd, link_info)
1860 struct bfd_link_info *link_info;
1862 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1864 struct bfd_strtab_hash *strtab;
1865 Elf_Internal_Shdr *shstrtab_hdr;
1867 if (abfd->output_has_begun)
1870 /* Do any elf backend specific processing first. */
1871 if (bed->elf_backend_begin_write_processing)
1872 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
1874 if (! prep_headers (abfd))
1878 bfd_map_over_sections (abfd, elf_fake_sections, &failed);
1882 if (!assign_section_numbers (abfd))
1885 /* The backend linker builds symbol table information itself. */
1886 if (link_info == NULL && abfd->symcount > 0)
1888 if (! swap_out_syms (abfd, &strtab))
1892 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
1893 /* sh_name was set in prep_headers. */
1894 shstrtab_hdr->sh_type = SHT_STRTAB;
1895 shstrtab_hdr->sh_flags = 0;
1896 shstrtab_hdr->sh_addr = 0;
1897 shstrtab_hdr->sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1898 shstrtab_hdr->sh_entsize = 0;
1899 shstrtab_hdr->sh_link = 0;
1900 shstrtab_hdr->sh_info = 0;
1901 /* sh_offset is set in assign_file_positions_except_relocs. */
1902 shstrtab_hdr->sh_addralign = 1;
1904 if (!assign_file_positions_except_relocs (abfd))
1907 if (link_info == NULL && abfd->symcount > 0)
1910 Elf_Internal_Shdr *hdr;
1912 off = elf_tdata (abfd)->next_file_pos;
1914 hdr = &elf_tdata (abfd)->symtab_hdr;
1915 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
1917 hdr = &elf_tdata (abfd)->strtab_hdr;
1918 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
1920 elf_tdata (abfd)->next_file_pos = off;
1922 /* Now that we know where the .strtab section goes, write it
1924 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
1925 || ! _bfd_stringtab_emit (abfd, strtab))
1927 _bfd_stringtab_free (strtab);
1930 abfd->output_has_begun = true;
1935 /* Create a mapping from a set of sections to a program segment. */
1937 static INLINE struct elf_segment_map *
1938 make_mapping (abfd, sections, from, to, phdr)
1940 asection **sections;
1945 struct elf_segment_map *m;
1949 m = ((struct elf_segment_map *)
1951 (sizeof (struct elf_segment_map)
1952 + (to - from - 1) * sizeof (asection *))));
1956 m->p_type = PT_LOAD;
1957 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
1958 m->sections[i - from] = *hdrpp;
1959 m->count = to - from;
1961 if (from == 0 && phdr)
1963 /* Include the headers in the first PT_LOAD segment. */
1964 m->includes_filehdr = 1;
1965 m->includes_phdrs = 1;
1971 /* Set up a mapping from BFD sections to program segments. */
1974 map_sections_to_segments (abfd)
1977 asection **sections = NULL;
1981 struct elf_segment_map *mfirst;
1982 struct elf_segment_map **pm;
1983 struct elf_segment_map *m;
1985 unsigned int phdr_index;
1986 bfd_vma maxpagesize;
1988 boolean phdr_in_section = true;
1992 if (elf_tdata (abfd)->segment_map != NULL)
1995 if (bfd_count_sections (abfd) == 0)
1998 /* Select the allocated sections, and sort them. */
2000 sections = (asection **) bfd_malloc (bfd_count_sections (abfd)
2001 * sizeof (asection *));
2002 if (sections == NULL)
2006 for (s = abfd->sections; s != NULL; s = s->next)
2008 if ((s->flags & SEC_ALLOC) != 0)
2014 BFD_ASSERT (i <= bfd_count_sections (abfd));
2017 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
2019 /* Build the mapping. */
2024 /* If we have a .interp section, then create a PT_PHDR segment for
2025 the program headers and a PT_INTERP segment for the .interp
2027 s = bfd_get_section_by_name (abfd, ".interp");
2028 if (s != NULL && (s->flags & SEC_LOAD) != 0)
2030 m = ((struct elf_segment_map *)
2031 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2035 m->p_type = PT_PHDR;
2036 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
2037 m->p_flags = PF_R | PF_X;
2038 m->p_flags_valid = 1;
2039 m->includes_phdrs = 1;
2044 m = ((struct elf_segment_map *)
2045 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2049 m->p_type = PT_INTERP;
2057 /* Look through the sections. We put sections in the same program
2058 segment when the start of the second section can be placed within
2059 a few bytes of the end of the first section. */
2062 maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
2064 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
2066 && (dynsec->flags & SEC_LOAD) == 0)
2069 /* Deal with -Ttext or something similar such that the first section
2070 is not adjacent to the program headers. This is an
2071 approximation, since at this point we don't know exactly how many
2072 program headers we will need. */
2075 bfd_size_type phdr_size;
2077 phdr_size = elf_tdata (abfd)->program_header_size;
2079 phdr_size = get_elf_backend_data (abfd)->s->sizeof_phdr;
2080 if ((abfd->flags & D_PAGED) == 0
2081 || sections[0]->lma % maxpagesize < phdr_size % maxpagesize)
2082 phdr_in_section = false;
2085 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
2088 boolean new_segment;
2092 /* See if this section and the last one will fit in the same
2095 if (last_hdr == NULL)
2097 /* If we don't have a segment yet, then we don't need a new
2098 one (we build the last one after this loop). */
2099 new_segment = false;
2101 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
2103 /* If this section has a different relation between the
2104 virtual address and the load address, then we need a new
2108 else if (BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
2111 /* If putting this section in this segment would force us to
2112 skip a page in the segment, then we need a new segment. */
2115 else if ((abfd->flags & D_PAGED) == 0)
2117 /* If the file is not demand paged, which means that we
2118 don't require the sections to be correctly aligned in the
2119 file, then there is no other reason for a new segment. */
2120 new_segment = false;
2122 else if ((last_hdr->flags & SEC_LOAD) == 0
2123 && (hdr->flags & SEC_LOAD) != 0)
2125 /* We don't want to put a loadable section after a
2126 nonloadable section in the same segment. */
2130 && (hdr->flags & SEC_READONLY) == 0
2131 && (BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
2134 /* We don't want to put a writable section in a read only
2135 segment, unless they are on the same page in memory
2136 anyhow. We already know that the last section does not
2137 bring us past the current section on the page, so the
2138 only case in which the new section is not on the same
2139 page as the previous section is when the previous section
2140 ends precisely on a page boundary. */
2145 /* Otherwise, we can use the same segment. */
2146 new_segment = false;
2151 if ((hdr->flags & SEC_READONLY) == 0)
2157 /* We need a new program segment. We must create a new program
2158 header holding all the sections from phdr_index until hdr. */
2160 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_section);
2167 if ((hdr->flags & SEC_READONLY) == 0)
2174 phdr_in_section = false;
2177 /* Create a final PT_LOAD program segment. */
2178 if (last_hdr != NULL)
2180 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_section);
2188 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
2191 m = ((struct elf_segment_map *)
2192 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2196 m->p_type = PT_DYNAMIC;
2198 m->sections[0] = dynsec;
2204 /* For each loadable .note section, add a PT_NOTE segment. We don't
2205 use bfd_get_section_by_name, because if we link together
2206 nonloadable .note sections and loadable .note sections, we will
2207 generate two .note sections in the output file. FIXME: Using
2208 names for section types is bogus anyhow. */
2209 for (s = abfd->sections; s != NULL; s = s->next)
2211 if ((s->flags & SEC_LOAD) != 0
2212 && strncmp (s->name, ".note", 5) == 0)
2214 m = ((struct elf_segment_map *)
2215 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2219 m->p_type = PT_NOTE;
2231 elf_tdata (abfd)->segment_map = mfirst;
2235 if (sections != NULL)
2240 /* Sort sections by VMA. */
2243 elf_sort_sections (arg1, arg2)
2247 const asection *sec1 = *(const asection **) arg1;
2248 const asection *sec2 = *(const asection **) arg2;
2250 if (sec1->vma < sec2->vma)
2252 else if (sec1->vma > sec2->vma)
2255 /* Sort by LMA. Normally the LMA and the VMA will be the same, and
2256 this will do nothing. */
2257 if (sec1->lma < sec2->lma)
2259 else if (sec1->lma > sec2->lma)
2262 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
2264 #define TOEND(x) (((x)->flags & SEC_LOAD) == 0)
2268 return sec1->target_index - sec2->target_index;
2277 /* Sort by size, to put zero sized sections before others at the
2280 if (sec1->_raw_size < sec2->_raw_size)
2282 if (sec1->_raw_size > sec2->_raw_size)
2285 return sec1->target_index - sec2->target_index;
2288 /* Assign file positions to the sections based on the mapping from
2289 sections to segments. This function also sets up some fields in
2290 the file header, and writes out the program headers. */
2293 assign_file_positions_for_segments (abfd)
2296 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2298 struct elf_segment_map *m;
2300 Elf_Internal_Phdr *phdrs;
2302 bfd_vma filehdr_vaddr, filehdr_paddr;
2303 bfd_vma phdrs_vaddr, phdrs_paddr;
2304 Elf_Internal_Phdr *p;
2306 if (elf_tdata (abfd)->segment_map == NULL)
2308 if (! map_sections_to_segments (abfd))
2312 if (bed->elf_backend_modify_segment_map)
2314 if (! (*bed->elf_backend_modify_segment_map) (abfd))
2319 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
2322 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
2323 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
2324 elf_elfheader (abfd)->e_phnum = count;
2329 /* If we already counted the number of program segments, make sure
2330 that we allocated enough space. This happens when SIZEOF_HEADERS
2331 is used in a linker script. */
2332 alloc = elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr;
2333 if (alloc != 0 && count > alloc)
2335 ((*_bfd_error_handler)
2336 ("%s: Not enough room for program headers (allocated %u, need %u)",
2337 bfd_get_filename (abfd), alloc, count));
2338 bfd_set_error (bfd_error_bad_value);
2345 phdrs = ((Elf_Internal_Phdr *)
2346 bfd_alloc (abfd, alloc * sizeof (Elf_Internal_Phdr)));
2350 off = bed->s->sizeof_ehdr;
2351 off += alloc * bed->s->sizeof_phdr;
2357 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
2364 /* If elf_segment_map is not from map_sections_to_segments, the
2365 sections may not be correctly ordered. */
2367 qsort (m->sections, (size_t) m->count, sizeof (asection *),
2370 p->p_type = m->p_type;
2372 if (m->p_flags_valid)
2373 p->p_flags = m->p_flags;
2377 if (p->p_type == PT_LOAD
2379 && (m->sections[0]->flags & SEC_ALLOC) != 0)
2381 if ((abfd->flags & D_PAGED) != 0)
2382 off += (m->sections[0]->vma - off) % bed->maxpagesize;
2384 off += ((m->sections[0]->vma - off)
2385 % (1 << bfd_get_section_alignment (abfd, m->sections[0])));
2391 p->p_vaddr = m->sections[0]->vma;
2393 if (m->p_paddr_valid)
2394 p->p_paddr = m->p_paddr;
2395 else if (m->count == 0)
2398 p->p_paddr = m->sections[0]->lma;
2400 if (p->p_type == PT_LOAD
2401 && (abfd->flags & D_PAGED) != 0)
2402 p->p_align = bed->maxpagesize;
2403 else if (m->count == 0)
2404 p->p_align = bed->s->file_align;
2412 if (m->includes_filehdr)
2414 if (! m->p_flags_valid)
2417 p->p_filesz = bed->s->sizeof_ehdr;
2418 p->p_memsz = bed->s->sizeof_ehdr;
2421 BFD_ASSERT (p->p_type == PT_LOAD);
2423 if (! m->p_paddr_valid)
2426 if (p->p_type == PT_LOAD)
2428 filehdr_vaddr = p->p_vaddr;
2429 filehdr_paddr = p->p_paddr;
2433 if (m->includes_phdrs)
2435 if (! m->p_flags_valid)
2437 if (m->includes_filehdr)
2439 if (p->p_type == PT_LOAD)
2441 phdrs_vaddr = p->p_vaddr + bed->s->sizeof_ehdr;
2442 phdrs_paddr = p->p_paddr + bed->s->sizeof_ehdr;
2447 p->p_offset = bed->s->sizeof_ehdr;
2450 BFD_ASSERT (p->p_type == PT_LOAD);
2451 p->p_vaddr -= off - p->p_offset;
2452 if (! m->p_paddr_valid)
2453 p->p_paddr -= off - p->p_offset;
2455 if (p->p_type == PT_LOAD)
2457 phdrs_vaddr = p->p_vaddr;
2458 phdrs_paddr = p->p_paddr;
2461 p->p_filesz += alloc * bed->s->sizeof_phdr;
2462 p->p_memsz += alloc * bed->s->sizeof_phdr;
2465 if (p->p_type == PT_LOAD)
2467 if (! m->includes_filehdr && ! m->includes_phdrs)
2473 adjust = off - (p->p_offset + p->p_filesz);
2474 p->p_filesz += adjust;
2475 p->p_memsz += adjust;
2480 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
2484 bfd_size_type align;
2488 align = 1 << bfd_get_section_alignment (abfd, sec);
2490 if (p->p_type == PT_LOAD)
2494 /* The section VMA must equal the file position modulo
2496 if ((flags & SEC_ALLOC) != 0)
2498 if ((abfd->flags & D_PAGED) != 0)
2499 adjust = (sec->vma - voff) % bed->maxpagesize;
2501 adjust = (sec->vma - voff) % align;
2506 p->p_memsz += adjust;
2509 if ((flags & SEC_LOAD) != 0)
2510 p->p_filesz += adjust;
2516 if ((flags & SEC_LOAD) != 0)
2517 off += sec->_raw_size;
2518 if ((flags & SEC_ALLOC) != 0)
2519 voff += sec->_raw_size;
2522 p->p_memsz += sec->_raw_size;
2524 if ((flags & SEC_LOAD) != 0)
2525 p->p_filesz += sec->_raw_size;
2527 if (align > p->p_align)
2530 if (! m->p_flags_valid)
2533 if ((flags & SEC_CODE) != 0)
2535 if ((flags & SEC_READONLY) == 0)
2541 /* Now that we have set the section file positions, we can set up
2542 the file positions for the non PT_LOAD segments. */
2543 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
2547 if (p->p_type != PT_LOAD && m->count > 0)
2549 BFD_ASSERT (! m->includes_filehdr && ! m->includes_phdrs);
2550 p->p_offset = m->sections[0]->filepos;
2554 if (m->includes_filehdr)
2556 p->p_vaddr = filehdr_vaddr;
2557 if (! m->p_paddr_valid)
2558 p->p_paddr = filehdr_paddr;
2560 else if (m->includes_phdrs)
2562 p->p_vaddr = phdrs_vaddr;
2563 if (! m->p_paddr_valid)
2564 p->p_paddr = phdrs_paddr;
2569 /* Clear out any program headers we allocated but did not use. */
2570 for (; count < alloc; count++, p++)
2572 memset (p, 0, sizeof *p);
2573 p->p_type = PT_NULL;
2576 elf_tdata (abfd)->phdr = phdrs;
2578 elf_tdata (abfd)->next_file_pos = off;
2580 /* Write out the program headers. */
2581 if (bfd_seek (abfd, bed->s->sizeof_ehdr, SEEK_SET) != 0
2582 || bed->s->write_out_phdrs (abfd, phdrs, alloc) != 0)
2588 /* Get the size of the program header.
2590 If this is called by the linker before any of the section VMA's are set, it
2591 can't calculate the correct value for a strange memory layout. This only
2592 happens when SIZEOF_HEADERS is used in a linker script. In this case,
2593 SORTED_HDRS is NULL and we assume the normal scenario of one text and one
2594 data segment (exclusive of .interp and .dynamic).
2596 ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
2597 will be two segments. */
2599 static bfd_size_type
2600 get_program_header_size (abfd)
2605 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2607 /* We can't return a different result each time we're called. */
2608 if (elf_tdata (abfd)->program_header_size != 0)
2609 return elf_tdata (abfd)->program_header_size;
2611 if (elf_tdata (abfd)->segment_map != NULL)
2613 struct elf_segment_map *m;
2616 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
2618 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
2619 return elf_tdata (abfd)->program_header_size;
2622 /* Assume we will need exactly two PT_LOAD segments: one for text
2623 and one for data. */
2626 s = bfd_get_section_by_name (abfd, ".interp");
2627 if (s != NULL && (s->flags & SEC_LOAD) != 0)
2629 /* If we have a loadable interpreter section, we need a
2630 PT_INTERP segment. In this case, assume we also need a
2631 PT_PHDR segment, although that may not be true for all
2636 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
2638 /* We need a PT_DYNAMIC segment. */
2642 for (s = abfd->sections; s != NULL; s = s->next)
2644 if ((s->flags & SEC_LOAD) != 0
2645 && strncmp (s->name, ".note", 5) == 0)
2647 /* We need a PT_NOTE segment. */
2652 /* Let the backend count up any program headers it might need. */
2653 if (bed->elf_backend_additional_program_headers)
2657 a = (*bed->elf_backend_additional_program_headers) (abfd);
2663 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
2664 return elf_tdata (abfd)->program_header_size;
2667 /* Work out the file positions of all the sections. This is called by
2668 _bfd_elf_compute_section_file_positions. All the section sizes and
2669 VMAs must be known before this is called.
2671 We do not consider reloc sections at this point, unless they form
2672 part of the loadable image. Reloc sections are assigned file
2673 positions in assign_file_positions_for_relocs, which is called by
2674 write_object_contents and final_link.
2676 We also don't set the positions of the .symtab and .strtab here. */
2679 assign_file_positions_except_relocs (abfd)
2682 struct elf_obj_tdata * const tdata = elf_tdata (abfd);
2683 Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
2684 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
2686 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2688 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
2690 Elf_Internal_Shdr **hdrpp;
2693 /* Start after the ELF header. */
2694 off = i_ehdrp->e_ehsize;
2696 /* We are not creating an executable, which means that we are
2697 not creating a program header, and that the actual order of
2698 the sections in the file is unimportant. */
2699 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2701 Elf_Internal_Shdr *hdr;
2704 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2706 hdr->sh_offset = -1;
2709 if (i == tdata->symtab_section
2710 || i == tdata->strtab_section)
2712 hdr->sh_offset = -1;
2716 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2722 Elf_Internal_Shdr **hdrpp;
2724 /* Assign file positions for the loaded sections based on the
2725 assignment of sections to segments. */
2726 if (! assign_file_positions_for_segments (abfd))
2729 /* Assign file positions for the other sections. */
2731 off = elf_tdata (abfd)->next_file_pos;
2732 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2734 Elf_Internal_Shdr *hdr;
2737 if (hdr->bfd_section != NULL
2738 && hdr->bfd_section->filepos != 0)
2739 hdr->sh_offset = hdr->bfd_section->filepos;
2740 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
2742 ((*_bfd_error_handler)
2743 ("%s: warning: allocated section `%s' not in segment",
2744 bfd_get_filename (abfd),
2745 (hdr->bfd_section == NULL
2747 : hdr->bfd_section->name)));
2748 if ((abfd->flags & D_PAGED) != 0)
2749 off += (hdr->sh_addr - off) % bed->maxpagesize;
2751 off += (hdr->sh_addr - off) % hdr->sh_addralign;
2752 off = _bfd_elf_assign_file_position_for_section (hdr, off,
2755 else if (hdr->sh_type == SHT_REL
2756 || hdr->sh_type == SHT_RELA
2757 || hdr == i_shdrpp[tdata->symtab_section]
2758 || hdr == i_shdrpp[tdata->strtab_section])
2759 hdr->sh_offset = -1;
2761 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2765 /* Place the section headers. */
2766 off = align_file_position (off, bed->s->file_align);
2767 i_ehdrp->e_shoff = off;
2768 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
2770 elf_tdata (abfd)->next_file_pos = off;
2779 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2780 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
2781 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2783 struct bfd_strtab_hash *shstrtab;
2784 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2786 i_ehdrp = elf_elfheader (abfd);
2787 i_shdrp = elf_elfsections (abfd);
2789 shstrtab = _bfd_elf_stringtab_init ();
2790 if (shstrtab == NULL)
2793 elf_shstrtab (abfd) = shstrtab;
2795 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
2796 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
2797 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
2798 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
2800 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
2801 i_ehdrp->e_ident[EI_DATA] =
2802 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
2803 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
2805 for (count = EI_PAD; count < EI_NIDENT; count++)
2806 i_ehdrp->e_ident[count] = 0;
2808 if ((abfd->flags & DYNAMIC) != 0)
2809 i_ehdrp->e_type = ET_DYN;
2810 else if ((abfd->flags & EXEC_P) != 0)
2811 i_ehdrp->e_type = ET_EXEC;
2813 i_ehdrp->e_type = ET_REL;
2815 switch (bfd_get_arch (abfd))
2817 case bfd_arch_unknown:
2818 i_ehdrp->e_machine = EM_NONE;
2820 case bfd_arch_sparc:
2821 if (bed->s->arch_size == 64)
2822 i_ehdrp->e_machine = EM_SPARC64;
2824 i_ehdrp->e_machine = EM_SPARC;
2827 i_ehdrp->e_machine = EM_386;
2830 i_ehdrp->e_machine = EM_68K;
2833 i_ehdrp->e_machine = EM_88K;
2836 i_ehdrp->e_machine = EM_860;
2838 case bfd_arch_mips: /* MIPS Rxxxx */
2839 i_ehdrp->e_machine = EM_MIPS; /* only MIPS R3000 */
2842 i_ehdrp->e_machine = EM_PARISC;
2844 case bfd_arch_powerpc:
2845 i_ehdrp->e_machine = EM_PPC;
2847 case bfd_arch_alpha:
2848 i_ehdrp->e_machine = EM_ALPHA;
2851 i_ehdrp->e_machine = EM_SH;
2854 i_ehdrp->e_machine = EM_CYGNUS_D10V;
2856 /* start-sanitize-d30v */
2858 i_ehdrp->e_machine = EM_CYGNUS_D30V;
2860 /* end-sanitize-d30v */
2861 /* start-sanitize-v850 */
2863 i_ehdrp->e_machine = EM_CYGNUS_V850;
2865 /* end-sanitize-v850 */
2866 /* start-sanitize-arc */
2868 i_ehdrp->e_machine = EM_CYGNUS_ARC;
2870 /* end-sanitize-arc */
2871 /* start-sanitize-m32r */
2873 i_ehdrp->e_machine = EM_CYGNUS_M32R;
2875 /* end-sanitize-m32r */
2876 case bfd_arch_mn10200:
2877 i_ehdrp->e_machine = EM_CYGNUS_MN10200;
2879 case bfd_arch_mn10300:
2880 i_ehdrp->e_machine = EM_CYGNUS_MN10300;
2882 /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
2884 i_ehdrp->e_machine = EM_NONE;
2886 i_ehdrp->e_version = bed->s->ev_current;
2887 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
2889 /* no program header, for now. */
2890 i_ehdrp->e_phoff = 0;
2891 i_ehdrp->e_phentsize = 0;
2892 i_ehdrp->e_phnum = 0;
2894 /* each bfd section is section header entry */
2895 i_ehdrp->e_entry = bfd_get_start_address (abfd);
2896 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
2898 /* if we're building an executable, we'll need a program header table */
2899 if (abfd->flags & EXEC_P)
2901 /* it all happens later */
2903 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2905 /* elf_build_phdrs() returns a (NULL-terminated) array of
2906 Elf_Internal_Phdrs */
2907 i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
2908 i_ehdrp->e_phoff = outbase;
2909 outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
2914 i_ehdrp->e_phentsize = 0;
2916 i_ehdrp->e_phoff = 0;
2919 elf_tdata (abfd)->symtab_hdr.sh_name =
2920 (unsigned int) _bfd_stringtab_add (shstrtab, ".symtab", true, false);
2921 elf_tdata (abfd)->strtab_hdr.sh_name =
2922 (unsigned int) _bfd_stringtab_add (shstrtab, ".strtab", true, false);
2923 elf_tdata (abfd)->shstrtab_hdr.sh_name =
2924 (unsigned int) _bfd_stringtab_add (shstrtab, ".shstrtab", true, false);
2925 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2926 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2927 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
2933 /* Assign file positions for all the reloc sections which are not part
2934 of the loadable file image. */
2937 _bfd_elf_assign_file_positions_for_relocs (abfd)
2942 Elf_Internal_Shdr **shdrpp;
2944 off = elf_tdata (abfd)->next_file_pos;
2946 for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
2947 i < elf_elfheader (abfd)->e_shnum;
2950 Elf_Internal_Shdr *shdrp;
2953 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
2954 && shdrp->sh_offset == -1)
2955 off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
2958 elf_tdata (abfd)->next_file_pos = off;
2962 _bfd_elf_write_object_contents (abfd)
2965 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2966 Elf_Internal_Ehdr *i_ehdrp;
2967 Elf_Internal_Shdr **i_shdrp;
2971 if (! abfd->output_has_begun
2972 && ! _bfd_elf_compute_section_file_positions (abfd,
2973 (struct bfd_link_info *) NULL))
2976 i_shdrp = elf_elfsections (abfd);
2977 i_ehdrp = elf_elfheader (abfd);
2980 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
2983 _bfd_elf_assign_file_positions_for_relocs (abfd);
2985 /* After writing the headers, we need to write the sections too... */
2986 for (count = 1; count < i_ehdrp->e_shnum; count++)
2988 if (bed->elf_backend_section_processing)
2989 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
2990 if (i_shdrp[count]->contents)
2992 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
2993 || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
2995 != i_shdrp[count]->sh_size))
3000 /* Write out the section header names. */
3001 if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
3002 || ! _bfd_stringtab_emit (abfd, elf_shstrtab (abfd)))
3005 if (bed->elf_backend_final_write_processing)
3006 (*bed->elf_backend_final_write_processing) (abfd,
3007 elf_tdata (abfd)->linker);
3009 return bed->s->write_shdrs_and_ehdr (abfd);
3012 /* given a section, search the header to find them... */
3014 _bfd_elf_section_from_bfd_section (abfd, asect)
3018 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3019 Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
3021 Elf_Internal_Shdr *hdr;
3022 int maxindex = elf_elfheader (abfd)->e_shnum;
3024 for (index = 0; index < maxindex; index++)
3026 hdr = i_shdrp[index];
3027 if (hdr->bfd_section == asect)
3031 if (bed->elf_backend_section_from_bfd_section)
3033 for (index = 0; index < maxindex; index++)
3037 hdr = i_shdrp[index];
3039 if ((*bed->elf_backend_section_from_bfd_section)
3040 (abfd, hdr, asect, &retval))
3045 if (bfd_is_abs_section (asect))
3047 if (bfd_is_com_section (asect))
3049 if (bfd_is_und_section (asect))
3055 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
3059 _bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
3061 asymbol **asym_ptr_ptr;
3063 asymbol *asym_ptr = *asym_ptr_ptr;
3065 flagword flags = asym_ptr->flags;
3067 /* When gas creates relocations against local labels, it creates its
3068 own symbol for the section, but does put the symbol into the
3069 symbol chain, so udata is 0. When the linker is generating
3070 relocatable output, this section symbol may be for one of the
3071 input sections rather than the output section. */
3072 if (asym_ptr->udata.i == 0
3073 && (flags & BSF_SECTION_SYM)
3074 && asym_ptr->section)
3078 if (asym_ptr->section->output_section != NULL)
3079 indx = asym_ptr->section->output_section->index;
3081 indx = asym_ptr->section->index;
3082 if (elf_section_syms (abfd)[indx])
3083 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
3086 idx = asym_ptr->udata.i;
3090 /* This case can occur when using --strip-symbol on a symbol
3091 which is used in a relocation entry. */
3092 (*_bfd_error_handler)
3093 ("%s: symbol `%s' required but not present",
3094 bfd_get_filename (abfd), bfd_asymbol_name (asym_ptr));
3095 bfd_set_error (bfd_error_no_symbols);
3102 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n",
3103 (long) asym_ptr, asym_ptr->name, idx, flags,
3104 elf_symbol_flags (flags));
3112 /* Copy private BFD data. This copies any program header information. */
3115 copy_private_bfd_data (ibfd, obfd)
3119 Elf_Internal_Ehdr *iehdr;
3120 struct elf_segment_map *mfirst;
3121 struct elf_segment_map **pm;
3122 Elf_Internal_Phdr *p;
3125 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
3126 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
3129 if (elf_tdata (ibfd)->phdr == NULL)
3132 iehdr = elf_elfheader (ibfd);
3137 c = elf_elfheader (ibfd)->e_phnum;
3138 for (i = 0, p = elf_tdata (ibfd)->phdr; i < c; i++, p++)
3142 struct elf_segment_map *m;
3147 /* The complicated case when p_vaddr is 0 is to handle the
3148 Solaris linker, which generates a PT_INTERP section with
3149 p_vaddr and p_memsz set to 0. */
3150 for (s = ibfd->sections; s != NULL; s = s->next)
3151 if (((s->vma >= p->p_vaddr
3152 && (s->vma + s->_raw_size <= p->p_vaddr + p->p_memsz
3153 || s->vma + s->_raw_size <= p->p_vaddr + p->p_filesz))
3156 && (s->flags & SEC_HAS_CONTENTS) != 0
3157 && (bfd_vma) s->filepos >= p->p_offset
3158 && ((bfd_vma) s->filepos + s->_raw_size
3159 <= p->p_offset + p->p_filesz)))
3160 && (s->flags & SEC_ALLOC) != 0
3161 && s->output_section != NULL)
3164 m = ((struct elf_segment_map *)
3166 (sizeof (struct elf_segment_map)
3167 + (csecs - 1) * sizeof (asection *))));
3172 m->p_type = p->p_type;
3173 m->p_flags = p->p_flags;
3174 m->p_flags_valid = 1;
3175 m->p_paddr = p->p_paddr;
3176 m->p_paddr_valid = 1;
3178 m->includes_filehdr = (p->p_offset == 0
3179 && p->p_filesz >= iehdr->e_ehsize);
3181 m->includes_phdrs = (p->p_offset <= (bfd_vma) iehdr->e_phoff
3182 && (p->p_offset + p->p_filesz
3183 >= ((bfd_vma) iehdr->e_phoff
3184 + iehdr->e_phnum * iehdr->e_phentsize)));
3187 for (s = ibfd->sections; s != NULL; s = s->next)
3189 if (((s->vma >= p->p_vaddr
3190 && (s->vma + s->_raw_size <= p->p_vaddr + p->p_memsz
3191 || s->vma + s->_raw_size <= p->p_vaddr + p->p_filesz))
3194 && (s->flags & SEC_HAS_CONTENTS) != 0
3195 && (bfd_vma) s->filepos >= p->p_offset
3196 && ((bfd_vma) s->filepos + s->_raw_size
3197 <= p->p_offset + p->p_filesz)))
3198 && (s->flags & SEC_ALLOC) != 0
3199 && s->output_section != NULL)
3201 m->sections[isec] = s->output_section;
3205 BFD_ASSERT (isec == csecs);
3212 elf_tdata (obfd)->segment_map = mfirst;
3217 /* Copy private section information. This copies over the entsize
3218 field, and sometimes the info field. */
3221 _bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec)
3227 Elf_Internal_Shdr *ihdr, *ohdr;
3229 if (ibfd->xvec->flavour != bfd_target_elf_flavour
3230 || obfd->xvec->flavour != bfd_target_elf_flavour)
3233 /* Copy over private BFD data if it has not already been copied.
3234 This must be done here, rather than in the copy_private_bfd_data
3235 entry point, because the latter is called after the section
3236 contents have been set, which means that the program headers have
3237 already been worked out. */
3238 if (elf_tdata (obfd)->segment_map == NULL
3239 && elf_tdata (ibfd)->phdr != NULL)
3243 /* Only set up the segments when all the sections have been set
3245 for (s = ibfd->sections; s != NULL; s = s->next)
3246 if (s->output_section == NULL)
3250 if (! copy_private_bfd_data (ibfd, obfd))
3255 ihdr = &elf_section_data (isec)->this_hdr;
3256 ohdr = &elf_section_data (osec)->this_hdr;
3258 ohdr->sh_entsize = ihdr->sh_entsize;
3260 if (ihdr->sh_type == SHT_SYMTAB
3261 || ihdr->sh_type == SHT_DYNSYM
3262 || ihdr->sh_type == SHT_GNU_verneed
3263 || ihdr->sh_type == SHT_GNU_verdef)
3264 ohdr->sh_info = ihdr->sh_info;
3269 /* Copy private symbol information. If this symbol is in a section
3270 which we did not map into a BFD section, try to map the section
3271 index correctly. We use special macro definitions for the mapped
3272 section indices; these definitions are interpreted by the
3273 swap_out_syms function. */
3275 #define MAP_ONESYMTAB (SHN_LORESERVE - 1)
3276 #define MAP_DYNSYMTAB (SHN_LORESERVE - 2)
3277 #define MAP_STRTAB (SHN_LORESERVE - 3)
3278 #define MAP_SHSTRTAB (SHN_LORESERVE - 4)
3281 _bfd_elf_copy_private_symbol_data (ibfd, isymarg, obfd, osymarg)
3287 elf_symbol_type *isym, *osym;
3289 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
3290 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
3293 isym = elf_symbol_from (ibfd, isymarg);
3294 osym = elf_symbol_from (obfd, osymarg);
3298 && bfd_is_abs_section (isym->symbol.section))
3302 shndx = isym->internal_elf_sym.st_shndx;
3303 if (shndx == elf_onesymtab (ibfd))
3304 shndx = MAP_ONESYMTAB;
3305 else if (shndx == elf_dynsymtab (ibfd))
3306 shndx = MAP_DYNSYMTAB;
3307 else if (shndx == elf_tdata (ibfd)->strtab_section)
3309 else if (shndx == elf_tdata (ibfd)->shstrtab_section)
3310 shndx = MAP_SHSTRTAB;
3311 osym->internal_elf_sym.st_shndx = shndx;
3317 /* Swap out the symbols. */
3320 swap_out_syms (abfd, sttp)
3322 struct bfd_strtab_hash **sttp;
3324 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3326 if (!elf_map_symbols (abfd))
3329 /* Dump out the symtabs. */
3331 int symcount = bfd_get_symcount (abfd);
3332 asymbol **syms = bfd_get_outsymbols (abfd);
3333 struct bfd_strtab_hash *stt;
3334 Elf_Internal_Shdr *symtab_hdr;
3335 Elf_Internal_Shdr *symstrtab_hdr;
3336 char *outbound_syms;
3339 stt = _bfd_elf_stringtab_init ();
3343 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3344 symtab_hdr->sh_type = SHT_SYMTAB;
3345 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
3346 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
3347 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
3348 symtab_hdr->sh_addralign = bed->s->file_align;
3350 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
3351 symstrtab_hdr->sh_type = SHT_STRTAB;
3353 outbound_syms = bfd_alloc (abfd,
3354 (1 + symcount) * bed->s->sizeof_sym);
3355 if (outbound_syms == NULL)
3357 symtab_hdr->contents = (PTR) outbound_syms;
3359 /* now generate the data (for "contents") */
3361 /* Fill in zeroth symbol and swap it out. */
3362 Elf_Internal_Sym sym;
3368 sym.st_shndx = SHN_UNDEF;
3369 bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
3370 outbound_syms += bed->s->sizeof_sym;
3372 for (idx = 0; idx < symcount; idx++)
3374 Elf_Internal_Sym sym;
3375 bfd_vma value = syms[idx]->value;
3376 elf_symbol_type *type_ptr;
3377 flagword flags = syms[idx]->flags;
3380 if (flags & BSF_SECTION_SYM)
3381 /* Section symbols have no names. */
3385 sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
3388 if (sym.st_name == (unsigned long) -1)
3392 type_ptr = elf_symbol_from (abfd, syms[idx]);
3394 if (bfd_is_com_section (syms[idx]->section))
3396 /* ELF common symbols put the alignment into the `value' field,
3397 and the size into the `size' field. This is backwards from
3398 how BFD handles it, so reverse it here. */
3399 sym.st_size = value;
3400 if (type_ptr == NULL
3401 || type_ptr->internal_elf_sym.st_value == 0)
3402 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
3404 sym.st_value = type_ptr->internal_elf_sym.st_value;
3405 sym.st_shndx = _bfd_elf_section_from_bfd_section (abfd,
3406 syms[idx]->section);
3410 asection *sec = syms[idx]->section;
3413 if (sec->output_section)
3415 value += sec->output_offset;
3416 sec = sec->output_section;
3419 sym.st_value = value;
3420 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
3422 if (bfd_is_abs_section (sec)
3424 && type_ptr->internal_elf_sym.st_shndx != 0)
3426 /* This symbol is in a real ELF section which we did
3427 not create as a BFD section. Undo the mapping done
3428 by copy_private_symbol_data. */
3429 shndx = type_ptr->internal_elf_sym.st_shndx;
3433 shndx = elf_onesymtab (abfd);
3436 shndx = elf_dynsymtab (abfd);
3439 shndx = elf_tdata (abfd)->strtab_section;
3442 shndx = elf_tdata (abfd)->shstrtab_section;
3450 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
3456 /* Writing this would be a hell of a lot easier if
3457 we had some decent documentation on bfd, and
3458 knew what to expect of the library, and what to
3459 demand of applications. For example, it
3460 appears that `objcopy' might not set the
3461 section of a symbol to be a section that is
3462 actually in the output file. */
3463 sec2 = bfd_get_section_by_name (abfd, sec->name);
3464 BFD_ASSERT (sec2 != 0);
3465 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
3466 BFD_ASSERT (shndx != -1);
3470 sym.st_shndx = shndx;
3473 if ((flags & BSF_FUNCTION) != 0)
3475 else if ((flags & BSF_OBJECT) != 0)
3480 if (bfd_is_com_section (syms[idx]->section))
3481 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
3482 else if (bfd_is_und_section (syms[idx]->section))
3483 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
3487 else if (flags & BSF_SECTION_SYM)
3488 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
3489 else if (flags & BSF_FILE)
3490 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
3493 int bind = STB_LOCAL;
3495 if (flags & BSF_LOCAL)
3497 else if (flags & BSF_WEAK)
3499 else if (flags & BSF_GLOBAL)
3502 sym.st_info = ELF_ST_INFO (bind, type);
3505 if (type_ptr != NULL)
3506 sym.st_other = type_ptr->internal_elf_sym.st_other;
3510 bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
3511 outbound_syms += bed->s->sizeof_sym;
3515 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
3516 symstrtab_hdr->sh_type = SHT_STRTAB;
3518 symstrtab_hdr->sh_flags = 0;
3519 symstrtab_hdr->sh_addr = 0;
3520 symstrtab_hdr->sh_entsize = 0;
3521 symstrtab_hdr->sh_link = 0;
3522 symstrtab_hdr->sh_info = 0;
3523 symstrtab_hdr->sh_addralign = 1;
3529 /* Return the number of bytes required to hold the symtab vector.
3531 Note that we base it on the count plus 1, since we will null terminate
3532 the vector allocated based on this size. However, the ELF symbol table
3533 always has a dummy entry as symbol #0, so it ends up even. */
3536 _bfd_elf_get_symtab_upper_bound (abfd)
3541 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
3543 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3544 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
3550 _bfd_elf_get_dynamic_symtab_upper_bound (abfd)
3555 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3557 if (elf_dynsymtab (abfd) == 0)
3559 bfd_set_error (bfd_error_invalid_operation);
3563 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3564 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
3570 _bfd_elf_get_reloc_upper_bound (abfd, asect)
3574 return (asect->reloc_count + 1) * sizeof (arelent *);
3577 /* Canonicalize the relocs. */
3580 _bfd_elf_canonicalize_reloc (abfd, section, relptr, symbols)
3589 if (! get_elf_backend_data (abfd)->s->slurp_reloc_table (abfd,
3595 tblptr = section->relocation;
3596 for (i = 0; i < section->reloc_count; i++)
3597 *relptr++ = tblptr++;
3601 return section->reloc_count;
3605 _bfd_elf_get_symtab (abfd, alocation)
3607 asymbol **alocation;
3609 long symcount = get_elf_backend_data (abfd)->s->slurp_symbol_table (abfd, alocation, false);
3612 bfd_get_symcount (abfd) = symcount;
3617 _bfd_elf_canonicalize_dynamic_symtab (abfd, alocation)
3619 asymbol **alocation;
3621 return get_elf_backend_data (abfd)->s->slurp_symbol_table (abfd, alocation, true);
3624 /* Return the size required for the dynamic reloc entries. Any
3625 section that was actually installed in the BFD, and has type
3626 SHT_REL or SHT_RELA, and uses the dynamic symbol table, is
3627 considered to be a dynamic reloc section. */
3630 _bfd_elf_get_dynamic_reloc_upper_bound (abfd)
3636 if (elf_dynsymtab (abfd) == 0)
3638 bfd_set_error (bfd_error_invalid_operation);
3642 ret = sizeof (arelent *);
3643 for (s = abfd->sections; s != NULL; s = s->next)
3644 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
3645 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
3646 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
3647 ret += ((s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize)
3648 * sizeof (arelent *));
3653 /* Canonicalize the dynamic relocation entries. Note that we return
3654 the dynamic relocations as a single block, although they are
3655 actually associated with particular sections; the interface, which
3656 was designed for SunOS style shared libraries, expects that there
3657 is only one set of dynamic relocs. Any section that was actually
3658 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses
3659 the dynamic symbol table, is considered to be a dynamic reloc
3663 _bfd_elf_canonicalize_dynamic_reloc (abfd, storage, syms)
3668 boolean (*slurp_relocs) PARAMS ((bfd *, asection *, asymbol **, boolean));
3672 if (elf_dynsymtab (abfd) == 0)
3674 bfd_set_error (bfd_error_invalid_operation);
3678 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
3680 for (s = abfd->sections; s != NULL; s = s->next)
3682 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
3683 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
3684 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
3689 if (! (*slurp_relocs) (abfd, s, syms, true))
3691 count = s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize;
3693 for (i = 0; i < count; i++)
3704 /* Read in the version information. */
3707 _bfd_elf_slurp_version_tables (abfd)
3710 bfd_byte *contents = NULL;
3712 if (elf_dynverdef (abfd) != 0)
3714 Elf_Internal_Shdr *hdr;
3715 Elf_External_Verdef *everdef;
3716 Elf_Internal_Verdef *iverdef;
3719 hdr = &elf_tdata (abfd)->dynverdef_hdr;
3721 elf_tdata (abfd)->verdef =
3722 ((Elf_Internal_Verdef *)
3723 bfd_zalloc (abfd, hdr->sh_info * sizeof (Elf_Internal_Verdef)));
3724 if (elf_tdata (abfd)->verdef == NULL)
3727 elf_tdata (abfd)->cverdefs = hdr->sh_info;
3729 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
3730 if (contents == NULL)
3732 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
3733 || bfd_read ((PTR) contents, 1, hdr->sh_size, abfd) != hdr->sh_size)
3736 everdef = (Elf_External_Verdef *) contents;
3737 iverdef = elf_tdata (abfd)->verdef;
3738 for (i = 0; i < hdr->sh_info; i++, iverdef++)
3740 Elf_External_Verdaux *everdaux;
3741 Elf_Internal_Verdaux *iverdaux;
3744 _bfd_elf_swap_verdef_in (abfd, everdef, iverdef);
3746 iverdef->vd_bfd = abfd;
3748 iverdef->vd_auxptr = ((Elf_Internal_Verdaux *)
3751 * sizeof (Elf_Internal_Verdaux))));
3752 if (iverdef->vd_auxptr == NULL)
3755 everdaux = ((Elf_External_Verdaux *)
3756 ((bfd_byte *) everdef + iverdef->vd_aux));
3757 iverdaux = iverdef->vd_auxptr;
3758 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
3760 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
3762 iverdaux->vda_nodename =
3763 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3764 iverdaux->vda_name);
3765 if (iverdaux->vda_nodename == NULL)
3768 if (j + 1 < iverdef->vd_cnt)
3769 iverdaux->vda_nextptr = iverdaux + 1;
3771 iverdaux->vda_nextptr = NULL;
3773 everdaux = ((Elf_External_Verdaux *)
3774 ((bfd_byte *) everdaux + iverdaux->vda_next));
3777 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
3779 if (i + 1 < hdr->sh_info)
3780 iverdef->vd_nextdef = iverdef + 1;
3782 iverdef->vd_nextdef = NULL;
3784 everdef = ((Elf_External_Verdef *)
3785 ((bfd_byte *) everdef + iverdef->vd_next));
3792 if (elf_dynverref (abfd) != 0)
3794 Elf_Internal_Shdr *hdr;
3795 Elf_External_Verneed *everneed;
3796 Elf_Internal_Verneed *iverneed;
3799 hdr = &elf_tdata (abfd)->dynverref_hdr;
3801 elf_tdata (abfd)->verref =
3802 ((Elf_Internal_Verneed *)
3803 bfd_zalloc (abfd, hdr->sh_info * sizeof (Elf_Internal_Verneed)));
3804 if (elf_tdata (abfd)->verref == NULL)
3807 elf_tdata (abfd)->cverrefs = hdr->sh_info;
3809 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
3810 if (contents == NULL)
3812 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
3813 || bfd_read ((PTR) contents, 1, hdr->sh_size, abfd) != hdr->sh_size)
3816 everneed = (Elf_External_Verneed *) contents;
3817 iverneed = elf_tdata (abfd)->verref;
3818 for (i = 0; i < hdr->sh_info; i++, iverneed++)
3820 Elf_External_Vernaux *evernaux;
3821 Elf_Internal_Vernaux *ivernaux;
3824 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
3826 iverneed->vn_bfd = abfd;
3828 iverneed->vn_filename =
3829 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3831 if (iverneed->vn_filename == NULL)
3834 iverneed->vn_auxptr =
3835 ((Elf_Internal_Vernaux *)
3837 iverneed->vn_cnt * sizeof (Elf_Internal_Vernaux)));
3839 evernaux = ((Elf_External_Vernaux *)
3840 ((bfd_byte *) everneed + iverneed->vn_aux));
3841 ivernaux = iverneed->vn_auxptr;
3842 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
3844 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
3846 ivernaux->vna_nodename =
3847 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3848 ivernaux->vna_name);
3849 if (ivernaux->vna_nodename == NULL)
3852 if (j + 1 < iverneed->vn_cnt)
3853 ivernaux->vna_nextptr = ivernaux + 1;
3855 ivernaux->vna_nextptr = NULL;
3857 evernaux = ((Elf_External_Vernaux *)
3858 ((bfd_byte *) evernaux + ivernaux->vna_next));
3861 if (i + 1 < hdr->sh_info)
3862 iverneed->vn_nextref = iverneed + 1;
3864 iverneed->vn_nextref = NULL;
3866 everneed = ((Elf_External_Verneed *)
3867 ((bfd_byte *) everneed + iverneed->vn_next));
3877 if (contents == NULL)
3883 _bfd_elf_make_empty_symbol (abfd)
3886 elf_symbol_type *newsym;
3888 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
3893 newsym->symbol.the_bfd = abfd;
3894 return &newsym->symbol;
3899 _bfd_elf_get_symbol_info (ignore_abfd, symbol, ret)
3904 bfd_symbol_info (symbol, ret);
3907 /* Return whether a symbol name implies a local symbol. Most targets
3908 use this function for the is_local_label_name entry point, but some
3912 _bfd_elf_is_local_label_name (abfd, name)
3916 /* Normal local symbols start with ``.L''. */
3917 if (name[0] == '.' && name[1] == 'L')
3920 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
3921 DWARF debugging symbols starting with ``..''. */
3922 if (name[0] == '.' && name[1] == '.')
3925 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
3926 emitting DWARF debugging output. I suspect this is actually a
3927 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
3928 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
3929 underscore to be emitted on some ELF targets). For ease of use,
3930 we treat such symbols as local. */
3931 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
3938 _bfd_elf_get_lineno (ignore_abfd, symbol)
3947 _bfd_elf_set_arch_mach (abfd, arch, machine)
3949 enum bfd_architecture arch;
3950 unsigned long machine;
3952 /* If this isn't the right architecture for this backend, and this
3953 isn't the generic backend, fail. */
3954 if (arch != get_elf_backend_data (abfd)->arch
3955 && arch != bfd_arch_unknown
3956 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
3959 return bfd_default_set_arch_mach (abfd, arch, machine);
3962 /* Find the nearest line to a particular section and offset, for error
3966 _bfd_elf_find_nearest_line (abfd,
3977 CONST char **filename_ptr;
3978 CONST char **functionname_ptr;
3979 unsigned int *line_ptr;
3982 const char *filename;
3987 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
3988 &found, filename_ptr,
3989 functionname_ptr, line_ptr,
3990 &elf_tdata (abfd)->line_info))
3995 if (symbols == NULL)
4002 for (p = symbols; *p != NULL; p++)
4006 q = (elf_symbol_type *) *p;
4008 if (bfd_get_section (&q->symbol) != section)
4011 switch (ELF_ST_TYPE (q->internal_elf_sym.st_info))
4016 filename = bfd_asymbol_name (&q->symbol);
4019 if (q->symbol.section == section
4020 && q->symbol.value >= low_func
4021 && q->symbol.value <= offset)
4023 func = (asymbol *) q;
4024 low_func = q->symbol.value;
4033 *filename_ptr = filename;
4034 *functionname_ptr = bfd_asymbol_name (func);
4040 _bfd_elf_sizeof_headers (abfd, reloc)
4046 ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
4048 ret += get_program_header_size (abfd);
4053 _bfd_elf_set_section_contents (abfd, section, location, offset, count)
4058 bfd_size_type count;
4060 Elf_Internal_Shdr *hdr;
4062 if (! abfd->output_has_begun
4063 && ! _bfd_elf_compute_section_file_positions (abfd,
4064 (struct bfd_link_info *) NULL))
4067 hdr = &elf_section_data (section)->this_hdr;
4069 if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
4071 if (bfd_write (location, 1, count, abfd) != count)
4078 _bfd_elf_no_info_to_howto (abfd, cache_ptr, dst)
4081 Elf_Internal_Rela *dst;
4088 _bfd_elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
4091 Elf_Internal_Rel *dst;
4097 /* Try to convert a non-ELF reloc into an ELF one. */
4100 _bfd_elf_validate_reloc (abfd, areloc)
4104 /* Check whether we really have an ELF howto. */
4106 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
4108 bfd_reloc_code_real_type code;
4109 reloc_howto_type *howto;
4111 /* Alien reloc: Try to determine its type to replace it with an
4112 equivalent ELF reloc. */
4114 if (areloc->howto->pc_relative)
4116 switch (areloc->howto->bitsize)
4119 code = BFD_RELOC_8_PCREL;
4122 code = BFD_RELOC_12_PCREL;
4125 code = BFD_RELOC_16_PCREL;
4128 code = BFD_RELOC_24_PCREL;
4131 code = BFD_RELOC_32_PCREL;
4134 code = BFD_RELOC_64_PCREL;
4140 howto = bfd_reloc_type_lookup (abfd, code);
4142 if (areloc->howto->pcrel_offset != howto->pcrel_offset)
4144 if (howto->pcrel_offset)
4145 areloc->addend += areloc->address;
4147 areloc->addend -= areloc->address; /* addend is unsigned!! */
4152 switch (areloc->howto->bitsize)
4158 code = BFD_RELOC_14;
4161 code = BFD_RELOC_16;
4164 code = BFD_RELOC_26;
4167 code = BFD_RELOC_32;
4170 code = BFD_RELOC_64;
4176 howto = bfd_reloc_type_lookup (abfd, code);
4180 areloc->howto = howto;
4188 (*_bfd_error_handler)
4189 ("%s: unsupported relocation type %s",
4190 bfd_get_filename (abfd), areloc->howto->name);
4191 bfd_set_error (bfd_error_bad_value);