1 /* ELF executable support for BFD.
3 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
6 This file is part of BFD, the Binary File Descriptor library.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
26 BFD support for ELF formats is being worked on.
27 Currently, the best supported back ends are for sparc and i386
28 (running svr4 or Solaris 2).
30 Documentation of the internals of the support code still needs
31 to be written. The code is changing quickly enough that we
32 haven't bothered yet. */
34 /* For sparc64-cross-sparc32. */
42 #include "libiberty.h"
44 static int elf_sort_sections (const void *, const void *);
45 static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
46 static bfd_boolean prep_headers (bfd *);
47 static bfd_boolean swap_out_syms (bfd *, struct bfd_strtab_hash **, int) ;
48 static bfd_boolean elfcore_read_notes (bfd *, file_ptr, bfd_size_type) ;
50 /* Swap version information in and out. The version information is
51 currently size independent. If that ever changes, this code will
52 need to move into elfcode.h. */
54 /* Swap in a Verdef structure. */
57 _bfd_elf_swap_verdef_in (bfd *abfd,
58 const Elf_External_Verdef *src,
59 Elf_Internal_Verdef *dst)
61 dst->vd_version = H_GET_16 (abfd, src->vd_version);
62 dst->vd_flags = H_GET_16 (abfd, src->vd_flags);
63 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx);
64 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt);
65 dst->vd_hash = H_GET_32 (abfd, src->vd_hash);
66 dst->vd_aux = H_GET_32 (abfd, src->vd_aux);
67 dst->vd_next = H_GET_32 (abfd, src->vd_next);
70 /* Swap out a Verdef structure. */
73 _bfd_elf_swap_verdef_out (bfd *abfd,
74 const Elf_Internal_Verdef *src,
75 Elf_External_Verdef *dst)
77 H_PUT_16 (abfd, src->vd_version, dst->vd_version);
78 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
79 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
80 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
81 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
82 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
83 H_PUT_32 (abfd, src->vd_next, dst->vd_next);
86 /* Swap in a Verdaux structure. */
89 _bfd_elf_swap_verdaux_in (bfd *abfd,
90 const Elf_External_Verdaux *src,
91 Elf_Internal_Verdaux *dst)
93 dst->vda_name = H_GET_32 (abfd, src->vda_name);
94 dst->vda_next = H_GET_32 (abfd, src->vda_next);
97 /* Swap out a Verdaux structure. */
100 _bfd_elf_swap_verdaux_out (bfd *abfd,
101 const Elf_Internal_Verdaux *src,
102 Elf_External_Verdaux *dst)
104 H_PUT_32 (abfd, src->vda_name, dst->vda_name);
105 H_PUT_32 (abfd, src->vda_next, dst->vda_next);
108 /* Swap in a Verneed structure. */
111 _bfd_elf_swap_verneed_in (bfd *abfd,
112 const Elf_External_Verneed *src,
113 Elf_Internal_Verneed *dst)
115 dst->vn_version = H_GET_16 (abfd, src->vn_version);
116 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt);
117 dst->vn_file = H_GET_32 (abfd, src->vn_file);
118 dst->vn_aux = H_GET_32 (abfd, src->vn_aux);
119 dst->vn_next = H_GET_32 (abfd, src->vn_next);
122 /* Swap out a Verneed structure. */
125 _bfd_elf_swap_verneed_out (bfd *abfd,
126 const Elf_Internal_Verneed *src,
127 Elf_External_Verneed *dst)
129 H_PUT_16 (abfd, src->vn_version, dst->vn_version);
130 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
131 H_PUT_32 (abfd, src->vn_file, dst->vn_file);
132 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
133 H_PUT_32 (abfd, src->vn_next, dst->vn_next);
136 /* Swap in a Vernaux structure. */
139 _bfd_elf_swap_vernaux_in (bfd *abfd,
140 const Elf_External_Vernaux *src,
141 Elf_Internal_Vernaux *dst)
143 dst->vna_hash = H_GET_32 (abfd, src->vna_hash);
144 dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
145 dst->vna_other = H_GET_16 (abfd, src->vna_other);
146 dst->vna_name = H_GET_32 (abfd, src->vna_name);
147 dst->vna_next = H_GET_32 (abfd, src->vna_next);
150 /* Swap out a Vernaux structure. */
153 _bfd_elf_swap_vernaux_out (bfd *abfd,
154 const Elf_Internal_Vernaux *src,
155 Elf_External_Vernaux *dst)
157 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
158 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
159 H_PUT_16 (abfd, src->vna_other, dst->vna_other);
160 H_PUT_32 (abfd, src->vna_name, dst->vna_name);
161 H_PUT_32 (abfd, src->vna_next, dst->vna_next);
164 /* Swap in a Versym structure. */
167 _bfd_elf_swap_versym_in (bfd *abfd,
168 const Elf_External_Versym *src,
169 Elf_Internal_Versym *dst)
171 dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
174 /* Swap out a Versym structure. */
177 _bfd_elf_swap_versym_out (bfd *abfd,
178 const Elf_Internal_Versym *src,
179 Elf_External_Versym *dst)
181 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
184 /* Standard ELF hash function. Do not change this function; you will
185 cause invalid hash tables to be generated. */
188 bfd_elf_hash (const char *namearg)
190 const unsigned char *name = (const unsigned char *) namearg;
195 while ((ch = *name++) != '\0')
198 if ((g = (h & 0xf0000000)) != 0)
201 /* The ELF ABI says `h &= ~g', but this is equivalent in
202 this case and on some machines one insn instead of two. */
206 return h & 0xffffffff;
209 /* Read a specified number of bytes at a specified offset in an ELF
210 file, into a newly allocated buffer, and return a pointer to the
214 elf_read (bfd *abfd, file_ptr offset, bfd_size_type size)
218 if ((buf = bfd_alloc (abfd, size)) == NULL)
220 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
222 if (bfd_bread (buf, size, abfd) != size)
224 if (bfd_get_error () != bfd_error_system_call)
225 bfd_set_error (bfd_error_file_truncated);
232 bfd_elf_mkobject (bfd *abfd)
234 /* This just does initialization. */
235 /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
236 elf_tdata (abfd) = bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
237 if (elf_tdata (abfd) == 0)
239 /* Since everything is done at close time, do we need any
246 bfd_elf_mkcorefile (bfd *abfd)
248 /* I think this can be done just like an object file. */
249 return bfd_elf_mkobject (abfd);
253 bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
255 Elf_Internal_Shdr **i_shdrp;
256 bfd_byte *shstrtab = NULL;
258 bfd_size_type shstrtabsize;
260 i_shdrp = elf_elfsections (abfd);
261 if (i_shdrp == 0 || i_shdrp[shindex] == 0)
264 shstrtab = i_shdrp[shindex]->contents;
265 if (shstrtab == NULL)
267 /* No cached one, attempt to read, and cache what we read. */
268 offset = i_shdrp[shindex]->sh_offset;
269 shstrtabsize = i_shdrp[shindex]->sh_size;
270 shstrtab = elf_read (abfd, offset, shstrtabsize);
271 i_shdrp[shindex]->contents = shstrtab;
273 return (char *) shstrtab;
277 bfd_elf_string_from_elf_section (bfd *abfd,
278 unsigned int shindex,
279 unsigned int strindex)
281 Elf_Internal_Shdr *hdr;
286 hdr = elf_elfsections (abfd)[shindex];
288 if (hdr->contents == NULL
289 && bfd_elf_get_str_section (abfd, shindex) == NULL)
292 if (strindex >= hdr->sh_size)
294 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
295 (*_bfd_error_handler)
296 (_("%B: invalid string offset %u >= %lu for section `%s'"),
297 abfd, strindex, (unsigned long) hdr->sh_size,
298 (shindex == shstrndx && strindex == hdr->sh_name
300 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
304 return ((char *) hdr->contents) + strindex;
307 /* Read and convert symbols to internal format.
308 SYMCOUNT specifies the number of symbols to read, starting from
309 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
310 are non-NULL, they are used to store the internal symbols, external
311 symbols, and symbol section index extensions, respectively. */
314 bfd_elf_get_elf_syms (bfd *ibfd,
315 Elf_Internal_Shdr *symtab_hdr,
318 Elf_Internal_Sym *intsym_buf,
320 Elf_External_Sym_Shndx *extshndx_buf)
322 Elf_Internal_Shdr *shndx_hdr;
324 const bfd_byte *esym;
325 Elf_External_Sym_Shndx *alloc_extshndx;
326 Elf_External_Sym_Shndx *shndx;
327 Elf_Internal_Sym *isym;
328 Elf_Internal_Sym *isymend;
329 const struct elf_backend_data *bed;
337 /* Normal syms might have section extension entries. */
339 if (symtab_hdr == &elf_tdata (ibfd)->symtab_hdr)
340 shndx_hdr = &elf_tdata (ibfd)->symtab_shndx_hdr;
342 /* Read the symbols. */
344 alloc_extshndx = NULL;
345 bed = get_elf_backend_data (ibfd);
346 extsym_size = bed->s->sizeof_sym;
347 amt = symcount * extsym_size;
348 pos = symtab_hdr->sh_offset + symoffset * extsym_size;
349 if (extsym_buf == NULL)
351 alloc_ext = bfd_malloc (amt);
352 extsym_buf = alloc_ext;
354 if (extsym_buf == NULL
355 || bfd_seek (ibfd, pos, SEEK_SET) != 0
356 || bfd_bread (extsym_buf, amt, ibfd) != amt)
362 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
366 amt = symcount * sizeof (Elf_External_Sym_Shndx);
367 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
368 if (extshndx_buf == NULL)
370 alloc_extshndx = bfd_malloc (amt);
371 extshndx_buf = alloc_extshndx;
373 if (extshndx_buf == NULL
374 || bfd_seek (ibfd, pos, SEEK_SET) != 0
375 || bfd_bread (extshndx_buf, amt, ibfd) != amt)
382 if (intsym_buf == NULL)
384 bfd_size_type amt = symcount * sizeof (Elf_Internal_Sym);
385 intsym_buf = bfd_malloc (amt);
386 if (intsym_buf == NULL)
390 /* Convert the symbols to internal form. */
391 isymend = intsym_buf + symcount;
392 for (esym = extsym_buf, isym = intsym_buf, shndx = extshndx_buf;
394 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
395 (*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym);
398 if (alloc_ext != NULL)
400 if (alloc_extshndx != NULL)
401 free (alloc_extshndx);
406 /* Look up a symbol name. */
408 bfd_elf_sym_name (bfd *abfd,
409 Elf_Internal_Shdr *symtab_hdr,
410 Elf_Internal_Sym *isym)
412 unsigned int iname = isym->st_name;
413 unsigned int shindex = symtab_hdr->sh_link;
414 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
415 /* Check for a bogus st_shndx to avoid crashing. */
416 && isym->st_shndx < elf_numsections (abfd)
417 && !(isym->st_shndx >= SHN_LORESERVE && isym->st_shndx <= SHN_HIRESERVE))
419 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
420 shindex = elf_elfheader (abfd)->e_shstrndx;
423 return bfd_elf_string_from_elf_section (abfd, shindex, iname);
426 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
427 sections. The first element is the flags, the rest are section
430 typedef union elf_internal_group {
431 Elf_Internal_Shdr *shdr;
433 } Elf_Internal_Group;
435 /* Return the name of the group signature symbol. Why isn't the
436 signature just a string? */
439 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
441 Elf_Internal_Shdr *hdr;
442 unsigned char esym[sizeof (Elf64_External_Sym)];
443 Elf_External_Sym_Shndx eshndx;
444 Elf_Internal_Sym isym;
446 /* First we need to ensure the symbol table is available. */
447 if (! bfd_section_from_shdr (abfd, ghdr->sh_link))
450 /* Go read the symbol. */
451 hdr = &elf_tdata (abfd)->symtab_hdr;
452 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
453 &isym, esym, &eshndx) == NULL)
456 return bfd_elf_sym_name (abfd, hdr, &isym);
459 /* Set next_in_group list pointer, and group name for NEWSECT. */
462 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
464 unsigned int num_group = elf_tdata (abfd)->num_group;
466 /* If num_group is zero, read in all SHT_GROUP sections. The count
467 is set to -1 if there are no SHT_GROUP sections. */
470 unsigned int i, shnum;
472 /* First count the number of groups. If we have a SHT_GROUP
473 section with just a flag word (ie. sh_size is 4), ignore it. */
474 shnum = elf_numsections (abfd);
476 for (i = 0; i < shnum; i++)
478 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
479 if (shdr->sh_type == SHT_GROUP && shdr->sh_size >= 8)
485 num_group = (unsigned) -1;
486 elf_tdata (abfd)->num_group = num_group;
490 /* We keep a list of elf section headers for group sections,
491 so we can find them quickly. */
494 elf_tdata (abfd)->num_group = num_group;
495 amt = num_group * sizeof (Elf_Internal_Shdr *);
496 elf_tdata (abfd)->group_sect_ptr = bfd_alloc (abfd, amt);
497 if (elf_tdata (abfd)->group_sect_ptr == NULL)
501 for (i = 0; i < shnum; i++)
503 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
504 if (shdr->sh_type == SHT_GROUP && shdr->sh_size >= 8)
507 Elf_Internal_Group *dest;
509 /* Add to list of sections. */
510 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
513 /* Read the raw contents. */
514 BFD_ASSERT (sizeof (*dest) >= 4);
515 amt = shdr->sh_size * sizeof (*dest) / 4;
516 shdr->contents = bfd_alloc (abfd, amt);
517 if (shdr->contents == NULL
518 || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
519 || (bfd_bread (shdr->contents, shdr->sh_size, abfd)
523 /* Translate raw contents, a flag word followed by an
524 array of elf section indices all in target byte order,
525 to the flag word followed by an array of elf section
527 src = shdr->contents + shdr->sh_size;
528 dest = (Elf_Internal_Group *) (shdr->contents + amt);
535 idx = H_GET_32 (abfd, src);
536 if (src == shdr->contents)
539 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
540 shdr->bfd_section->flags
541 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
546 ((*_bfd_error_handler)
547 (_("%B: invalid SHT_GROUP entry"), abfd));
550 dest->shdr = elf_elfsections (abfd)[idx];
557 if (num_group != (unsigned) -1)
561 for (i = 0; i < num_group; i++)
563 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
564 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents;
565 unsigned int n_elt = shdr->sh_size / 4;
567 /* Look through this group's sections to see if current
568 section is a member. */
570 if ((++idx)->shdr == hdr)
574 /* We are a member of this group. Go looking through
575 other members to see if any others are linked via
577 idx = (Elf_Internal_Group *) shdr->contents;
578 n_elt = shdr->sh_size / 4;
580 if ((s = (++idx)->shdr->bfd_section) != NULL
581 && elf_next_in_group (s) != NULL)
585 /* Snarf the group name from other member, and
586 insert current section in circular list. */
587 elf_group_name (newsect) = elf_group_name (s);
588 elf_next_in_group (newsect) = elf_next_in_group (s);
589 elf_next_in_group (s) = newsect;
595 gname = group_signature (abfd, shdr);
598 elf_group_name (newsect) = gname;
600 /* Start a circular list with one element. */
601 elf_next_in_group (newsect) = newsect;
604 /* If the group section has been created, point to the
606 if (shdr->bfd_section != NULL)
607 elf_next_in_group (shdr->bfd_section) = newsect;
615 if (elf_group_name (newsect) == NULL)
617 (*_bfd_error_handler) (_("%B: no group info for section %A"),
624 _bfd_elf_setup_group_pointers (bfd *abfd)
627 unsigned int num_group = elf_tdata (abfd)->num_group;
628 bfd_boolean result = TRUE;
630 if (num_group == (unsigned) -1)
633 for (i = 0; i < num_group; i++)
635 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
636 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents;
637 unsigned int n_elt = shdr->sh_size / 4;
640 if ((++idx)->shdr->bfd_section)
641 elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
642 else if (idx->shdr->sh_type == SHT_RELA
643 || idx->shdr->sh_type == SHT_REL)
644 /* We won't include relocation sections in section groups in
645 output object files. We adjust the group section size here
646 so that relocatable link will work correctly when
647 relocation sections are in section group in input object
649 shdr->bfd_section->size -= 4;
652 /* There are some unknown sections in the group. */
653 (*_bfd_error_handler)
654 (_("%B: unknown [%d] section `%s' in group [%s]"),
656 (unsigned int) idx->shdr->sh_type,
657 bfd_elf_string_from_elf_section (abfd,
658 (elf_elfheader (abfd)
661 shdr->bfd_section->name);
669 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
671 return elf_next_in_group (sec) != NULL;
674 /* Make a BFD section from an ELF section. We store a pointer to the
675 BFD section in the bfd_section field of the header. */
678 _bfd_elf_make_section_from_shdr (bfd *abfd,
679 Elf_Internal_Shdr *hdr,
685 const struct elf_backend_data *bed;
687 if (hdr->bfd_section != NULL)
689 BFD_ASSERT (strcmp (name,
690 bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
694 newsect = bfd_make_section_anyway (abfd, name);
698 hdr->bfd_section = newsect;
699 elf_section_data (newsect)->this_hdr = *hdr;
700 elf_section_data (newsect)->this_idx = shindex;
702 /* Always use the real type/flags. */
703 elf_section_type (newsect) = hdr->sh_type;
704 elf_section_flags (newsect) = hdr->sh_flags;
706 newsect->filepos = hdr->sh_offset;
708 if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
709 || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
710 || ! bfd_set_section_alignment (abfd, newsect,
711 bfd_log2 ((bfd_vma) hdr->sh_addralign)))
714 flags = SEC_NO_FLAGS;
715 if (hdr->sh_type != SHT_NOBITS)
716 flags |= SEC_HAS_CONTENTS;
717 if (hdr->sh_type == SHT_GROUP)
718 flags |= SEC_GROUP | SEC_EXCLUDE;
719 if ((hdr->sh_flags & SHF_ALLOC) != 0)
722 if (hdr->sh_type != SHT_NOBITS)
725 if ((hdr->sh_flags & SHF_WRITE) == 0)
726 flags |= SEC_READONLY;
727 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
729 else if ((flags & SEC_LOAD) != 0)
731 if ((hdr->sh_flags & SHF_MERGE) != 0)
734 newsect->entsize = hdr->sh_entsize;
735 if ((hdr->sh_flags & SHF_STRINGS) != 0)
736 flags |= SEC_STRINGS;
738 if (hdr->sh_flags & SHF_GROUP)
739 if (!setup_group (abfd, hdr, newsect))
741 if ((hdr->sh_flags & SHF_TLS) != 0)
742 flags |= SEC_THREAD_LOCAL;
744 /* The debugging sections appear to be recognized only by name, not
747 static const char *debug_sec_names [] =
756 for (i = ARRAY_SIZE (debug_sec_names); i--;)
757 if (strncmp (name, debug_sec_names[i], strlen (debug_sec_names[i])) == 0)
761 flags |= SEC_DEBUGGING;
764 /* As a GNU extension, if the name begins with .gnu.linkonce, we
765 only link a single copy of the section. This is used to support
766 g++. g++ will emit each template expansion in its own section.
767 The symbols will be defined as weak, so that multiple definitions
768 are permitted. The GNU linker extension is to actually discard
769 all but one of the sections. */
770 if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0
771 && elf_next_in_group (newsect) == NULL)
772 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
774 bed = get_elf_backend_data (abfd);
775 if (bed->elf_backend_section_flags)
776 if (! bed->elf_backend_section_flags (&flags, hdr))
779 if (! bfd_set_section_flags (abfd, newsect, flags))
782 if ((flags & SEC_ALLOC) != 0)
784 Elf_Internal_Phdr *phdr;
787 /* Look through the phdrs to see if we need to adjust the lma.
788 If all the p_paddr fields are zero, we ignore them, since
789 some ELF linkers produce such output. */
790 phdr = elf_tdata (abfd)->phdr;
791 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
793 if (phdr->p_paddr != 0)
796 if (i < elf_elfheader (abfd)->e_phnum)
798 phdr = elf_tdata (abfd)->phdr;
799 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
801 /* This section is part of this segment if its file
802 offset plus size lies within the segment's memory
803 span and, if the section is loaded, the extent of the
804 loaded data lies within the extent of the segment.
806 Note - we used to check the p_paddr field as well, and
807 refuse to set the LMA if it was 0. This is wrong
808 though, as a perfectly valid initialised segment can
809 have a p_paddr of zero. Some architectures, eg ARM,
810 place special significance on the address 0 and
811 executables need to be able to have a segment which
812 covers this address. */
813 if (phdr->p_type == PT_LOAD
814 && (bfd_vma) hdr->sh_offset >= phdr->p_offset
815 && (hdr->sh_offset + hdr->sh_size
816 <= phdr->p_offset + phdr->p_memsz)
817 && ((flags & SEC_LOAD) == 0
818 || (hdr->sh_offset + hdr->sh_size
819 <= phdr->p_offset + phdr->p_filesz)))
821 if ((flags & SEC_LOAD) == 0)
822 newsect->lma = (phdr->p_paddr
823 + hdr->sh_addr - phdr->p_vaddr);
825 /* We used to use the same adjustment for SEC_LOAD
826 sections, but that doesn't work if the segment
827 is packed with code from multiple VMAs.
828 Instead we calculate the section LMA based on
829 the segment LMA. It is assumed that the
830 segment will contain sections with contiguous
831 LMAs, even if the VMAs are not. */
832 newsect->lma = (phdr->p_paddr
833 + hdr->sh_offset - phdr->p_offset);
835 /* With contiguous segments, we can't tell from file
836 offsets whether a section with zero size should
837 be placed at the end of one segment or the
838 beginning of the next. Decide based on vaddr. */
839 if (hdr->sh_addr >= phdr->p_vaddr
840 && (hdr->sh_addr + hdr->sh_size
841 <= phdr->p_vaddr + phdr->p_memsz))
856 struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
859 Helper functions for GDB to locate the string tables.
860 Since BFD hides string tables from callers, GDB needs to use an
861 internal hook to find them. Sun's .stabstr, in particular,
862 isn't even pointed to by the .stab section, so ordinary
863 mechanisms wouldn't work to find it, even if we had some.
866 struct elf_internal_shdr *
867 bfd_elf_find_section (bfd *abfd, char *name)
869 Elf_Internal_Shdr **i_shdrp;
874 i_shdrp = elf_elfsections (abfd);
877 shstrtab = bfd_elf_get_str_section (abfd,
878 elf_elfheader (abfd)->e_shstrndx);
879 if (shstrtab != NULL)
881 max = elf_numsections (abfd);
882 for (i = 1; i < max; i++)
883 if (!strcmp (&shstrtab[i_shdrp[i]->sh_name], name))
890 const char *const bfd_elf_section_type_names[] = {
891 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
892 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
893 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
896 /* ELF relocs are against symbols. If we are producing relocatable
897 output, and the reloc is against an external symbol, and nothing
898 has given us any additional addend, the resulting reloc will also
899 be against the same symbol. In such a case, we don't want to
900 change anything about the way the reloc is handled, since it will
901 all be done at final link time. Rather than put special case code
902 into bfd_perform_relocation, all the reloc types use this howto
903 function. It just short circuits the reloc if producing
904 relocatable output against an external symbol. */
906 bfd_reloc_status_type
907 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
908 arelent *reloc_entry,
910 void *data ATTRIBUTE_UNUSED,
911 asection *input_section,
913 char **error_message ATTRIBUTE_UNUSED)
915 if (output_bfd != NULL
916 && (symbol->flags & BSF_SECTION_SYM) == 0
917 && (! reloc_entry->howto->partial_inplace
918 || reloc_entry->addend == 0))
920 reloc_entry->address += input_section->output_offset;
924 return bfd_reloc_continue;
927 /* Make sure sec_info_type is cleared if sec_info is cleared too. */
930 merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
933 BFD_ASSERT (sec->sec_info_type == ELF_INFO_TYPE_MERGE);
934 sec->sec_info_type = ELF_INFO_TYPE_NONE;
937 /* Finish SHF_MERGE section merging. */
940 _bfd_elf_merge_sections (bfd *abfd, struct bfd_link_info *info)
945 if (!is_elf_hash_table (info->hash))
948 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
949 if ((ibfd->flags & DYNAMIC) == 0)
950 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
951 if ((sec->flags & SEC_MERGE) != 0
952 && !bfd_is_abs_section (sec->output_section))
954 struct bfd_elf_section_data *secdata;
956 secdata = elf_section_data (sec);
957 if (! _bfd_add_merge_section (abfd,
958 &elf_hash_table (info)->merge_info,
959 sec, &secdata->sec_info))
961 else if (secdata->sec_info)
962 sec->sec_info_type = ELF_INFO_TYPE_MERGE;
965 if (elf_hash_table (info)->merge_info != NULL)
966 _bfd_merge_sections (abfd, info, elf_hash_table (info)->merge_info,
967 merge_sections_remove_hook);
972 _bfd_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
974 sec->output_section = bfd_abs_section_ptr;
975 sec->output_offset = sec->vma;
976 if (!is_elf_hash_table (info->hash))
979 sec->sec_info_type = ELF_INFO_TYPE_JUST_SYMS;
982 /* Copy the program header and other data from one object module to
986 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
988 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
989 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
992 BFD_ASSERT (!elf_flags_init (obfd)
993 || (elf_elfheader (obfd)->e_flags
994 == elf_elfheader (ibfd)->e_flags));
996 elf_gp (obfd) = elf_gp (ibfd);
997 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
998 elf_flags_init (obfd) = TRUE;
1002 /* Print out the program headers. */
1005 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1008 Elf_Internal_Phdr *p;
1010 bfd_byte *dynbuf = NULL;
1012 p = elf_tdata (abfd)->phdr;
1017 fprintf (f, _("\nProgram Header:\n"));
1018 c = elf_elfheader (abfd)->e_phnum;
1019 for (i = 0; i < c; i++, p++)
1026 case PT_NULL: pt = "NULL"; break;
1027 case PT_LOAD: pt = "LOAD"; break;
1028 case PT_DYNAMIC: pt = "DYNAMIC"; break;
1029 case PT_INTERP: pt = "INTERP"; break;
1030 case PT_NOTE: pt = "NOTE"; break;
1031 case PT_SHLIB: pt = "SHLIB"; break;
1032 case PT_PHDR: pt = "PHDR"; break;
1033 case PT_TLS: pt = "TLS"; break;
1034 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1035 case PT_GNU_STACK: pt = "STACK"; break;
1036 case PT_GNU_RELRO: pt = "RELRO"; break;
1037 default: sprintf (buf, "0x%lx", p->p_type); pt = buf; break;
1039 fprintf (f, "%8s off 0x", pt);
1040 bfd_fprintf_vma (abfd, f, p->p_offset);
1041 fprintf (f, " vaddr 0x");
1042 bfd_fprintf_vma (abfd, f, p->p_vaddr);
1043 fprintf (f, " paddr 0x");
1044 bfd_fprintf_vma (abfd, f, p->p_paddr);
1045 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1046 fprintf (f, " filesz 0x");
1047 bfd_fprintf_vma (abfd, f, p->p_filesz);
1048 fprintf (f, " memsz 0x");
1049 bfd_fprintf_vma (abfd, f, p->p_memsz);
1050 fprintf (f, " flags %c%c%c",
1051 (p->p_flags & PF_R) != 0 ? 'r' : '-',
1052 (p->p_flags & PF_W) != 0 ? 'w' : '-',
1053 (p->p_flags & PF_X) != 0 ? 'x' : '-');
1054 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1055 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1060 s = bfd_get_section_by_name (abfd, ".dynamic");
1064 unsigned long shlink;
1065 bfd_byte *extdyn, *extdynend;
1067 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1069 fprintf (f, _("\nDynamic Section:\n"));
1071 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1074 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1077 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1079 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1080 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1083 extdynend = extdyn + s->size;
1084 for (; extdyn < extdynend; extdyn += extdynsize)
1086 Elf_Internal_Dyn dyn;
1089 bfd_boolean stringp;
1091 (*swap_dyn_in) (abfd, extdyn, &dyn);
1093 if (dyn.d_tag == DT_NULL)
1100 sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
1104 case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
1105 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1106 case DT_PLTGOT: name = "PLTGOT"; break;
1107 case DT_HASH: name = "HASH"; break;
1108 case DT_STRTAB: name = "STRTAB"; break;
1109 case DT_SYMTAB: name = "SYMTAB"; break;
1110 case DT_RELA: name = "RELA"; break;
1111 case DT_RELASZ: name = "RELASZ"; break;
1112 case DT_RELAENT: name = "RELAENT"; break;
1113 case DT_STRSZ: name = "STRSZ"; break;
1114 case DT_SYMENT: name = "SYMENT"; break;
1115 case DT_INIT: name = "INIT"; break;
1116 case DT_FINI: name = "FINI"; break;
1117 case DT_SONAME: name = "SONAME"; stringp = TRUE; break;
1118 case DT_RPATH: name = "RPATH"; stringp = TRUE; break;
1119 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1120 case DT_REL: name = "REL"; break;
1121 case DT_RELSZ: name = "RELSZ"; break;
1122 case DT_RELENT: name = "RELENT"; break;
1123 case DT_PLTREL: name = "PLTREL"; break;
1124 case DT_DEBUG: name = "DEBUG"; break;
1125 case DT_TEXTREL: name = "TEXTREL"; break;
1126 case DT_JMPREL: name = "JMPREL"; break;
1127 case DT_BIND_NOW: name = "BIND_NOW"; break;
1128 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1129 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1130 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1131 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1132 case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break;
1133 case DT_FLAGS: name = "FLAGS"; break;
1134 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1135 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1136 case DT_CHECKSUM: name = "CHECKSUM"; break;
1137 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1138 case DT_MOVEENT: name = "MOVEENT"; break;
1139 case DT_MOVESZ: name = "MOVESZ"; break;
1140 case DT_FEATURE: name = "FEATURE"; break;
1141 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1142 case DT_SYMINSZ: name = "SYMINSZ"; break;
1143 case DT_SYMINENT: name = "SYMINENT"; break;
1144 case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break;
1145 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break;
1146 case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break;
1147 case DT_PLTPAD: name = "PLTPAD"; break;
1148 case DT_MOVETAB: name = "MOVETAB"; break;
1149 case DT_SYMINFO: name = "SYMINFO"; break;
1150 case DT_RELACOUNT: name = "RELACOUNT"; break;
1151 case DT_RELCOUNT: name = "RELCOUNT"; break;
1152 case DT_FLAGS_1: name = "FLAGS_1"; break;
1153 case DT_VERSYM: name = "VERSYM"; break;
1154 case DT_VERDEF: name = "VERDEF"; break;
1155 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1156 case DT_VERNEED: name = "VERNEED"; break;
1157 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1158 case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
1159 case DT_USED: name = "USED"; break;
1160 case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
1163 fprintf (f, " %-11s ", name);
1165 fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val);
1169 unsigned int tagv = dyn.d_un.d_val;
1171 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1174 fprintf (f, "%s", string);
1183 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1184 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1186 if (! _bfd_elf_slurp_version_tables (abfd, FALSE))
1190 if (elf_dynverdef (abfd) != 0)
1192 Elf_Internal_Verdef *t;
1194 fprintf (f, _("\nVersion definitions:\n"));
1195 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1197 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1198 t->vd_flags, t->vd_hash, t->vd_nodename);
1199 if (t->vd_auxptr->vda_nextptr != NULL)
1201 Elf_Internal_Verdaux *a;
1204 for (a = t->vd_auxptr->vda_nextptr;
1207 fprintf (f, "%s ", a->vda_nodename);
1213 if (elf_dynverref (abfd) != 0)
1215 Elf_Internal_Verneed *t;
1217 fprintf (f, _("\nVersion References:\n"));
1218 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1220 Elf_Internal_Vernaux *a;
1222 fprintf (f, _(" required from %s:\n"), t->vn_filename);
1223 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1224 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1225 a->vna_flags, a->vna_other, a->vna_nodename);
1237 /* Display ELF-specific fields of a symbol. */
1240 bfd_elf_print_symbol (bfd *abfd,
1243 bfd_print_symbol_type how)
1248 case bfd_print_symbol_name:
1249 fprintf (file, "%s", symbol->name);
1251 case bfd_print_symbol_more:
1252 fprintf (file, "elf ");
1253 bfd_fprintf_vma (abfd, file, symbol->value);
1254 fprintf (file, " %lx", (long) symbol->flags);
1256 case bfd_print_symbol_all:
1258 const char *section_name;
1259 const char *name = NULL;
1260 const struct elf_backend_data *bed;
1261 unsigned char st_other;
1264 section_name = symbol->section ? symbol->section->name : "(*none*)";
1266 bed = get_elf_backend_data (abfd);
1267 if (bed->elf_backend_print_symbol_all)
1268 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
1272 name = symbol->name;
1273 bfd_print_symbol_vandf (abfd, file, symbol);
1276 fprintf (file, " %s\t", section_name);
1277 /* Print the "other" value for a symbol. For common symbols,
1278 we've already printed the size; now print the alignment.
1279 For other symbols, we have no specified alignment, and
1280 we've printed the address; now print the size. */
1281 if (bfd_is_com_section (symbol->section))
1282 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1284 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1285 bfd_fprintf_vma (abfd, file, val);
1287 /* If we have version information, print it. */
1288 if (elf_tdata (abfd)->dynversym_section != 0
1289 && (elf_tdata (abfd)->dynverdef_section != 0
1290 || elf_tdata (abfd)->dynverref_section != 0))
1292 unsigned int vernum;
1293 const char *version_string;
1295 vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
1298 version_string = "";
1299 else if (vernum == 1)
1300 version_string = "Base";
1301 else if (vernum <= elf_tdata (abfd)->cverdefs)
1303 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1306 Elf_Internal_Verneed *t;
1308 version_string = "";
1309 for (t = elf_tdata (abfd)->verref;
1313 Elf_Internal_Vernaux *a;
1315 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1317 if (a->vna_other == vernum)
1319 version_string = a->vna_nodename;
1326 if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
1327 fprintf (file, " %-11s", version_string);
1332 fprintf (file, " (%s)", version_string);
1333 for (i = 10 - strlen (version_string); i > 0; --i)
1338 /* If the st_other field is not zero, print it. */
1339 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
1344 case STV_INTERNAL: fprintf (file, " .internal"); break;
1345 case STV_HIDDEN: fprintf (file, " .hidden"); break;
1346 case STV_PROTECTED: fprintf (file, " .protected"); break;
1348 /* Some other non-defined flags are also present, so print
1350 fprintf (file, " 0x%02x", (unsigned int) st_other);
1353 fprintf (file, " %s", name);
1359 /* Create an entry in an ELF linker hash table. */
1361 struct bfd_hash_entry *
1362 _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1363 struct bfd_hash_table *table,
1366 /* Allocate the structure if it has not already been allocated by a
1370 entry = bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
1375 /* Call the allocation method of the superclass. */
1376 entry = _bfd_link_hash_newfunc (entry, table, string);
1379 struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
1380 struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
1382 /* Set local fields. */
1385 ret->got = ret->plt = htab->init_refcount;
1386 memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
1387 - offsetof (struct elf_link_hash_entry, size)));
1388 /* Assume that we have been called by a non-ELF symbol reader.
1389 This flag is then reset by the code which reads an ELF input
1390 file. This ensures that a symbol created by a non-ELF symbol
1391 reader will have the flag set correctly. */
1398 /* Copy data from an indirect symbol to its direct symbol, hiding the
1399 old indirect symbol. Also used for copying flags to a weakdef. */
1402 _bfd_elf_link_hash_copy_indirect (const struct elf_backend_data *bed,
1403 struct elf_link_hash_entry *dir,
1404 struct elf_link_hash_entry *ind)
1407 bfd_signed_vma lowest_valid = bed->can_refcount;
1409 /* Copy down any references that we may have already seen to the
1410 symbol which just became indirect. */
1412 dir->ref_dynamic |= ind->ref_dynamic;
1413 dir->ref_regular |= ind->ref_regular;
1414 dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
1415 dir->non_got_ref |= ind->non_got_ref;
1416 dir->needs_plt |= ind->needs_plt;
1417 dir->pointer_equality_needed |= ind->pointer_equality_needed;
1419 if (ind->root.type != bfd_link_hash_indirect)
1422 /* Copy over the global and procedure linkage table refcount entries.
1423 These may have been already set up by a check_relocs routine. */
1424 tmp = dir->got.refcount;
1425 if (tmp < lowest_valid)
1427 dir->got.refcount = ind->got.refcount;
1428 ind->got.refcount = tmp;
1431 BFD_ASSERT (ind->got.refcount < lowest_valid);
1433 tmp = dir->plt.refcount;
1434 if (tmp < lowest_valid)
1436 dir->plt.refcount = ind->plt.refcount;
1437 ind->plt.refcount = tmp;
1440 BFD_ASSERT (ind->plt.refcount < lowest_valid);
1442 if (dir->dynindx == -1)
1444 dir->dynindx = ind->dynindx;
1445 dir->dynstr_index = ind->dynstr_index;
1447 ind->dynstr_index = 0;
1450 BFD_ASSERT (ind->dynindx == -1);
1454 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
1455 struct elf_link_hash_entry *h,
1456 bfd_boolean force_local)
1458 h->plt = elf_hash_table (info)->init_offset;
1462 h->forced_local = 1;
1463 if (h->dynindx != -1)
1466 _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
1472 /* Initialize an ELF linker hash table. */
1475 _bfd_elf_link_hash_table_init
1476 (struct elf_link_hash_table *table,
1478 struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
1479 struct bfd_hash_table *,
1484 table->dynamic_sections_created = FALSE;
1485 table->dynobj = NULL;
1486 /* Make sure can_refcount is extended to the width and signedness of
1487 init_refcount before we subtract one from it. */
1488 table->init_refcount.refcount = get_elf_backend_data (abfd)->can_refcount;
1489 table->init_refcount.refcount -= 1;
1490 table->init_offset.offset = -(bfd_vma) 1;
1491 /* The first dynamic symbol is a dummy. */
1492 table->dynsymcount = 1;
1493 table->dynstr = NULL;
1494 table->bucketcount = 0;
1495 table->needed = NULL;
1497 table->merge_info = NULL;
1498 memset (&table->stab_info, 0, sizeof (table->stab_info));
1499 memset (&table->eh_info, 0, sizeof (table->eh_info));
1500 table->dynlocal = NULL;
1501 table->runpath = NULL;
1502 table->tls_sec = NULL;
1503 table->tls_size = 0;
1504 table->loaded = NULL;
1505 table->is_relocatable_executable = FALSE;
1507 ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc);
1508 table->root.type = bfd_link_elf_hash_table;
1513 /* Create an ELF linker hash table. */
1515 struct bfd_link_hash_table *
1516 _bfd_elf_link_hash_table_create (bfd *abfd)
1518 struct elf_link_hash_table *ret;
1519 bfd_size_type amt = sizeof (struct elf_link_hash_table);
1521 ret = bfd_malloc (amt);
1525 if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc))
1534 /* This is a hook for the ELF emulation code in the generic linker to
1535 tell the backend linker what file name to use for the DT_NEEDED
1536 entry for a dynamic object. */
1539 bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
1541 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1542 && bfd_get_format (abfd) == bfd_object)
1543 elf_dt_name (abfd) = name;
1547 bfd_elf_get_dyn_lib_class (bfd *abfd)
1550 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1551 && bfd_get_format (abfd) == bfd_object)
1552 lib_class = elf_dyn_lib_class (abfd);
1559 bfd_elf_set_dyn_lib_class (bfd *abfd, int lib_class)
1561 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1562 && bfd_get_format (abfd) == bfd_object)
1563 elf_dyn_lib_class (abfd) = lib_class;
1566 /* Get the list of DT_NEEDED entries for a link. This is a hook for
1567 the linker ELF emulation code. */
1569 struct bfd_link_needed_list *
1570 bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
1571 struct bfd_link_info *info)
1573 if (! is_elf_hash_table (info->hash))
1575 return elf_hash_table (info)->needed;
1578 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link. This is a
1579 hook for the linker ELF emulation code. */
1581 struct bfd_link_needed_list *
1582 bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
1583 struct bfd_link_info *info)
1585 if (! is_elf_hash_table (info->hash))
1587 return elf_hash_table (info)->runpath;
1590 /* Get the name actually used for a dynamic object for a link. This
1591 is the SONAME entry if there is one. Otherwise, it is the string
1592 passed to bfd_elf_set_dt_needed_name, or it is the filename. */
1595 bfd_elf_get_dt_soname (bfd *abfd)
1597 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1598 && bfd_get_format (abfd) == bfd_object)
1599 return elf_dt_name (abfd);
1603 /* Get the list of DT_NEEDED entries from a BFD. This is a hook for
1604 the ELF linker emulation code. */
1607 bfd_elf_get_bfd_needed_list (bfd *abfd,
1608 struct bfd_link_needed_list **pneeded)
1611 bfd_byte *dynbuf = NULL;
1613 unsigned long shlink;
1614 bfd_byte *extdyn, *extdynend;
1616 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1620 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
1621 || bfd_get_format (abfd) != bfd_object)
1624 s = bfd_get_section_by_name (abfd, ".dynamic");
1625 if (s == NULL || s->size == 0)
1628 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1631 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1635 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1637 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1638 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1641 extdynend = extdyn + s->size;
1642 for (; extdyn < extdynend; extdyn += extdynsize)
1644 Elf_Internal_Dyn dyn;
1646 (*swap_dyn_in) (abfd, extdyn, &dyn);
1648 if (dyn.d_tag == DT_NULL)
1651 if (dyn.d_tag == DT_NEEDED)
1654 struct bfd_link_needed_list *l;
1655 unsigned int tagv = dyn.d_un.d_val;
1658 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1663 l = bfd_alloc (abfd, amt);
1684 /* Allocate an ELF string table--force the first byte to be zero. */
1686 struct bfd_strtab_hash *
1687 _bfd_elf_stringtab_init (void)
1689 struct bfd_strtab_hash *ret;
1691 ret = _bfd_stringtab_init ();
1696 loc = _bfd_stringtab_add (ret, "", TRUE, FALSE);
1697 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
1698 if (loc == (bfd_size_type) -1)
1700 _bfd_stringtab_free (ret);
1707 /* ELF .o/exec file reading */
1709 /* Create a new bfd section from an ELF section header. */
1712 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
1714 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
1715 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
1716 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1719 name = bfd_elf_string_from_elf_section (abfd,
1720 elf_elfheader (abfd)->e_shstrndx,
1723 switch (hdr->sh_type)
1726 /* Inactive section. Throw it away. */
1729 case SHT_PROGBITS: /* Normal section with contents. */
1730 case SHT_NOBITS: /* .bss section. */
1731 case SHT_HASH: /* .hash section. */
1732 case SHT_NOTE: /* .note section. */
1733 case SHT_INIT_ARRAY: /* .init_array section. */
1734 case SHT_FINI_ARRAY: /* .fini_array section. */
1735 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
1736 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
1737 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1739 case SHT_DYNAMIC: /* Dynamic linking information. */
1740 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
1742 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
1744 Elf_Internal_Shdr *dynsymhdr;
1746 /* The shared libraries distributed with hpux11 have a bogus
1747 sh_link field for the ".dynamic" section. Find the
1748 string table for the ".dynsym" section instead. */
1749 if (elf_dynsymtab (abfd) != 0)
1751 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
1752 hdr->sh_link = dynsymhdr->sh_link;
1756 unsigned int i, num_sec;
1758 num_sec = elf_numsections (abfd);
1759 for (i = 1; i < num_sec; i++)
1761 dynsymhdr = elf_elfsections (abfd)[i];
1762 if (dynsymhdr->sh_type == SHT_DYNSYM)
1764 hdr->sh_link = dynsymhdr->sh_link;
1772 case SHT_SYMTAB: /* A symbol table */
1773 if (elf_onesymtab (abfd) == shindex)
1776 BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1777 BFD_ASSERT (elf_onesymtab (abfd) == 0);
1778 elf_onesymtab (abfd) = shindex;
1779 elf_tdata (abfd)->symtab_hdr = *hdr;
1780 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
1781 abfd->flags |= HAS_SYMS;
1783 /* Sometimes a shared object will map in the symbol table. If
1784 SHF_ALLOC is set, and this is a shared object, then we also
1785 treat this section as a BFD section. We can not base the
1786 decision purely on SHF_ALLOC, because that flag is sometimes
1787 set in a relocatable object file, which would confuse the
1789 if ((hdr->sh_flags & SHF_ALLOC) != 0
1790 && (abfd->flags & DYNAMIC) != 0
1791 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1795 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
1796 can't read symbols without that section loaded as well. It
1797 is most likely specified by the next section header. */
1798 if (elf_elfsections (abfd)[elf_symtab_shndx (abfd)]->sh_link != shindex)
1800 unsigned int i, num_sec;
1802 num_sec = elf_numsections (abfd);
1803 for (i = shindex + 1; i < num_sec; i++)
1805 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1806 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
1807 && hdr2->sh_link == shindex)
1811 for (i = 1; i < shindex; i++)
1813 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1814 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
1815 && hdr2->sh_link == shindex)
1819 return bfd_section_from_shdr (abfd, i);
1823 case SHT_DYNSYM: /* A dynamic symbol table */
1824 if (elf_dynsymtab (abfd) == shindex)
1827 BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1828 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
1829 elf_dynsymtab (abfd) = shindex;
1830 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
1831 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1832 abfd->flags |= HAS_SYMS;
1834 /* Besides being a symbol table, we also treat this as a regular
1835 section, so that objcopy can handle it. */
1836 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1838 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections */
1839 if (elf_symtab_shndx (abfd) == shindex)
1842 BFD_ASSERT (elf_symtab_shndx (abfd) == 0);
1843 elf_symtab_shndx (abfd) = shindex;
1844 elf_tdata (abfd)->symtab_shndx_hdr = *hdr;
1845 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_shndx_hdr;
1848 case SHT_STRTAB: /* A string table */
1849 if (hdr->bfd_section != NULL)
1851 if (ehdr->e_shstrndx == shindex)
1853 elf_tdata (abfd)->shstrtab_hdr = *hdr;
1854 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
1857 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
1860 elf_tdata (abfd)->strtab_hdr = *hdr;
1861 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
1864 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
1867 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
1868 hdr = &elf_tdata (abfd)->dynstrtab_hdr;
1869 elf_elfsections (abfd)[shindex] = hdr;
1870 /* We also treat this as a regular section, so that objcopy
1872 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1876 /* If the string table isn't one of the above, then treat it as a
1877 regular section. We need to scan all the headers to be sure,
1878 just in case this strtab section appeared before the above. */
1879 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
1881 unsigned int i, num_sec;
1883 num_sec = elf_numsections (abfd);
1884 for (i = 1; i < num_sec; i++)
1886 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1887 if (hdr2->sh_link == shindex)
1889 if (! bfd_section_from_shdr (abfd, i))
1891 if (elf_onesymtab (abfd) == i)
1893 if (elf_dynsymtab (abfd) == i)
1894 goto dynsymtab_strtab;
1898 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1902 /* *These* do a lot of work -- but build no sections! */
1904 asection *target_sect;
1905 Elf_Internal_Shdr *hdr2;
1906 unsigned int num_sec = elf_numsections (abfd);
1908 /* Check for a bogus link to avoid crashing. */
1909 if ((hdr->sh_link >= SHN_LORESERVE && hdr->sh_link <= SHN_HIRESERVE)
1910 || hdr->sh_link >= num_sec)
1912 ((*_bfd_error_handler)
1913 (_("%B: invalid link %lu for reloc section %s (index %u)"),
1914 abfd, hdr->sh_link, name, shindex));
1915 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1919 /* For some incomprehensible reason Oracle distributes
1920 libraries for Solaris in which some of the objects have
1921 bogus sh_link fields. It would be nice if we could just
1922 reject them, but, unfortunately, some people need to use
1923 them. We scan through the section headers; if we find only
1924 one suitable symbol table, we clobber the sh_link to point
1925 to it. I hope this doesn't break anything. */
1926 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
1927 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
1933 for (scan = 1; scan < num_sec; scan++)
1935 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
1936 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
1947 hdr->sh_link = found;
1950 /* Get the symbol table. */
1951 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
1952 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
1953 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
1956 /* If this reloc section does not use the main symbol table we
1957 don't treat it as a reloc section. BFD can't adequately
1958 represent such a section, so at least for now, we don't
1959 try. We just present it as a normal section. We also
1960 can't use it as a reloc section if it points to the null
1962 if (hdr->sh_link != elf_onesymtab (abfd) || hdr->sh_info == SHN_UNDEF)
1963 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1966 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
1968 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
1969 if (target_sect == NULL)
1972 if ((target_sect->flags & SEC_RELOC) == 0
1973 || target_sect->reloc_count == 0)
1974 hdr2 = &elf_section_data (target_sect)->rel_hdr;
1978 BFD_ASSERT (elf_section_data (target_sect)->rel_hdr2 == NULL);
1979 amt = sizeof (*hdr2);
1980 hdr2 = bfd_alloc (abfd, amt);
1981 elf_section_data (target_sect)->rel_hdr2 = hdr2;
1984 elf_elfsections (abfd)[shindex] = hdr2;
1985 target_sect->reloc_count += NUM_SHDR_ENTRIES (hdr);
1986 target_sect->flags |= SEC_RELOC;
1987 target_sect->relocation = NULL;
1988 target_sect->rel_filepos = hdr->sh_offset;
1989 /* In the section to which the relocations apply, mark whether
1990 its relocations are of the REL or RELA variety. */
1991 if (hdr->sh_size != 0)
1992 target_sect->use_rela_p = hdr->sh_type == SHT_RELA;
1993 abfd->flags |= HAS_RELOC;
1998 case SHT_GNU_verdef:
1999 elf_dynverdef (abfd) = shindex;
2000 elf_tdata (abfd)->dynverdef_hdr = *hdr;
2001 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2004 case SHT_GNU_versym:
2005 elf_dynversym (abfd) = shindex;
2006 elf_tdata (abfd)->dynversym_hdr = *hdr;
2007 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2010 case SHT_GNU_verneed:
2011 elf_dynverref (abfd) = shindex;
2012 elf_tdata (abfd)->dynverref_hdr = *hdr;
2013 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2020 /* We need a BFD section for objcopy and relocatable linking,
2021 and it's handy to have the signature available as the section
2023 name = group_signature (abfd, hdr);
2026 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2028 if (hdr->contents != NULL)
2030 Elf_Internal_Group *idx = (Elf_Internal_Group *) hdr->contents;
2031 unsigned int n_elt = hdr->sh_size / 4;
2034 if (idx->flags & GRP_COMDAT)
2035 hdr->bfd_section->flags
2036 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
2038 /* We try to keep the same section order as it comes in. */
2040 while (--n_elt != 0)
2041 if ((s = (--idx)->shdr->bfd_section) != NULL
2042 && elf_next_in_group (s) != NULL)
2044 elf_next_in_group (hdr->bfd_section) = s;
2051 /* Check for any processor-specific section types. */
2052 return bed->elf_backend_section_from_shdr (abfd, hdr, name,
2059 /* Return the section for the local symbol specified by ABFD, R_SYMNDX.
2060 Return SEC for sections that have no elf section, and NULL on error. */
2063 bfd_section_from_r_symndx (bfd *abfd,
2064 struct sym_sec_cache *cache,
2066 unsigned long r_symndx)
2068 Elf_Internal_Shdr *symtab_hdr;
2069 unsigned char esym[sizeof (Elf64_External_Sym)];
2070 Elf_External_Sym_Shndx eshndx;
2071 Elf_Internal_Sym isym;
2072 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
2074 if (cache->abfd == abfd && cache->indx[ent] == r_symndx)
2075 return cache->sec[ent];
2077 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2078 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
2079 &isym, esym, &eshndx) == NULL)
2082 if (cache->abfd != abfd)
2084 memset (cache->indx, -1, sizeof (cache->indx));
2087 cache->indx[ent] = r_symndx;
2088 cache->sec[ent] = sec;
2089 if ((isym.st_shndx != SHN_UNDEF && isym.st_shndx < SHN_LORESERVE)
2090 || isym.st_shndx > SHN_HIRESERVE)
2093 s = bfd_section_from_elf_index (abfd, isym.st_shndx);
2095 cache->sec[ent] = s;
2097 return cache->sec[ent];
2100 /* Given an ELF section number, retrieve the corresponding BFD
2104 bfd_section_from_elf_index (bfd *abfd, unsigned int index)
2106 if (index >= elf_numsections (abfd))
2108 return elf_elfsections (abfd)[index]->bfd_section;
2111 static struct bfd_elf_special_section const special_sections[] =
2113 { ".bss", 4, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2114 { ".gnu.linkonce.b",15, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2115 { ".comment", 8, 0, SHT_PROGBITS, 0 },
2116 { ".data", 5, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2117 { ".data1", 6, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2118 { ".debug", 6, 0, SHT_PROGBITS, 0 },
2119 { ".fini", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2120 { ".init", 5, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2121 { ".line", 5, 0, SHT_PROGBITS, 0 },
2122 { ".rodata", 7, -2, SHT_PROGBITS, SHF_ALLOC },
2123 { ".rodata1", 8, 0, SHT_PROGBITS, SHF_ALLOC },
2124 { ".tbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2125 { ".tdata", 6, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2126 { ".text", 5, -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2127 { ".init_array", 11, 0, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2128 { ".fini_array", 11, 0, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
2129 { ".preinit_array", 14, 0, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2130 { ".debug_line", 11, 0, SHT_PROGBITS, 0 },
2131 { ".debug_info", 11, 0, SHT_PROGBITS, 0 },
2132 { ".debug_abbrev", 13, 0, SHT_PROGBITS, 0 },
2133 { ".debug_aranges", 14, 0, SHT_PROGBITS, 0 },
2134 { ".dynamic", 8, 0, SHT_DYNAMIC, SHF_ALLOC },
2135 { ".dynstr", 7, 0, SHT_STRTAB, SHF_ALLOC },
2136 { ".dynsym", 7, 0, SHT_DYNSYM, SHF_ALLOC },
2137 { ".got", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2138 { ".hash", 5, 0, SHT_HASH, SHF_ALLOC },
2139 { ".interp", 7, 0, SHT_PROGBITS, 0 },
2140 { ".plt", 4, 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2141 { ".shstrtab", 9, 0, SHT_STRTAB, 0 },
2142 { ".strtab", 7, 0, SHT_STRTAB, 0 },
2143 { ".symtab", 7, 0, SHT_SYMTAB, 0 },
2144 { ".gnu.version", 12, 0, SHT_GNU_versym, 0 },
2145 { ".gnu.version_d", 14, 0, SHT_GNU_verdef, 0 },
2146 { ".gnu.version_r", 14, 0, SHT_GNU_verneed, 0 },
2147 { ".note.GNU-stack",15, 0, SHT_PROGBITS, 0 },
2148 { ".note", 5, -1, SHT_NOTE, 0 },
2149 { ".rela", 5, -1, SHT_RELA, 0 },
2150 { ".rel", 4, -1, SHT_REL, 0 },
2151 { ".stabstr", 5, 3, SHT_STRTAB, 0 },
2152 { ".gnu.liblist", 12, 0, SHT_GNU_LIBLIST, SHF_ALLOC },
2153 { ".gnu.conflict", 13, 0, SHT_RELA, SHF_ALLOC },
2154 { NULL, 0, 0, 0, 0 }
2157 static const struct bfd_elf_special_section *
2158 get_special_section (const char *name,
2159 const struct bfd_elf_special_section *special_sections,
2163 int len = strlen (name);
2165 for (i = 0; special_sections[i].prefix != NULL; i++)
2168 int prefix_len = special_sections[i].prefix_length;
2170 if (len < prefix_len)
2172 if (memcmp (name, special_sections[i].prefix, prefix_len) != 0)
2175 suffix_len = special_sections[i].suffix_length;
2176 if (suffix_len <= 0)
2178 if (name[prefix_len] != 0)
2180 if (suffix_len == 0)
2182 if (name[prefix_len] != '.'
2183 && (suffix_len == -2
2184 || (rela && special_sections[i].type == SHT_REL)))
2190 if (len < prefix_len + suffix_len)
2192 if (memcmp (name + len - suffix_len,
2193 special_sections[i].prefix + prefix_len,
2197 return &special_sections[i];
2203 const struct bfd_elf_special_section *
2204 _bfd_elf_get_sec_type_attr (bfd *abfd, const char *name)
2206 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2207 const struct bfd_elf_special_section *ssect = NULL;
2209 /* See if this is one of the special sections. */
2212 unsigned int rela = bed->default_use_rela_p;
2214 if (bed->special_sections)
2215 ssect = get_special_section (name, bed->special_sections, rela);
2218 ssect = get_special_section (name, special_sections, rela);
2225 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
2227 struct bfd_elf_section_data *sdata;
2228 const struct bfd_elf_special_section *ssect;
2230 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
2233 sdata = bfd_zalloc (abfd, sizeof (*sdata));
2236 sec->used_by_bfd = sdata;
2239 elf_section_type (sec) = SHT_NULL;
2240 ssect = _bfd_elf_get_sec_type_attr (abfd, sec->name);
2243 elf_section_type (sec) = ssect->type;
2244 elf_section_flags (sec) = ssect->attr;
2247 /* Indicate whether or not this section should use RELA relocations. */
2248 sec->use_rela_p = get_elf_backend_data (abfd)->default_use_rela_p;
2253 /* Create a new bfd section from an ELF program header.
2255 Since program segments have no names, we generate a synthetic name
2256 of the form segment<NUM>, where NUM is generally the index in the
2257 program header table. For segments that are split (see below) we
2258 generate the names segment<NUM>a and segment<NUM>b.
2260 Note that some program segments may have a file size that is different than
2261 (less than) the memory size. All this means is that at execution the
2262 system must allocate the amount of memory specified by the memory size,
2263 but only initialize it with the first "file size" bytes read from the
2264 file. This would occur for example, with program segments consisting
2265 of combined data+bss.
2267 To handle the above situation, this routine generates TWO bfd sections
2268 for the single program segment. The first has the length specified by
2269 the file size of the segment, and the second has the length specified
2270 by the difference between the two sizes. In effect, the segment is split
2271 into it's initialized and uninitialized parts.
2276 _bfd_elf_make_section_from_phdr (bfd *abfd,
2277 Elf_Internal_Phdr *hdr,
2279 const char *typename)
2287 split = ((hdr->p_memsz > 0)
2288 && (hdr->p_filesz > 0)
2289 && (hdr->p_memsz > hdr->p_filesz));
2290 sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
2291 len = strlen (namebuf) + 1;
2292 name = bfd_alloc (abfd, len);
2295 memcpy (name, namebuf, len);
2296 newsect = bfd_make_section (abfd, name);
2297 if (newsect == NULL)
2299 newsect->vma = hdr->p_vaddr;
2300 newsect->lma = hdr->p_paddr;
2301 newsect->size = hdr->p_filesz;
2302 newsect->filepos = hdr->p_offset;
2303 newsect->flags |= SEC_HAS_CONTENTS;
2304 newsect->alignment_power = bfd_log2 (hdr->p_align);
2305 if (hdr->p_type == PT_LOAD)
2307 newsect->flags |= SEC_ALLOC;
2308 newsect->flags |= SEC_LOAD;
2309 if (hdr->p_flags & PF_X)
2311 /* FIXME: all we known is that it has execute PERMISSION,
2313 newsect->flags |= SEC_CODE;
2316 if (!(hdr->p_flags & PF_W))
2318 newsect->flags |= SEC_READONLY;
2323 sprintf (namebuf, "%s%db", typename, index);
2324 len = strlen (namebuf) + 1;
2325 name = bfd_alloc (abfd, len);
2328 memcpy (name, namebuf, len);
2329 newsect = bfd_make_section (abfd, name);
2330 if (newsect == NULL)
2332 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
2333 newsect->lma = hdr->p_paddr + hdr->p_filesz;
2334 newsect->size = hdr->p_memsz - hdr->p_filesz;
2335 if (hdr->p_type == PT_LOAD)
2337 newsect->flags |= SEC_ALLOC;
2338 if (hdr->p_flags & PF_X)
2339 newsect->flags |= SEC_CODE;
2341 if (!(hdr->p_flags & PF_W))
2342 newsect->flags |= SEC_READONLY;
2349 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index)
2351 const struct elf_backend_data *bed;
2353 switch (hdr->p_type)
2356 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "null");
2359 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "load");
2362 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "dynamic");
2365 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "interp");
2368 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, index, "note"))
2370 if (! elfcore_read_notes (abfd, hdr->p_offset, hdr->p_filesz))
2375 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "shlib");
2378 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "phdr");
2380 case PT_GNU_EH_FRAME:
2381 return _bfd_elf_make_section_from_phdr (abfd, hdr, index,
2385 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "stack");
2388 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "relro");
2391 /* Check for any processor-specific program segment types. */
2392 bed = get_elf_backend_data (abfd);
2393 return bed->elf_backend_section_from_phdr (abfd, hdr, index, "proc");
2397 /* Initialize REL_HDR, the section-header for new section, containing
2398 relocations against ASECT. If USE_RELA_P is TRUE, we use RELA
2399 relocations; otherwise, we use REL relocations. */
2402 _bfd_elf_init_reloc_shdr (bfd *abfd,
2403 Elf_Internal_Shdr *rel_hdr,
2405 bfd_boolean use_rela_p)
2408 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2409 bfd_size_type amt = sizeof ".rela" + strlen (asect->name);
2411 name = bfd_alloc (abfd, amt);
2414 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
2416 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
2418 if (rel_hdr->sh_name == (unsigned int) -1)
2420 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
2421 rel_hdr->sh_entsize = (use_rela_p
2422 ? bed->s->sizeof_rela
2423 : bed->s->sizeof_rel);
2424 rel_hdr->sh_addralign = 1 << bed->s->log_file_align;
2425 rel_hdr->sh_flags = 0;
2426 rel_hdr->sh_addr = 0;
2427 rel_hdr->sh_size = 0;
2428 rel_hdr->sh_offset = 0;
2433 /* Set up an ELF internal section header for a section. */
2436 elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
2438 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2439 bfd_boolean *failedptr = failedptrarg;
2440 Elf_Internal_Shdr *this_hdr;
2444 /* We already failed; just get out of the bfd_map_over_sections
2449 this_hdr = &elf_section_data (asect)->this_hdr;
2451 this_hdr->sh_name = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
2452 asect->name, FALSE);
2453 if (this_hdr->sh_name == (unsigned int) -1)
2459 this_hdr->sh_flags = 0;
2461 if ((asect->flags & SEC_ALLOC) != 0
2462 || asect->user_set_vma)
2463 this_hdr->sh_addr = asect->vma;
2465 this_hdr->sh_addr = 0;
2467 this_hdr->sh_offset = 0;
2468 this_hdr->sh_size = asect->size;
2469 this_hdr->sh_link = 0;
2470 this_hdr->sh_addralign = 1 << asect->alignment_power;
2471 /* The sh_entsize and sh_info fields may have been set already by
2472 copy_private_section_data. */
2474 this_hdr->bfd_section = asect;
2475 this_hdr->contents = NULL;
2477 /* If the section type is unspecified, we set it based on
2479 if (this_hdr->sh_type == SHT_NULL)
2481 if ((asect->flags & SEC_GROUP) != 0)
2483 /* We also need to mark SHF_GROUP here for relocatable
2485 struct bfd_link_order *l;
2488 for (l = asect->link_order_head; l != NULL; l = l->next)
2489 if (l->type == bfd_indirect_link_order
2490 && (elt = elf_next_in_group (l->u.indirect.section)) != NULL)
2493 /* The name is not important. Anything will do. */
2494 elf_group_name (elt->output_section) = "G";
2495 elf_section_flags (elt->output_section) |= SHF_GROUP;
2497 elt = elf_next_in_group (elt);
2498 /* During a relocatable link, the lists are
2501 while (elt != elf_next_in_group (l->u.indirect.section));
2503 this_hdr->sh_type = SHT_GROUP;
2505 else if ((asect->flags & SEC_ALLOC) != 0
2506 && (((asect->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
2507 || (asect->flags & SEC_NEVER_LOAD) != 0))
2508 this_hdr->sh_type = SHT_NOBITS;
2510 this_hdr->sh_type = SHT_PROGBITS;
2513 switch (this_hdr->sh_type)
2519 case SHT_INIT_ARRAY:
2520 case SHT_FINI_ARRAY:
2521 case SHT_PREINIT_ARRAY:
2528 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
2532 this_hdr->sh_entsize = bed->s->sizeof_sym;
2536 this_hdr->sh_entsize = bed->s->sizeof_dyn;
2540 if (get_elf_backend_data (abfd)->may_use_rela_p)
2541 this_hdr->sh_entsize = bed->s->sizeof_rela;
2545 if (get_elf_backend_data (abfd)->may_use_rel_p)
2546 this_hdr->sh_entsize = bed->s->sizeof_rel;
2549 case SHT_GNU_versym:
2550 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
2553 case SHT_GNU_verdef:
2554 this_hdr->sh_entsize = 0;
2555 /* objcopy or strip will copy over sh_info, but may not set
2556 cverdefs. The linker will set cverdefs, but sh_info will be
2558 if (this_hdr->sh_info == 0)
2559 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
2561 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
2562 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
2565 case SHT_GNU_verneed:
2566 this_hdr->sh_entsize = 0;
2567 /* objcopy or strip will copy over sh_info, but may not set
2568 cverrefs. The linker will set cverrefs, but sh_info will be
2570 if (this_hdr->sh_info == 0)
2571 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
2573 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
2574 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
2578 this_hdr->sh_entsize = 4;
2582 if ((asect->flags & SEC_ALLOC) != 0)
2583 this_hdr->sh_flags |= SHF_ALLOC;
2584 if ((asect->flags & SEC_READONLY) == 0)
2585 this_hdr->sh_flags |= SHF_WRITE;
2586 if ((asect->flags & SEC_CODE) != 0)
2587 this_hdr->sh_flags |= SHF_EXECINSTR;
2588 if ((asect->flags & SEC_MERGE) != 0)
2590 this_hdr->sh_flags |= SHF_MERGE;
2591 this_hdr->sh_entsize = asect->entsize;
2592 if ((asect->flags & SEC_STRINGS) != 0)
2593 this_hdr->sh_flags |= SHF_STRINGS;
2595 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
2596 this_hdr->sh_flags |= SHF_GROUP;
2597 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
2599 this_hdr->sh_flags |= SHF_TLS;
2600 if (asect->size == 0 && (asect->flags & SEC_HAS_CONTENTS) == 0)
2602 struct bfd_link_order *o;
2604 this_hdr->sh_size = 0;
2605 for (o = asect->link_order_head; o != NULL; o = o->next)
2606 if (this_hdr->sh_size < o->offset + o->size)
2607 this_hdr->sh_size = o->offset + o->size;
2608 if (this_hdr->sh_size)
2609 this_hdr->sh_type = SHT_NOBITS;
2613 /* Check for processor-specific section types. */
2614 if (bed->elf_backend_fake_sections
2615 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
2618 /* If the section has relocs, set up a section header for the
2619 SHT_REL[A] section. If two relocation sections are required for
2620 this section, it is up to the processor-specific back-end to
2621 create the other. */
2622 if ((asect->flags & SEC_RELOC) != 0
2623 && !_bfd_elf_init_reloc_shdr (abfd,
2624 &elf_section_data (asect)->rel_hdr,
2630 /* Fill in the contents of a SHT_GROUP section. */
2633 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
2635 bfd_boolean *failedptr = failedptrarg;
2636 unsigned long symindx;
2637 asection *elt, *first;
2639 struct bfd_link_order *l;
2642 /* Ignore linker created group section. See elfNN_ia64_object_p in
2644 if (((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP)
2649 if (elf_group_id (sec) != NULL)
2650 symindx = elf_group_id (sec)->udata.i;
2654 /* If called from the assembler, swap_out_syms will have set up
2655 elf_section_syms; If called for "ld -r", use target_index. */
2656 if (elf_section_syms (abfd) != NULL)
2657 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
2659 symindx = sec->target_index;
2661 elf_section_data (sec)->this_hdr.sh_info = symindx;
2663 /* The contents won't be allocated for "ld -r" or objcopy. */
2665 if (sec->contents == NULL)
2668 sec->contents = bfd_alloc (abfd, sec->size);
2670 /* Arrange for the section to be written out. */
2671 elf_section_data (sec)->this_hdr.contents = sec->contents;
2672 if (sec->contents == NULL)
2679 loc = sec->contents + sec->size;
2681 /* Get the pointer to the first section in the group that gas
2682 squirreled away here. objcopy arranges for this to be set to the
2683 start of the input section group. */
2684 first = elt = elf_next_in_group (sec);
2686 /* First element is a flag word. Rest of section is elf section
2687 indices for all the sections of the group. Write them backwards
2688 just to keep the group in the same order as given in .section
2689 directives, not that it matters. */
2698 s = s->output_section;
2701 idx = elf_section_data (s)->this_idx;
2702 H_PUT_32 (abfd, idx, loc);
2703 elt = elf_next_in_group (elt);
2708 /* If this is a relocatable link, then the above did nothing because
2709 SEC is the output section. Look through the input sections
2711 for (l = sec->link_order_head; l != NULL; l = l->next)
2712 if (l->type == bfd_indirect_link_order
2713 && (elt = elf_next_in_group (l->u.indirect.section)) != NULL)
2718 elf_section_data (elt->output_section)->this_idx, loc);
2719 elt = elf_next_in_group (elt);
2720 /* During a relocatable link, the lists are circular. */
2722 while (elt != elf_next_in_group (l->u.indirect.section));
2724 if ((loc -= 4) != sec->contents)
2727 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
2730 /* Assign all ELF section numbers. The dummy first section is handled here
2731 too. The link/info pointers for the standard section types are filled
2732 in here too, while we're at it. */
2735 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
2737 struct elf_obj_tdata *t = elf_tdata (abfd);
2739 unsigned int section_number, secn;
2740 Elf_Internal_Shdr **i_shdrp;
2742 struct bfd_elf_section_data *d;
2746 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
2748 /* SHT_GROUP sections are in relocatable files only. */
2749 if (link_info == NULL || link_info->relocatable)
2753 /* Put SHT_GROUP sections first. */
2754 secp = &abfd->sections;
2757 d = elf_section_data (*secp);
2759 if (d->this_hdr.sh_type == SHT_GROUP)
2761 if ((*secp)->flags & SEC_LINKER_CREATED)
2763 /* Remove the linker created SHT_GROUP sections. */
2764 bfd_section_list_remove (abfd, secp);
2765 abfd->section_count--;
2770 if (section_number == SHN_LORESERVE)
2771 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2772 d->this_idx = section_number++;
2776 secp = &(*secp)->next;
2780 for (sec = abfd->sections; sec; sec = sec->next)
2782 d = elf_section_data (sec);
2784 if (d->this_hdr.sh_type != SHT_GROUP)
2786 if (section_number == SHN_LORESERVE)
2787 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2788 d->this_idx = section_number++;
2790 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
2791 if ((sec->flags & SEC_RELOC) == 0)
2795 if (section_number == SHN_LORESERVE)
2796 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2797 d->rel_idx = section_number++;
2798 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel_hdr.sh_name);
2803 if (section_number == SHN_LORESERVE)
2804 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2805 d->rel_idx2 = section_number++;
2806 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel_hdr2->sh_name);
2812 if (section_number == SHN_LORESERVE)
2813 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2814 t->shstrtab_section = section_number++;
2815 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
2816 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
2818 if (bfd_get_symcount (abfd) > 0)
2820 if (section_number == SHN_LORESERVE)
2821 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2822 t->symtab_section = section_number++;
2823 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
2824 if (section_number > SHN_LORESERVE - 2)
2826 if (section_number == SHN_LORESERVE)
2827 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2828 t->symtab_shndx_section = section_number++;
2829 t->symtab_shndx_hdr.sh_name
2830 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
2831 ".symtab_shndx", FALSE);
2832 if (t->symtab_shndx_hdr.sh_name == (unsigned int) -1)
2835 if (section_number == SHN_LORESERVE)
2836 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2837 t->strtab_section = section_number++;
2838 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
2841 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
2842 t->shstrtab_hdr.sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
2844 elf_numsections (abfd) = section_number;
2845 elf_elfheader (abfd)->e_shnum = section_number;
2846 if (section_number > SHN_LORESERVE)
2847 elf_elfheader (abfd)->e_shnum -= SHN_HIRESERVE + 1 - SHN_LORESERVE;
2849 /* Set up the list of section header pointers, in agreement with the
2851 amt = section_number * sizeof (Elf_Internal_Shdr *);
2852 i_shdrp = bfd_zalloc (abfd, amt);
2853 if (i_shdrp == NULL)
2856 amt = sizeof (Elf_Internal_Shdr);
2857 i_shdrp[0] = bfd_zalloc (abfd, amt);
2858 if (i_shdrp[0] == NULL)
2860 bfd_release (abfd, i_shdrp);
2864 elf_elfsections (abfd) = i_shdrp;
2866 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
2867 if (bfd_get_symcount (abfd) > 0)
2869 i_shdrp[t->symtab_section] = &t->symtab_hdr;
2870 if (elf_numsections (abfd) > SHN_LORESERVE)
2872 i_shdrp[t->symtab_shndx_section] = &t->symtab_shndx_hdr;
2873 t->symtab_shndx_hdr.sh_link = t->symtab_section;
2875 i_shdrp[t->strtab_section] = &t->strtab_hdr;
2876 t->symtab_hdr.sh_link = t->strtab_section;
2879 for (sec = abfd->sections; sec; sec = sec->next)
2881 struct bfd_elf_section_data *d = elf_section_data (sec);
2885 i_shdrp[d->this_idx] = &d->this_hdr;
2886 if (d->rel_idx != 0)
2887 i_shdrp[d->rel_idx] = &d->rel_hdr;
2888 if (d->rel_idx2 != 0)
2889 i_shdrp[d->rel_idx2] = d->rel_hdr2;
2891 /* Fill in the sh_link and sh_info fields while we're at it. */
2893 /* sh_link of a reloc section is the section index of the symbol
2894 table. sh_info is the section index of the section to which
2895 the relocation entries apply. */
2896 if (d->rel_idx != 0)
2898 d->rel_hdr.sh_link = t->symtab_section;
2899 d->rel_hdr.sh_info = d->this_idx;
2901 if (d->rel_idx2 != 0)
2903 d->rel_hdr2->sh_link = t->symtab_section;
2904 d->rel_hdr2->sh_info = d->this_idx;
2907 /* We need to set up sh_link for SHF_LINK_ORDER. */
2908 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
2910 s = elf_linked_to_section (sec);
2912 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
2915 struct bfd_link_order *p;
2917 /* Find out what the corresponding section in output
2919 for (p = sec->link_order_head; p != NULL; p = p->next)
2921 s = p->u.indirect.section;
2922 if (p->type == bfd_indirect_link_order
2923 && (bfd_get_flavour (s->owner)
2924 == bfd_target_elf_flavour))
2926 Elf_Internal_Shdr ** const elf_shdrp
2927 = elf_elfsections (s->owner);
2929 = _bfd_elf_section_from_bfd_section (s->owner, s);
2930 elfsec = elf_shdrp[elfsec]->sh_link;
2932 The Intel C compiler generates SHT_IA_64_UNWIND with
2933 SHF_LINK_ORDER. But it doesn't set the sh_link or
2934 sh_info fields. Hence we could get the situation
2935 where elfsec is 0. */
2938 const struct elf_backend_data *bed
2939 = get_elf_backend_data (abfd);
2940 if (bed->link_order_error_handler)
2941 bed->link_order_error_handler
2942 (_("%B: warning: sh_link not set for section `%A'"),
2947 s = elf_shdrp[elfsec]->bfd_section;
2948 if (elf_discarded_section (s))
2951 (*_bfd_error_handler)
2952 (_("%B: sh_link of section `%A' points to discarded section `%A' of `%B'"),
2953 abfd, d->this_hdr.bfd_section,
2955 /* Point to the kept section if it has
2956 the same size as the discarded
2958 kept = _bfd_elf_check_kept_section (s);
2961 bfd_set_error (bfd_error_bad_value);
2966 s = s->output_section;
2967 BFD_ASSERT (s != NULL);
2968 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
2976 switch (d->this_hdr.sh_type)
2980 /* A reloc section which we are treating as a normal BFD
2981 section. sh_link is the section index of the symbol
2982 table. sh_info is the section index of the section to
2983 which the relocation entries apply. We assume that an
2984 allocated reloc section uses the dynamic symbol table.
2985 FIXME: How can we be sure? */
2986 s = bfd_get_section_by_name (abfd, ".dynsym");
2988 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
2990 /* We look up the section the relocs apply to by name. */
2992 if (d->this_hdr.sh_type == SHT_REL)
2996 s = bfd_get_section_by_name (abfd, name);
2998 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
3002 /* We assume that a section named .stab*str is a stabs
3003 string section. We look for a section with the same name
3004 but without the trailing ``str'', and set its sh_link
3005 field to point to this section. */
3006 if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
3007 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3012 len = strlen (sec->name);
3013 alc = bfd_malloc (len - 2);
3016 memcpy (alc, sec->name, len - 3);
3017 alc[len - 3] = '\0';
3018 s = bfd_get_section_by_name (abfd, alc);
3022 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
3024 /* This is a .stab section. */
3025 if (elf_section_data (s)->this_hdr.sh_entsize == 0)
3026 elf_section_data (s)->this_hdr.sh_entsize
3027 = 4 + 2 * bfd_get_arch_size (abfd) / 8;
3034 case SHT_GNU_verneed:
3035 case SHT_GNU_verdef:
3036 /* sh_link is the section header index of the string table
3037 used for the dynamic entries, or the symbol table, or the
3039 s = bfd_get_section_by_name (abfd, ".dynstr");
3041 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3044 case SHT_GNU_LIBLIST:
3045 /* sh_link is the section header index of the prelink library
3047 used for the dynamic entries, or the symbol table, or the
3049 s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
3050 ? ".dynstr" : ".gnu.libstr");
3052 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3056 case SHT_GNU_versym:
3057 /* sh_link is the section header index of the symbol table
3058 this hash table or version table is for. */
3059 s = bfd_get_section_by_name (abfd, ".dynsym");
3061 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3065 d->this_hdr.sh_link = t->symtab_section;
3069 for (secn = 1; secn < section_number; ++secn)
3070 if (i_shdrp[secn] == NULL)
3071 i_shdrp[secn] = i_shdrp[0];
3073 i_shdrp[secn]->sh_name = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
3074 i_shdrp[secn]->sh_name);
3078 /* Map symbol from it's internal number to the external number, moving
3079 all local symbols to be at the head of the list. */
3082 sym_is_global (bfd *abfd, asymbol *sym)
3084 /* If the backend has a special mapping, use it. */
3085 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3086 if (bed->elf_backend_sym_is_global)
3087 return (*bed->elf_backend_sym_is_global) (abfd, sym);
3089 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
3090 || bfd_is_und_section (bfd_get_section (sym))
3091 || bfd_is_com_section (bfd_get_section (sym)));
3095 elf_map_symbols (bfd *abfd)
3097 unsigned int symcount = bfd_get_symcount (abfd);
3098 asymbol **syms = bfd_get_outsymbols (abfd);
3099 asymbol **sect_syms;
3100 unsigned int num_locals = 0;
3101 unsigned int num_globals = 0;
3102 unsigned int num_locals2 = 0;
3103 unsigned int num_globals2 = 0;
3111 fprintf (stderr, "elf_map_symbols\n");
3115 for (asect = abfd->sections; asect; asect = asect->next)
3117 if (max_index < asect->index)
3118 max_index = asect->index;
3122 amt = max_index * sizeof (asymbol *);
3123 sect_syms = bfd_zalloc (abfd, amt);
3124 if (sect_syms == NULL)
3126 elf_section_syms (abfd) = sect_syms;
3127 elf_num_section_syms (abfd) = max_index;
3129 /* Init sect_syms entries for any section symbols we have already
3130 decided to output. */
3131 for (idx = 0; idx < symcount; idx++)
3133 asymbol *sym = syms[idx];
3135 if ((sym->flags & BSF_SECTION_SYM) != 0
3142 if (sec->owner != NULL)
3144 if (sec->owner != abfd)
3146 if (sec->output_offset != 0)
3149 sec = sec->output_section;
3151 /* Empty sections in the input files may have had a
3152 section symbol created for them. (See the comment
3153 near the end of _bfd_generic_link_output_symbols in
3154 linker.c). If the linker script discards such
3155 sections then we will reach this point. Since we know
3156 that we cannot avoid this case, we detect it and skip
3157 the abort and the assignment to the sect_syms array.
3158 To reproduce this particular case try running the
3159 linker testsuite test ld-scripts/weak.exp for an ELF
3160 port that uses the generic linker. */
3161 if (sec->owner == NULL)
3164 BFD_ASSERT (sec->owner == abfd);
3166 sect_syms[sec->index] = syms[idx];
3171 /* Classify all of the symbols. */
3172 for (idx = 0; idx < symcount; idx++)
3174 if (!sym_is_global (abfd, syms[idx]))
3180 /* We will be adding a section symbol for each BFD section. Most normal
3181 sections will already have a section symbol in outsymbols, but
3182 eg. SHT_GROUP sections will not, and we need the section symbol mapped
3183 at least in that case. */
3184 for (asect = abfd->sections; asect; asect = asect->next)
3186 if (sect_syms[asect->index] == NULL)
3188 if (!sym_is_global (abfd, asect->symbol))
3195 /* Now sort the symbols so the local symbols are first. */
3196 amt = (num_locals + num_globals) * sizeof (asymbol *);
3197 new_syms = bfd_alloc (abfd, amt);
3199 if (new_syms == NULL)
3202 for (idx = 0; idx < symcount; idx++)
3204 asymbol *sym = syms[idx];
3207 if (!sym_is_global (abfd, sym))
3210 i = num_locals + num_globals2++;
3212 sym->udata.i = i + 1;
3214 for (asect = abfd->sections; asect; asect = asect->next)
3216 if (sect_syms[asect->index] == NULL)
3218 asymbol *sym = asect->symbol;
3221 sect_syms[asect->index] = sym;
3222 if (!sym_is_global (abfd, sym))
3225 i = num_locals + num_globals2++;
3227 sym->udata.i = i + 1;
3231 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
3233 elf_num_locals (abfd) = num_locals;
3234 elf_num_globals (abfd) = num_globals;
3238 /* Align to the maximum file alignment that could be required for any
3239 ELF data structure. */
3241 static inline file_ptr
3242 align_file_position (file_ptr off, int align)
3244 return (off + align - 1) & ~(align - 1);
3247 /* Assign a file position to a section, optionally aligning to the
3248 required section alignment. */
3251 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
3259 al = i_shdrp->sh_addralign;
3261 offset = BFD_ALIGN (offset, al);
3263 i_shdrp->sh_offset = offset;
3264 if (i_shdrp->bfd_section != NULL)
3265 i_shdrp->bfd_section->filepos = offset;
3266 if (i_shdrp->sh_type != SHT_NOBITS)
3267 offset += i_shdrp->sh_size;
3271 /* Compute the file positions we are going to put the sections at, and
3272 otherwise prepare to begin writing out the ELF file. If LINK_INFO
3273 is not NULL, this is being called by the ELF backend linker. */
3276 _bfd_elf_compute_section_file_positions (bfd *abfd,
3277 struct bfd_link_info *link_info)
3279 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3281 struct bfd_strtab_hash *strtab = NULL;
3282 Elf_Internal_Shdr *shstrtab_hdr;
3284 if (abfd->output_has_begun)
3287 /* Do any elf backend specific processing first. */
3288 if (bed->elf_backend_begin_write_processing)
3289 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
3291 if (! prep_headers (abfd))
3294 /* Post process the headers if necessary. */
3295 if (bed->elf_backend_post_process_headers)
3296 (*bed->elf_backend_post_process_headers) (abfd, link_info);
3299 bfd_map_over_sections (abfd, elf_fake_sections, &failed);
3303 if (!assign_section_numbers (abfd, link_info))
3306 /* The backend linker builds symbol table information itself. */
3307 if (link_info == NULL && bfd_get_symcount (abfd) > 0)
3309 /* Non-zero if doing a relocatable link. */
3310 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
3312 if (! swap_out_syms (abfd, &strtab, relocatable_p))
3316 if (link_info == NULL)
3318 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
3323 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
3324 /* sh_name was set in prep_headers. */
3325 shstrtab_hdr->sh_type = SHT_STRTAB;
3326 shstrtab_hdr->sh_flags = 0;
3327 shstrtab_hdr->sh_addr = 0;
3328 shstrtab_hdr->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
3329 shstrtab_hdr->sh_entsize = 0;
3330 shstrtab_hdr->sh_link = 0;
3331 shstrtab_hdr->sh_info = 0;
3332 /* sh_offset is set in assign_file_positions_except_relocs. */
3333 shstrtab_hdr->sh_addralign = 1;
3335 if (!assign_file_positions_except_relocs (abfd, link_info))
3338 if (link_info == NULL && bfd_get_symcount (abfd) > 0)
3341 Elf_Internal_Shdr *hdr;
3343 off = elf_tdata (abfd)->next_file_pos;
3345 hdr = &elf_tdata (abfd)->symtab_hdr;
3346 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3348 hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
3349 if (hdr->sh_size != 0)
3350 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3352 hdr = &elf_tdata (abfd)->strtab_hdr;
3353 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3355 elf_tdata (abfd)->next_file_pos = off;
3357 /* Now that we know where the .strtab section goes, write it
3359 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
3360 || ! _bfd_stringtab_emit (abfd, strtab))
3362 _bfd_stringtab_free (strtab);
3365 abfd->output_has_begun = TRUE;
3370 /* Create a mapping from a set of sections to a program segment. */
3372 static struct elf_segment_map *
3373 make_mapping (bfd *abfd,
3374 asection **sections,
3379 struct elf_segment_map *m;
3384 amt = sizeof (struct elf_segment_map);
3385 amt += (to - from - 1) * sizeof (asection *);
3386 m = bfd_zalloc (abfd, amt);
3390 m->p_type = PT_LOAD;
3391 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
3392 m->sections[i - from] = *hdrpp;
3393 m->count = to - from;
3395 if (from == 0 && phdr)
3397 /* Include the headers in the first PT_LOAD segment. */
3398 m->includes_filehdr = 1;
3399 m->includes_phdrs = 1;
3405 /* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL
3408 struct elf_segment_map *
3409 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
3411 struct elf_segment_map *m;
3413 m = bfd_zalloc (abfd, sizeof (struct elf_segment_map));
3417 m->p_type = PT_DYNAMIC;
3419 m->sections[0] = dynsec;
3424 /* Set up a mapping from BFD sections to program segments. */
3427 map_sections_to_segments (bfd *abfd)
3429 asection **sections = NULL;
3433 struct elf_segment_map *mfirst;
3434 struct elf_segment_map **pm;
3435 struct elf_segment_map *m;
3438 unsigned int phdr_index;
3439 bfd_vma maxpagesize;
3441 bfd_boolean phdr_in_segment = TRUE;
3442 bfd_boolean writable;
3444 asection *first_tls = NULL;
3445 asection *dynsec, *eh_frame_hdr;
3448 if (elf_tdata (abfd)->segment_map != NULL)
3451 if (bfd_count_sections (abfd) == 0)
3454 /* Select the allocated sections, and sort them. */
3456 amt = bfd_count_sections (abfd) * sizeof (asection *);
3457 sections = bfd_malloc (amt);
3458 if (sections == NULL)
3462 for (s = abfd->sections; s != NULL; s = s->next)
3464 if ((s->flags & SEC_ALLOC) != 0)
3470 BFD_ASSERT (i <= bfd_count_sections (abfd));
3473 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
3475 /* Build the mapping. */
3480 /* If we have a .interp section, then create a PT_PHDR segment for
3481 the program headers and a PT_INTERP segment for the .interp
3483 s = bfd_get_section_by_name (abfd, ".interp");
3484 if (s != NULL && (s->flags & SEC_LOAD) != 0)
3486 amt = sizeof (struct elf_segment_map);
3487 m = bfd_zalloc (abfd, amt);
3491 m->p_type = PT_PHDR;
3492 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
3493 m->p_flags = PF_R | PF_X;
3494 m->p_flags_valid = 1;
3495 m->includes_phdrs = 1;
3500 amt = sizeof (struct elf_segment_map);
3501 m = bfd_zalloc (abfd, amt);
3505 m->p_type = PT_INTERP;
3513 /* Look through the sections. We put sections in the same program
3514 segment when the start of the second section can be placed within
3515 a few bytes of the end of the first section. */
3519 maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
3521 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
3523 && (dynsec->flags & SEC_LOAD) == 0)
3526 /* Deal with -Ttext or something similar such that the first section
3527 is not adjacent to the program headers. This is an
3528 approximation, since at this point we don't know exactly how many
3529 program headers we will need. */
3532 bfd_size_type phdr_size;
3534 phdr_size = elf_tdata (abfd)->program_header_size;
3536 phdr_size = get_elf_backend_data (abfd)->s->sizeof_phdr;
3537 if ((abfd->flags & D_PAGED) == 0
3538 || sections[0]->lma < phdr_size
3539 || sections[0]->lma % maxpagesize < phdr_size % maxpagesize)
3540 phdr_in_segment = FALSE;
3543 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
3546 bfd_boolean new_segment;
3550 /* See if this section and the last one will fit in the same
3553 if (last_hdr == NULL)
3555 /* If we don't have a segment yet, then we don't need a new
3556 one (we build the last one after this loop). */
3557 new_segment = FALSE;
3559 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
3561 /* If this section has a different relation between the
3562 virtual address and the load address, then we need a new
3566 else if (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
3567 < BFD_ALIGN (hdr->lma, maxpagesize))
3569 /* If putting this section in this segment would force us to
3570 skip a page in the segment, then we need a new segment. */
3573 else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
3574 && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
3576 /* We don't want to put a loadable section after a
3577 nonloadable section in the same segment.
3578 Consider .tbss sections as loadable for this purpose. */
3581 else if ((abfd->flags & D_PAGED) == 0)
3583 /* If the file is not demand paged, which means that we
3584 don't require the sections to be correctly aligned in the
3585 file, then there is no other reason for a new segment. */
3586 new_segment = FALSE;
3589 && (hdr->flags & SEC_READONLY) == 0
3590 && (((last_hdr->lma + last_size - 1)
3591 & ~(maxpagesize - 1))
3592 != (hdr->lma & ~(maxpagesize - 1))))
3594 /* We don't want to put a writable section in a read only
3595 segment, unless they are on the same page in memory
3596 anyhow. We already know that the last section does not
3597 bring us past the current section on the page, so the
3598 only case in which the new section is not on the same
3599 page as the previous section is when the previous section
3600 ends precisely on a page boundary. */
3605 /* Otherwise, we can use the same segment. */
3606 new_segment = FALSE;
3611 if ((hdr->flags & SEC_READONLY) == 0)
3614 /* .tbss sections effectively have zero size. */
3615 if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL)
3616 last_size = hdr->size;
3622 /* We need a new program segment. We must create a new program
3623 header holding all the sections from phdr_index until hdr. */
3625 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
3632 if ((hdr->flags & SEC_READONLY) == 0)
3638 /* .tbss sections effectively have zero size. */
3639 if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL)
3640 last_size = hdr->size;
3644 phdr_in_segment = FALSE;
3647 /* Create a final PT_LOAD program segment. */
3648 if (last_hdr != NULL)
3650 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
3658 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
3661 m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
3668 /* For each loadable .note section, add a PT_NOTE segment. We don't
3669 use bfd_get_section_by_name, because if we link together
3670 nonloadable .note sections and loadable .note sections, we will
3671 generate two .note sections in the output file. FIXME: Using
3672 names for section types is bogus anyhow. */
3673 for (s = abfd->sections; s != NULL; s = s->next)
3675 if ((s->flags & SEC_LOAD) != 0
3676 && strncmp (s->name, ".note", 5) == 0)
3678 amt = sizeof (struct elf_segment_map);
3679 m = bfd_zalloc (abfd, amt);
3683 m->p_type = PT_NOTE;
3690 if (s->flags & SEC_THREAD_LOCAL)
3698 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
3703 amt = sizeof (struct elf_segment_map);
3704 amt += (tls_count - 1) * sizeof (asection *);
3705 m = bfd_zalloc (abfd, amt);
3710 m->count = tls_count;
3711 /* Mandated PF_R. */
3713 m->p_flags_valid = 1;
3714 for (i = 0; i < tls_count; ++i)
3716 BFD_ASSERT (first_tls->flags & SEC_THREAD_LOCAL);
3717 m->sections[i] = first_tls;
3718 first_tls = first_tls->next;
3725 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
3727 eh_frame_hdr = elf_tdata (abfd)->eh_frame_hdr;
3728 if (eh_frame_hdr != NULL
3729 && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
3731 amt = sizeof (struct elf_segment_map);
3732 m = bfd_zalloc (abfd, amt);
3736 m->p_type = PT_GNU_EH_FRAME;
3738 m->sections[0] = eh_frame_hdr->output_section;
3744 if (elf_tdata (abfd)->stack_flags)
3746 amt = sizeof (struct elf_segment_map);
3747 m = bfd_zalloc (abfd, amt);
3751 m->p_type = PT_GNU_STACK;
3752 m->p_flags = elf_tdata (abfd)->stack_flags;
3753 m->p_flags_valid = 1;
3759 if (elf_tdata (abfd)->relro)
3761 amt = sizeof (struct elf_segment_map);
3762 m = bfd_zalloc (abfd, amt);
3766 m->p_type = PT_GNU_RELRO;
3768 m->p_flags_valid = 1;
3777 elf_tdata (abfd)->segment_map = mfirst;
3781 if (sections != NULL)
3786 /* Sort sections by address. */
3789 elf_sort_sections (const void *arg1, const void *arg2)
3791 const asection *sec1 = *(const asection **) arg1;
3792 const asection *sec2 = *(const asection **) arg2;
3793 bfd_size_type size1, size2;
3795 /* Sort by LMA first, since this is the address used to
3796 place the section into a segment. */
3797 if (sec1->lma < sec2->lma)
3799 else if (sec1->lma > sec2->lma)
3802 /* Then sort by VMA. Normally the LMA and the VMA will be
3803 the same, and this will do nothing. */
3804 if (sec1->vma < sec2->vma)
3806 else if (sec1->vma > sec2->vma)
3809 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
3811 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
3817 /* If the indicies are the same, do not return 0
3818 here, but continue to try the next comparison. */
3819 if (sec1->target_index - sec2->target_index != 0)
3820 return sec1->target_index - sec2->target_index;
3825 else if (TOEND (sec2))
3830 /* Sort by size, to put zero sized sections
3831 before others at the same address. */
3833 size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
3834 size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
3841 return sec1->target_index - sec2->target_index;
3844 /* Ian Lance Taylor writes:
3846 We shouldn't be using % with a negative signed number. That's just
3847 not good. We have to make sure either that the number is not
3848 negative, or that the number has an unsigned type. When the types
3849 are all the same size they wind up as unsigned. When file_ptr is a
3850 larger signed type, the arithmetic winds up as signed long long,
3853 What we're trying to say here is something like ``increase OFF by
3854 the least amount that will cause it to be equal to the VMA modulo
3856 /* In other words, something like:
3858 vma_offset = m->sections[0]->vma % bed->maxpagesize;
3859 off_offset = off % bed->maxpagesize;
3860 if (vma_offset < off_offset)
3861 adjustment = vma_offset + bed->maxpagesize - off_offset;
3863 adjustment = vma_offset - off_offset;
3865 which can can be collapsed into the expression below. */
3868 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
3870 return ((vma - off) % maxpagesize);
3873 /* Assign file positions to the sections based on the mapping from
3874 sections to segments. This function also sets up some fields in
3875 the file header, and writes out the program headers. */
3878 assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
3880 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3882 struct elf_segment_map *m;
3884 Elf_Internal_Phdr *phdrs;
3886 bfd_vma filehdr_vaddr, filehdr_paddr;
3887 bfd_vma phdrs_vaddr, phdrs_paddr;
3888 Elf_Internal_Phdr *p;
3891 if (elf_tdata (abfd)->segment_map == NULL)
3893 if (! map_sections_to_segments (abfd))
3898 /* The placement algorithm assumes that non allocated sections are
3899 not in PT_LOAD segments. We ensure this here by removing such
3900 sections from the segment map. */
3901 for (m = elf_tdata (abfd)->segment_map;
3905 unsigned int new_count;
3908 if (m->p_type != PT_LOAD)
3912 for (i = 0; i < m->count; i ++)
3914 if ((m->sections[i]->flags & SEC_ALLOC) != 0)
3917 m->sections[new_count] = m->sections[i];
3923 if (new_count != m->count)
3924 m->count = new_count;
3928 if (bed->elf_backend_modify_segment_map)
3930 if (! (*bed->elf_backend_modify_segment_map) (abfd, link_info))
3935 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
3938 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
3939 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
3940 elf_elfheader (abfd)->e_phnum = count;
3944 elf_tdata (abfd)->next_file_pos = bed->s->sizeof_ehdr;
3948 /* If we already counted the number of program segments, make sure
3949 that we allocated enough space. This happens when SIZEOF_HEADERS
3950 is used in a linker script. */
3951 alloc = elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr;
3952 if (alloc != 0 && count > alloc)
3954 ((*_bfd_error_handler)
3955 (_("%B: Not enough room for program headers (allocated %u, need %u)"),
3956 abfd, alloc, count));
3957 bfd_set_error (bfd_error_bad_value);
3964 amt = alloc * sizeof (Elf_Internal_Phdr);
3965 phdrs = bfd_alloc (abfd, amt);
3969 off = bed->s->sizeof_ehdr;
3970 off += alloc * bed->s->sizeof_phdr;
3977 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
3984 /* If elf_segment_map is not from map_sections_to_segments, the
3985 sections may not be correctly ordered. NOTE: sorting should
3986 not be done to the PT_NOTE section of a corefile, which may
3987 contain several pseudo-sections artificially created by bfd.
3988 Sorting these pseudo-sections breaks things badly. */
3990 && !(elf_elfheader (abfd)->e_type == ET_CORE
3991 && m->p_type == PT_NOTE))
3992 qsort (m->sections, (size_t) m->count, sizeof (asection *),
3995 /* An ELF segment (described by Elf_Internal_Phdr) may contain a
3996 number of sections with contents contributing to both p_filesz
3997 and p_memsz, followed by a number of sections with no contents
3998 that just contribute to p_memsz. In this loop, OFF tracks next
3999 available file offset for PT_LOAD and PT_NOTE segments. VOFF is
4000 an adjustment we use for segments that have no file contents
4001 but need zero filled memory allocation. */
4003 p->p_type = m->p_type;
4004 p->p_flags = m->p_flags;
4006 if (p->p_type == PT_LOAD
4009 bfd_size_type align;
4012 if ((abfd->flags & D_PAGED) != 0)
4013 align = bed->maxpagesize;
4016 unsigned int align_power = 0;
4017 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
4019 unsigned int secalign;
4021 secalign = bfd_get_section_alignment (abfd, *secpp);
4022 if (secalign > align_power)
4023 align_power = secalign;
4025 align = (bfd_size_type) 1 << align_power;
4028 adjust = vma_page_aligned_bias (m->sections[0]->vma, off, align);
4031 && !m->includes_filehdr
4032 && !m->includes_phdrs
4033 && (ufile_ptr) off >= align)
4035 /* If the first section isn't loadable, the same holds for
4036 any other sections. Since the segment won't need file
4037 space, we can make p_offset overlap some prior segment.
4038 However, .tbss is special. If a segment starts with
4039 .tbss, we need to look at the next section to decide
4040 whether the segment has any loadable sections. */
4042 while ((m->sections[i]->flags & SEC_LOAD) == 0)
4044 if ((m->sections[i]->flags & SEC_THREAD_LOCAL) == 0
4048 voff = adjust - align;
4054 /* Make sure the .dynamic section is the first section in the
4055 PT_DYNAMIC segment. */
4056 else if (p->p_type == PT_DYNAMIC
4058 && strcmp (m->sections[0]->name, ".dynamic") != 0)
4061 (_("%B: The first section in the PT_DYNAMIC segment is not the .dynamic section"),
4063 bfd_set_error (bfd_error_bad_value);
4070 p->p_vaddr = m->sections[0]->vma;
4072 if (m->p_paddr_valid)
4073 p->p_paddr = m->p_paddr;
4074 else if (m->count == 0)
4077 p->p_paddr = m->sections[0]->lma;
4079 if (p->p_type == PT_LOAD
4080 && (abfd->flags & D_PAGED) != 0)
4081 p->p_align = bed->maxpagesize;
4082 else if (m->count == 0)
4083 p->p_align = 1 << bed->s->log_file_align;
4091 if (m->includes_filehdr)
4093 if (! m->p_flags_valid)
4096 p->p_filesz = bed->s->sizeof_ehdr;
4097 p->p_memsz = bed->s->sizeof_ehdr;
4100 BFD_ASSERT (p->p_type == PT_LOAD);
4102 if (p->p_vaddr < (bfd_vma) off)
4104 (*_bfd_error_handler)
4105 (_("%B: Not enough room for program headers, try linking with -N"),
4107 bfd_set_error (bfd_error_bad_value);
4112 if (! m->p_paddr_valid)
4115 if (p->p_type == PT_LOAD)
4117 filehdr_vaddr = p->p_vaddr;
4118 filehdr_paddr = p->p_paddr;
4122 if (m->includes_phdrs)
4124 if (! m->p_flags_valid)
4127 if (m->includes_filehdr)
4129 if (p->p_type == PT_LOAD)
4131 phdrs_vaddr = p->p_vaddr + bed->s->sizeof_ehdr;
4132 phdrs_paddr = p->p_paddr + bed->s->sizeof_ehdr;
4137 p->p_offset = bed->s->sizeof_ehdr;
4141 BFD_ASSERT (p->p_type == PT_LOAD);
4142 p->p_vaddr -= off - p->p_offset;
4143 if (! m->p_paddr_valid)
4144 p->p_paddr -= off - p->p_offset;
4147 if (p->p_type == PT_LOAD)
4149 phdrs_vaddr = p->p_vaddr;
4150 phdrs_paddr = p->p_paddr;
4153 phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
4156 p->p_filesz += alloc * bed->s->sizeof_phdr;
4157 p->p_memsz += alloc * bed->s->sizeof_phdr;
4160 if (p->p_type == PT_LOAD
4161 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
4163 if (! m->includes_filehdr && ! m->includes_phdrs)
4164 p->p_offset = off + voff;
4169 adjust = off - (p->p_offset + p->p_filesz);
4170 p->p_filesz += adjust;
4171 p->p_memsz += adjust;
4175 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
4179 bfd_size_type align;
4183 align = 1 << bfd_get_section_alignment (abfd, sec);
4185 if (p->p_type == PT_LOAD
4186 || p->p_type == PT_TLS)
4188 bfd_signed_vma adjust;
4190 if ((flags & SEC_LOAD) != 0)
4192 adjust = sec->lma - (p->p_paddr + p->p_filesz);
4195 (*_bfd_error_handler)
4196 (_("%B: section %A lma 0x%lx overlaps previous sections"),
4197 abfd, sec, (unsigned long) sec->lma);
4201 p->p_filesz += adjust;
4202 p->p_memsz += adjust;
4204 /* .tbss is special. It doesn't contribute to p_memsz of
4206 else if ((flags & SEC_THREAD_LOCAL) == 0
4207 || p->p_type == PT_TLS)
4209 /* The section VMA must equal the file position
4210 modulo the page size. */
4211 bfd_size_type page = align;
4212 if ((abfd->flags & D_PAGED) != 0)
4213 page = bed->maxpagesize;
4214 adjust = vma_page_aligned_bias (sec->vma,
4215 p->p_vaddr + p->p_memsz,
4217 p->p_memsz += adjust;
4221 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
4223 /* The section at i == 0 is the one that actually contains
4229 p->p_filesz = sec->size;
4235 /* The rest are fake sections that shouldn't be written. */
4244 if (p->p_type == PT_LOAD)
4247 /* FIXME: The SEC_HAS_CONTENTS test here dates back to
4248 1997, and the exact reason for it isn't clear. One
4249 plausible explanation is that it is to work around
4250 a problem we have with linker scripts using data
4251 statements in NOLOAD sections. I don't think it
4252 makes a great deal of sense to have such a section
4253 assigned to a PT_LOAD segment, but apparently
4254 people do this. The data statement results in a
4255 bfd_data_link_order being built, and these need
4256 section contents to write into. Eventually, we get
4257 to _bfd_elf_write_object_contents which writes any
4258 section with contents to the output. Make room
4259 here for the write, so that following segments are
4261 if ((flags & SEC_LOAD) != 0
4262 || (flags & SEC_HAS_CONTENTS) != 0)
4266 if ((flags & SEC_LOAD) != 0)
4268 p->p_filesz += sec->size;
4269 p->p_memsz += sec->size;
4271 /* PR ld/594: Sections in note segments which are not loaded
4272 contribute to the file size but not the in-memory size. */
4273 else if (p->p_type == PT_NOTE
4274 && (flags & SEC_HAS_CONTENTS) != 0)
4275 p->p_filesz += sec->size;
4277 /* .tbss is special. It doesn't contribute to p_memsz of
4279 else if ((flags & SEC_THREAD_LOCAL) == 0
4280 || p->p_type == PT_TLS)
4281 p->p_memsz += sec->size;
4283 if (p->p_type == PT_TLS
4285 && (sec->flags & SEC_HAS_CONTENTS) == 0)
4287 struct bfd_link_order *o;
4288 bfd_vma tbss_size = 0;
4290 for (o = sec->link_order_head; o != NULL; o = o->next)
4291 if (tbss_size < o->offset + o->size)
4292 tbss_size = o->offset + o->size;
4294 p->p_memsz += tbss_size;
4297 if (align > p->p_align
4298 && (p->p_type != PT_LOAD || (abfd->flags & D_PAGED) == 0))
4302 if (! m->p_flags_valid)
4305 if ((flags & SEC_CODE) != 0)
4307 if ((flags & SEC_READONLY) == 0)
4313 /* Now that we have set the section file positions, we can set up
4314 the file positions for the non PT_LOAD segments. */
4315 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
4319 if (p->p_type != PT_LOAD && m->count > 0)
4321 BFD_ASSERT (! m->includes_filehdr && ! m->includes_phdrs);
4322 /* If the section has not yet been assigned a file position,
4323 do so now. The ARM BPABI requires that .dynamic section
4324 not be marked SEC_ALLOC because it is not part of any
4325 PT_LOAD segment, so it will not be processed above. */
4326 if (p->p_type == PT_DYNAMIC && m->sections[0]->filepos == 0)
4329 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
4332 while (i_shdrpp[i]->bfd_section != m->sections[0])
4334 off = (_bfd_elf_assign_file_position_for_section
4335 (i_shdrpp[i], off, TRUE));
4336 p->p_filesz = m->sections[0]->size;
4338 p->p_offset = m->sections[0]->filepos;
4342 if (m->includes_filehdr)
4344 p->p_vaddr = filehdr_vaddr;
4345 if (! m->p_paddr_valid)
4346 p->p_paddr = filehdr_paddr;
4348 else if (m->includes_phdrs)
4350 p->p_vaddr = phdrs_vaddr;
4351 if (! m->p_paddr_valid)
4352 p->p_paddr = phdrs_paddr;
4354 else if (p->p_type == PT_GNU_RELRO)
4356 Elf_Internal_Phdr *lp;
4358 for (lp = phdrs; lp < phdrs + count; ++lp)
4360 if (lp->p_type == PT_LOAD
4361 && lp->p_vaddr <= link_info->relro_end
4362 && lp->p_vaddr >= link_info->relro_start
4363 && lp->p_vaddr + lp->p_filesz
4364 >= link_info->relro_end)
4368 if (lp < phdrs + count
4369 && link_info->relro_end > lp->p_vaddr)
4371 p->p_vaddr = lp->p_vaddr;
4372 p->p_paddr = lp->p_paddr;
4373 p->p_offset = lp->p_offset;
4374 p->p_filesz = link_info->relro_end - lp->p_vaddr;
4375 p->p_memsz = p->p_filesz;
4377 p->p_flags = (lp->p_flags & ~PF_W);
4381 memset (p, 0, sizeof *p);
4382 p->p_type = PT_NULL;
4388 /* Clear out any program headers we allocated but did not use. */
4389 for (; count < alloc; count++, p++)
4391 memset (p, 0, sizeof *p);
4392 p->p_type = PT_NULL;
4395 elf_tdata (abfd)->phdr = phdrs;
4397 elf_tdata (abfd)->next_file_pos = off;
4399 /* Write out the program headers. */
4400 if (bfd_seek (abfd, (bfd_signed_vma) bed->s->sizeof_ehdr, SEEK_SET) != 0
4401 || bed->s->write_out_phdrs (abfd, phdrs, alloc) != 0)
4407 /* Get the size of the program header.
4409 If this is called by the linker before any of the section VMA's are set, it
4410 can't calculate the correct value for a strange memory layout. This only
4411 happens when SIZEOF_HEADERS is used in a linker script. In this case,
4412 SORTED_HDRS is NULL and we assume the normal scenario of one text and one
4413 data segment (exclusive of .interp and .dynamic).
4415 ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
4416 will be two segments. */
4418 static bfd_size_type
4419 get_program_header_size (bfd *abfd)
4423 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4425 /* We can't return a different result each time we're called. */
4426 if (elf_tdata (abfd)->program_header_size != 0)
4427 return elf_tdata (abfd)->program_header_size;
4429 if (elf_tdata (abfd)->segment_map != NULL)
4431 struct elf_segment_map *m;
4434 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
4436 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
4437 return elf_tdata (abfd)->program_header_size;
4440 /* Assume we will need exactly two PT_LOAD segments: one for text
4441 and one for data. */
4444 s = bfd_get_section_by_name (abfd, ".interp");
4445 if (s != NULL && (s->flags & SEC_LOAD) != 0)
4447 /* If we have a loadable interpreter section, we need a
4448 PT_INTERP segment. In this case, assume we also need a
4449 PT_PHDR segment, although that may not be true for all
4454 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
4456 /* We need a PT_DYNAMIC segment. */
4460 if (elf_tdata (abfd)->eh_frame_hdr)
4462 /* We need a PT_GNU_EH_FRAME segment. */
4466 if (elf_tdata (abfd)->stack_flags)
4468 /* We need a PT_GNU_STACK segment. */
4472 if (elf_tdata (abfd)->relro)
4474 /* We need a PT_GNU_RELRO segment. */
4478 for (s = abfd->sections; s != NULL; s = s->next)
4480 if ((s->flags & SEC_LOAD) != 0
4481 && strncmp (s->name, ".note", 5) == 0)
4483 /* We need a PT_NOTE segment. */
4488 for (s = abfd->sections; s != NULL; s = s->next)
4490 if (s->flags & SEC_THREAD_LOCAL)
4492 /* We need a PT_TLS segment. */
4498 /* Let the backend count up any program headers it might need. */
4499 if (bed->elf_backend_additional_program_headers)
4503 a = (*bed->elf_backend_additional_program_headers) (abfd);
4509 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
4510 return elf_tdata (abfd)->program_header_size;
4513 /* Work out the file positions of all the sections. This is called by
4514 _bfd_elf_compute_section_file_positions. All the section sizes and
4515 VMAs must be known before this is called.
4517 Reloc sections come in two flavours: Those processed specially as
4518 "side-channel" data attached to a section to which they apply, and
4519 those that bfd doesn't process as relocations. The latter sort are
4520 stored in a normal bfd section by bfd_section_from_shdr. We don't
4521 consider the former sort here, unless they form part of the loadable
4522 image. Reloc sections not assigned here will be handled later by
4523 assign_file_positions_for_relocs.
4525 We also don't set the positions of the .symtab and .strtab here. */
4528 assign_file_positions_except_relocs (bfd *abfd,
4529 struct bfd_link_info *link_info)
4531 struct elf_obj_tdata * const tdata = elf_tdata (abfd);
4532 Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
4533 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
4534 unsigned int num_sec = elf_numsections (abfd);
4536 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4538 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
4539 && bfd_get_format (abfd) != bfd_core)
4541 Elf_Internal_Shdr **hdrpp;
4544 /* Start after the ELF header. */
4545 off = i_ehdrp->e_ehsize;
4547 /* We are not creating an executable, which means that we are
4548 not creating a program header, and that the actual order of
4549 the sections in the file is unimportant. */
4550 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
4552 Elf_Internal_Shdr *hdr;
4555 if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
4556 && hdr->bfd_section == NULL)
4557 || i == tdata->symtab_section
4558 || i == tdata->symtab_shndx_section
4559 || i == tdata->strtab_section)
4561 hdr->sh_offset = -1;
4564 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4566 if (i == SHN_LORESERVE - 1)
4568 i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4569 hdrpp += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4576 Elf_Internal_Shdr **hdrpp;
4578 /* Assign file positions for the loaded sections based on the
4579 assignment of sections to segments. */
4580 if (! assign_file_positions_for_segments (abfd, link_info))
4583 /* Assign file positions for the other sections. */
4585 off = elf_tdata (abfd)->next_file_pos;
4586 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
4588 Elf_Internal_Shdr *hdr;
4591 if (hdr->bfd_section != NULL
4592 && hdr->bfd_section->filepos != 0)
4593 hdr->sh_offset = hdr->bfd_section->filepos;
4594 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
4596 ((*_bfd_error_handler)
4597 (_("%B: warning: allocated section `%s' not in segment"),
4599 (hdr->bfd_section == NULL
4601 : hdr->bfd_section->name)));
4602 if ((abfd->flags & D_PAGED) != 0)
4603 off += vma_page_aligned_bias (hdr->sh_addr, off,
4606 off += vma_page_aligned_bias (hdr->sh_addr, off,
4608 off = _bfd_elf_assign_file_position_for_section (hdr, off,
4611 else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
4612 && hdr->bfd_section == NULL)
4613 || hdr == i_shdrpp[tdata->symtab_section]
4614 || hdr == i_shdrpp[tdata->symtab_shndx_section]
4615 || hdr == i_shdrpp[tdata->strtab_section])
4616 hdr->sh_offset = -1;
4618 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4620 if (i == SHN_LORESERVE - 1)
4622 i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4623 hdrpp += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4628 /* Place the section headers. */
4629 off = align_file_position (off, 1 << bed->s->log_file_align);
4630 i_ehdrp->e_shoff = off;
4631 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
4633 elf_tdata (abfd)->next_file_pos = off;
4639 prep_headers (bfd *abfd)
4641 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
4642 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
4643 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
4644 struct elf_strtab_hash *shstrtab;
4645 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4647 i_ehdrp = elf_elfheader (abfd);
4648 i_shdrp = elf_elfsections (abfd);
4650 shstrtab = _bfd_elf_strtab_init ();
4651 if (shstrtab == NULL)
4654 elf_shstrtab (abfd) = shstrtab;
4656 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
4657 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
4658 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
4659 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
4661 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
4662 i_ehdrp->e_ident[EI_DATA] =
4663 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
4664 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
4666 if ((abfd->flags & DYNAMIC) != 0)
4667 i_ehdrp->e_type = ET_DYN;
4668 else if ((abfd->flags & EXEC_P) != 0)
4669 i_ehdrp->e_type = ET_EXEC;
4670 else if (bfd_get_format (abfd) == bfd_core)
4671 i_ehdrp->e_type = ET_CORE;
4673 i_ehdrp->e_type = ET_REL;
4675 switch (bfd_get_arch (abfd))
4677 case bfd_arch_unknown:
4678 i_ehdrp->e_machine = EM_NONE;
4681 /* There used to be a long list of cases here, each one setting
4682 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
4683 in the corresponding bfd definition. To avoid duplication,
4684 the switch was removed. Machines that need special handling
4685 can generally do it in elf_backend_final_write_processing(),
4686 unless they need the information earlier than the final write.
4687 Such need can generally be supplied by replacing the tests for
4688 e_machine with the conditions used to determine it. */
4690 i_ehdrp->e_machine = bed->elf_machine_code;
4693 i_ehdrp->e_version = bed->s->ev_current;
4694 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
4696 /* No program header, for now. */
4697 i_ehdrp->e_phoff = 0;
4698 i_ehdrp->e_phentsize = 0;
4699 i_ehdrp->e_phnum = 0;
4701 /* Each bfd section is section header entry. */
4702 i_ehdrp->e_entry = bfd_get_start_address (abfd);
4703 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
4705 /* If we're building an executable, we'll need a program header table. */
4706 if (abfd->flags & EXEC_P)
4707 /* It all happens later. */
4711 i_ehdrp->e_phentsize = 0;
4713 i_ehdrp->e_phoff = 0;
4716 elf_tdata (abfd)->symtab_hdr.sh_name =
4717 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE);
4718 elf_tdata (abfd)->strtab_hdr.sh_name =
4719 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", FALSE);
4720 elf_tdata (abfd)->shstrtab_hdr.sh_name =
4721 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", FALSE);
4722 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
4723 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
4724 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
4730 /* Assign file positions for all the reloc sections which are not part
4731 of the loadable file image. */
4734 _bfd_elf_assign_file_positions_for_relocs (bfd *abfd)
4737 unsigned int i, num_sec;
4738 Elf_Internal_Shdr **shdrpp;
4740 off = elf_tdata (abfd)->next_file_pos;
4742 num_sec = elf_numsections (abfd);
4743 for (i = 1, shdrpp = elf_elfsections (abfd) + 1; i < num_sec; i++, shdrpp++)
4745 Elf_Internal_Shdr *shdrp;
4748 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
4749 && shdrp->sh_offset == -1)
4750 off = _bfd_elf_assign_file_position_for_section (shdrp, off, TRUE);
4753 elf_tdata (abfd)->next_file_pos = off;
4757 _bfd_elf_write_object_contents (bfd *abfd)
4759 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4760 Elf_Internal_Ehdr *i_ehdrp;
4761 Elf_Internal_Shdr **i_shdrp;
4763 unsigned int count, num_sec;
4765 if (! abfd->output_has_begun
4766 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
4769 i_shdrp = elf_elfsections (abfd);
4770 i_ehdrp = elf_elfheader (abfd);
4773 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
4777 _bfd_elf_assign_file_positions_for_relocs (abfd);
4779 /* After writing the headers, we need to write the sections too... */
4780 num_sec = elf_numsections (abfd);
4781 for (count = 1; count < num_sec; count++)
4783 if (bed->elf_backend_section_processing)
4784 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
4785 if (i_shdrp[count]->contents)
4787 bfd_size_type amt = i_shdrp[count]->sh_size;
4789 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
4790 || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
4793 if (count == SHN_LORESERVE - 1)
4794 count += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4797 /* Write out the section header names. */
4798 if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
4799 || ! _bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd)))
4802 if (bed->elf_backend_final_write_processing)
4803 (*bed->elf_backend_final_write_processing) (abfd,
4804 elf_tdata (abfd)->linker);
4806 return bed->s->write_shdrs_and_ehdr (abfd);
4810 _bfd_elf_write_corefile_contents (bfd *abfd)
4812 /* Hopefully this can be done just like an object file. */
4813 return _bfd_elf_write_object_contents (abfd);
4816 /* Given a section, search the header to find them. */
4819 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
4821 const struct elf_backend_data *bed;
4824 if (elf_section_data (asect) != NULL
4825 && elf_section_data (asect)->this_idx != 0)
4826 return elf_section_data (asect)->this_idx;
4828 if (bfd_is_abs_section (asect))
4830 else if (bfd_is_com_section (asect))
4832 else if (bfd_is_und_section (asect))
4837 bed = get_elf_backend_data (abfd);
4838 if (bed->elf_backend_section_from_bfd_section)
4842 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
4847 bfd_set_error (bfd_error_nonrepresentable_section);
4852 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
4856 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
4858 asymbol *asym_ptr = *asym_ptr_ptr;
4860 flagword flags = asym_ptr->flags;
4862 /* When gas creates relocations against local labels, it creates its
4863 own symbol for the section, but does put the symbol into the
4864 symbol chain, so udata is 0. When the linker is generating
4865 relocatable output, this section symbol may be for one of the
4866 input sections rather than the output section. */
4867 if (asym_ptr->udata.i == 0
4868 && (flags & BSF_SECTION_SYM)
4869 && asym_ptr->section)
4873 if (asym_ptr->section->output_section != NULL)
4874 indx = asym_ptr->section->output_section->index;
4876 indx = asym_ptr->section->index;
4877 if (indx < elf_num_section_syms (abfd)
4878 && elf_section_syms (abfd)[indx] != NULL)
4879 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
4882 idx = asym_ptr->udata.i;
4886 /* This case can occur when using --strip-symbol on a symbol
4887 which is used in a relocation entry. */
4888 (*_bfd_error_handler)
4889 (_("%B: symbol `%s' required but not present"),
4890 abfd, bfd_asymbol_name (asym_ptr));
4891 bfd_set_error (bfd_error_no_symbols);
4898 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n",
4899 (long) asym_ptr, asym_ptr->name, idx, flags,
4900 elf_symbol_flags (flags));
4908 /* Copy private BFD data. This copies any program header information. */
4911 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
4913 Elf_Internal_Ehdr *iehdr;
4914 struct elf_segment_map *map;
4915 struct elf_segment_map *map_first;
4916 struct elf_segment_map **pointer_to_map;
4917 Elf_Internal_Phdr *segment;
4920 unsigned int num_segments;
4921 bfd_boolean phdr_included = FALSE;
4922 bfd_vma maxpagesize;
4923 struct elf_segment_map *phdr_adjust_seg = NULL;
4924 unsigned int phdr_adjust_num = 0;
4925 const struct elf_backend_data *bed;
4927 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
4928 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
4931 if (elf_tdata (ibfd)->phdr == NULL)
4934 bed = get_elf_backend_data (ibfd);
4935 iehdr = elf_elfheader (ibfd);
4938 pointer_to_map = &map_first;
4940 num_segments = elf_elfheader (ibfd)->e_phnum;
4941 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
4943 /* Returns the end address of the segment + 1. */
4944 #define SEGMENT_END(segment, start) \
4945 (start + (segment->p_memsz > segment->p_filesz \
4946 ? segment->p_memsz : segment->p_filesz))
4948 #define SECTION_SIZE(section, segment) \
4949 (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) \
4950 != SEC_THREAD_LOCAL || segment->p_type == PT_TLS) \
4951 ? section->size : 0)
4953 /* Returns TRUE if the given section is contained within
4954 the given segment. VMA addresses are compared. */
4955 #define IS_CONTAINED_BY_VMA(section, segment) \
4956 (section->vma >= segment->p_vaddr \
4957 && (section->vma + SECTION_SIZE (section, segment) \
4958 <= (SEGMENT_END (segment, segment->p_vaddr))))
4960 /* Returns TRUE if the given section is contained within
4961 the given segment. LMA addresses are compared. */
4962 #define IS_CONTAINED_BY_LMA(section, segment, base) \
4963 (section->lma >= base \
4964 && (section->lma + SECTION_SIZE (section, segment) \
4965 <= SEGMENT_END (segment, base)))
4967 /* Special case: corefile "NOTE" section containing regs, prpsinfo etc. */
4968 #define IS_COREFILE_NOTE(p, s) \
4969 (p->p_type == PT_NOTE \
4970 && bfd_get_format (ibfd) == bfd_core \
4971 && s->vma == 0 && s->lma == 0 \
4972 && (bfd_vma) s->filepos >= p->p_offset \
4973 && ((bfd_vma) s->filepos + s->size \
4974 <= p->p_offset + p->p_filesz))
4976 /* The complicated case when p_vaddr is 0 is to handle the Solaris
4977 linker, which generates a PT_INTERP section with p_vaddr and
4978 p_memsz set to 0. */
4979 #define IS_SOLARIS_PT_INTERP(p, s) \
4981 && p->p_paddr == 0 \
4982 && p->p_memsz == 0 \
4983 && p->p_filesz > 0 \
4984 && (s->flags & SEC_HAS_CONTENTS) != 0 \
4986 && (bfd_vma) s->filepos >= p->p_offset \
4987 && ((bfd_vma) s->filepos + s->size \
4988 <= p->p_offset + p->p_filesz))
4990 /* Decide if the given section should be included in the given segment.
4991 A section will be included if:
4992 1. It is within the address space of the segment -- we use the LMA
4993 if that is set for the segment and the VMA otherwise,
4994 2. It is an allocated segment,
4995 3. There is an output section associated with it,
4996 4. The section has not already been allocated to a previous segment.
4997 5. PT_GNU_STACK segments do not include any sections.
4998 6. PT_TLS segment includes only SHF_TLS sections.
4999 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
5000 8. PT_DYNAMIC should not contain empty sections at the beginning
5001 (with the possible exception of .dynamic). */
5002 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \
5003 ((((segment->p_paddr \
5004 ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \
5005 : IS_CONTAINED_BY_VMA (section, segment)) \
5006 && (section->flags & SEC_ALLOC) != 0) \
5007 || IS_COREFILE_NOTE (segment, section)) \
5008 && section->output_section != NULL \
5009 && segment->p_type != PT_GNU_STACK \
5010 && (segment->p_type != PT_TLS \
5011 || (section->flags & SEC_THREAD_LOCAL)) \
5012 && (segment->p_type == PT_LOAD \
5013 || segment->p_type == PT_TLS \
5014 || (section->flags & SEC_THREAD_LOCAL) == 0) \
5015 && (segment->p_type != PT_DYNAMIC \
5016 || SECTION_SIZE (section, segment) > 0 \
5017 || (segment->p_paddr \
5018 ? segment->p_paddr != section->lma \
5019 : segment->p_vaddr != section->vma) \
5020 || (strcmp (bfd_get_section_name (ibfd, section), ".dynamic") \
5022 && ! section->segment_mark)
5024 /* Returns TRUE iff seg1 starts after the end of seg2. */
5025 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
5026 (seg1->field >= SEGMENT_END (seg2, seg2->field))
5028 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
5029 their VMA address ranges and their LMA address ranges overlap.
5030 It is possible to have overlapping VMA ranges without overlapping LMA
5031 ranges. RedBoot images for example can have both .data and .bss mapped
5032 to the same VMA range, but with the .data section mapped to a different
5034 #define SEGMENT_OVERLAPS(seg1, seg2) \
5035 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
5036 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
5037 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
5038 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
5040 /* Initialise the segment mark field. */
5041 for (section = ibfd->sections; section != NULL; section = section->next)
5042 section->segment_mark = FALSE;
5044 /* Scan through the segments specified in the program header
5045 of the input BFD. For this first scan we look for overlaps
5046 in the loadable segments. These can be created by weird
5047 parameters to objcopy. Also, fix some solaris weirdness. */
5048 for (i = 0, segment = elf_tdata (ibfd)->phdr;
5053 Elf_Internal_Phdr *segment2;
5055 if (segment->p_type == PT_INTERP)
5056 for (section = ibfd->sections; section; section = section->next)
5057 if (IS_SOLARIS_PT_INTERP (segment, section))
5059 /* Mininal change so that the normal section to segment
5060 assignment code will work. */
5061 segment->p_vaddr = section->vma;
5065 if (segment->p_type != PT_LOAD)
5068 /* Determine if this segment overlaps any previous segments. */
5069 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2 ++)
5071 bfd_signed_vma extra_length;
5073 if (segment2->p_type != PT_LOAD
5074 || ! SEGMENT_OVERLAPS (segment, segment2))
5077 /* Merge the two segments together. */
5078 if (segment2->p_vaddr < segment->p_vaddr)
5080 /* Extend SEGMENT2 to include SEGMENT and then delete
5083 SEGMENT_END (segment, segment->p_vaddr)
5084 - SEGMENT_END (segment2, segment2->p_vaddr);
5086 if (extra_length > 0)
5088 segment2->p_memsz += extra_length;
5089 segment2->p_filesz += extra_length;
5092 segment->p_type = PT_NULL;
5094 /* Since we have deleted P we must restart the outer loop. */
5096 segment = elf_tdata (ibfd)->phdr;
5101 /* Extend SEGMENT to include SEGMENT2 and then delete
5104 SEGMENT_END (segment2, segment2->p_vaddr)
5105 - SEGMENT_END (segment, segment->p_vaddr);
5107 if (extra_length > 0)
5109 segment->p_memsz += extra_length;
5110 segment->p_filesz += extra_length;
5113 segment2->p_type = PT_NULL;
5118 /* The second scan attempts to assign sections to segments. */
5119 for (i = 0, segment = elf_tdata (ibfd)->phdr;
5123 unsigned int section_count;
5124 asection ** sections;
5125 asection * output_section;
5127 bfd_vma matching_lma;
5128 bfd_vma suggested_lma;
5132 if (segment->p_type == PT_NULL)
5135 /* Compute how many sections might be placed into this segment. */
5136 for (section = ibfd->sections, section_count = 0;
5138 section = section->next)
5139 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
5142 /* Allocate a segment map big enough to contain
5143 all of the sections we have selected. */
5144 amt = sizeof (struct elf_segment_map);
5145 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
5146 map = bfd_alloc (obfd, amt);
5150 /* Initialise the fields of the segment map. Default to
5151 using the physical address of the segment in the input BFD. */
5153 map->p_type = segment->p_type;
5154 map->p_flags = segment->p_flags;
5155 map->p_flags_valid = 1;
5156 map->p_paddr = segment->p_paddr;
5157 map->p_paddr_valid = 1;
5159 /* Determine if this segment contains the ELF file header
5160 and if it contains the program headers themselves. */
5161 map->includes_filehdr = (segment->p_offset == 0
5162 && segment->p_filesz >= iehdr->e_ehsize);
5164 map->includes_phdrs = 0;
5166 if (! phdr_included || segment->p_type != PT_LOAD)
5168 map->includes_phdrs =
5169 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
5170 && (segment->p_offset + segment->p_filesz
5171 >= ((bfd_vma) iehdr->e_phoff
5172 + iehdr->e_phnum * iehdr->e_phentsize)));
5174 if (segment->p_type == PT_LOAD && map->includes_phdrs)
5175 phdr_included = TRUE;
5178 if (section_count == 0)
5180 /* Special segments, such as the PT_PHDR segment, may contain
5181 no sections, but ordinary, loadable segments should contain
5182 something. They are allowed by the ELF spec however, so only
5183 a warning is produced. */
5184 if (segment->p_type == PT_LOAD)
5185 (*_bfd_error_handler)
5186 (_("%B: warning: Empty loadable segment detected, is this intentional ?\n"),
5190 *pointer_to_map = map;
5191 pointer_to_map = &map->next;
5196 /* Now scan the sections in the input BFD again and attempt
5197 to add their corresponding output sections to the segment map.
5198 The problem here is how to handle an output section which has
5199 been moved (ie had its LMA changed). There are four possibilities:
5201 1. None of the sections have been moved.
5202 In this case we can continue to use the segment LMA from the
5205 2. All of the sections have been moved by the same amount.
5206 In this case we can change the segment's LMA to match the LMA
5207 of the first section.
5209 3. Some of the sections have been moved, others have not.
5210 In this case those sections which have not been moved can be
5211 placed in the current segment which will have to have its size,
5212 and possibly its LMA changed, and a new segment or segments will
5213 have to be created to contain the other sections.
5215 4. The sections have been moved, but not by the same amount.
5216 In this case we can change the segment's LMA to match the LMA
5217 of the first section and we will have to create a new segment
5218 or segments to contain the other sections.
5220 In order to save time, we allocate an array to hold the section
5221 pointers that we are interested in. As these sections get assigned
5222 to a segment, they are removed from this array. */
5224 /* Gcc 2.96 miscompiles this code on mips. Don't do casting here
5225 to work around this long long bug. */
5226 amt = section_count * sizeof (asection *);
5227 sections = bfd_malloc (amt);
5228 if (sections == NULL)
5231 /* Step One: Scan for segment vs section LMA conflicts.
5232 Also add the sections to the section array allocated above.
5233 Also add the sections to the current segment. In the common
5234 case, where the sections have not been moved, this means that
5235 we have completely filled the segment, and there is nothing
5241 for (j = 0, section = ibfd->sections;
5243 section = section->next)
5245 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
5247 output_section = section->output_section;
5249 sections[j ++] = section;
5251 /* The Solaris native linker always sets p_paddr to 0.
5252 We try to catch that case here, and set it to the
5253 correct value. Note - some backends require that
5254 p_paddr be left as zero. */
5255 if (segment->p_paddr == 0
5256 && segment->p_vaddr != 0
5257 && (! bed->want_p_paddr_set_to_zero)
5259 && output_section->lma != 0
5260 && (output_section->vma == (segment->p_vaddr
5261 + (map->includes_filehdr
5264 + (map->includes_phdrs
5266 * iehdr->e_phentsize)
5268 map->p_paddr = segment->p_vaddr;
5270 /* Match up the physical address of the segment with the
5271 LMA address of the output section. */
5272 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
5273 || IS_COREFILE_NOTE (segment, section)
5274 || (bed->want_p_paddr_set_to_zero &&
5275 IS_CONTAINED_BY_VMA (output_section, segment))
5278 if (matching_lma == 0)
5279 matching_lma = output_section->lma;
5281 /* We assume that if the section fits within the segment
5282 then it does not overlap any other section within that
5284 map->sections[isec ++] = output_section;
5286 else if (suggested_lma == 0)
5287 suggested_lma = output_section->lma;
5291 BFD_ASSERT (j == section_count);
5293 /* Step Two: Adjust the physical address of the current segment,
5295 if (isec == section_count)
5297 /* All of the sections fitted within the segment as currently
5298 specified. This is the default case. Add the segment to
5299 the list of built segments and carry on to process the next
5300 program header in the input BFD. */
5301 map->count = section_count;
5302 *pointer_to_map = map;
5303 pointer_to_map = &map->next;
5310 if (matching_lma != 0)
5312 /* At least one section fits inside the current segment.
5313 Keep it, but modify its physical address to match the
5314 LMA of the first section that fitted. */
5315 map->p_paddr = matching_lma;
5319 /* None of the sections fitted inside the current segment.
5320 Change the current segment's physical address to match
5321 the LMA of the first section. */
5322 map->p_paddr = suggested_lma;
5325 /* Offset the segment physical address from the lma
5326 to allow for space taken up by elf headers. */
5327 if (map->includes_filehdr)
5328 map->p_paddr -= iehdr->e_ehsize;
5330 if (map->includes_phdrs)
5332 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
5334 /* iehdr->e_phnum is just an estimate of the number
5335 of program headers that we will need. Make a note
5336 here of the number we used and the segment we chose
5337 to hold these headers, so that we can adjust the
5338 offset when we know the correct value. */
5339 phdr_adjust_num = iehdr->e_phnum;
5340 phdr_adjust_seg = map;
5344 /* Step Three: Loop over the sections again, this time assigning
5345 those that fit to the current segment and removing them from the
5346 sections array; but making sure not to leave large gaps. Once all
5347 possible sections have been assigned to the current segment it is
5348 added to the list of built segments and if sections still remain
5349 to be assigned, a new segment is constructed before repeating
5357 /* Fill the current segment with sections that fit. */
5358 for (j = 0; j < section_count; j++)
5360 section = sections[j];
5362 if (section == NULL)
5365 output_section = section->output_section;
5367 BFD_ASSERT (output_section != NULL);
5369 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
5370 || IS_COREFILE_NOTE (segment, section))
5372 if (map->count == 0)
5374 /* If the first section in a segment does not start at
5375 the beginning of the segment, then something is
5377 if (output_section->lma !=
5379 + (map->includes_filehdr ? iehdr->e_ehsize : 0)
5380 + (map->includes_phdrs
5381 ? iehdr->e_phnum * iehdr->e_phentsize
5387 asection * prev_sec;
5389 prev_sec = map->sections[map->count - 1];
5391 /* If the gap between the end of the previous section
5392 and the start of this section is more than
5393 maxpagesize then we need to start a new segment. */
5394 if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
5396 < BFD_ALIGN (output_section->lma, maxpagesize))
5397 || ((prev_sec->lma + prev_sec->size)
5398 > output_section->lma))
5400 if (suggested_lma == 0)
5401 suggested_lma = output_section->lma;
5407 map->sections[map->count++] = output_section;
5410 section->segment_mark = TRUE;
5412 else if (suggested_lma == 0)
5413 suggested_lma = output_section->lma;
5416 BFD_ASSERT (map->count > 0);
5418 /* Add the current segment to the list of built segments. */
5419 *pointer_to_map = map;
5420 pointer_to_map = &map->next;
5422 if (isec < section_count)
5424 /* We still have not allocated all of the sections to
5425 segments. Create a new segment here, initialise it
5426 and carry on looping. */
5427 amt = sizeof (struct elf_segment_map);
5428 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
5429 map = bfd_alloc (obfd, amt);
5436 /* Initialise the fields of the segment map. Set the physical
5437 physical address to the LMA of the first section that has
5438 not yet been assigned. */
5440 map->p_type = segment->p_type;
5441 map->p_flags = segment->p_flags;
5442 map->p_flags_valid = 1;
5443 map->p_paddr = suggested_lma;
5444 map->p_paddr_valid = 1;
5445 map->includes_filehdr = 0;
5446 map->includes_phdrs = 0;
5449 while (isec < section_count);
5454 /* The Solaris linker creates program headers in which all the
5455 p_paddr fields are zero. When we try to objcopy or strip such a
5456 file, we get confused. Check for this case, and if we find it
5457 reset the p_paddr_valid fields. */
5458 for (map = map_first; map != NULL; map = map->next)
5459 if (map->p_paddr != 0)
5462 for (map = map_first; map != NULL; map = map->next)
5463 map->p_paddr_valid = 0;
5465 elf_tdata (obfd)->segment_map = map_first;
5467 /* If we had to estimate the number of program headers that were
5468 going to be needed, then check our estimate now and adjust
5469 the offset if necessary. */
5470 if (phdr_adjust_seg != NULL)
5474 for (count = 0, map = map_first; map != NULL; map = map->next)
5477 if (count > phdr_adjust_num)
5478 phdr_adjust_seg->p_paddr
5479 -= (count - phdr_adjust_num) * iehdr->e_phentsize;
5484 #undef IS_CONTAINED_BY_VMA
5485 #undef IS_CONTAINED_BY_LMA
5486 #undef IS_COREFILE_NOTE
5487 #undef IS_SOLARIS_PT_INTERP
5488 #undef INCLUDE_SECTION_IN_SEGMENT
5489 #undef SEGMENT_AFTER_SEGMENT
5490 #undef SEGMENT_OVERLAPS
5494 /* Copy private section information. This copies over the entsize
5495 field, and sometimes the info field. */
5498 _bfd_elf_copy_private_section_data (bfd *ibfd,
5503 Elf_Internal_Shdr *ihdr, *ohdr;
5505 if (ibfd->xvec->flavour != bfd_target_elf_flavour
5506 || obfd->xvec->flavour != bfd_target_elf_flavour)
5509 ihdr = &elf_section_data (isec)->this_hdr;
5510 ohdr = &elf_section_data (osec)->this_hdr;
5512 ohdr->sh_entsize = ihdr->sh_entsize;
5514 if (ihdr->sh_type == SHT_SYMTAB
5515 || ihdr->sh_type == SHT_DYNSYM
5516 || ihdr->sh_type == SHT_GNU_verneed
5517 || ihdr->sh_type == SHT_GNU_verdef)
5518 ohdr->sh_info = ihdr->sh_info;
5520 /* Set things up for objcopy. The output SHT_GROUP section will
5521 have its elf_next_in_group pointing back to the input group
5522 members. Ignore linker created group section. See
5523 elfNN_ia64_object_p in elfxx-ia64.c. */
5524 if (elf_sec_group (isec) == NULL
5525 || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0)
5527 elf_next_in_group (osec) = elf_next_in_group (isec);
5528 elf_group_name (osec) = elf_group_name (isec);
5531 osec->use_rela_p = isec->use_rela_p;
5536 /* Copy private header information. */
5539 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
5541 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
5542 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
5545 /* Copy over private BFD data if it has not already been copied.
5546 This must be done here, rather than in the copy_private_bfd_data
5547 entry point, because the latter is called after the section
5548 contents have been set, which means that the program headers have
5549 already been worked out. */
5550 if (elf_tdata (obfd)->segment_map == NULL && elf_tdata (ibfd)->phdr != NULL)
5552 if (! copy_private_bfd_data (ibfd, obfd))
5559 /* Copy private symbol information. If this symbol is in a section
5560 which we did not map into a BFD section, try to map the section
5561 index correctly. We use special macro definitions for the mapped
5562 section indices; these definitions are interpreted by the
5563 swap_out_syms function. */
5565 #define MAP_ONESYMTAB (SHN_HIOS + 1)
5566 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
5567 #define MAP_STRTAB (SHN_HIOS + 3)
5568 #define MAP_SHSTRTAB (SHN_HIOS + 4)
5569 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
5572 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
5577 elf_symbol_type *isym, *osym;
5579 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
5580 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
5583 isym = elf_symbol_from (ibfd, isymarg);
5584 osym = elf_symbol_from (obfd, osymarg);
5588 && bfd_is_abs_section (isym->symbol.section))
5592 shndx = isym->internal_elf_sym.st_shndx;
5593 if (shndx == elf_onesymtab (ibfd))
5594 shndx = MAP_ONESYMTAB;
5595 else if (shndx == elf_dynsymtab (ibfd))
5596 shndx = MAP_DYNSYMTAB;
5597 else if (shndx == elf_tdata (ibfd)->strtab_section)
5599 else if (shndx == elf_tdata (ibfd)->shstrtab_section)
5600 shndx = MAP_SHSTRTAB;
5601 else if (shndx == elf_tdata (ibfd)->symtab_shndx_section)
5602 shndx = MAP_SYM_SHNDX;
5603 osym->internal_elf_sym.st_shndx = shndx;
5609 /* Swap out the symbols. */
5612 swap_out_syms (bfd *abfd,
5613 struct bfd_strtab_hash **sttp,
5616 const struct elf_backend_data *bed;
5619 struct bfd_strtab_hash *stt;
5620 Elf_Internal_Shdr *symtab_hdr;
5621 Elf_Internal_Shdr *symtab_shndx_hdr;
5622 Elf_Internal_Shdr *symstrtab_hdr;
5623 bfd_byte *outbound_syms;
5624 bfd_byte *outbound_shndx;
5627 bfd_boolean name_local_sections;
5629 if (!elf_map_symbols (abfd))
5632 /* Dump out the symtabs. */
5633 stt = _bfd_elf_stringtab_init ();
5637 bed = get_elf_backend_data (abfd);
5638 symcount = bfd_get_symcount (abfd);
5639 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5640 symtab_hdr->sh_type = SHT_SYMTAB;
5641 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
5642 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
5643 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
5644 symtab_hdr->sh_addralign = 1 << bed->s->log_file_align;
5646 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
5647 symstrtab_hdr->sh_type = SHT_STRTAB;
5649 amt = (bfd_size_type) (1 + symcount) * bed->s->sizeof_sym;
5650 outbound_syms = bfd_alloc (abfd, amt);
5651 if (outbound_syms == NULL)
5653 _bfd_stringtab_free (stt);
5656 symtab_hdr->contents = outbound_syms;
5658 outbound_shndx = NULL;
5659 symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
5660 if (symtab_shndx_hdr->sh_name != 0)
5662 amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx);
5663 outbound_shndx = bfd_zalloc (abfd, amt);
5664 if (outbound_shndx == NULL)
5666 _bfd_stringtab_free (stt);
5670 symtab_shndx_hdr->contents = outbound_shndx;
5671 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
5672 symtab_shndx_hdr->sh_size = amt;
5673 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
5674 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
5677 /* Now generate the data (for "contents"). */
5679 /* Fill in zeroth symbol and swap it out. */
5680 Elf_Internal_Sym sym;
5686 sym.st_shndx = SHN_UNDEF;
5687 bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
5688 outbound_syms += bed->s->sizeof_sym;
5689 if (outbound_shndx != NULL)
5690 outbound_shndx += sizeof (Elf_External_Sym_Shndx);
5694 = (bed->elf_backend_name_local_section_symbols
5695 && bed->elf_backend_name_local_section_symbols (abfd));
5697 syms = bfd_get_outsymbols (abfd);
5698 for (idx = 0; idx < symcount; idx++)
5700 Elf_Internal_Sym sym;
5701 bfd_vma value = syms[idx]->value;
5702 elf_symbol_type *type_ptr;
5703 flagword flags = syms[idx]->flags;
5706 if (!name_local_sections
5707 && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
5709 /* Local section symbols have no name. */
5714 sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
5717 if (sym.st_name == (unsigned long) -1)
5719 _bfd_stringtab_free (stt);
5724 type_ptr = elf_symbol_from (abfd, syms[idx]);
5726 if ((flags & BSF_SECTION_SYM) == 0
5727 && bfd_is_com_section (syms[idx]->section))
5729 /* ELF common symbols put the alignment into the `value' field,
5730 and the size into the `size' field. This is backwards from
5731 how BFD handles it, so reverse it here. */
5732 sym.st_size = value;
5733 if (type_ptr == NULL
5734 || type_ptr->internal_elf_sym.st_value == 0)
5735 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
5737 sym.st_value = type_ptr->internal_elf_sym.st_value;
5738 sym.st_shndx = _bfd_elf_section_from_bfd_section
5739 (abfd, syms[idx]->section);
5743 asection *sec = syms[idx]->section;
5746 if (sec->output_section)
5748 value += sec->output_offset;
5749 sec = sec->output_section;
5752 /* Don't add in the section vma for relocatable output. */
5753 if (! relocatable_p)
5755 sym.st_value = value;
5756 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
5758 if (bfd_is_abs_section (sec)
5760 && type_ptr->internal_elf_sym.st_shndx != 0)
5762 /* This symbol is in a real ELF section which we did
5763 not create as a BFD section. Undo the mapping done
5764 by copy_private_symbol_data. */
5765 shndx = type_ptr->internal_elf_sym.st_shndx;
5769 shndx = elf_onesymtab (abfd);
5772 shndx = elf_dynsymtab (abfd);
5775 shndx = elf_tdata (abfd)->strtab_section;
5778 shndx = elf_tdata (abfd)->shstrtab_section;
5781 shndx = elf_tdata (abfd)->symtab_shndx_section;
5789 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
5795 /* Writing this would be a hell of a lot easier if
5796 we had some decent documentation on bfd, and
5797 knew what to expect of the library, and what to
5798 demand of applications. For example, it
5799 appears that `objcopy' might not set the
5800 section of a symbol to be a section that is
5801 actually in the output file. */
5802 sec2 = bfd_get_section_by_name (abfd, sec->name);
5805 _bfd_error_handler (_("\
5806 Unable to find equivalent output section for symbol '%s' from section '%s'"),
5807 syms[idx]->name ? syms[idx]->name : "<Local sym>",
5809 bfd_set_error (bfd_error_invalid_operation);
5810 _bfd_stringtab_free (stt);
5814 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
5815 BFD_ASSERT (shndx != -1);
5819 sym.st_shndx = shndx;
5822 if ((flags & BSF_THREAD_LOCAL) != 0)
5824 else if ((flags & BSF_FUNCTION) != 0)
5826 else if ((flags & BSF_OBJECT) != 0)
5831 if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
5834 /* Processor-specific types. */
5835 if (type_ptr != NULL
5836 && bed->elf_backend_get_symbol_type)
5837 type = ((*bed->elf_backend_get_symbol_type)
5838 (&type_ptr->internal_elf_sym, type));
5840 if (flags & BSF_SECTION_SYM)
5842 if (flags & BSF_GLOBAL)
5843 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
5845 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
5847 else if (bfd_is_com_section (syms[idx]->section))
5848 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
5849 else if (bfd_is_und_section (syms[idx]->section))
5850 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
5854 else if (flags & BSF_FILE)
5855 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
5858 int bind = STB_LOCAL;
5860 if (flags & BSF_LOCAL)
5862 else if (flags & BSF_WEAK)
5864 else if (flags & BSF_GLOBAL)
5867 sym.st_info = ELF_ST_INFO (bind, type);
5870 if (type_ptr != NULL)
5871 sym.st_other = type_ptr->internal_elf_sym.st_other;
5875 bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
5876 outbound_syms += bed->s->sizeof_sym;
5877 if (outbound_shndx != NULL)
5878 outbound_shndx += sizeof (Elf_External_Sym_Shndx);
5882 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
5883 symstrtab_hdr->sh_type = SHT_STRTAB;
5885 symstrtab_hdr->sh_flags = 0;
5886 symstrtab_hdr->sh_addr = 0;
5887 symstrtab_hdr->sh_entsize = 0;
5888 symstrtab_hdr->sh_link = 0;
5889 symstrtab_hdr->sh_info = 0;
5890 symstrtab_hdr->sh_addralign = 1;
5895 /* Return the number of bytes required to hold the symtab vector.
5897 Note that we base it on the count plus 1, since we will null terminate
5898 the vector allocated based on this size. However, the ELF symbol table
5899 always has a dummy entry as symbol #0, so it ends up even. */
5902 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
5906 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
5908 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
5909 symtab_size = (symcount + 1) * (sizeof (asymbol *));
5911 symtab_size -= sizeof (asymbol *);
5917 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
5921 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
5923 if (elf_dynsymtab (abfd) == 0)
5925 bfd_set_error (bfd_error_invalid_operation);
5929 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
5930 symtab_size = (symcount + 1) * (sizeof (asymbol *));
5932 symtab_size -= sizeof (asymbol *);
5938 _bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
5941 return (asect->reloc_count + 1) * sizeof (arelent *);
5944 /* Canonicalize the relocs. */
5947 _bfd_elf_canonicalize_reloc (bfd *abfd,
5954 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5956 if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
5959 tblptr = section->relocation;
5960 for (i = 0; i < section->reloc_count; i++)
5961 *relptr++ = tblptr++;
5965 return section->reloc_count;
5969 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
5971 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5972 long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
5975 bfd_get_symcount (abfd) = symcount;
5980 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
5981 asymbol **allocation)
5983 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5984 long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
5987 bfd_get_dynamic_symcount (abfd) = symcount;
5991 /* Return the size required for the dynamic reloc entries. Any loadable
5992 section that was actually installed in the BFD, and has type SHT_REL
5993 or SHT_RELA, and uses the dynamic symbol table, is considered to be a
5994 dynamic reloc section. */
5997 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
6002 if (elf_dynsymtab (abfd) == 0)
6004 bfd_set_error (bfd_error_invalid_operation);
6008 ret = sizeof (arelent *);
6009 for (s = abfd->sections; s != NULL; s = s->next)
6010 if ((s->flags & SEC_LOAD) != 0
6011 && elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6012 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6013 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6014 ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize)
6015 * sizeof (arelent *));
6020 /* Canonicalize the dynamic relocation entries. Note that we return the
6021 dynamic relocations as a single block, although they are actually
6022 associated with particular sections; the interface, which was
6023 designed for SunOS style shared libraries, expects that there is only
6024 one set of dynamic relocs. Any loadable section that was actually
6025 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
6026 dynamic symbol table, is considered to be a dynamic reloc section. */
6029 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
6033 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
6037 if (elf_dynsymtab (abfd) == 0)
6039 bfd_set_error (bfd_error_invalid_operation);
6043 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
6045 for (s = abfd->sections; s != NULL; s = s->next)
6047 if ((s->flags & SEC_LOAD) != 0
6048 && elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6049 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6050 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6055 if (! (*slurp_relocs) (abfd, s, syms, TRUE))
6057 count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
6059 for (i = 0; i < count; i++)
6070 /* Read in the version information. */
6073 _bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
6075 bfd_byte *contents = NULL;
6077 unsigned int freeidx = 0;
6079 if (elf_dynverref (abfd) != 0)
6081 Elf_Internal_Shdr *hdr;
6082 Elf_External_Verneed *everneed;
6083 Elf_Internal_Verneed *iverneed;
6086 hdr = &elf_tdata (abfd)->dynverref_hdr;
6088 amt = (bfd_size_type) hdr->sh_info * sizeof (Elf_Internal_Verneed);
6089 elf_tdata (abfd)->verref = bfd_zalloc (abfd, amt);
6090 if (elf_tdata (abfd)->verref == NULL)
6093 elf_tdata (abfd)->cverrefs = hdr->sh_info;
6095 contents = bfd_malloc (hdr->sh_size);
6096 if (contents == NULL)
6098 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
6099 || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
6102 everneed = (Elf_External_Verneed *) contents;
6103 iverneed = elf_tdata (abfd)->verref;
6104 for (i = 0; i < hdr->sh_info; i++, iverneed++)
6106 Elf_External_Vernaux *evernaux;
6107 Elf_Internal_Vernaux *ivernaux;
6110 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
6112 iverneed->vn_bfd = abfd;
6114 iverneed->vn_filename =
6115 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
6117 if (iverneed->vn_filename == NULL)
6120 amt = iverneed->vn_cnt;
6121 amt *= sizeof (Elf_Internal_Vernaux);
6122 iverneed->vn_auxptr = bfd_alloc (abfd, amt);
6124 evernaux = ((Elf_External_Vernaux *)
6125 ((bfd_byte *) everneed + iverneed->vn_aux));
6126 ivernaux = iverneed->vn_auxptr;
6127 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
6129 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
6131 ivernaux->vna_nodename =
6132 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
6133 ivernaux->vna_name);
6134 if (ivernaux->vna_nodename == NULL)
6137 if (j + 1 < iverneed->vn_cnt)
6138 ivernaux->vna_nextptr = ivernaux + 1;
6140 ivernaux->vna_nextptr = NULL;
6142 evernaux = ((Elf_External_Vernaux *)
6143 ((bfd_byte *) evernaux + ivernaux->vna_next));
6145 if (ivernaux->vna_other > freeidx)
6146 freeidx = ivernaux->vna_other;
6149 if (i + 1 < hdr->sh_info)
6150 iverneed->vn_nextref = iverneed + 1;
6152 iverneed->vn_nextref = NULL;
6154 everneed = ((Elf_External_Verneed *)
6155 ((bfd_byte *) everneed + iverneed->vn_next));
6162 if (elf_dynverdef (abfd) != 0)
6164 Elf_Internal_Shdr *hdr;
6165 Elf_External_Verdef *everdef;
6166 Elf_Internal_Verdef *iverdef;
6167 Elf_Internal_Verdef *iverdefarr;
6168 Elf_Internal_Verdef iverdefmem;
6170 unsigned int maxidx;
6172 hdr = &elf_tdata (abfd)->dynverdef_hdr;
6174 contents = bfd_malloc (hdr->sh_size);
6175 if (contents == NULL)
6177 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
6178 || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
6181 /* We know the number of entries in the section but not the maximum
6182 index. Therefore we have to run through all entries and find
6184 everdef = (Elf_External_Verdef *) contents;
6186 for (i = 0; i < hdr->sh_info; ++i)
6188 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
6190 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
6191 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
6193 everdef = ((Elf_External_Verdef *)
6194 ((bfd_byte *) everdef + iverdefmem.vd_next));
6197 if (default_imported_symver)
6199 if (freeidx > maxidx)
6204 amt = (bfd_size_type) maxidx * sizeof (Elf_Internal_Verdef);
6205 elf_tdata (abfd)->verdef = bfd_zalloc (abfd, amt);
6206 if (elf_tdata (abfd)->verdef == NULL)
6209 elf_tdata (abfd)->cverdefs = maxidx;
6211 everdef = (Elf_External_Verdef *) contents;
6212 iverdefarr = elf_tdata (abfd)->verdef;
6213 for (i = 0; i < hdr->sh_info; i++)
6215 Elf_External_Verdaux *everdaux;
6216 Elf_Internal_Verdaux *iverdaux;
6219 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
6221 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
6222 memcpy (iverdef, &iverdefmem, sizeof (Elf_Internal_Verdef));
6224 iverdef->vd_bfd = abfd;
6226 amt = (bfd_size_type) iverdef->vd_cnt * sizeof (Elf_Internal_Verdaux);
6227 iverdef->vd_auxptr = bfd_alloc (abfd, amt);
6228 if (iverdef->vd_auxptr == NULL)
6231 everdaux = ((Elf_External_Verdaux *)
6232 ((bfd_byte *) everdef + iverdef->vd_aux));
6233 iverdaux = iverdef->vd_auxptr;
6234 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
6236 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
6238 iverdaux->vda_nodename =
6239 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
6240 iverdaux->vda_name);
6241 if (iverdaux->vda_nodename == NULL)
6244 if (j + 1 < iverdef->vd_cnt)
6245 iverdaux->vda_nextptr = iverdaux + 1;
6247 iverdaux->vda_nextptr = NULL;
6249 everdaux = ((Elf_External_Verdaux *)
6250 ((bfd_byte *) everdaux + iverdaux->vda_next));
6253 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
6255 if (i + 1 < hdr->sh_info)
6256 iverdef->vd_nextdef = iverdef + 1;
6258 iverdef->vd_nextdef = NULL;
6260 everdef = ((Elf_External_Verdef *)
6261 ((bfd_byte *) everdef + iverdef->vd_next));
6267 else if (default_imported_symver)
6274 amt = (bfd_size_type) freeidx * sizeof (Elf_Internal_Verdef);
6275 elf_tdata (abfd)->verdef = bfd_zalloc (abfd, amt);
6276 if (elf_tdata (abfd)->verdef == NULL)
6279 elf_tdata (abfd)->cverdefs = freeidx;
6282 /* Create a default version based on the soname. */
6283 if (default_imported_symver)
6285 Elf_Internal_Verdef *iverdef;
6286 Elf_Internal_Verdaux *iverdaux;
6288 iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];;
6290 iverdef->vd_version = VER_DEF_CURRENT;
6291 iverdef->vd_flags = 0;
6292 iverdef->vd_ndx = freeidx;
6293 iverdef->vd_cnt = 1;
6295 iverdef->vd_bfd = abfd;
6297 iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
6298 if (iverdef->vd_nodename == NULL)
6300 iverdef->vd_nextdef = NULL;
6301 amt = (bfd_size_type) sizeof (Elf_Internal_Verdaux);
6302 iverdef->vd_auxptr = bfd_alloc (abfd, amt);
6304 iverdaux = iverdef->vd_auxptr;
6305 iverdaux->vda_nodename = iverdef->vd_nodename;
6306 iverdaux->vda_nextptr = NULL;
6312 if (contents != NULL)
6318 _bfd_elf_make_empty_symbol (bfd *abfd)
6320 elf_symbol_type *newsym;
6321 bfd_size_type amt = sizeof (elf_symbol_type);
6323 newsym = bfd_zalloc (abfd, amt);
6328 newsym->symbol.the_bfd = abfd;
6329 return &newsym->symbol;
6334 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
6338 bfd_symbol_info (symbol, ret);
6341 /* Return whether a symbol name implies a local symbol. Most targets
6342 use this function for the is_local_label_name entry point, but some
6346 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
6349 /* Normal local symbols start with ``.L''. */
6350 if (name[0] == '.' && name[1] == 'L')
6353 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
6354 DWARF debugging symbols starting with ``..''. */
6355 if (name[0] == '.' && name[1] == '.')
6358 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
6359 emitting DWARF debugging output. I suspect this is actually a
6360 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
6361 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
6362 underscore to be emitted on some ELF targets). For ease of use,
6363 we treat such symbols as local. */
6364 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
6371 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
6372 asymbol *symbol ATTRIBUTE_UNUSED)
6379 _bfd_elf_set_arch_mach (bfd *abfd,
6380 enum bfd_architecture arch,
6381 unsigned long machine)
6383 /* If this isn't the right architecture for this backend, and this
6384 isn't the generic backend, fail. */
6385 if (arch != get_elf_backend_data (abfd)->arch
6386 && arch != bfd_arch_unknown
6387 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
6390 return bfd_default_set_arch_mach (abfd, arch, machine);
6393 /* Find the function to a particular section and offset,
6394 for error reporting. */
6397 elf_find_function (bfd *abfd ATTRIBUTE_UNUSED,
6401 const char **filename_ptr,
6402 const char **functionname_ptr)
6404 const char *filename;
6405 asymbol *func, *file;
6408 /* ??? Given multiple file symbols, it is impossible to reliably
6409 choose the right file name for global symbols. File symbols are
6410 local symbols, and thus all file symbols must sort before any
6411 global symbols. The ELF spec may be interpreted to say that a
6412 file symbol must sort before other local symbols, but currently
6413 ld -r doesn't do this. So, for ld -r output, it is possible to
6414 make a better choice of file name for local symbols by ignoring
6415 file symbols appearing after a given local symbol. */
6416 enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
6422 state = nothing_seen;
6424 for (p = symbols; *p != NULL; p++)
6428 q = (elf_symbol_type *) *p;
6430 switch (ELF_ST_TYPE (q->internal_elf_sym.st_info))
6436 if (state == symbol_seen)
6437 state = file_after_symbol_seen;
6443 if (bfd_get_section (&q->symbol) == section
6444 && q->symbol.value >= low_func
6445 && q->symbol.value <= offset)
6447 func = (asymbol *) q;
6448 low_func = q->symbol.value;
6451 else if (ELF_ST_BIND (q->internal_elf_sym.st_info) != STB_LOCAL
6452 && state == file_after_symbol_seen)
6455 filename = bfd_asymbol_name (file);
6459 if (state == nothing_seen)
6460 state = symbol_seen;
6467 *filename_ptr = filename;
6468 if (functionname_ptr)
6469 *functionname_ptr = bfd_asymbol_name (func);
6474 /* Find the nearest line to a particular section and offset,
6475 for error reporting. */
6478 _bfd_elf_find_nearest_line (bfd *abfd,
6482 const char **filename_ptr,
6483 const char **functionname_ptr,
6484 unsigned int *line_ptr)
6488 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
6489 filename_ptr, functionname_ptr,
6492 if (!*functionname_ptr)
6493 elf_find_function (abfd, section, symbols, offset,
6494 *filename_ptr ? NULL : filename_ptr,
6500 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
6501 filename_ptr, functionname_ptr,
6503 &elf_tdata (abfd)->dwarf2_find_line_info))
6505 if (!*functionname_ptr)
6506 elf_find_function (abfd, section, symbols, offset,
6507 *filename_ptr ? NULL : filename_ptr,
6513 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
6514 &found, filename_ptr,
6515 functionname_ptr, line_ptr,
6516 &elf_tdata (abfd)->line_info))
6518 if (found && (*functionname_ptr || *line_ptr))
6521 if (symbols == NULL)
6524 if (! elf_find_function (abfd, section, symbols, offset,
6525 filename_ptr, functionname_ptr))
6533 _bfd_elf_sizeof_headers (bfd *abfd, bfd_boolean reloc)
6537 ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
6539 ret += get_program_header_size (abfd);
6544 _bfd_elf_set_section_contents (bfd *abfd,
6546 const void *location,
6548 bfd_size_type count)
6550 Elf_Internal_Shdr *hdr;
6553 if (! abfd->output_has_begun
6554 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
6557 hdr = &elf_section_data (section)->this_hdr;
6558 pos = hdr->sh_offset + offset;
6559 if (bfd_seek (abfd, pos, SEEK_SET) != 0
6560 || bfd_bwrite (location, count, abfd) != count)
6567 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
6568 arelent *cache_ptr ATTRIBUTE_UNUSED,
6569 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
6574 /* Try to convert a non-ELF reloc into an ELF one. */
6577 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
6579 /* Check whether we really have an ELF howto. */
6581 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
6583 bfd_reloc_code_real_type code;
6584 reloc_howto_type *howto;
6586 /* Alien reloc: Try to determine its type to replace it with an
6587 equivalent ELF reloc. */
6589 if (areloc->howto->pc_relative)
6591 switch (areloc->howto->bitsize)
6594 code = BFD_RELOC_8_PCREL;
6597 code = BFD_RELOC_12_PCREL;
6600 code = BFD_RELOC_16_PCREL;
6603 code = BFD_RELOC_24_PCREL;
6606 code = BFD_RELOC_32_PCREL;
6609 code = BFD_RELOC_64_PCREL;
6615 howto = bfd_reloc_type_lookup (abfd, code);
6617 if (areloc->howto->pcrel_offset != howto->pcrel_offset)
6619 if (howto->pcrel_offset)
6620 areloc->addend += areloc->address;
6622 areloc->addend -= areloc->address; /* addend is unsigned!! */
6627 switch (areloc->howto->bitsize)
6633 code = BFD_RELOC_14;
6636 code = BFD_RELOC_16;
6639 code = BFD_RELOC_26;
6642 code = BFD_RELOC_32;
6645 code = BFD_RELOC_64;
6651 howto = bfd_reloc_type_lookup (abfd, code);
6655 areloc->howto = howto;
6663 (*_bfd_error_handler)
6664 (_("%B: unsupported relocation type %s"),
6665 abfd, areloc->howto->name);
6666 bfd_set_error (bfd_error_bad_value);
6671 _bfd_elf_close_and_cleanup (bfd *abfd)
6673 if (bfd_get_format (abfd) == bfd_object)
6675 if (elf_shstrtab (abfd) != NULL)
6676 _bfd_elf_strtab_free (elf_shstrtab (abfd));
6679 return _bfd_generic_close_and_cleanup (abfd);
6682 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
6683 in the relocation's offset. Thus we cannot allow any sort of sanity
6684 range-checking to interfere. There is nothing else to do in processing
6687 bfd_reloc_status_type
6688 _bfd_elf_rel_vtable_reloc_fn
6689 (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
6690 struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
6691 void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
6692 bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
6694 return bfd_reloc_ok;
6697 /* Elf core file support. Much of this only works on native
6698 toolchains, since we rely on knowing the
6699 machine-dependent procfs structure in order to pick
6700 out details about the corefile. */
6702 #ifdef HAVE_SYS_PROCFS_H
6703 # include <sys/procfs.h>
6706 /* FIXME: this is kinda wrong, but it's what gdb wants. */
6709 elfcore_make_pid (bfd *abfd)
6711 return ((elf_tdata (abfd)->core_lwpid << 16)
6712 + (elf_tdata (abfd)->core_pid));
6715 /* If there isn't a section called NAME, make one, using
6716 data from SECT. Note, this function will generate a
6717 reference to NAME, so you shouldn't deallocate or
6721 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
6725 if (bfd_get_section_by_name (abfd, name) != NULL)
6728 sect2 = bfd_make_section (abfd, name);
6732 sect2->size = sect->size;
6733 sect2->filepos = sect->filepos;
6734 sect2->flags = sect->flags;
6735 sect2->alignment_power = sect->alignment_power;
6739 /* Create a pseudosection containing SIZE bytes at FILEPOS. This
6740 actually creates up to two pseudosections:
6741 - For the single-threaded case, a section named NAME, unless
6742 such a section already exists.
6743 - For the multi-threaded case, a section named "NAME/PID", where
6744 PID is elfcore_make_pid (abfd).
6745 Both pseudosections have identical contents. */
6747 _bfd_elfcore_make_pseudosection (bfd *abfd,
6753 char *threaded_name;
6757 /* Build the section name. */
6759 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
6760 len = strlen (buf) + 1;
6761 threaded_name = bfd_alloc (abfd, len);
6762 if (threaded_name == NULL)
6764 memcpy (threaded_name, buf, len);
6766 sect = bfd_make_section_anyway (abfd, threaded_name);
6770 sect->filepos = filepos;
6771 sect->flags = SEC_HAS_CONTENTS;
6772 sect->alignment_power = 2;
6774 return elfcore_maybe_make_sect (abfd, name, sect);
6777 /* prstatus_t exists on:
6779 linux 2.[01] + glibc
6783 #if defined (HAVE_PRSTATUS_T)
6786 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
6791 if (note->descsz == sizeof (prstatus_t))
6795 size = sizeof (prstat.pr_reg);
6796 offset = offsetof (prstatus_t, pr_reg);
6797 memcpy (&prstat, note->descdata, sizeof (prstat));
6799 /* Do not overwrite the core signal if it
6800 has already been set by another thread. */
6801 if (elf_tdata (abfd)->core_signal == 0)
6802 elf_tdata (abfd)->core_signal = prstat.pr_cursig;
6803 elf_tdata (abfd)->core_pid = prstat.pr_pid;
6805 /* pr_who exists on:
6808 pr_who doesn't exist on:
6811 #if defined (HAVE_PRSTATUS_T_PR_WHO)
6812 elf_tdata (abfd)->core_lwpid = prstat.pr_who;
6815 #if defined (HAVE_PRSTATUS32_T)
6816 else if (note->descsz == sizeof (prstatus32_t))
6818 /* 64-bit host, 32-bit corefile */
6819 prstatus32_t prstat;
6821 size = sizeof (prstat.pr_reg);
6822 offset = offsetof (prstatus32_t, pr_reg);
6823 memcpy (&prstat, note->descdata, sizeof (prstat));
6825 /* Do not overwrite the core signal if it
6826 has already been set by another thread. */
6827 if (elf_tdata (abfd)->core_signal == 0)
6828 elf_tdata (abfd)->core_signal = prstat.pr_cursig;
6829 elf_tdata (abfd)->core_pid = prstat.pr_pid;
6831 /* pr_who exists on:
6834 pr_who doesn't exist on:
6837 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
6838 elf_tdata (abfd)->core_lwpid = prstat.pr_who;
6841 #endif /* HAVE_PRSTATUS32_T */
6844 /* Fail - we don't know how to handle any other
6845 note size (ie. data object type). */
6849 /* Make a ".reg/999" section and a ".reg" section. */
6850 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
6851 size, note->descpos + offset);
6853 #endif /* defined (HAVE_PRSTATUS_T) */
6855 /* Create a pseudosection containing the exact contents of NOTE. */
6857 elfcore_make_note_pseudosection (bfd *abfd,
6859 Elf_Internal_Note *note)
6861 return _bfd_elfcore_make_pseudosection (abfd, name,
6862 note->descsz, note->descpos);
6865 /* There isn't a consistent prfpregset_t across platforms,
6866 but it doesn't matter, because we don't have to pick this
6867 data structure apart. */
6870 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
6872 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
6875 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
6876 type of 5 (NT_PRXFPREG). Just include the whole note's contents
6880 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
6882 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
6885 #if defined (HAVE_PRPSINFO_T)
6886 typedef prpsinfo_t elfcore_psinfo_t;
6887 #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
6888 typedef prpsinfo32_t elfcore_psinfo32_t;
6892 #if defined (HAVE_PSINFO_T)
6893 typedef psinfo_t elfcore_psinfo_t;
6894 #if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
6895 typedef psinfo32_t elfcore_psinfo32_t;
6899 /* return a malloc'ed copy of a string at START which is at
6900 most MAX bytes long, possibly without a terminating '\0'.
6901 the copy will always have a terminating '\0'. */
6904 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
6907 char *end = memchr (start, '\0', max);
6915 dups = bfd_alloc (abfd, len + 1);
6919 memcpy (dups, start, len);
6925 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
6927 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
6929 if (note->descsz == sizeof (elfcore_psinfo_t))
6931 elfcore_psinfo_t psinfo;
6933 memcpy (&psinfo, note->descdata, sizeof (psinfo));
6935 elf_tdata (abfd)->core_program
6936 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
6937 sizeof (psinfo.pr_fname));
6939 elf_tdata (abfd)->core_command
6940 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
6941 sizeof (psinfo.pr_psargs));
6943 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
6944 else if (note->descsz == sizeof (elfcore_psinfo32_t))
6946 /* 64-bit host, 32-bit corefile */
6947 elfcore_psinfo32_t psinfo;
6949 memcpy (&psinfo, note->descdata, sizeof (psinfo));
6951 elf_tdata (abfd)->core_program
6952 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
6953 sizeof (psinfo.pr_fname));
6955 elf_tdata (abfd)->core_command
6956 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
6957 sizeof (psinfo.pr_psargs));
6963 /* Fail - we don't know how to handle any other
6964 note size (ie. data object type). */
6968 /* Note that for some reason, a spurious space is tacked
6969 onto the end of the args in some (at least one anyway)
6970 implementations, so strip it off if it exists. */
6973 char *command = elf_tdata (abfd)->core_command;
6974 int n = strlen (command);
6976 if (0 < n && command[n - 1] == ' ')
6977 command[n - 1] = '\0';
6982 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
6984 #if defined (HAVE_PSTATUS_T)
6986 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
6988 if (note->descsz == sizeof (pstatus_t)
6989 #if defined (HAVE_PXSTATUS_T)
6990 || note->descsz == sizeof (pxstatus_t)
6996 memcpy (&pstat, note->descdata, sizeof (pstat));
6998 elf_tdata (abfd)->core_pid = pstat.pr_pid;
7000 #if defined (HAVE_PSTATUS32_T)
7001 else if (note->descsz == sizeof (pstatus32_t))
7003 /* 64-bit host, 32-bit corefile */
7006 memcpy (&pstat, note->descdata, sizeof (pstat));
7008 elf_tdata (abfd)->core_pid = pstat.pr_pid;
7011 /* Could grab some more details from the "representative"
7012 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
7013 NT_LWPSTATUS note, presumably. */
7017 #endif /* defined (HAVE_PSTATUS_T) */
7019 #if defined (HAVE_LWPSTATUS_T)
7021 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
7023 lwpstatus_t lwpstat;
7029 if (note->descsz != sizeof (lwpstat)
7030 #if defined (HAVE_LWPXSTATUS_T)
7031 && note->descsz != sizeof (lwpxstatus_t)
7036 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
7038 elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
7039 elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
7041 /* Make a ".reg/999" section. */
7043 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
7044 len = strlen (buf) + 1;
7045 name = bfd_alloc (abfd, len);
7048 memcpy (name, buf, len);
7050 sect = bfd_make_section_anyway (abfd, name);
7054 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
7055 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
7056 sect->filepos = note->descpos
7057 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
7060 #if defined (HAVE_LWPSTATUS_T_PR_REG)
7061 sect->size = sizeof (lwpstat.pr_reg);
7062 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
7065 sect->flags = SEC_HAS_CONTENTS;
7066 sect->alignment_power = 2;
7068 if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
7071 /* Make a ".reg2/999" section */
7073 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
7074 len = strlen (buf) + 1;
7075 name = bfd_alloc (abfd, len);
7078 memcpy (name, buf, len);
7080 sect = bfd_make_section_anyway (abfd, name);
7084 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
7085 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
7086 sect->filepos = note->descpos
7087 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
7090 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
7091 sect->size = sizeof (lwpstat.pr_fpreg);
7092 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
7095 sect->flags = SEC_HAS_CONTENTS;
7096 sect->alignment_power = 2;
7098 return elfcore_maybe_make_sect (abfd, ".reg2", sect);
7100 #endif /* defined (HAVE_LWPSTATUS_T) */
7102 #if defined (HAVE_WIN32_PSTATUS_T)
7104 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
7110 win32_pstatus_t pstatus;
7112 if (note->descsz < sizeof (pstatus))
7115 memcpy (&pstatus, note->descdata, sizeof (pstatus));
7117 switch (pstatus.data_type)
7119 case NOTE_INFO_PROCESS:
7120 /* FIXME: need to add ->core_command. */
7121 elf_tdata (abfd)->core_signal = pstatus.data.process_info.signal;
7122 elf_tdata (abfd)->core_pid = pstatus.data.process_info.pid;
7125 case NOTE_INFO_THREAD:
7126 /* Make a ".reg/999" section. */
7127 sprintf (buf, ".reg/%ld", (long) pstatus.data.thread_info.tid);
7129 len = strlen (buf) + 1;
7130 name = bfd_alloc (abfd, len);
7134 memcpy (name, buf, len);
7136 sect = bfd_make_section_anyway (abfd, name);
7140 sect->size = sizeof (pstatus.data.thread_info.thread_context);
7141 sect->filepos = (note->descpos
7142 + offsetof (struct win32_pstatus,
7143 data.thread_info.thread_context));
7144 sect->flags = SEC_HAS_CONTENTS;
7145 sect->alignment_power = 2;
7147 if (pstatus.data.thread_info.is_active_thread)
7148 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
7152 case NOTE_INFO_MODULE:
7153 /* Make a ".module/xxxxxxxx" section. */
7154 sprintf (buf, ".module/%08lx",
7155 (long) pstatus.data.module_info.base_address);
7157 len = strlen (buf) + 1;
7158 name = bfd_alloc (abfd, len);
7162 memcpy (name, buf, len);
7164 sect = bfd_make_section_anyway (abfd, name);
7169 sect->size = note->descsz;
7170 sect->filepos = note->descpos;
7171 sect->flags = SEC_HAS_CONTENTS;
7172 sect->alignment_power = 2;
7181 #endif /* HAVE_WIN32_PSTATUS_T */
7184 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
7186 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7194 if (bed->elf_backend_grok_prstatus)
7195 if ((*bed->elf_backend_grok_prstatus) (abfd, note))
7197 #if defined (HAVE_PRSTATUS_T)
7198 return elfcore_grok_prstatus (abfd, note);
7203 #if defined (HAVE_PSTATUS_T)
7205 return elfcore_grok_pstatus (abfd, note);
7208 #if defined (HAVE_LWPSTATUS_T)
7210 return elfcore_grok_lwpstatus (abfd, note);
7213 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
7214 return elfcore_grok_prfpreg (abfd, note);
7216 #if defined (HAVE_WIN32_PSTATUS_T)
7217 case NT_WIN32PSTATUS:
7218 return elfcore_grok_win32pstatus (abfd, note);
7221 case NT_PRXFPREG: /* Linux SSE extension */
7222 if (note->namesz == 6
7223 && strcmp (note->namedata, "LINUX") == 0)
7224 return elfcore_grok_prxfpreg (abfd, note);
7230 if (bed->elf_backend_grok_psinfo)
7231 if ((*bed->elf_backend_grok_psinfo) (abfd, note))
7233 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
7234 return elfcore_grok_psinfo (abfd, note);
7241 asection *sect = bfd_make_section_anyway (abfd, ".auxv");
7245 sect->size = note->descsz;
7246 sect->filepos = note->descpos;
7247 sect->flags = SEC_HAS_CONTENTS;
7248 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
7256 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
7260 cp = strchr (note->namedata, '@');
7263 *lwpidp = atoi(cp + 1);
7270 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
7273 /* Signal number at offset 0x08. */
7274 elf_tdata (abfd)->core_signal
7275 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
7277 /* Process ID at offset 0x50. */
7278 elf_tdata (abfd)->core_pid
7279 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
7281 /* Command name at 0x7c (max 32 bytes, including nul). */
7282 elf_tdata (abfd)->core_command
7283 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
7285 return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
7290 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
7294 if (elfcore_netbsd_get_lwpid (note, &lwp))
7295 elf_tdata (abfd)->core_lwpid = lwp;
7297 if (note->type == NT_NETBSDCORE_PROCINFO)
7299 /* NetBSD-specific core "procinfo". Note that we expect to
7300 find this note before any of the others, which is fine,
7301 since the kernel writes this note out first when it
7302 creates a core file. */
7304 return elfcore_grok_netbsd_procinfo (abfd, note);
7307 /* As of Jan 2002 there are no other machine-independent notes
7308 defined for NetBSD core files. If the note type is less
7309 than the start of the machine-dependent note types, we don't
7312 if (note->type < NT_NETBSDCORE_FIRSTMACH)
7316 switch (bfd_get_arch (abfd))
7318 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
7319 PT_GETFPREGS == mach+2. */
7321 case bfd_arch_alpha:
7322 case bfd_arch_sparc:
7325 case NT_NETBSDCORE_FIRSTMACH+0:
7326 return elfcore_make_note_pseudosection (abfd, ".reg", note);
7328 case NT_NETBSDCORE_FIRSTMACH+2:
7329 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
7335 /* On all other arch's, PT_GETREGS == mach+1 and
7336 PT_GETFPREGS == mach+3. */
7341 case NT_NETBSDCORE_FIRSTMACH+1:
7342 return elfcore_make_note_pseudosection (abfd, ".reg", note);
7344 case NT_NETBSDCORE_FIRSTMACH+3:
7345 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
7355 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, pid_t *tid)
7357 void *ddata = note->descdata;
7364 /* nto_procfs_status 'pid' field is at offset 0. */
7365 elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
7367 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */
7368 *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
7370 /* nto_procfs_status 'flags' field is at offset 8. */
7371 flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
7373 /* nto_procfs_status 'what' field is at offset 14. */
7374 if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
7376 elf_tdata (abfd)->core_signal = sig;
7377 elf_tdata (abfd)->core_lwpid = *tid;
7380 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores
7381 do not come from signals so we make sure we set the current
7382 thread just in case. */
7383 if (flags & 0x00000080)
7384 elf_tdata (abfd)->core_lwpid = *tid;
7386 /* Make a ".qnx_core_status/%d" section. */
7387 sprintf (buf, ".qnx_core_status/%ld", (long) *tid);
7389 name = bfd_alloc (abfd, strlen (buf) + 1);
7394 sect = bfd_make_section_anyway (abfd, name);
7398 sect->size = note->descsz;
7399 sect->filepos = note->descpos;
7400 sect->flags = SEC_HAS_CONTENTS;
7401 sect->alignment_power = 2;
7403 return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
7407 elfcore_grok_nto_regs (bfd *abfd,
7408 Elf_Internal_Note *note,
7416 /* Make a "(base)/%d" section. */
7417 sprintf (buf, "%s/%ld", base, (long) tid);
7419 name = bfd_alloc (abfd, strlen (buf) + 1);
7424 sect = bfd_make_section_anyway (abfd, name);
7428 sect->size = note->descsz;
7429 sect->filepos = note->descpos;
7430 sect->flags = SEC_HAS_CONTENTS;
7431 sect->alignment_power = 2;
7433 /* This is the current thread. */
7434 if (elf_tdata (abfd)->core_lwpid == tid)
7435 return elfcore_maybe_make_sect (abfd, base, sect);
7440 #define BFD_QNT_CORE_INFO 7
7441 #define BFD_QNT_CORE_STATUS 8
7442 #define BFD_QNT_CORE_GREG 9
7443 #define BFD_QNT_CORE_FPREG 10
7446 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
7448 /* Every GREG section has a STATUS section before it. Store the
7449 tid from the previous call to pass down to the next gregs
7451 static pid_t tid = 1;
7455 case BFD_QNT_CORE_INFO:
7456 return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
7457 case BFD_QNT_CORE_STATUS:
7458 return elfcore_grok_nto_status (abfd, note, &tid);
7459 case BFD_QNT_CORE_GREG:
7460 return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
7461 case BFD_QNT_CORE_FPREG:
7462 return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
7468 /* Function: elfcore_write_note
7475 size of data for note
7478 End of buffer containing note. */
7481 elfcore_write_note (bfd *abfd,
7489 Elf_External_Note *xnp;
7499 const struct elf_backend_data *bed;
7501 namesz = strlen (name) + 1;
7502 bed = get_elf_backend_data (abfd);
7503 pad = -namesz & ((1 << bed->s->log_file_align) - 1);
7506 newspace = 12 + namesz + pad + size;
7508 p = realloc (buf, *bufsiz + newspace);
7510 *bufsiz += newspace;
7511 xnp = (Elf_External_Note *) dest;
7512 H_PUT_32 (abfd, namesz, xnp->namesz);
7513 H_PUT_32 (abfd, size, xnp->descsz);
7514 H_PUT_32 (abfd, type, xnp->type);
7518 memcpy (dest, name, namesz);
7526 memcpy (dest, input, size);
7530 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
7532 elfcore_write_prpsinfo (bfd *abfd,
7539 char *note_name = "CORE";
7541 #if defined (HAVE_PSINFO_T)
7543 note_type = NT_PSINFO;
7546 note_type = NT_PRPSINFO;
7549 memset (&data, 0, sizeof (data));
7550 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
7551 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
7552 return elfcore_write_note (abfd, buf, bufsiz,
7553 note_name, note_type, &data, sizeof (data));
7555 #endif /* PSINFO_T or PRPSINFO_T */
7557 #if defined (HAVE_PRSTATUS_T)
7559 elfcore_write_prstatus (bfd *abfd,
7567 char *note_name = "CORE";
7569 memset (&prstat, 0, sizeof (prstat));
7570 prstat.pr_pid = pid;
7571 prstat.pr_cursig = cursig;
7572 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
7573 return elfcore_write_note (abfd, buf, bufsiz,
7574 note_name, NT_PRSTATUS, &prstat, sizeof (prstat));
7576 #endif /* HAVE_PRSTATUS_T */
7578 #if defined (HAVE_LWPSTATUS_T)
7580 elfcore_write_lwpstatus (bfd *abfd,
7587 lwpstatus_t lwpstat;
7588 char *note_name = "CORE";
7590 memset (&lwpstat, 0, sizeof (lwpstat));
7591 lwpstat.pr_lwpid = pid >> 16;
7592 lwpstat.pr_cursig = cursig;
7593 #if defined (HAVE_LWPSTATUS_T_PR_REG)
7594 memcpy (lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
7595 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
7597 memcpy (lwpstat.pr_context.uc_mcontext.gregs,
7598 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
7600 memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
7601 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
7604 return elfcore_write_note (abfd, buf, bufsiz, note_name,
7605 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
7607 #endif /* HAVE_LWPSTATUS_T */
7609 #if defined (HAVE_PSTATUS_T)
7611 elfcore_write_pstatus (bfd *abfd,
7619 char *note_name = "CORE";
7621 memset (&pstat, 0, sizeof (pstat));
7622 pstat.pr_pid = pid & 0xffff;
7623 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
7624 NT_PSTATUS, &pstat, sizeof (pstat));
7627 #endif /* HAVE_PSTATUS_T */
7630 elfcore_write_prfpreg (bfd *abfd,
7636 char *note_name = "CORE";
7637 return elfcore_write_note (abfd, buf, bufsiz,
7638 note_name, NT_FPREGSET, fpregs, size);
7642 elfcore_write_prxfpreg (bfd *abfd,
7645 const void *xfpregs,
7648 char *note_name = "LINUX";
7649 return elfcore_write_note (abfd, buf, bufsiz,
7650 note_name, NT_PRXFPREG, xfpregs, size);
7654 elfcore_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size)
7662 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
7665 buf = bfd_malloc (size);
7669 if (bfd_bread (buf, size, abfd) != size)
7677 while (p < buf + size)
7679 /* FIXME: bad alignment assumption. */
7680 Elf_External_Note *xnp = (Elf_External_Note *) p;
7681 Elf_Internal_Note in;
7683 in.type = H_GET_32 (abfd, xnp->type);
7685 in.namesz = H_GET_32 (abfd, xnp->namesz);
7686 in.namedata = xnp->name;
7688 in.descsz = H_GET_32 (abfd, xnp->descsz);
7689 in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
7690 in.descpos = offset + (in.descdata - buf);
7692 if (strncmp (in.namedata, "NetBSD-CORE", 11) == 0)
7694 if (! elfcore_grok_netbsd_note (abfd, &in))
7697 else if (strncmp (in.namedata, "QNX", 3) == 0)
7699 if (! elfcore_grok_nto_note (abfd, &in))
7704 if (! elfcore_grok_note (abfd, &in))
7708 p = in.descdata + BFD_ALIGN (in.descsz, 4);
7715 /* Providing external access to the ELF program header table. */
7717 /* Return an upper bound on the number of bytes required to store a
7718 copy of ABFD's program header table entries. Return -1 if an error
7719 occurs; bfd_get_error will return an appropriate code. */
7722 bfd_get_elf_phdr_upper_bound (bfd *abfd)
7724 if (abfd->xvec->flavour != bfd_target_elf_flavour)
7726 bfd_set_error (bfd_error_wrong_format);
7730 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
7733 /* Copy ABFD's program header table entries to *PHDRS. The entries
7734 will be stored as an array of Elf_Internal_Phdr structures, as
7735 defined in include/elf/internal.h. To find out how large the
7736 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
7738 Return the number of program header table entries read, or -1 if an
7739 error occurs; bfd_get_error will return an appropriate code. */
7742 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
7746 if (abfd->xvec->flavour != bfd_target_elf_flavour)
7748 bfd_set_error (bfd_error_wrong_format);
7752 num_phdrs = elf_elfheader (abfd)->e_phnum;
7753 memcpy (phdrs, elf_tdata (abfd)->phdr,
7754 num_phdrs * sizeof (Elf_Internal_Phdr));
7760 _bfd_elf_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, bfd_vma value)
7763 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
7765 i_ehdrp = elf_elfheader (abfd);
7766 if (i_ehdrp == NULL)
7767 sprintf_vma (buf, value);
7770 if (i_ehdrp->e_ident[EI_CLASS] == ELFCLASS64)
7772 #if BFD_HOST_64BIT_LONG
7773 sprintf (buf, "%016lx", value);
7775 sprintf (buf, "%08lx%08lx", _bfd_int64_high (value),
7776 _bfd_int64_low (value));
7780 sprintf (buf, "%08lx", (unsigned long) (value & 0xffffffff));
7783 sprintf_vma (buf, value);
7788 _bfd_elf_fprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, void *stream, bfd_vma value)
7791 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
7793 i_ehdrp = elf_elfheader (abfd);
7794 if (i_ehdrp == NULL)
7795 fprintf_vma ((FILE *) stream, value);
7798 if (i_ehdrp->e_ident[EI_CLASS] == ELFCLASS64)
7800 #if BFD_HOST_64BIT_LONG
7801 fprintf ((FILE *) stream, "%016lx", value);
7803 fprintf ((FILE *) stream, "%08lx%08lx",
7804 _bfd_int64_high (value), _bfd_int64_low (value));
7808 fprintf ((FILE *) stream, "%08lx",
7809 (unsigned long) (value & 0xffffffff));
7812 fprintf_vma ((FILE *) stream, value);
7816 enum elf_reloc_type_class
7817 _bfd_elf_reloc_type_class (const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
7819 return reloc_class_normal;
7822 /* For RELA architectures, return the relocation value for a
7823 relocation against a local symbol. */
7826 _bfd_elf_rela_local_sym (bfd *abfd,
7827 Elf_Internal_Sym *sym,
7829 Elf_Internal_Rela *rel)
7831 asection *sec = *psec;
7834 relocation = (sec->output_section->vma
7835 + sec->output_offset
7837 if ((sec->flags & SEC_MERGE)
7838 && ELF_ST_TYPE (sym->st_info) == STT_SECTION
7839 && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
7842 _bfd_merged_section_offset (abfd, psec,
7843 elf_section_data (sec)->sec_info,
7844 sym->st_value + rel->r_addend);
7847 /* If we have changed the section, and our original section is
7848 marked with SEC_EXCLUDE, it means that the original
7849 SEC_MERGE section has been completely subsumed in some
7850 other SEC_MERGE section. In this case, we need to leave
7851 some info around for --emit-relocs. */
7852 if ((sec->flags & SEC_EXCLUDE) != 0)
7853 sec->kept_section = *psec;
7856 rel->r_addend -= relocation;
7857 rel->r_addend += sec->output_section->vma + sec->output_offset;
7863 _bfd_elf_rel_local_sym (bfd *abfd,
7864 Elf_Internal_Sym *sym,
7868 asection *sec = *psec;
7870 if (sec->sec_info_type != ELF_INFO_TYPE_MERGE)
7871 return sym->st_value + addend;
7873 return _bfd_merged_section_offset (abfd, psec,
7874 elf_section_data (sec)->sec_info,
7875 sym->st_value + addend);
7879 _bfd_elf_section_offset (bfd *abfd,
7880 struct bfd_link_info *info,
7884 switch (sec->sec_info_type)
7886 case ELF_INFO_TYPE_STABS:
7887 return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
7889 case ELF_INFO_TYPE_EH_FRAME:
7890 return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
7896 /* Create a new BFD as if by bfd_openr. Rather than opening a file,
7897 reconstruct an ELF file by reading the segments out of remote memory
7898 based on the ELF file header at EHDR_VMA and the ELF program headers it
7899 points to. If not null, *LOADBASEP is filled in with the difference
7900 between the VMAs from which the segments were read, and the VMAs the
7901 file headers (and hence BFD's idea of each section's VMA) put them at.
7903 The function TARGET_READ_MEMORY is called to copy LEN bytes from the
7904 remote memory at target address VMA into the local buffer at MYADDR; it
7905 should return zero on success or an `errno' code on failure. TEMPL must
7906 be a BFD for an ELF target with the word size and byte order found in
7907 the remote memory. */
7910 bfd_elf_bfd_from_remote_memory
7914 int (*target_read_memory) (bfd_vma, bfd_byte *, int))
7916 return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
7917 (templ, ehdr_vma, loadbasep, target_read_memory);
7921 _bfd_elf_get_synthetic_symtab (bfd *abfd,
7922 long symcount ATTRIBUTE_UNUSED,
7923 asymbol **syms ATTRIBUTE_UNUSED,
7928 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7931 const char *relplt_name;
7932 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
7936 Elf_Internal_Shdr *hdr;
7942 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
7945 if (dynsymcount <= 0)
7948 if (!bed->plt_sym_val)
7951 relplt_name = bed->relplt_name;
7952 if (relplt_name == NULL)
7953 relplt_name = bed->default_use_rela_p ? ".rela.plt" : ".rel.plt";
7954 relplt = bfd_get_section_by_name (abfd, relplt_name);
7958 hdr = &elf_section_data (relplt)->this_hdr;
7959 if (hdr->sh_link != elf_dynsymtab (abfd)
7960 || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
7963 plt = bfd_get_section_by_name (abfd, ".plt");
7967 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
7968 if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
7971 count = relplt->size / hdr->sh_entsize;
7972 size = count * sizeof (asymbol);
7973 p = relplt->relocation;
7974 for (i = 0; i < count; i++, s++, p++)
7975 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
7977 s = *ret = bfd_malloc (size);
7981 names = (char *) (s + count);
7982 p = relplt->relocation;
7984 for (i = 0; i < count; i++, s++, p++)
7989 addr = bed->plt_sym_val (i, plt, p);
7990 if (addr == (bfd_vma) -1)
7993 *s = **p->sym_ptr_ptr;
7995 s->value = addr - plt->vma;
7997 len = strlen ((*p->sym_ptr_ptr)->name);
7998 memcpy (names, (*p->sym_ptr_ptr)->name, len);
8000 memcpy (names, "@plt", sizeof ("@plt"));
8001 names += sizeof ("@plt");
8008 /* Sort symbol by binding and section. We want to put definitions
8009 sorted by section at the beginning. */
8012 elf_sort_elf_symbol (const void *arg1, const void *arg2)
8014 const Elf_Internal_Sym *s1;
8015 const Elf_Internal_Sym *s2;
8018 /* Make sure that undefined symbols are at the end. */
8019 s1 = (const Elf_Internal_Sym *) arg1;
8020 if (s1->st_shndx == SHN_UNDEF)
8022 s2 = (const Elf_Internal_Sym *) arg2;
8023 if (s2->st_shndx == SHN_UNDEF)
8026 /* Sorted by section index. */
8027 shndx = s1->st_shndx - s2->st_shndx;
8031 /* Sorted by binding. */
8032 return ELF_ST_BIND (s1->st_info) - ELF_ST_BIND (s2->st_info);
8037 Elf_Internal_Sym *sym;
8042 elf_sym_name_compare (const void *arg1, const void *arg2)
8044 const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
8045 const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
8046 return strcmp (s1->name, s2->name);
8049 /* Check if 2 sections define the same set of local and global
8053 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2)
8056 const struct elf_backend_data *bed1, *bed2;
8057 Elf_Internal_Shdr *hdr1, *hdr2;
8058 bfd_size_type symcount1, symcount2;
8059 Elf_Internal_Sym *isymbuf1, *isymbuf2;
8060 Elf_Internal_Sym *isymstart1 = NULL, *isymstart2 = NULL, *isym;
8061 Elf_Internal_Sym *isymend;
8062 struct elf_symbol *symp, *symtable1 = NULL, *symtable2 = NULL;
8063 bfd_size_type count1, count2, i;
8070 /* If both are .gnu.linkonce sections, they have to have the same
8072 if (strncmp (sec1->name, ".gnu.linkonce",
8073 sizeof ".gnu.linkonce" - 1) == 0
8074 && strncmp (sec2->name, ".gnu.linkonce",
8075 sizeof ".gnu.linkonce" - 1) == 0)
8076 return strcmp (sec1->name + sizeof ".gnu.linkonce",
8077 sec2->name + sizeof ".gnu.linkonce") == 0;
8079 /* Both sections have to be in ELF. */
8080 if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
8081 || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
8084 if (elf_section_type (sec1) != elf_section_type (sec2))
8087 if ((elf_section_flags (sec1) & SHF_GROUP) != 0
8088 && (elf_section_flags (sec2) & SHF_GROUP) != 0)
8090 /* If both are members of section groups, they have to have the
8092 if (strcmp (elf_group_name (sec1), elf_group_name (sec2)) != 0)
8096 shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
8097 shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
8098 if (shndx1 == -1 || shndx2 == -1)
8101 bed1 = get_elf_backend_data (bfd1);
8102 bed2 = get_elf_backend_data (bfd2);
8103 hdr1 = &elf_tdata (bfd1)->symtab_hdr;
8104 symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
8105 hdr2 = &elf_tdata (bfd2)->symtab_hdr;
8106 symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
8108 if (symcount1 == 0 || symcount2 == 0)
8111 isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
8113 isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
8117 if (isymbuf1 == NULL || isymbuf2 == NULL)
8120 /* Sort symbols by binding and section. Global definitions are at
8122 qsort (isymbuf1, symcount1, sizeof (Elf_Internal_Sym),
8123 elf_sort_elf_symbol);
8124 qsort (isymbuf2, symcount2, sizeof (Elf_Internal_Sym),
8125 elf_sort_elf_symbol);
8127 /* Count definitions in the section. */
8129 for (isym = isymbuf1, isymend = isym + symcount1;
8130 isym < isymend; isym++)
8132 if (isym->st_shndx == (unsigned int) shndx1)
8139 if (count1 && isym->st_shndx != (unsigned int) shndx1)
8144 for (isym = isymbuf2, isymend = isym + symcount2;
8145 isym < isymend; isym++)
8147 if (isym->st_shndx == (unsigned int) shndx2)
8154 if (count2 && isym->st_shndx != (unsigned int) shndx2)
8158 if (count1 == 0 || count2 == 0 || count1 != count2)
8161 symtable1 = bfd_malloc (count1 * sizeof (struct elf_symbol));
8162 symtable2 = bfd_malloc (count1 * sizeof (struct elf_symbol));
8164 if (symtable1 == NULL || symtable2 == NULL)
8168 for (isym = isymstart1, isymend = isym + count1;
8169 isym < isymend; isym++)
8172 symp->name = bfd_elf_string_from_elf_section (bfd1,
8179 for (isym = isymstart2, isymend = isym + count1;
8180 isym < isymend; isym++)
8183 symp->name = bfd_elf_string_from_elf_section (bfd2,
8189 /* Sort symbol by name. */
8190 qsort (symtable1, count1, sizeof (struct elf_symbol),
8191 elf_sym_name_compare);
8192 qsort (symtable2, count1, sizeof (struct elf_symbol),
8193 elf_sym_name_compare);
8195 for (i = 0; i < count1; i++)
8196 /* Two symbols must have the same binding, type and name. */
8197 if (symtable1 [i].sym->st_info != symtable2 [i].sym->st_info
8198 || symtable1 [i].sym->st_other != symtable2 [i].sym->st_other
8199 || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)