* plugin.c (is_visible_from_outside): New function.
[binutils.git] / bfd / elf.c
blob075a668c3089c5d09868565c305d2ea5f59dc78f
1 /* ELF executable support for BFD.
3 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
5 Free Software Foundation, Inc.
7 This file is part of BFD, the Binary File Descriptor library.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
26 SECTION
27 ELF backends
29 BFD support for ELF formats is being worked on.
30 Currently, the best supported back ends are for sparc and i386
31 (running svr4 or Solaris 2).
33 Documentation of the internals of the support code still needs
34 to be written. The code is changing quickly enough that we
35 haven't bothered yet. */
37 /* For sparc64-cross-sparc32. */
38 #define _SYSCALL32
39 #include "sysdep.h"
40 #include "bfd.h"
41 #include "bfdlink.h"
42 #include "libbfd.h"
43 #define ARCH_SIZE 0
44 #include "elf-bfd.h"
45 #include "libiberty.h"
46 #include "safe-ctype.h"
48 #ifdef CORE_HEADER
49 #include CORE_HEADER
50 #endif
52 static int elf_sort_sections (const void *, const void *);
53 static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
54 static bfd_boolean prep_headers (bfd *);
55 static bfd_boolean swap_out_syms (bfd *, struct bfd_strtab_hash **, int) ;
56 static bfd_boolean elf_read_notes (bfd *, file_ptr, bfd_size_type) ;
57 static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size,
58 file_ptr offset);
60 /* Swap version information in and out. The version information is
61 currently size independent. If that ever changes, this code will
62 need to move into elfcode.h. */
64 /* Swap in a Verdef structure. */
66 void
67 _bfd_elf_swap_verdef_in (bfd *abfd,
68 const Elf_External_Verdef *src,
69 Elf_Internal_Verdef *dst)
71 dst->vd_version = H_GET_16 (abfd, src->vd_version);
72 dst->vd_flags = H_GET_16 (abfd, src->vd_flags);
73 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx);
74 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt);
75 dst->vd_hash = H_GET_32 (abfd, src->vd_hash);
76 dst->vd_aux = H_GET_32 (abfd, src->vd_aux);
77 dst->vd_next = H_GET_32 (abfd, src->vd_next);
80 /* Swap out a Verdef structure. */
82 void
83 _bfd_elf_swap_verdef_out (bfd *abfd,
84 const Elf_Internal_Verdef *src,
85 Elf_External_Verdef *dst)
87 H_PUT_16 (abfd, src->vd_version, dst->vd_version);
88 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
89 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
90 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
91 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
92 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
93 H_PUT_32 (abfd, src->vd_next, dst->vd_next);
96 /* Swap in a Verdaux structure. */
98 void
99 _bfd_elf_swap_verdaux_in (bfd *abfd,
100 const Elf_External_Verdaux *src,
101 Elf_Internal_Verdaux *dst)
103 dst->vda_name = H_GET_32 (abfd, src->vda_name);
104 dst->vda_next = H_GET_32 (abfd, src->vda_next);
107 /* Swap out a Verdaux structure. */
109 void
110 _bfd_elf_swap_verdaux_out (bfd *abfd,
111 const Elf_Internal_Verdaux *src,
112 Elf_External_Verdaux *dst)
114 H_PUT_32 (abfd, src->vda_name, dst->vda_name);
115 H_PUT_32 (abfd, src->vda_next, dst->vda_next);
118 /* Swap in a Verneed structure. */
120 void
121 _bfd_elf_swap_verneed_in (bfd *abfd,
122 const Elf_External_Verneed *src,
123 Elf_Internal_Verneed *dst)
125 dst->vn_version = H_GET_16 (abfd, src->vn_version);
126 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt);
127 dst->vn_file = H_GET_32 (abfd, src->vn_file);
128 dst->vn_aux = H_GET_32 (abfd, src->vn_aux);
129 dst->vn_next = H_GET_32 (abfd, src->vn_next);
132 /* Swap out a Verneed structure. */
134 void
135 _bfd_elf_swap_verneed_out (bfd *abfd,
136 const Elf_Internal_Verneed *src,
137 Elf_External_Verneed *dst)
139 H_PUT_16 (abfd, src->vn_version, dst->vn_version);
140 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
141 H_PUT_32 (abfd, src->vn_file, dst->vn_file);
142 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
143 H_PUT_32 (abfd, src->vn_next, dst->vn_next);
146 /* Swap in a Vernaux structure. */
148 void
149 _bfd_elf_swap_vernaux_in (bfd *abfd,
150 const Elf_External_Vernaux *src,
151 Elf_Internal_Vernaux *dst)
153 dst->vna_hash = H_GET_32 (abfd, src->vna_hash);
154 dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
155 dst->vna_other = H_GET_16 (abfd, src->vna_other);
156 dst->vna_name = H_GET_32 (abfd, src->vna_name);
157 dst->vna_next = H_GET_32 (abfd, src->vna_next);
160 /* Swap out a Vernaux structure. */
162 void
163 _bfd_elf_swap_vernaux_out (bfd *abfd,
164 const Elf_Internal_Vernaux *src,
165 Elf_External_Vernaux *dst)
167 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
168 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
169 H_PUT_16 (abfd, src->vna_other, dst->vna_other);
170 H_PUT_32 (abfd, src->vna_name, dst->vna_name);
171 H_PUT_32 (abfd, src->vna_next, dst->vna_next);
174 /* Swap in a Versym structure. */
176 void
177 _bfd_elf_swap_versym_in (bfd *abfd,
178 const Elf_External_Versym *src,
179 Elf_Internal_Versym *dst)
181 dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
184 /* Swap out a Versym structure. */
186 void
187 _bfd_elf_swap_versym_out (bfd *abfd,
188 const Elf_Internal_Versym *src,
189 Elf_External_Versym *dst)
191 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
194 /* Standard ELF hash function. Do not change this function; you will
195 cause invalid hash tables to be generated. */
197 unsigned long
198 bfd_elf_hash (const char *namearg)
200 const unsigned char *name = (const unsigned char *) namearg;
201 unsigned long h = 0;
202 unsigned long g;
203 int ch;
205 while ((ch = *name++) != '\0')
207 h = (h << 4) + ch;
208 if ((g = (h & 0xf0000000)) != 0)
210 h ^= g >> 24;
211 /* The ELF ABI says `h &= ~g', but this is equivalent in
212 this case and on some machines one insn instead of two. */
213 h ^= g;
216 return h & 0xffffffff;
219 /* DT_GNU_HASH hash function. Do not change this function; you will
220 cause invalid hash tables to be generated. */
222 unsigned long
223 bfd_elf_gnu_hash (const char *namearg)
225 const unsigned char *name = (const unsigned char *) namearg;
226 unsigned long h = 5381;
227 unsigned char ch;
229 while ((ch = *name++) != '\0')
230 h = (h << 5) + h + ch;
231 return h & 0xffffffff;
234 /* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
235 the object_id field of an elf_obj_tdata field set to OBJECT_ID. */
236 bfd_boolean
237 bfd_elf_allocate_object (bfd *abfd,
238 size_t object_size,
239 enum elf_target_id object_id)
241 BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
242 abfd->tdata.any = bfd_zalloc (abfd, object_size);
243 if (abfd->tdata.any == NULL)
244 return FALSE;
246 elf_object_id (abfd) = object_id;
247 elf_program_header_size (abfd) = (bfd_size_type) -1;
248 return TRUE;
252 bfd_boolean
253 bfd_elf_make_object (bfd *abfd)
255 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
256 return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
257 bed->target_id);
260 bfd_boolean
261 bfd_elf_mkcorefile (bfd *abfd)
263 /* I think this can be done just like an object file. */
264 return abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd);
267 static char *
268 bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
270 Elf_Internal_Shdr **i_shdrp;
271 bfd_byte *shstrtab = NULL;
272 file_ptr offset;
273 bfd_size_type shstrtabsize;
275 i_shdrp = elf_elfsections (abfd);
276 if (i_shdrp == 0
277 || shindex >= elf_numsections (abfd)
278 || i_shdrp[shindex] == 0)
279 return NULL;
281 shstrtab = i_shdrp[shindex]->contents;
282 if (shstrtab == NULL)
284 /* No cached one, attempt to read, and cache what we read. */
285 offset = i_shdrp[shindex]->sh_offset;
286 shstrtabsize = i_shdrp[shindex]->sh_size;
288 /* Allocate and clear an extra byte at the end, to prevent crashes
289 in case the string table is not terminated. */
290 if (shstrtabsize + 1 <= 1
291 || (shstrtab = (bfd_byte *) bfd_alloc (abfd, shstrtabsize + 1)) == NULL
292 || bfd_seek (abfd, offset, SEEK_SET) != 0)
293 shstrtab = NULL;
294 else if (bfd_bread (shstrtab, shstrtabsize, abfd) != shstrtabsize)
296 if (bfd_get_error () != bfd_error_system_call)
297 bfd_set_error (bfd_error_file_truncated);
298 shstrtab = NULL;
299 /* Once we've failed to read it, make sure we don't keep
300 trying. Otherwise, we'll keep allocating space for
301 the string table over and over. */
302 i_shdrp[shindex]->sh_size = 0;
304 else
305 shstrtab[shstrtabsize] = '\0';
306 i_shdrp[shindex]->contents = shstrtab;
308 return (char *) shstrtab;
311 char *
312 bfd_elf_string_from_elf_section (bfd *abfd,
313 unsigned int shindex,
314 unsigned int strindex)
316 Elf_Internal_Shdr *hdr;
318 if (strindex == 0)
319 return "";
321 if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
322 return NULL;
324 hdr = elf_elfsections (abfd)[shindex];
326 if (hdr->contents == NULL
327 && bfd_elf_get_str_section (abfd, shindex) == NULL)
328 return NULL;
330 if (strindex >= hdr->sh_size)
332 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
333 (*_bfd_error_handler)
334 (_("%B: invalid string offset %u >= %lu for section `%s'"),
335 abfd, strindex, (unsigned long) hdr->sh_size,
336 (shindex == shstrndx && strindex == hdr->sh_name
337 ? ".shstrtab"
338 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
339 return NULL;
342 return ((char *) hdr->contents) + strindex;
345 /* Read and convert symbols to internal format.
346 SYMCOUNT specifies the number of symbols to read, starting from
347 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
348 are non-NULL, they are used to store the internal symbols, external
349 symbols, and symbol section index extensions, respectively.
350 Returns a pointer to the internal symbol buffer (malloced if necessary)
351 or NULL if there were no symbols or some kind of problem. */
353 Elf_Internal_Sym *
354 bfd_elf_get_elf_syms (bfd *ibfd,
355 Elf_Internal_Shdr *symtab_hdr,
356 size_t symcount,
357 size_t symoffset,
358 Elf_Internal_Sym *intsym_buf,
359 void *extsym_buf,
360 Elf_External_Sym_Shndx *extshndx_buf)
362 Elf_Internal_Shdr *shndx_hdr;
363 void *alloc_ext;
364 const bfd_byte *esym;
365 Elf_External_Sym_Shndx *alloc_extshndx;
366 Elf_External_Sym_Shndx *shndx;
367 Elf_Internal_Sym *alloc_intsym;
368 Elf_Internal_Sym *isym;
369 Elf_Internal_Sym *isymend;
370 const struct elf_backend_data *bed;
371 size_t extsym_size;
372 bfd_size_type amt;
373 file_ptr pos;
375 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
376 abort ();
378 if (symcount == 0)
379 return intsym_buf;
381 /* Normal syms might have section extension entries. */
382 shndx_hdr = NULL;
383 if (symtab_hdr == &elf_tdata (ibfd)->symtab_hdr)
384 shndx_hdr = &elf_tdata (ibfd)->symtab_shndx_hdr;
386 /* Read the symbols. */
387 alloc_ext = NULL;
388 alloc_extshndx = NULL;
389 alloc_intsym = NULL;
390 bed = get_elf_backend_data (ibfd);
391 extsym_size = bed->s->sizeof_sym;
392 amt = symcount * extsym_size;
393 pos = symtab_hdr->sh_offset + symoffset * extsym_size;
394 if (extsym_buf == NULL)
396 alloc_ext = bfd_malloc2 (symcount, extsym_size);
397 extsym_buf = alloc_ext;
399 if (extsym_buf == NULL
400 || bfd_seek (ibfd, pos, SEEK_SET) != 0
401 || bfd_bread (extsym_buf, amt, ibfd) != amt)
403 intsym_buf = NULL;
404 goto out;
407 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
408 extshndx_buf = NULL;
409 else
411 amt = symcount * sizeof (Elf_External_Sym_Shndx);
412 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
413 if (extshndx_buf == NULL)
415 alloc_extshndx = (Elf_External_Sym_Shndx *)
416 bfd_malloc2 (symcount, sizeof (Elf_External_Sym_Shndx));
417 extshndx_buf = alloc_extshndx;
419 if (extshndx_buf == NULL
420 || bfd_seek (ibfd, pos, SEEK_SET) != 0
421 || bfd_bread (extshndx_buf, amt, ibfd) != amt)
423 intsym_buf = NULL;
424 goto out;
428 if (intsym_buf == NULL)
430 alloc_intsym = (Elf_Internal_Sym *)
431 bfd_malloc2 (symcount, sizeof (Elf_Internal_Sym));
432 intsym_buf = alloc_intsym;
433 if (intsym_buf == NULL)
434 goto out;
437 /* Convert the symbols to internal form. */
438 isymend = intsym_buf + symcount;
439 for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf,
440 shndx = extshndx_buf;
441 isym < isymend;
442 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
443 if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
445 symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
446 (*_bfd_error_handler) (_("%B symbol number %lu references "
447 "nonexistent SHT_SYMTAB_SHNDX section"),
448 ibfd, (unsigned long) symoffset);
449 if (alloc_intsym != NULL)
450 free (alloc_intsym);
451 intsym_buf = NULL;
452 goto out;
455 out:
456 if (alloc_ext != NULL)
457 free (alloc_ext);
458 if (alloc_extshndx != NULL)
459 free (alloc_extshndx);
461 return intsym_buf;
464 /* Look up a symbol name. */
465 const char *
466 bfd_elf_sym_name (bfd *abfd,
467 Elf_Internal_Shdr *symtab_hdr,
468 Elf_Internal_Sym *isym,
469 asection *sym_sec)
471 const char *name;
472 unsigned int iname = isym->st_name;
473 unsigned int shindex = symtab_hdr->sh_link;
475 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
476 /* Check for a bogus st_shndx to avoid crashing. */
477 && isym->st_shndx < elf_numsections (abfd))
479 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
480 shindex = elf_elfheader (abfd)->e_shstrndx;
483 name = bfd_elf_string_from_elf_section (abfd, shindex, iname);
484 if (name == NULL)
485 name = "(null)";
486 else if (sym_sec && *name == '\0')
487 name = bfd_section_name (abfd, sym_sec);
489 return name;
492 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
493 sections. The first element is the flags, the rest are section
494 pointers. */
496 typedef union elf_internal_group {
497 Elf_Internal_Shdr *shdr;
498 unsigned int flags;
499 } Elf_Internal_Group;
501 /* Return the name of the group signature symbol. Why isn't the
502 signature just a string? */
504 static const char *
505 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
507 Elf_Internal_Shdr *hdr;
508 unsigned char esym[sizeof (Elf64_External_Sym)];
509 Elf_External_Sym_Shndx eshndx;
510 Elf_Internal_Sym isym;
512 /* First we need to ensure the symbol table is available. Make sure
513 that it is a symbol table section. */
514 if (ghdr->sh_link >= elf_numsections (abfd))
515 return NULL;
516 hdr = elf_elfsections (abfd) [ghdr->sh_link];
517 if (hdr->sh_type != SHT_SYMTAB
518 || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
519 return NULL;
521 /* Go read the symbol. */
522 hdr = &elf_tdata (abfd)->symtab_hdr;
523 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
524 &isym, esym, &eshndx) == NULL)
525 return NULL;
527 return bfd_elf_sym_name (abfd, hdr, &isym, NULL);
530 /* Set next_in_group list pointer, and group name for NEWSECT. */
532 static bfd_boolean
533 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
535 unsigned int num_group = elf_tdata (abfd)->num_group;
537 /* If num_group is zero, read in all SHT_GROUP sections. The count
538 is set to -1 if there are no SHT_GROUP sections. */
539 if (num_group == 0)
541 unsigned int i, shnum;
543 /* First count the number of groups. If we have a SHT_GROUP
544 section with just a flag word (ie. sh_size is 4), ignore it. */
545 shnum = elf_numsections (abfd);
546 num_group = 0;
548 #define IS_VALID_GROUP_SECTION_HEADER(shdr) \
549 ( (shdr)->sh_type == SHT_GROUP \
550 && (shdr)->sh_size >= (2 * GRP_ENTRY_SIZE) \
551 && (shdr)->sh_entsize == GRP_ENTRY_SIZE \
552 && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
554 for (i = 0; i < shnum; i++)
556 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
558 if (IS_VALID_GROUP_SECTION_HEADER (shdr))
559 num_group += 1;
562 if (num_group == 0)
564 num_group = (unsigned) -1;
565 elf_tdata (abfd)->num_group = num_group;
567 else
569 /* We keep a list of elf section headers for group sections,
570 so we can find them quickly. */
571 bfd_size_type amt;
573 elf_tdata (abfd)->num_group = num_group;
574 elf_tdata (abfd)->group_sect_ptr = (Elf_Internal_Shdr **)
575 bfd_alloc2 (abfd, num_group, sizeof (Elf_Internal_Shdr *));
576 if (elf_tdata (abfd)->group_sect_ptr == NULL)
577 return FALSE;
579 num_group = 0;
580 for (i = 0; i < shnum; i++)
582 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
584 if (IS_VALID_GROUP_SECTION_HEADER (shdr))
586 unsigned char *src;
587 Elf_Internal_Group *dest;
589 /* Add to list of sections. */
590 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
591 num_group += 1;
593 /* Read the raw contents. */
594 BFD_ASSERT (sizeof (*dest) >= 4);
595 amt = shdr->sh_size * sizeof (*dest) / 4;
596 shdr->contents = (unsigned char *)
597 bfd_alloc2 (abfd, shdr->sh_size, sizeof (*dest) / 4);
598 /* PR binutils/4110: Handle corrupt group headers. */
599 if (shdr->contents == NULL)
601 _bfd_error_handler
602 (_("%B: Corrupt size field in group section header: 0x%lx"), abfd, shdr->sh_size);
603 bfd_set_error (bfd_error_bad_value);
604 return FALSE;
607 memset (shdr->contents, 0, amt);
609 if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
610 || (bfd_bread (shdr->contents, shdr->sh_size, abfd)
611 != shdr->sh_size))
612 return FALSE;
614 /* Translate raw contents, a flag word followed by an
615 array of elf section indices all in target byte order,
616 to the flag word followed by an array of elf section
617 pointers. */
618 src = shdr->contents + shdr->sh_size;
619 dest = (Elf_Internal_Group *) (shdr->contents + amt);
620 while (1)
622 unsigned int idx;
624 src -= 4;
625 --dest;
626 idx = H_GET_32 (abfd, src);
627 if (src == shdr->contents)
629 dest->flags = idx;
630 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
631 shdr->bfd_section->flags
632 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
633 break;
635 if (idx >= shnum)
637 ((*_bfd_error_handler)
638 (_("%B: invalid SHT_GROUP entry"), abfd));
639 idx = 0;
641 dest->shdr = elf_elfsections (abfd)[idx];
648 if (num_group != (unsigned) -1)
650 unsigned int i;
652 for (i = 0; i < num_group; i++)
654 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
655 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents;
656 unsigned int n_elt = shdr->sh_size / 4;
658 /* Look through this group's sections to see if current
659 section is a member. */
660 while (--n_elt != 0)
661 if ((++idx)->shdr == hdr)
663 asection *s = NULL;
665 /* We are a member of this group. Go looking through
666 other members to see if any others are linked via
667 next_in_group. */
668 idx = (Elf_Internal_Group *) shdr->contents;
669 n_elt = shdr->sh_size / 4;
670 while (--n_elt != 0)
671 if ((s = (++idx)->shdr->bfd_section) != NULL
672 && elf_next_in_group (s) != NULL)
673 break;
674 if (n_elt != 0)
676 /* Snarf the group name from other member, and
677 insert current section in circular list. */
678 elf_group_name (newsect) = elf_group_name (s);
679 elf_next_in_group (newsect) = elf_next_in_group (s);
680 elf_next_in_group (s) = newsect;
682 else
684 const char *gname;
686 gname = group_signature (abfd, shdr);
687 if (gname == NULL)
688 return FALSE;
689 elf_group_name (newsect) = gname;
691 /* Start a circular list with one element. */
692 elf_next_in_group (newsect) = newsect;
695 /* If the group section has been created, point to the
696 new member. */
697 if (shdr->bfd_section != NULL)
698 elf_next_in_group (shdr->bfd_section) = newsect;
700 i = num_group - 1;
701 break;
706 if (elf_group_name (newsect) == NULL)
708 (*_bfd_error_handler) (_("%B: no group info for section %A"),
709 abfd, newsect);
711 return TRUE;
714 bfd_boolean
715 _bfd_elf_setup_sections (bfd *abfd)
717 unsigned int i;
718 unsigned int num_group = elf_tdata (abfd)->num_group;
719 bfd_boolean result = TRUE;
720 asection *s;
722 /* Process SHF_LINK_ORDER. */
723 for (s = abfd->sections; s != NULL; s = s->next)
725 Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
726 if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
728 unsigned int elfsec = this_hdr->sh_link;
729 /* FIXME: The old Intel compiler and old strip/objcopy may
730 not set the sh_link or sh_info fields. Hence we could
731 get the situation where elfsec is 0. */
732 if (elfsec == 0)
734 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
735 if (bed->link_order_error_handler)
736 bed->link_order_error_handler
737 (_("%B: warning: sh_link not set for section `%A'"),
738 abfd, s);
740 else
742 asection *linksec = NULL;
744 if (elfsec < elf_numsections (abfd))
746 this_hdr = elf_elfsections (abfd)[elfsec];
747 linksec = this_hdr->bfd_section;
750 /* PR 1991, 2008:
751 Some strip/objcopy may leave an incorrect value in
752 sh_link. We don't want to proceed. */
753 if (linksec == NULL)
755 (*_bfd_error_handler)
756 (_("%B: sh_link [%d] in section `%A' is incorrect"),
757 s->owner, s, elfsec);
758 result = FALSE;
761 elf_linked_to_section (s) = linksec;
766 /* Process section groups. */
767 if (num_group == (unsigned) -1)
768 return result;
770 for (i = 0; i < num_group; i++)
772 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
773 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents;
774 unsigned int n_elt = shdr->sh_size / 4;
776 while (--n_elt != 0)
777 if ((++idx)->shdr->bfd_section)
778 elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
779 else if (idx->shdr->sh_type == SHT_RELA
780 || idx->shdr->sh_type == SHT_REL)
781 /* We won't include relocation sections in section groups in
782 output object files. We adjust the group section size here
783 so that relocatable link will work correctly when
784 relocation sections are in section group in input object
785 files. */
786 shdr->bfd_section->size -= 4;
787 else
789 /* There are some unknown sections in the group. */
790 (*_bfd_error_handler)
791 (_("%B: unknown [%d] section `%s' in group [%s]"),
792 abfd,
793 (unsigned int) idx->shdr->sh_type,
794 bfd_elf_string_from_elf_section (abfd,
795 (elf_elfheader (abfd)
796 ->e_shstrndx),
797 idx->shdr->sh_name),
798 shdr->bfd_section->name);
799 result = FALSE;
802 return result;
805 bfd_boolean
806 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
808 return elf_next_in_group (sec) != NULL;
811 /* Make a BFD section from an ELF section. We store a pointer to the
812 BFD section in the bfd_section field of the header. */
814 bfd_boolean
815 _bfd_elf_make_section_from_shdr (bfd *abfd,
816 Elf_Internal_Shdr *hdr,
817 const char *name,
818 int shindex)
820 asection *newsect;
821 flagword flags;
822 const struct elf_backend_data *bed;
824 if (hdr->bfd_section != NULL)
825 return TRUE;
827 newsect = bfd_make_section_anyway (abfd, name);
828 if (newsect == NULL)
829 return FALSE;
831 hdr->bfd_section = newsect;
832 elf_section_data (newsect)->this_hdr = *hdr;
833 elf_section_data (newsect)->this_idx = shindex;
835 /* Always use the real type/flags. */
836 elf_section_type (newsect) = hdr->sh_type;
837 elf_section_flags (newsect) = hdr->sh_flags;
839 newsect->filepos = hdr->sh_offset;
841 if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
842 || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
843 || ! bfd_set_section_alignment (abfd, newsect,
844 bfd_log2 (hdr->sh_addralign)))
845 return FALSE;
847 flags = SEC_NO_FLAGS;
848 if (hdr->sh_type != SHT_NOBITS)
849 flags |= SEC_HAS_CONTENTS;
850 if (hdr->sh_type == SHT_GROUP)
851 flags |= SEC_GROUP | SEC_EXCLUDE;
852 if ((hdr->sh_flags & SHF_ALLOC) != 0)
854 flags |= SEC_ALLOC;
855 if (hdr->sh_type != SHT_NOBITS)
856 flags |= SEC_LOAD;
858 if ((hdr->sh_flags & SHF_WRITE) == 0)
859 flags |= SEC_READONLY;
860 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
861 flags |= SEC_CODE;
862 else if ((flags & SEC_LOAD) != 0)
863 flags |= SEC_DATA;
864 if ((hdr->sh_flags & SHF_MERGE) != 0)
866 flags |= SEC_MERGE;
867 newsect->entsize = hdr->sh_entsize;
868 if ((hdr->sh_flags & SHF_STRINGS) != 0)
869 flags |= SEC_STRINGS;
871 if (hdr->sh_flags & SHF_GROUP)
872 if (!setup_group (abfd, hdr, newsect))
873 return FALSE;
874 if ((hdr->sh_flags & SHF_TLS) != 0)
875 flags |= SEC_THREAD_LOCAL;
876 if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
877 flags |= SEC_EXCLUDE;
879 if ((flags & SEC_ALLOC) == 0)
881 /* The debugging sections appear to be recognized only by name,
882 not any sort of flag. Their SEC_ALLOC bits are cleared. */
883 static const struct
885 const char *name;
886 int len;
887 } debug_sections [] =
889 { STRING_COMMA_LEN ("debug") }, /* 'd' */
890 { NULL, 0 }, /* 'e' */
891 { NULL, 0 }, /* 'f' */
892 { STRING_COMMA_LEN ("gnu.linkonce.wi.") }, /* 'g' */
893 { NULL, 0 }, /* 'h' */
894 { NULL, 0 }, /* 'i' */
895 { NULL, 0 }, /* 'j' */
896 { NULL, 0 }, /* 'k' */
897 { STRING_COMMA_LEN ("line") }, /* 'l' */
898 { NULL, 0 }, /* 'm' */
899 { NULL, 0 }, /* 'n' */
900 { NULL, 0 }, /* 'o' */
901 { NULL, 0 }, /* 'p' */
902 { NULL, 0 }, /* 'q' */
903 { NULL, 0 }, /* 'r' */
904 { STRING_COMMA_LEN ("stab") }, /* 's' */
905 { NULL, 0 }, /* 't' */
906 { NULL, 0 }, /* 'u' */
907 { NULL, 0 }, /* 'v' */
908 { NULL, 0 }, /* 'w' */
909 { NULL, 0 }, /* 'x' */
910 { NULL, 0 }, /* 'y' */
911 { STRING_COMMA_LEN ("zdebug") } /* 'z' */
914 if (name [0] == '.')
916 int i = name [1] - 'd';
917 if (i >= 0
918 && i < (int) ARRAY_SIZE (debug_sections)
919 && debug_sections [i].name != NULL
920 && strncmp (&name [1], debug_sections [i].name,
921 debug_sections [i].len) == 0)
922 flags |= SEC_DEBUGGING;
926 /* As a GNU extension, if the name begins with .gnu.linkonce, we
927 only link a single copy of the section. This is used to support
928 g++. g++ will emit each template expansion in its own section.
929 The symbols will be defined as weak, so that multiple definitions
930 are permitted. The GNU linker extension is to actually discard
931 all but one of the sections. */
932 if (CONST_STRNEQ (name, ".gnu.linkonce")
933 && elf_next_in_group (newsect) == NULL)
934 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
936 bed = get_elf_backend_data (abfd);
937 if (bed->elf_backend_section_flags)
938 if (! bed->elf_backend_section_flags (&flags, hdr))
939 return FALSE;
941 if (! bfd_set_section_flags (abfd, newsect, flags))
942 return FALSE;
944 /* We do not parse the PT_NOTE segments as we are interested even in the
945 separate debug info files which may have the segments offsets corrupted.
946 PT_NOTEs from the core files are currently not parsed using BFD. */
947 if (hdr->sh_type == SHT_NOTE)
949 bfd_byte *contents;
951 if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
952 return FALSE;
954 elf_parse_notes (abfd, (char *) contents, hdr->sh_size, -1);
955 free (contents);
958 if ((flags & SEC_ALLOC) != 0)
960 Elf_Internal_Phdr *phdr;
961 unsigned int i, nload;
963 /* Some ELF linkers produce binaries with all the program header
964 p_paddr fields zero. If we have such a binary with more than
965 one PT_LOAD header, then leave the section lma equal to vma
966 so that we don't create sections with overlapping lma. */
967 phdr = elf_tdata (abfd)->phdr;
968 for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
969 if (phdr->p_paddr != 0)
970 break;
971 else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
972 ++nload;
973 if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
974 return TRUE;
976 phdr = elf_tdata (abfd)->phdr;
977 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
979 if (phdr->p_type == PT_LOAD
980 && ELF_SECTION_IN_SEGMENT (hdr, phdr))
982 if ((flags & SEC_LOAD) == 0)
983 newsect->lma = (phdr->p_paddr
984 + hdr->sh_addr - phdr->p_vaddr);
985 else
986 /* We used to use the same adjustment for SEC_LOAD
987 sections, but that doesn't work if the segment
988 is packed with code from multiple VMAs.
989 Instead we calculate the section LMA based on
990 the segment LMA. It is assumed that the
991 segment will contain sections with contiguous
992 LMAs, even if the VMAs are not. */
993 newsect->lma = (phdr->p_paddr
994 + hdr->sh_offset - phdr->p_offset);
996 /* With contiguous segments, we can't tell from file
997 offsets whether a section with zero size should
998 be placed at the end of one segment or the
999 beginning of the next. Decide based on vaddr. */
1000 if (hdr->sh_addr >= phdr->p_vaddr
1001 && (hdr->sh_addr + hdr->sh_size
1002 <= phdr->p_vaddr + phdr->p_memsz))
1003 break;
1008 /* Compress/decompress DWARF debug sections with names: .debug_* and
1009 .zdebug_*, after the section flags is set. */
1010 if ((flags & SEC_DEBUGGING)
1011 && ((name[1] == 'd' && name[6] == '_')
1012 || (name[1] == 'z' && name[7] == '_')))
1014 enum { nothing, compress, decompress } action = nothing;
1015 char *new_name;
1017 if (bfd_is_section_compressed (abfd, newsect))
1019 /* Compressed section. Check if we should decompress. */
1020 if ((abfd->flags & BFD_DECOMPRESS))
1021 action = decompress;
1023 else
1025 /* Normal section. Check if we should compress. */
1026 if ((abfd->flags & BFD_COMPRESS))
1027 action = compress;
1030 new_name = NULL;
1031 switch (action)
1033 case nothing:
1034 break;
1035 case compress:
1036 if (!bfd_init_section_compress_status (abfd, newsect))
1038 (*_bfd_error_handler)
1039 (_("%B: unable to initialize commpress status for section %s"),
1040 abfd, name);
1041 return FALSE;
1043 if (name[1] != 'z')
1045 unsigned int len = strlen (name);
1047 new_name = bfd_alloc (abfd, len + 2);
1048 if (new_name == NULL)
1049 return FALSE;
1050 new_name[0] = '.';
1051 new_name[1] = 'z';
1052 memcpy (new_name + 2, name + 1, len);
1054 break;
1055 case decompress:
1056 if (!bfd_init_section_decompress_status (abfd, newsect))
1058 (*_bfd_error_handler)
1059 (_("%B: unable to initialize decommpress status for section %s"),
1060 abfd, name);
1061 return FALSE;
1063 if (name[1] == 'z')
1065 unsigned int len = strlen (name);
1067 new_name = bfd_alloc (abfd, len);
1068 if (new_name == NULL)
1069 return FALSE;
1070 new_name[0] = '.';
1071 memcpy (new_name + 1, name + 2, len - 1);
1073 break;
1075 if (new_name != NULL)
1076 bfd_rename_section (abfd, newsect, new_name);
1079 return TRUE;
1082 const char *const bfd_elf_section_type_names[] = {
1083 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1084 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1085 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1088 /* ELF relocs are against symbols. If we are producing relocatable
1089 output, and the reloc is against an external symbol, and nothing
1090 has given us any additional addend, the resulting reloc will also
1091 be against the same symbol. In such a case, we don't want to
1092 change anything about the way the reloc is handled, since it will
1093 all be done at final link time. Rather than put special case code
1094 into bfd_perform_relocation, all the reloc types use this howto
1095 function. It just short circuits the reloc if producing
1096 relocatable output against an external symbol. */
1098 bfd_reloc_status_type
1099 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1100 arelent *reloc_entry,
1101 asymbol *symbol,
1102 void *data ATTRIBUTE_UNUSED,
1103 asection *input_section,
1104 bfd *output_bfd,
1105 char **error_message ATTRIBUTE_UNUSED)
1107 if (output_bfd != NULL
1108 && (symbol->flags & BSF_SECTION_SYM) == 0
1109 && (! reloc_entry->howto->partial_inplace
1110 || reloc_entry->addend == 0))
1112 reloc_entry->address += input_section->output_offset;
1113 return bfd_reloc_ok;
1116 return bfd_reloc_continue;
1119 /* Copy the program header and other data from one object module to
1120 another. */
1122 bfd_boolean
1123 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1125 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
1126 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
1127 return TRUE;
1129 BFD_ASSERT (!elf_flags_init (obfd)
1130 || (elf_elfheader (obfd)->e_flags
1131 == elf_elfheader (ibfd)->e_flags));
1133 elf_gp (obfd) = elf_gp (ibfd);
1134 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1135 elf_flags_init (obfd) = TRUE;
1137 /* Copy object attributes. */
1138 _bfd_elf_copy_obj_attributes (ibfd, obfd);
1139 return TRUE;
1142 static const char *
1143 get_segment_type (unsigned int p_type)
1145 const char *pt;
1146 switch (p_type)
1148 case PT_NULL: pt = "NULL"; break;
1149 case PT_LOAD: pt = "LOAD"; break;
1150 case PT_DYNAMIC: pt = "DYNAMIC"; break;
1151 case PT_INTERP: pt = "INTERP"; break;
1152 case PT_NOTE: pt = "NOTE"; break;
1153 case PT_SHLIB: pt = "SHLIB"; break;
1154 case PT_PHDR: pt = "PHDR"; break;
1155 case PT_TLS: pt = "TLS"; break;
1156 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1157 case PT_GNU_STACK: pt = "STACK"; break;
1158 case PT_GNU_RELRO: pt = "RELRO"; break;
1159 default: pt = NULL; break;
1161 return pt;
1164 /* Print out the program headers. */
1166 bfd_boolean
1167 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1169 FILE *f = (FILE *) farg;
1170 Elf_Internal_Phdr *p;
1171 asection *s;
1172 bfd_byte *dynbuf = NULL;
1174 p = elf_tdata (abfd)->phdr;
1175 if (p != NULL)
1177 unsigned int i, c;
1179 fprintf (f, _("\nProgram Header:\n"));
1180 c = elf_elfheader (abfd)->e_phnum;
1181 for (i = 0; i < c; i++, p++)
1183 const char *pt = get_segment_type (p->p_type);
1184 char buf[20];
1186 if (pt == NULL)
1188 sprintf (buf, "0x%lx", p->p_type);
1189 pt = buf;
1191 fprintf (f, "%8s off 0x", pt);
1192 bfd_fprintf_vma (abfd, f, p->p_offset);
1193 fprintf (f, " vaddr 0x");
1194 bfd_fprintf_vma (abfd, f, p->p_vaddr);
1195 fprintf (f, " paddr 0x");
1196 bfd_fprintf_vma (abfd, f, p->p_paddr);
1197 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1198 fprintf (f, " filesz 0x");
1199 bfd_fprintf_vma (abfd, f, p->p_filesz);
1200 fprintf (f, " memsz 0x");
1201 bfd_fprintf_vma (abfd, f, p->p_memsz);
1202 fprintf (f, " flags %c%c%c",
1203 (p->p_flags & PF_R) != 0 ? 'r' : '-',
1204 (p->p_flags & PF_W) != 0 ? 'w' : '-',
1205 (p->p_flags & PF_X) != 0 ? 'x' : '-');
1206 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1207 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1208 fprintf (f, "\n");
1212 s = bfd_get_section_by_name (abfd, ".dynamic");
1213 if (s != NULL)
1215 unsigned int elfsec;
1216 unsigned long shlink;
1217 bfd_byte *extdyn, *extdynend;
1218 size_t extdynsize;
1219 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1221 fprintf (f, _("\nDynamic Section:\n"));
1223 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1224 goto error_return;
1226 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1227 if (elfsec == SHN_BAD)
1228 goto error_return;
1229 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1231 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1232 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1234 extdyn = dynbuf;
1235 extdynend = extdyn + s->size;
1236 for (; extdyn < extdynend; extdyn += extdynsize)
1238 Elf_Internal_Dyn dyn;
1239 const char *name = "";
1240 char ab[20];
1241 bfd_boolean stringp;
1242 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1244 (*swap_dyn_in) (abfd, extdyn, &dyn);
1246 if (dyn.d_tag == DT_NULL)
1247 break;
1249 stringp = FALSE;
1250 switch (dyn.d_tag)
1252 default:
1253 if (bed->elf_backend_get_target_dtag)
1254 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1256 if (!strcmp (name, ""))
1258 sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
1259 name = ab;
1261 break;
1263 case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
1264 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1265 case DT_PLTGOT: name = "PLTGOT"; break;
1266 case DT_HASH: name = "HASH"; break;
1267 case DT_STRTAB: name = "STRTAB"; break;
1268 case DT_SYMTAB: name = "SYMTAB"; break;
1269 case DT_RELA: name = "RELA"; break;
1270 case DT_RELASZ: name = "RELASZ"; break;
1271 case DT_RELAENT: name = "RELAENT"; break;
1272 case DT_STRSZ: name = "STRSZ"; break;
1273 case DT_SYMENT: name = "SYMENT"; break;
1274 case DT_INIT: name = "INIT"; break;
1275 case DT_FINI: name = "FINI"; break;
1276 case DT_SONAME: name = "SONAME"; stringp = TRUE; break;
1277 case DT_RPATH: name = "RPATH"; stringp = TRUE; break;
1278 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1279 case DT_REL: name = "REL"; break;
1280 case DT_RELSZ: name = "RELSZ"; break;
1281 case DT_RELENT: name = "RELENT"; break;
1282 case DT_PLTREL: name = "PLTREL"; break;
1283 case DT_DEBUG: name = "DEBUG"; break;
1284 case DT_TEXTREL: name = "TEXTREL"; break;
1285 case DT_JMPREL: name = "JMPREL"; break;
1286 case DT_BIND_NOW: name = "BIND_NOW"; break;
1287 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1288 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1289 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1290 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1291 case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break;
1292 case DT_FLAGS: name = "FLAGS"; break;
1293 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1294 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1295 case DT_CHECKSUM: name = "CHECKSUM"; break;
1296 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1297 case DT_MOVEENT: name = "MOVEENT"; break;
1298 case DT_MOVESZ: name = "MOVESZ"; break;
1299 case DT_FEATURE: name = "FEATURE"; break;
1300 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1301 case DT_SYMINSZ: name = "SYMINSZ"; break;
1302 case DT_SYMINENT: name = "SYMINENT"; break;
1303 case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break;
1304 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break;
1305 case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break;
1306 case DT_PLTPAD: name = "PLTPAD"; break;
1307 case DT_MOVETAB: name = "MOVETAB"; break;
1308 case DT_SYMINFO: name = "SYMINFO"; break;
1309 case DT_RELACOUNT: name = "RELACOUNT"; break;
1310 case DT_RELCOUNT: name = "RELCOUNT"; break;
1311 case DT_FLAGS_1: name = "FLAGS_1"; break;
1312 case DT_VERSYM: name = "VERSYM"; break;
1313 case DT_VERDEF: name = "VERDEF"; break;
1314 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1315 case DT_VERNEED: name = "VERNEED"; break;
1316 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1317 case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
1318 case DT_USED: name = "USED"; break;
1319 case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
1320 case DT_GNU_HASH: name = "GNU_HASH"; break;
1323 fprintf (f, " %-20s ", name);
1324 if (! stringp)
1326 fprintf (f, "0x");
1327 bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1329 else
1331 const char *string;
1332 unsigned int tagv = dyn.d_un.d_val;
1334 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1335 if (string == NULL)
1336 goto error_return;
1337 fprintf (f, "%s", string);
1339 fprintf (f, "\n");
1342 free (dynbuf);
1343 dynbuf = NULL;
1346 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1347 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1349 if (! _bfd_elf_slurp_version_tables (abfd, FALSE))
1350 return FALSE;
1353 if (elf_dynverdef (abfd) != 0)
1355 Elf_Internal_Verdef *t;
1357 fprintf (f, _("\nVersion definitions:\n"));
1358 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1360 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1361 t->vd_flags, t->vd_hash,
1362 t->vd_nodename ? t->vd_nodename : "<corrupt>");
1363 if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1365 Elf_Internal_Verdaux *a;
1367 fprintf (f, "\t");
1368 for (a = t->vd_auxptr->vda_nextptr;
1369 a != NULL;
1370 a = a->vda_nextptr)
1371 fprintf (f, "%s ",
1372 a->vda_nodename ? a->vda_nodename : "<corrupt>");
1373 fprintf (f, "\n");
1378 if (elf_dynverref (abfd) != 0)
1380 Elf_Internal_Verneed *t;
1382 fprintf (f, _("\nVersion References:\n"));
1383 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1385 Elf_Internal_Vernaux *a;
1387 fprintf (f, _(" required from %s:\n"),
1388 t->vn_filename ? t->vn_filename : "<corrupt>");
1389 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1390 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1391 a->vna_flags, a->vna_other,
1392 a->vna_nodename ? a->vna_nodename : "<corrupt>");
1396 return TRUE;
1398 error_return:
1399 if (dynbuf != NULL)
1400 free (dynbuf);
1401 return FALSE;
1404 /* Display ELF-specific fields of a symbol. */
1406 void
1407 bfd_elf_print_symbol (bfd *abfd,
1408 void *filep,
1409 asymbol *symbol,
1410 bfd_print_symbol_type how)
1412 FILE *file = (FILE *) filep;
1413 switch (how)
1415 case bfd_print_symbol_name:
1416 fprintf (file, "%s", symbol->name);
1417 break;
1418 case bfd_print_symbol_more:
1419 fprintf (file, "elf ");
1420 bfd_fprintf_vma (abfd, file, symbol->value);
1421 fprintf (file, " %lx", (unsigned long) symbol->flags);
1422 break;
1423 case bfd_print_symbol_all:
1425 const char *section_name;
1426 const char *name = NULL;
1427 const struct elf_backend_data *bed;
1428 unsigned char st_other;
1429 bfd_vma val;
1431 section_name = symbol->section ? symbol->section->name : "(*none*)";
1433 bed = get_elf_backend_data (abfd);
1434 if (bed->elf_backend_print_symbol_all)
1435 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
1437 if (name == NULL)
1439 name = symbol->name;
1440 bfd_print_symbol_vandf (abfd, file, symbol);
1443 fprintf (file, " %s\t", section_name);
1444 /* Print the "other" value for a symbol. For common symbols,
1445 we've already printed the size; now print the alignment.
1446 For other symbols, we have no specified alignment, and
1447 we've printed the address; now print the size. */
1448 if (symbol->section && bfd_is_com_section (symbol->section))
1449 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1450 else
1451 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1452 bfd_fprintf_vma (abfd, file, val);
1454 /* If we have version information, print it. */
1455 if (elf_tdata (abfd)->dynversym_section != 0
1456 && (elf_tdata (abfd)->dynverdef_section != 0
1457 || elf_tdata (abfd)->dynverref_section != 0))
1459 unsigned int vernum;
1460 const char *version_string;
1462 vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
1464 if (vernum == 0)
1465 version_string = "";
1466 else if (vernum == 1)
1467 version_string = "Base";
1468 else if (vernum <= elf_tdata (abfd)->cverdefs)
1469 version_string =
1470 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1471 else
1473 Elf_Internal_Verneed *t;
1475 version_string = "";
1476 for (t = elf_tdata (abfd)->verref;
1477 t != NULL;
1478 t = t->vn_nextref)
1480 Elf_Internal_Vernaux *a;
1482 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1484 if (a->vna_other == vernum)
1486 version_string = a->vna_nodename;
1487 break;
1493 if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
1494 fprintf (file, " %-11s", version_string);
1495 else
1497 int i;
1499 fprintf (file, " (%s)", version_string);
1500 for (i = 10 - strlen (version_string); i > 0; --i)
1501 putc (' ', file);
1505 /* If the st_other field is not zero, print it. */
1506 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
1508 switch (st_other)
1510 case 0: break;
1511 case STV_INTERNAL: fprintf (file, " .internal"); break;
1512 case STV_HIDDEN: fprintf (file, " .hidden"); break;
1513 case STV_PROTECTED: fprintf (file, " .protected"); break;
1514 default:
1515 /* Some other non-defined flags are also present, so print
1516 everything hex. */
1517 fprintf (file, " 0x%02x", (unsigned int) st_other);
1520 fprintf (file, " %s", name);
1522 break;
1526 /* Allocate an ELF string table--force the first byte to be zero. */
1528 struct bfd_strtab_hash *
1529 _bfd_elf_stringtab_init (void)
1531 struct bfd_strtab_hash *ret;
1533 ret = _bfd_stringtab_init ();
1534 if (ret != NULL)
1536 bfd_size_type loc;
1538 loc = _bfd_stringtab_add (ret, "", TRUE, FALSE);
1539 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
1540 if (loc == (bfd_size_type) -1)
1542 _bfd_stringtab_free (ret);
1543 ret = NULL;
1546 return ret;
1549 /* ELF .o/exec file reading */
1551 /* Create a new bfd section from an ELF section header. */
1553 bfd_boolean
1554 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
1556 Elf_Internal_Shdr *hdr;
1557 Elf_Internal_Ehdr *ehdr;
1558 const struct elf_backend_data *bed;
1559 const char *name;
1561 if (shindex >= elf_numsections (abfd))
1562 return FALSE;
1564 hdr = elf_elfsections (abfd)[shindex];
1565 ehdr = elf_elfheader (abfd);
1566 name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
1567 hdr->sh_name);
1568 if (name == NULL)
1569 return FALSE;
1571 bed = get_elf_backend_data (abfd);
1572 switch (hdr->sh_type)
1574 case SHT_NULL:
1575 /* Inactive section. Throw it away. */
1576 return TRUE;
1578 case SHT_PROGBITS: /* Normal section with contents. */
1579 case SHT_NOBITS: /* .bss section. */
1580 case SHT_HASH: /* .hash section. */
1581 case SHT_NOTE: /* .note section. */
1582 case SHT_INIT_ARRAY: /* .init_array section. */
1583 case SHT_FINI_ARRAY: /* .fini_array section. */
1584 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
1585 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
1586 case SHT_GNU_HASH: /* .gnu.hash section. */
1587 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1589 case SHT_DYNAMIC: /* Dynamic linking information. */
1590 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
1591 return FALSE;
1592 if (hdr->sh_link > elf_numsections (abfd))
1594 /* PR 10478: Accept Solaris binaries with a sh_link
1595 field set to SHN_BEFORE or SHN_AFTER. */
1596 switch (bfd_get_arch (abfd))
1598 case bfd_arch_i386:
1599 case bfd_arch_sparc:
1600 if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
1601 || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
1602 break;
1603 /* Otherwise fall through. */
1604 default:
1605 return FALSE;
1608 else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
1609 return FALSE;
1610 else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
1612 Elf_Internal_Shdr *dynsymhdr;
1614 /* The shared libraries distributed with hpux11 have a bogus
1615 sh_link field for the ".dynamic" section. Find the
1616 string table for the ".dynsym" section instead. */
1617 if (elf_dynsymtab (abfd) != 0)
1619 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
1620 hdr->sh_link = dynsymhdr->sh_link;
1622 else
1624 unsigned int i, num_sec;
1626 num_sec = elf_numsections (abfd);
1627 for (i = 1; i < num_sec; i++)
1629 dynsymhdr = elf_elfsections (abfd)[i];
1630 if (dynsymhdr->sh_type == SHT_DYNSYM)
1632 hdr->sh_link = dynsymhdr->sh_link;
1633 break;
1638 break;
1640 case SHT_SYMTAB: /* A symbol table */
1641 if (elf_onesymtab (abfd) == shindex)
1642 return TRUE;
1644 if (hdr->sh_entsize != bed->s->sizeof_sym)
1645 return FALSE;
1646 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
1647 return FALSE;
1648 BFD_ASSERT (elf_onesymtab (abfd) == 0);
1649 elf_onesymtab (abfd) = shindex;
1650 elf_tdata (abfd)->symtab_hdr = *hdr;
1651 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
1652 abfd->flags |= HAS_SYMS;
1654 /* Sometimes a shared object will map in the symbol table. If
1655 SHF_ALLOC is set, and this is a shared object, then we also
1656 treat this section as a BFD section. We can not base the
1657 decision purely on SHF_ALLOC, because that flag is sometimes
1658 set in a relocatable object file, which would confuse the
1659 linker. */
1660 if ((hdr->sh_flags & SHF_ALLOC) != 0
1661 && (abfd->flags & DYNAMIC) != 0
1662 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1663 shindex))
1664 return FALSE;
1666 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
1667 can't read symbols without that section loaded as well. It
1668 is most likely specified by the next section header. */
1669 if (elf_elfsections (abfd)[elf_symtab_shndx (abfd)]->sh_link != shindex)
1671 unsigned int i, num_sec;
1673 num_sec = elf_numsections (abfd);
1674 for (i = shindex + 1; i < num_sec; i++)
1676 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1677 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
1678 && hdr2->sh_link == shindex)
1679 break;
1681 if (i == num_sec)
1682 for (i = 1; i < shindex; i++)
1684 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1685 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
1686 && hdr2->sh_link == shindex)
1687 break;
1689 if (i != shindex)
1690 return bfd_section_from_shdr (abfd, i);
1692 return TRUE;
1694 case SHT_DYNSYM: /* A dynamic symbol table */
1695 if (elf_dynsymtab (abfd) == shindex)
1696 return TRUE;
1698 if (hdr->sh_entsize != bed->s->sizeof_sym)
1699 return FALSE;
1700 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
1701 elf_dynsymtab (abfd) = shindex;
1702 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
1703 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1704 abfd->flags |= HAS_SYMS;
1706 /* Besides being a symbol table, we also treat this as a regular
1707 section, so that objcopy can handle it. */
1708 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1710 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections */
1711 if (elf_symtab_shndx (abfd) == shindex)
1712 return TRUE;
1714 BFD_ASSERT (elf_symtab_shndx (abfd) == 0);
1715 elf_symtab_shndx (abfd) = shindex;
1716 elf_tdata (abfd)->symtab_shndx_hdr = *hdr;
1717 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_shndx_hdr;
1718 return TRUE;
1720 case SHT_STRTAB: /* A string table */
1721 if (hdr->bfd_section != NULL)
1722 return TRUE;
1723 if (ehdr->e_shstrndx == shindex)
1725 elf_tdata (abfd)->shstrtab_hdr = *hdr;
1726 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
1727 return TRUE;
1729 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
1731 symtab_strtab:
1732 elf_tdata (abfd)->strtab_hdr = *hdr;
1733 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
1734 return TRUE;
1736 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
1738 dynsymtab_strtab:
1739 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
1740 hdr = &elf_tdata (abfd)->dynstrtab_hdr;
1741 elf_elfsections (abfd)[shindex] = hdr;
1742 /* We also treat this as a regular section, so that objcopy
1743 can handle it. */
1744 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1745 shindex);
1748 /* If the string table isn't one of the above, then treat it as a
1749 regular section. We need to scan all the headers to be sure,
1750 just in case this strtab section appeared before the above. */
1751 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
1753 unsigned int i, num_sec;
1755 num_sec = elf_numsections (abfd);
1756 for (i = 1; i < num_sec; i++)
1758 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1759 if (hdr2->sh_link == shindex)
1761 /* Prevent endless recursion on broken objects. */
1762 if (i == shindex)
1763 return FALSE;
1764 if (! bfd_section_from_shdr (abfd, i))
1765 return FALSE;
1766 if (elf_onesymtab (abfd) == i)
1767 goto symtab_strtab;
1768 if (elf_dynsymtab (abfd) == i)
1769 goto dynsymtab_strtab;
1773 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1775 case SHT_REL:
1776 case SHT_RELA:
1777 /* *These* do a lot of work -- but build no sections! */
1779 asection *target_sect;
1780 Elf_Internal_Shdr *hdr2, **p_hdr;
1781 unsigned int num_sec = elf_numsections (abfd);
1782 struct bfd_elf_section_data *esdt;
1783 bfd_size_type amt;
1785 if (hdr->sh_entsize
1786 != (bfd_size_type) (hdr->sh_type == SHT_REL
1787 ? bed->s->sizeof_rel : bed->s->sizeof_rela))
1788 return FALSE;
1790 /* Check for a bogus link to avoid crashing. */
1791 if (hdr->sh_link >= num_sec)
1793 ((*_bfd_error_handler)
1794 (_("%B: invalid link %lu for reloc section %s (index %u)"),
1795 abfd, hdr->sh_link, name, shindex));
1796 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1797 shindex);
1800 /* For some incomprehensible reason Oracle distributes
1801 libraries for Solaris in which some of the objects have
1802 bogus sh_link fields. It would be nice if we could just
1803 reject them, but, unfortunately, some people need to use
1804 them. We scan through the section headers; if we find only
1805 one suitable symbol table, we clobber the sh_link to point
1806 to it. I hope this doesn't break anything.
1808 Don't do it on executable nor shared library. */
1809 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0
1810 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
1811 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
1813 unsigned int scan;
1814 int found;
1816 found = 0;
1817 for (scan = 1; scan < num_sec; scan++)
1819 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
1820 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
1822 if (found != 0)
1824 found = 0;
1825 break;
1827 found = scan;
1830 if (found != 0)
1831 hdr->sh_link = found;
1834 /* Get the symbol table. */
1835 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
1836 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
1837 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
1838 return FALSE;
1840 /* If this reloc section does not use the main symbol table we
1841 don't treat it as a reloc section. BFD can't adequately
1842 represent such a section, so at least for now, we don't
1843 try. We just present it as a normal section. We also
1844 can't use it as a reloc section if it points to the null
1845 section, an invalid section, another reloc section, or its
1846 sh_link points to the null section. */
1847 if (hdr->sh_link != elf_onesymtab (abfd)
1848 || hdr->sh_link == SHN_UNDEF
1849 || hdr->sh_info == SHN_UNDEF
1850 || hdr->sh_info >= num_sec
1851 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
1852 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
1853 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1854 shindex);
1856 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
1857 return FALSE;
1858 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
1859 if (target_sect == NULL)
1860 return FALSE;
1862 esdt = elf_section_data (target_sect);
1863 if (hdr->sh_type == SHT_RELA)
1864 p_hdr = &esdt->rela.hdr;
1865 else
1866 p_hdr = &esdt->rel.hdr;
1868 BFD_ASSERT (*p_hdr == NULL);
1869 amt = sizeof (*hdr2);
1870 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt);
1871 if (hdr2 == NULL)
1872 return FALSE;
1873 *hdr2 = *hdr;
1874 *p_hdr = hdr2;
1875 elf_elfsections (abfd)[shindex] = hdr2;
1876 target_sect->reloc_count += NUM_SHDR_ENTRIES (hdr);
1877 target_sect->flags |= SEC_RELOC;
1878 target_sect->relocation = NULL;
1879 target_sect->rel_filepos = hdr->sh_offset;
1880 /* In the section to which the relocations apply, mark whether
1881 its relocations are of the REL or RELA variety. */
1882 if (hdr->sh_size != 0)
1884 if (hdr->sh_type == SHT_RELA)
1885 target_sect->use_rela_p = 1;
1887 abfd->flags |= HAS_RELOC;
1888 return TRUE;
1891 case SHT_GNU_verdef:
1892 elf_dynverdef (abfd) = shindex;
1893 elf_tdata (abfd)->dynverdef_hdr = *hdr;
1894 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1896 case SHT_GNU_versym:
1897 if (hdr->sh_entsize != sizeof (Elf_External_Versym))
1898 return FALSE;
1899 elf_dynversym (abfd) = shindex;
1900 elf_tdata (abfd)->dynversym_hdr = *hdr;
1901 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1903 case SHT_GNU_verneed:
1904 elf_dynverref (abfd) = shindex;
1905 elf_tdata (abfd)->dynverref_hdr = *hdr;
1906 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1908 case SHT_SHLIB:
1909 return TRUE;
1911 case SHT_GROUP:
1912 if (! IS_VALID_GROUP_SECTION_HEADER (hdr))
1913 return FALSE;
1914 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
1915 return FALSE;
1916 if (hdr->contents != NULL)
1918 Elf_Internal_Group *idx = (Elf_Internal_Group *) hdr->contents;
1919 unsigned int n_elt = hdr->sh_size / GRP_ENTRY_SIZE;
1920 asection *s;
1922 if (idx->flags & GRP_COMDAT)
1923 hdr->bfd_section->flags
1924 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1926 /* We try to keep the same section order as it comes in. */
1927 idx += n_elt;
1928 while (--n_elt != 0)
1930 --idx;
1932 if (idx->shdr != NULL
1933 && (s = idx->shdr->bfd_section) != NULL
1934 && elf_next_in_group (s) != NULL)
1936 elf_next_in_group (hdr->bfd_section) = s;
1937 break;
1941 break;
1943 default:
1944 /* Possibly an attributes section. */
1945 if (hdr->sh_type == SHT_GNU_ATTRIBUTES
1946 || hdr->sh_type == bed->obj_attrs_section_type)
1948 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
1949 return FALSE;
1950 _bfd_elf_parse_attributes (abfd, hdr);
1951 return TRUE;
1954 /* Check for any processor-specific section types. */
1955 if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
1956 return TRUE;
1958 if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
1960 if ((hdr->sh_flags & SHF_ALLOC) != 0)
1961 /* FIXME: How to properly handle allocated section reserved
1962 for applications? */
1963 (*_bfd_error_handler)
1964 (_("%B: don't know how to handle allocated, application "
1965 "specific section `%s' [0x%8x]"),
1966 abfd, name, hdr->sh_type);
1967 else
1968 /* Allow sections reserved for applications. */
1969 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1970 shindex);
1972 else if (hdr->sh_type >= SHT_LOPROC
1973 && hdr->sh_type <= SHT_HIPROC)
1974 /* FIXME: We should handle this section. */
1975 (*_bfd_error_handler)
1976 (_("%B: don't know how to handle processor specific section "
1977 "`%s' [0x%8x]"),
1978 abfd, name, hdr->sh_type);
1979 else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
1981 /* Unrecognised OS-specific sections. */
1982 if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
1983 /* SHF_OS_NONCONFORMING indicates that special knowledge is
1984 required to correctly process the section and the file should
1985 be rejected with an error message. */
1986 (*_bfd_error_handler)
1987 (_("%B: don't know how to handle OS specific section "
1988 "`%s' [0x%8x]"),
1989 abfd, name, hdr->sh_type);
1990 else
1991 /* Otherwise it should be processed. */
1992 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1994 else
1995 /* FIXME: We should handle this section. */
1996 (*_bfd_error_handler)
1997 (_("%B: don't know how to handle section `%s' [0x%8x]"),
1998 abfd, name, hdr->sh_type);
2000 return FALSE;
2003 return TRUE;
2006 /* Return the local symbol specified by ABFD, R_SYMNDX. */
2008 Elf_Internal_Sym *
2009 bfd_sym_from_r_symndx (struct sym_cache *cache,
2010 bfd *abfd,
2011 unsigned long r_symndx)
2013 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
2015 if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
2017 Elf_Internal_Shdr *symtab_hdr;
2018 unsigned char esym[sizeof (Elf64_External_Sym)];
2019 Elf_External_Sym_Shndx eshndx;
2021 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2022 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
2023 &cache->sym[ent], esym, &eshndx) == NULL)
2024 return NULL;
2026 if (cache->abfd != abfd)
2028 memset (cache->indx, -1, sizeof (cache->indx));
2029 cache->abfd = abfd;
2031 cache->indx[ent] = r_symndx;
2034 return &cache->sym[ent];
2037 /* Given an ELF section number, retrieve the corresponding BFD
2038 section. */
2040 asection *
2041 bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index)
2043 if (sec_index >= elf_numsections (abfd))
2044 return NULL;
2045 return elf_elfsections (abfd)[sec_index]->bfd_section;
2048 static const struct bfd_elf_special_section special_sections_b[] =
2050 { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2051 { NULL, 0, 0, 0, 0 }
2054 static const struct bfd_elf_special_section special_sections_c[] =
2056 { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
2057 { NULL, 0, 0, 0, 0 }
2060 static const struct bfd_elf_special_section special_sections_d[] =
2062 { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2063 { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2064 { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 },
2065 { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 },
2066 { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 },
2067 { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 },
2068 { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
2069 { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC },
2070 { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC },
2071 { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC },
2072 { NULL, 0, 0, 0, 0 }
2075 static const struct bfd_elf_special_section special_sections_f[] =
2077 { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2078 { STRING_COMMA_LEN (".fini_array"), 0, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
2079 { NULL, 0, 0, 0, 0 }
2082 static const struct bfd_elf_special_section special_sections_g[] =
2084 { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2085 { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2086 { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 },
2087 { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 },
2088 { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 },
2089 { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC },
2090 { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC },
2091 { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC },
2092 { NULL, 0, 0, 0, 0 }
2095 static const struct bfd_elf_special_section special_sections_h[] =
2097 { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC },
2098 { NULL, 0, 0, 0, 0 }
2101 static const struct bfd_elf_special_section special_sections_i[] =
2103 { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2104 { STRING_COMMA_LEN (".init_array"), 0, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2105 { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 },
2106 { NULL, 0, 0, 0, 0 }
2109 static const struct bfd_elf_special_section special_sections_l[] =
2111 { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
2112 { NULL, 0, 0, 0, 0 }
2115 static const struct bfd_elf_special_section special_sections_n[] =
2117 { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
2118 { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 },
2119 { NULL, 0, 0, 0, 0 }
2122 static const struct bfd_elf_special_section special_sections_p[] =
2124 { STRING_COMMA_LEN (".preinit_array"), 0, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2125 { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2126 { NULL, 0, 0, 0, 0 }
2129 static const struct bfd_elf_special_section special_sections_r[] =
2131 { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
2132 { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
2133 { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
2134 { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
2135 { NULL, 0, 0, 0, 0 }
2138 static const struct bfd_elf_special_section special_sections_s[] =
2140 { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
2141 { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 },
2142 { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 },
2143 /* See struct bfd_elf_special_section declaration for the semantics of
2144 this special case where .prefix_length != strlen (.prefix). */
2145 { ".stabstr", 5, 3, SHT_STRTAB, 0 },
2146 { NULL, 0, 0, 0, 0 }
2149 static const struct bfd_elf_special_section special_sections_t[] =
2151 { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2152 { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2153 { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2154 { NULL, 0, 0, 0, 0 }
2157 static const struct bfd_elf_special_section special_sections_z[] =
2159 { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 },
2160 { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 },
2161 { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 },
2162 { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
2163 { NULL, 0, 0, 0, 0 }
2166 static const struct bfd_elf_special_section *special_sections[] =
2168 special_sections_b, /* 'b' */
2169 special_sections_c, /* 'c' */
2170 special_sections_d, /* 'd' */
2171 NULL, /* 'e' */
2172 special_sections_f, /* 'f' */
2173 special_sections_g, /* 'g' */
2174 special_sections_h, /* 'h' */
2175 special_sections_i, /* 'i' */
2176 NULL, /* 'j' */
2177 NULL, /* 'k' */
2178 special_sections_l, /* 'l' */
2179 NULL, /* 'm' */
2180 special_sections_n, /* 'n' */
2181 NULL, /* 'o' */
2182 special_sections_p, /* 'p' */
2183 NULL, /* 'q' */
2184 special_sections_r, /* 'r' */
2185 special_sections_s, /* 's' */
2186 special_sections_t, /* 't' */
2187 NULL, /* 'u' */
2188 NULL, /* 'v' */
2189 NULL, /* 'w' */
2190 NULL, /* 'x' */
2191 NULL, /* 'y' */
2192 special_sections_z /* 'z' */
2195 const struct bfd_elf_special_section *
2196 _bfd_elf_get_special_section (const char *name,
2197 const struct bfd_elf_special_section *spec,
2198 unsigned int rela)
2200 int i;
2201 int len;
2203 len = strlen (name);
2205 for (i = 0; spec[i].prefix != NULL; i++)
2207 int suffix_len;
2208 int prefix_len = spec[i].prefix_length;
2210 if (len < prefix_len)
2211 continue;
2212 if (memcmp (name, spec[i].prefix, prefix_len) != 0)
2213 continue;
2215 suffix_len = spec[i].suffix_length;
2216 if (suffix_len <= 0)
2218 if (name[prefix_len] != 0)
2220 if (suffix_len == 0)
2221 continue;
2222 if (name[prefix_len] != '.'
2223 && (suffix_len == -2
2224 || (rela && spec[i].type == SHT_REL)))
2225 continue;
2228 else
2230 if (len < prefix_len + suffix_len)
2231 continue;
2232 if (memcmp (name + len - suffix_len,
2233 spec[i].prefix + prefix_len,
2234 suffix_len) != 0)
2235 continue;
2237 return &spec[i];
2240 return NULL;
2243 const struct bfd_elf_special_section *
2244 _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
2246 int i;
2247 const struct bfd_elf_special_section *spec;
2248 const struct elf_backend_data *bed;
2250 /* See if this is one of the special sections. */
2251 if (sec->name == NULL)
2252 return NULL;
2254 bed = get_elf_backend_data (abfd);
2255 spec = bed->special_sections;
2256 if (spec)
2258 spec = _bfd_elf_get_special_section (sec->name,
2259 bed->special_sections,
2260 sec->use_rela_p);
2261 if (spec != NULL)
2262 return spec;
2265 if (sec->name[0] != '.')
2266 return NULL;
2268 i = sec->name[1] - 'b';
2269 if (i < 0 || i > 'z' - 'b')
2270 return NULL;
2272 spec = special_sections[i];
2274 if (spec == NULL)
2275 return NULL;
2277 return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
2280 bfd_boolean
2281 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
2283 struct bfd_elf_section_data *sdata;
2284 const struct elf_backend_data *bed;
2285 const struct bfd_elf_special_section *ssect;
2287 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
2288 if (sdata == NULL)
2290 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
2291 sizeof (*sdata));
2292 if (sdata == NULL)
2293 return FALSE;
2294 sec->used_by_bfd = sdata;
2297 /* Indicate whether or not this section should use RELA relocations. */
2298 bed = get_elf_backend_data (abfd);
2299 sec->use_rela_p = bed->default_use_rela_p;
2301 /* When we read a file, we don't need to set ELF section type and
2302 flags. They will be overridden in _bfd_elf_make_section_from_shdr
2303 anyway. We will set ELF section type and flags for all linker
2304 created sections. If user specifies BFD section flags, we will
2305 set ELF section type and flags based on BFD section flags in
2306 elf_fake_sections. */
2307 if ((!sec->flags && abfd->direction != read_direction)
2308 || (sec->flags & SEC_LINKER_CREATED) != 0)
2310 ssect = (*bed->get_sec_type_attr) (abfd, sec);
2311 if (ssect != NULL)
2313 elf_section_type (sec) = ssect->type;
2314 elf_section_flags (sec) = ssect->attr;
2318 return _bfd_generic_new_section_hook (abfd, sec);
2321 /* Create a new bfd section from an ELF program header.
2323 Since program segments have no names, we generate a synthetic name
2324 of the form segment<NUM>, where NUM is generally the index in the
2325 program header table. For segments that are split (see below) we
2326 generate the names segment<NUM>a and segment<NUM>b.
2328 Note that some program segments may have a file size that is different than
2329 (less than) the memory size. All this means is that at execution the
2330 system must allocate the amount of memory specified by the memory size,
2331 but only initialize it with the first "file size" bytes read from the
2332 file. This would occur for example, with program segments consisting
2333 of combined data+bss.
2335 To handle the above situation, this routine generates TWO bfd sections
2336 for the single program segment. The first has the length specified by
2337 the file size of the segment, and the second has the length specified
2338 by the difference between the two sizes. In effect, the segment is split
2339 into its initialized and uninitialized parts.
2343 bfd_boolean
2344 _bfd_elf_make_section_from_phdr (bfd *abfd,
2345 Elf_Internal_Phdr *hdr,
2346 int hdr_index,
2347 const char *type_name)
2349 asection *newsect;
2350 char *name;
2351 char namebuf[64];
2352 size_t len;
2353 int split;
2355 split = ((hdr->p_memsz > 0)
2356 && (hdr->p_filesz > 0)
2357 && (hdr->p_memsz > hdr->p_filesz));
2359 if (hdr->p_filesz > 0)
2361 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : "");
2362 len = strlen (namebuf) + 1;
2363 name = (char *) bfd_alloc (abfd, len);
2364 if (!name)
2365 return FALSE;
2366 memcpy (name, namebuf, len);
2367 newsect = bfd_make_section (abfd, name);
2368 if (newsect == NULL)
2369 return FALSE;
2370 newsect->vma = hdr->p_vaddr;
2371 newsect->lma = hdr->p_paddr;
2372 newsect->size = hdr->p_filesz;
2373 newsect->filepos = hdr->p_offset;
2374 newsect->flags |= SEC_HAS_CONTENTS;
2375 newsect->alignment_power = bfd_log2 (hdr->p_align);
2376 if (hdr->p_type == PT_LOAD)
2378 newsect->flags |= SEC_ALLOC;
2379 newsect->flags |= SEC_LOAD;
2380 if (hdr->p_flags & PF_X)
2382 /* FIXME: all we known is that it has execute PERMISSION,
2383 may be data. */
2384 newsect->flags |= SEC_CODE;
2387 if (!(hdr->p_flags & PF_W))
2389 newsect->flags |= SEC_READONLY;
2393 if (hdr->p_memsz > hdr->p_filesz)
2395 bfd_vma align;
2397 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : "");
2398 len = strlen (namebuf) + 1;
2399 name = (char *) bfd_alloc (abfd, len);
2400 if (!name)
2401 return FALSE;
2402 memcpy (name, namebuf, len);
2403 newsect = bfd_make_section (abfd, name);
2404 if (newsect == NULL)
2405 return FALSE;
2406 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
2407 newsect->lma = hdr->p_paddr + hdr->p_filesz;
2408 newsect->size = hdr->p_memsz - hdr->p_filesz;
2409 newsect->filepos = hdr->p_offset + hdr->p_filesz;
2410 align = newsect->vma & -newsect->vma;
2411 if (align == 0 || align > hdr->p_align)
2412 align = hdr->p_align;
2413 newsect->alignment_power = bfd_log2 (align);
2414 if (hdr->p_type == PT_LOAD)
2416 /* Hack for gdb. Segments that have not been modified do
2417 not have their contents written to a core file, on the
2418 assumption that a debugger can find the contents in the
2419 executable. We flag this case by setting the fake
2420 section size to zero. Note that "real" bss sections will
2421 always have their contents dumped to the core file. */
2422 if (bfd_get_format (abfd) == bfd_core)
2423 newsect->size = 0;
2424 newsect->flags |= SEC_ALLOC;
2425 if (hdr->p_flags & PF_X)
2426 newsect->flags |= SEC_CODE;
2428 if (!(hdr->p_flags & PF_W))
2429 newsect->flags |= SEC_READONLY;
2432 return TRUE;
2435 bfd_boolean
2436 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
2438 const struct elf_backend_data *bed;
2440 switch (hdr->p_type)
2442 case PT_NULL:
2443 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null");
2445 case PT_LOAD:
2446 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load");
2448 case PT_DYNAMIC:
2449 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
2451 case PT_INTERP:
2452 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp");
2454 case PT_NOTE:
2455 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
2456 return FALSE;
2457 if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz))
2458 return FALSE;
2459 return TRUE;
2461 case PT_SHLIB:
2462 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
2464 case PT_PHDR:
2465 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr");
2467 case PT_GNU_EH_FRAME:
2468 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
2469 "eh_frame_hdr");
2471 case PT_GNU_STACK:
2472 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack");
2474 case PT_GNU_RELRO:
2475 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
2477 default:
2478 /* Check for any processor-specific program segment types. */
2479 bed = get_elf_backend_data (abfd);
2480 return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc");
2484 /* Return the REL_HDR for SEC, assuming there is only a single one, either
2485 REL or RELA. */
2487 Elf_Internal_Shdr *
2488 _bfd_elf_single_rel_hdr (asection *sec)
2490 if (elf_section_data (sec)->rel.hdr)
2492 BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL);
2493 return elf_section_data (sec)->rel.hdr;
2495 else
2496 return elf_section_data (sec)->rela.hdr;
2499 /* Allocate and initialize a section-header for a new reloc section,
2500 containing relocations against ASECT. It is stored in RELDATA. If
2501 USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
2502 relocations. */
2504 bfd_boolean
2505 _bfd_elf_init_reloc_shdr (bfd *abfd,
2506 struct bfd_elf_section_reloc_data *reldata,
2507 asection *asect,
2508 bfd_boolean use_rela_p)
2510 Elf_Internal_Shdr *rel_hdr;
2511 char *name;
2512 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2513 bfd_size_type amt;
2515 amt = sizeof (Elf_Internal_Shdr);
2516 BFD_ASSERT (reldata->hdr == NULL);
2517 rel_hdr = bfd_zalloc (abfd, amt);
2518 reldata->hdr = rel_hdr;
2520 amt = sizeof ".rela" + strlen (asect->name);
2521 name = (char *) bfd_alloc (abfd, amt);
2522 if (name == NULL)
2523 return FALSE;
2524 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
2525 rel_hdr->sh_name =
2526 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
2527 FALSE);
2528 if (rel_hdr->sh_name == (unsigned int) -1)
2529 return FALSE;
2530 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
2531 rel_hdr->sh_entsize = (use_rela_p
2532 ? bed->s->sizeof_rela
2533 : bed->s->sizeof_rel);
2534 rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
2535 rel_hdr->sh_flags = 0;
2536 rel_hdr->sh_addr = 0;
2537 rel_hdr->sh_size = 0;
2538 rel_hdr->sh_offset = 0;
2540 return TRUE;
2543 /* Return the default section type based on the passed in section flags. */
2546 bfd_elf_get_default_section_type (flagword flags)
2548 if ((flags & SEC_ALLOC) != 0
2549 && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
2550 return SHT_NOBITS;
2551 return SHT_PROGBITS;
2554 struct fake_section_arg
2556 struct bfd_link_info *link_info;
2557 bfd_boolean failed;
2560 /* Set up an ELF internal section header for a section. */
2562 static void
2563 elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
2565 struct fake_section_arg *arg = (struct fake_section_arg *)fsarg;
2566 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2567 struct bfd_elf_section_data *esd = elf_section_data (asect);
2568 Elf_Internal_Shdr *this_hdr;
2569 unsigned int sh_type;
2571 if (arg->failed)
2573 /* We already failed; just get out of the bfd_map_over_sections
2574 loop. */
2575 return;
2578 this_hdr = &esd->this_hdr;
2580 this_hdr->sh_name = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
2581 asect->name, FALSE);
2582 if (this_hdr->sh_name == (unsigned int) -1)
2584 arg->failed = TRUE;
2585 return;
2588 /* Don't clear sh_flags. Assembler may set additional bits. */
2590 if ((asect->flags & SEC_ALLOC) != 0
2591 || asect->user_set_vma)
2592 this_hdr->sh_addr = asect->vma;
2593 else
2594 this_hdr->sh_addr = 0;
2596 this_hdr->sh_offset = 0;
2597 this_hdr->sh_size = asect->size;
2598 this_hdr->sh_link = 0;
2599 this_hdr->sh_addralign = (bfd_vma) 1 << asect->alignment_power;
2600 /* The sh_entsize and sh_info fields may have been set already by
2601 copy_private_section_data. */
2603 this_hdr->bfd_section = asect;
2604 this_hdr->contents = NULL;
2606 /* If the section type is unspecified, we set it based on
2607 asect->flags. */
2608 if ((asect->flags & SEC_GROUP) != 0)
2609 sh_type = SHT_GROUP;
2610 else
2611 sh_type = bfd_elf_get_default_section_type (asect->flags);
2613 if (this_hdr->sh_type == SHT_NULL)
2614 this_hdr->sh_type = sh_type;
2615 else if (this_hdr->sh_type == SHT_NOBITS
2616 && sh_type == SHT_PROGBITS
2617 && (asect->flags & SEC_ALLOC) != 0)
2619 /* Warn if we are changing a NOBITS section to PROGBITS, but
2620 allow the link to proceed. This can happen when users link
2621 non-bss input sections to bss output sections, or emit data
2622 to a bss output section via a linker script. */
2623 (*_bfd_error_handler)
2624 (_("warning: section `%A' type changed to PROGBITS"), asect);
2625 this_hdr->sh_type = sh_type;
2628 switch (this_hdr->sh_type)
2630 default:
2631 break;
2633 case SHT_STRTAB:
2634 case SHT_INIT_ARRAY:
2635 case SHT_FINI_ARRAY:
2636 case SHT_PREINIT_ARRAY:
2637 case SHT_NOTE:
2638 case SHT_NOBITS:
2639 case SHT_PROGBITS:
2640 break;
2642 case SHT_HASH:
2643 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
2644 break;
2646 case SHT_DYNSYM:
2647 this_hdr->sh_entsize = bed->s->sizeof_sym;
2648 break;
2650 case SHT_DYNAMIC:
2651 this_hdr->sh_entsize = bed->s->sizeof_dyn;
2652 break;
2654 case SHT_RELA:
2655 if (get_elf_backend_data (abfd)->may_use_rela_p)
2656 this_hdr->sh_entsize = bed->s->sizeof_rela;
2657 break;
2659 case SHT_REL:
2660 if (get_elf_backend_data (abfd)->may_use_rel_p)
2661 this_hdr->sh_entsize = bed->s->sizeof_rel;
2662 break;
2664 case SHT_GNU_versym:
2665 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
2666 break;
2668 case SHT_GNU_verdef:
2669 this_hdr->sh_entsize = 0;
2670 /* objcopy or strip will copy over sh_info, but may not set
2671 cverdefs. The linker will set cverdefs, but sh_info will be
2672 zero. */
2673 if (this_hdr->sh_info == 0)
2674 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
2675 else
2676 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
2677 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
2678 break;
2680 case SHT_GNU_verneed:
2681 this_hdr->sh_entsize = 0;
2682 /* objcopy or strip will copy over sh_info, but may not set
2683 cverrefs. The linker will set cverrefs, but sh_info will be
2684 zero. */
2685 if (this_hdr->sh_info == 0)
2686 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
2687 else
2688 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
2689 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
2690 break;
2692 case SHT_GROUP:
2693 this_hdr->sh_entsize = GRP_ENTRY_SIZE;
2694 break;
2696 case SHT_GNU_HASH:
2697 this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
2698 break;
2701 if ((asect->flags & SEC_ALLOC) != 0)
2702 this_hdr->sh_flags |= SHF_ALLOC;
2703 if ((asect->flags & SEC_READONLY) == 0)
2704 this_hdr->sh_flags |= SHF_WRITE;
2705 if ((asect->flags & SEC_CODE) != 0)
2706 this_hdr->sh_flags |= SHF_EXECINSTR;
2707 if ((asect->flags & SEC_MERGE) != 0)
2709 this_hdr->sh_flags |= SHF_MERGE;
2710 this_hdr->sh_entsize = asect->entsize;
2711 if ((asect->flags & SEC_STRINGS) != 0)
2712 this_hdr->sh_flags |= SHF_STRINGS;
2714 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
2715 this_hdr->sh_flags |= SHF_GROUP;
2716 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
2718 this_hdr->sh_flags |= SHF_TLS;
2719 if (asect->size == 0
2720 && (asect->flags & SEC_HAS_CONTENTS) == 0)
2722 struct bfd_link_order *o = asect->map_tail.link_order;
2724 this_hdr->sh_size = 0;
2725 if (o != NULL)
2727 this_hdr->sh_size = o->offset + o->size;
2728 if (this_hdr->sh_size != 0)
2729 this_hdr->sh_type = SHT_NOBITS;
2733 if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE)
2734 this_hdr->sh_flags |= SHF_EXCLUDE;
2736 /* If the section has relocs, set up a section header for the
2737 SHT_REL[A] section. If two relocation sections are required for
2738 this section, it is up to the processor-specific back-end to
2739 create the other. */
2740 if ((asect->flags & SEC_RELOC) != 0)
2742 /* When doing a relocatable link, create both REL and RELA sections if
2743 needed. */
2744 if (arg->link_info
2745 /* Do the normal setup if we wouldn't create any sections here. */
2746 && esd->rel.count + esd->rela.count > 0
2747 && (arg->link_info->relocatable || arg->link_info->emitrelocations))
2749 if (esd->rel.count && esd->rel.hdr == NULL
2750 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, asect, FALSE))
2752 arg->failed = TRUE;
2753 return;
2755 if (esd->rela.count && esd->rela.hdr == NULL
2756 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, asect, TRUE))
2758 arg->failed = TRUE;
2759 return;
2762 else if (!_bfd_elf_init_reloc_shdr (abfd,
2763 (asect->use_rela_p
2764 ? &esd->rela : &esd->rel),
2765 asect,
2766 asect->use_rela_p))
2767 arg->failed = TRUE;
2770 /* Check for processor-specific section types. */
2771 sh_type = this_hdr->sh_type;
2772 if (bed->elf_backend_fake_sections
2773 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
2774 arg->failed = TRUE;
2776 if (sh_type == SHT_NOBITS && asect->size != 0)
2778 /* Don't change the header type from NOBITS if we are being
2779 called for objcopy --only-keep-debug. */
2780 this_hdr->sh_type = sh_type;
2784 /* Fill in the contents of a SHT_GROUP section. Called from
2785 _bfd_elf_compute_section_file_positions for gas, objcopy, and
2786 when ELF targets use the generic linker, ld. Called for ld -r
2787 from bfd_elf_final_link. */
2789 void
2790 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
2792 bfd_boolean *failedptr = (bfd_boolean *) failedptrarg;
2793 asection *elt, *first;
2794 unsigned char *loc;
2795 bfd_boolean gas;
2797 /* Ignore linker created group section. See elfNN_ia64_object_p in
2798 elfxx-ia64.c. */
2799 if (((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP)
2800 || *failedptr)
2801 return;
2803 if (elf_section_data (sec)->this_hdr.sh_info == 0)
2805 unsigned long symindx = 0;
2807 /* elf_group_id will have been set up by objcopy and the
2808 generic linker. */
2809 if (elf_group_id (sec) != NULL)
2810 symindx = elf_group_id (sec)->udata.i;
2812 if (symindx == 0)
2814 /* If called from the assembler, swap_out_syms will have set up
2815 elf_section_syms. */
2816 BFD_ASSERT (elf_section_syms (abfd) != NULL);
2817 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
2819 elf_section_data (sec)->this_hdr.sh_info = symindx;
2821 else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
2823 /* The ELF backend linker sets sh_info to -2 when the group
2824 signature symbol is global, and thus the index can't be
2825 set until all local symbols are output. */
2826 asection *igroup = elf_sec_group (elf_next_in_group (sec));
2827 struct bfd_elf_section_data *sec_data = elf_section_data (igroup);
2828 unsigned long symndx = sec_data->this_hdr.sh_info;
2829 unsigned long extsymoff = 0;
2830 struct elf_link_hash_entry *h;
2832 if (!elf_bad_symtab (igroup->owner))
2834 Elf_Internal_Shdr *symtab_hdr;
2836 symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
2837 extsymoff = symtab_hdr->sh_info;
2839 h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
2840 while (h->root.type == bfd_link_hash_indirect
2841 || h->root.type == bfd_link_hash_warning)
2842 h = (struct elf_link_hash_entry *) h->root.u.i.link;
2844 elf_section_data (sec)->this_hdr.sh_info = h->indx;
2847 /* The contents won't be allocated for "ld -r" or objcopy. */
2848 gas = TRUE;
2849 if (sec->contents == NULL)
2851 gas = FALSE;
2852 sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
2854 /* Arrange for the section to be written out. */
2855 elf_section_data (sec)->this_hdr.contents = sec->contents;
2856 if (sec->contents == NULL)
2858 *failedptr = TRUE;
2859 return;
2863 loc = sec->contents + sec->size;
2865 /* Get the pointer to the first section in the group that gas
2866 squirreled away here. objcopy arranges for this to be set to the
2867 start of the input section group. */
2868 first = elt = elf_next_in_group (sec);
2870 /* First element is a flag word. Rest of section is elf section
2871 indices for all the sections of the group. Write them backwards
2872 just to keep the group in the same order as given in .section
2873 directives, not that it matters. */
2874 while (elt != NULL)
2876 asection *s;
2878 s = elt;
2879 if (!gas)
2880 s = s->output_section;
2881 if (s != NULL
2882 && !bfd_is_abs_section (s))
2884 unsigned int idx = elf_section_data (s)->this_idx;
2886 loc -= 4;
2887 H_PUT_32 (abfd, idx, loc);
2889 elt = elf_next_in_group (elt);
2890 if (elt == first)
2891 break;
2894 if ((loc -= 4) != sec->contents)
2895 abort ();
2897 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
2900 /* Assign all ELF section numbers. The dummy first section is handled here
2901 too. The link/info pointers for the standard section types are filled
2902 in here too, while we're at it. */
2904 static bfd_boolean
2905 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
2907 struct elf_obj_tdata *t = elf_tdata (abfd);
2908 asection *sec;
2909 unsigned int section_number, secn;
2910 Elf_Internal_Shdr **i_shdrp;
2911 struct bfd_elf_section_data *d;
2912 bfd_boolean need_symtab;
2914 section_number = 1;
2916 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
2918 /* SHT_GROUP sections are in relocatable files only. */
2919 if (link_info == NULL || link_info->relocatable)
2921 /* Put SHT_GROUP sections first. */
2922 for (sec = abfd->sections; sec != NULL; sec = sec->next)
2924 d = elf_section_data (sec);
2926 if (d->this_hdr.sh_type == SHT_GROUP)
2928 if (sec->flags & SEC_LINKER_CREATED)
2930 /* Remove the linker created SHT_GROUP sections. */
2931 bfd_section_list_remove (abfd, sec);
2932 abfd->section_count--;
2934 else
2935 d->this_idx = section_number++;
2940 for (sec = abfd->sections; sec; sec = sec->next)
2942 d = elf_section_data (sec);
2944 if (d->this_hdr.sh_type != SHT_GROUP)
2945 d->this_idx = section_number++;
2946 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
2947 if (d->rel.hdr)
2949 d->rel.idx = section_number++;
2950 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name);
2952 else
2953 d->rel.idx = 0;
2955 if (d->rela.hdr)
2957 d->rela.idx = section_number++;
2958 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name);
2960 else
2961 d->rela.idx = 0;
2964 t->shstrtab_section = section_number++;
2965 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
2966 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
2968 need_symtab = (bfd_get_symcount (abfd) > 0
2969 || (link_info == NULL
2970 && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
2971 == HAS_RELOC)));
2972 if (need_symtab)
2974 t->symtab_section = section_number++;
2975 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
2976 if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
2978 t->symtab_shndx_section = section_number++;
2979 t->symtab_shndx_hdr.sh_name
2980 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
2981 ".symtab_shndx", FALSE);
2982 if (t->symtab_shndx_hdr.sh_name == (unsigned int) -1)
2983 return FALSE;
2985 t->strtab_section = section_number++;
2986 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
2989 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
2990 t->shstrtab_hdr.sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
2992 elf_numsections (abfd) = section_number;
2993 elf_elfheader (abfd)->e_shnum = section_number;
2995 /* Set up the list of section header pointers, in agreement with the
2996 indices. */
2997 i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc2 (abfd, section_number,
2998 sizeof (Elf_Internal_Shdr *));
2999 if (i_shdrp == NULL)
3000 return FALSE;
3002 i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
3003 sizeof (Elf_Internal_Shdr));
3004 if (i_shdrp[0] == NULL)
3006 bfd_release (abfd, i_shdrp);
3007 return FALSE;
3010 elf_elfsections (abfd) = i_shdrp;
3012 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
3013 if (need_symtab)
3015 i_shdrp[t->symtab_section] = &t->symtab_hdr;
3016 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
3018 i_shdrp[t->symtab_shndx_section] = &t->symtab_shndx_hdr;
3019 t->symtab_shndx_hdr.sh_link = t->symtab_section;
3021 i_shdrp[t->strtab_section] = &t->strtab_hdr;
3022 t->symtab_hdr.sh_link = t->strtab_section;
3025 for (sec = abfd->sections; sec; sec = sec->next)
3027 asection *s;
3028 const char *name;
3030 d = elf_section_data (sec);
3032 i_shdrp[d->this_idx] = &d->this_hdr;
3033 if (d->rel.idx != 0)
3034 i_shdrp[d->rel.idx] = d->rel.hdr;
3035 if (d->rela.idx != 0)
3036 i_shdrp[d->rela.idx] = d->rela.hdr;
3038 /* Fill in the sh_link and sh_info fields while we're at it. */
3040 /* sh_link of a reloc section is the section index of the symbol
3041 table. sh_info is the section index of the section to which
3042 the relocation entries apply. */
3043 if (d->rel.idx != 0)
3045 d->rel.hdr->sh_link = t->symtab_section;
3046 d->rel.hdr->sh_info = d->this_idx;
3048 if (d->rela.idx != 0)
3050 d->rela.hdr->sh_link = t->symtab_section;
3051 d->rela.hdr->sh_info = d->this_idx;
3054 /* We need to set up sh_link for SHF_LINK_ORDER. */
3055 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
3057 s = elf_linked_to_section (sec);
3058 if (s)
3060 /* elf_linked_to_section points to the input section. */
3061 if (link_info != NULL)
3063 /* Check discarded linkonce section. */
3064 if (elf_discarded_section (s))
3066 asection *kept;
3067 (*_bfd_error_handler)
3068 (_("%B: sh_link of section `%A' points to discarded section `%A' of `%B'"),
3069 abfd, d->this_hdr.bfd_section,
3070 s, s->owner);
3071 /* Point to the kept section if it has the same
3072 size as the discarded one. */
3073 kept = _bfd_elf_check_kept_section (s, link_info);
3074 if (kept == NULL)
3076 bfd_set_error (bfd_error_bad_value);
3077 return FALSE;
3079 s = kept;
3082 s = s->output_section;
3083 BFD_ASSERT (s != NULL);
3085 else
3087 /* Handle objcopy. */
3088 if (s->output_section == NULL)
3090 (*_bfd_error_handler)
3091 (_("%B: sh_link of section `%A' points to removed section `%A' of `%B'"),
3092 abfd, d->this_hdr.bfd_section, s, s->owner);
3093 bfd_set_error (bfd_error_bad_value);
3094 return FALSE;
3096 s = s->output_section;
3098 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3100 else
3102 /* PR 290:
3103 The Intel C compiler generates SHT_IA_64_UNWIND with
3104 SHF_LINK_ORDER. But it doesn't set the sh_link or
3105 sh_info fields. Hence we could get the situation
3106 where s is NULL. */
3107 const struct elf_backend_data *bed
3108 = get_elf_backend_data (abfd);
3109 if (bed->link_order_error_handler)
3110 bed->link_order_error_handler
3111 (_("%B: warning: sh_link not set for section `%A'"),
3112 abfd, sec);
3116 switch (d->this_hdr.sh_type)
3118 case SHT_REL:
3119 case SHT_RELA:
3120 /* A reloc section which we are treating as a normal BFD
3121 section. sh_link is the section index of the symbol
3122 table. sh_info is the section index of the section to
3123 which the relocation entries apply. We assume that an
3124 allocated reloc section uses the dynamic symbol table.
3125 FIXME: How can we be sure? */
3126 s = bfd_get_section_by_name (abfd, ".dynsym");
3127 if (s != NULL)
3128 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3130 /* We look up the section the relocs apply to by name. */
3131 name = sec->name;
3132 if (d->this_hdr.sh_type == SHT_REL)
3133 name += 4;
3134 else
3135 name += 5;
3136 s = bfd_get_section_by_name (abfd, name);
3137 if (s != NULL)
3138 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
3139 break;
3141 case SHT_STRTAB:
3142 /* We assume that a section named .stab*str is a stabs
3143 string section. We look for a section with the same name
3144 but without the trailing ``str'', and set its sh_link
3145 field to point to this section. */
3146 if (CONST_STRNEQ (sec->name, ".stab")
3147 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3149 size_t len;
3150 char *alc;
3152 len = strlen (sec->name);
3153 alc = (char *) bfd_malloc (len - 2);
3154 if (alc == NULL)
3155 return FALSE;
3156 memcpy (alc, sec->name, len - 3);
3157 alc[len - 3] = '\0';
3158 s = bfd_get_section_by_name (abfd, alc);
3159 free (alc);
3160 if (s != NULL)
3162 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
3164 /* This is a .stab section. */
3165 if (elf_section_data (s)->this_hdr.sh_entsize == 0)
3166 elf_section_data (s)->this_hdr.sh_entsize
3167 = 4 + 2 * bfd_get_arch_size (abfd) / 8;
3170 break;
3172 case SHT_DYNAMIC:
3173 case SHT_DYNSYM:
3174 case SHT_GNU_verneed:
3175 case SHT_GNU_verdef:
3176 /* sh_link is the section header index of the string table
3177 used for the dynamic entries, or the symbol table, or the
3178 version strings. */
3179 s = bfd_get_section_by_name (abfd, ".dynstr");
3180 if (s != NULL)
3181 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3182 break;
3184 case SHT_GNU_LIBLIST:
3185 /* sh_link is the section header index of the prelink library
3186 list used for the dynamic entries, or the symbol table, or
3187 the version strings. */
3188 s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
3189 ? ".dynstr" : ".gnu.libstr");
3190 if (s != NULL)
3191 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3192 break;
3194 case SHT_HASH:
3195 case SHT_GNU_HASH:
3196 case SHT_GNU_versym:
3197 /* sh_link is the section header index of the symbol table
3198 this hash table or version table is for. */
3199 s = bfd_get_section_by_name (abfd, ".dynsym");
3200 if (s != NULL)
3201 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3202 break;
3204 case SHT_GROUP:
3205 d->this_hdr.sh_link = t->symtab_section;
3209 for (secn = 1; secn < section_number; ++secn)
3210 if (i_shdrp[secn] == NULL)
3211 i_shdrp[secn] = i_shdrp[0];
3212 else
3213 i_shdrp[secn]->sh_name = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
3214 i_shdrp[secn]->sh_name);
3215 return TRUE;
3218 /* Map symbol from it's internal number to the external number, moving
3219 all local symbols to be at the head of the list. */
3221 static bfd_boolean
3222 sym_is_global (bfd *abfd, asymbol *sym)
3224 /* If the backend has a special mapping, use it. */
3225 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3226 if (bed->elf_backend_sym_is_global)
3227 return (*bed->elf_backend_sym_is_global) (abfd, sym);
3229 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
3230 || bfd_is_und_section (bfd_get_section (sym))
3231 || bfd_is_com_section (bfd_get_section (sym)));
3234 /* Don't output section symbols for sections that are not going to be
3235 output. */
3237 static bfd_boolean
3238 ignore_section_sym (bfd *abfd, asymbol *sym)
3240 return ((sym->flags & BSF_SECTION_SYM) != 0
3241 && !(sym->section->owner == abfd
3242 || (sym->section->output_section->owner == abfd
3243 && sym->section->output_offset == 0)));
3246 static bfd_boolean
3247 elf_map_symbols (bfd *abfd)
3249 unsigned int symcount = bfd_get_symcount (abfd);
3250 asymbol **syms = bfd_get_outsymbols (abfd);
3251 asymbol **sect_syms;
3252 unsigned int num_locals = 0;
3253 unsigned int num_globals = 0;
3254 unsigned int num_locals2 = 0;
3255 unsigned int num_globals2 = 0;
3256 int max_index = 0;
3257 unsigned int idx;
3258 asection *asect;
3259 asymbol **new_syms;
3261 #ifdef DEBUG
3262 fprintf (stderr, "elf_map_symbols\n");
3263 fflush (stderr);
3264 #endif
3266 for (asect = abfd->sections; asect; asect = asect->next)
3268 if (max_index < asect->index)
3269 max_index = asect->index;
3272 max_index++;
3273 sect_syms = (asymbol **) bfd_zalloc2 (abfd, max_index, sizeof (asymbol *));
3274 if (sect_syms == NULL)
3275 return FALSE;
3276 elf_section_syms (abfd) = sect_syms;
3277 elf_num_section_syms (abfd) = max_index;
3279 /* Init sect_syms entries for any section symbols we have already
3280 decided to output. */
3281 for (idx = 0; idx < symcount; idx++)
3283 asymbol *sym = syms[idx];
3285 if ((sym->flags & BSF_SECTION_SYM) != 0
3286 && sym->value == 0
3287 && !ignore_section_sym (abfd, sym))
3289 asection *sec = sym->section;
3291 if (sec->owner != abfd)
3292 sec = sec->output_section;
3294 sect_syms[sec->index] = syms[idx];
3298 /* Classify all of the symbols. */
3299 for (idx = 0; idx < symcount; idx++)
3301 if (ignore_section_sym (abfd, syms[idx]))
3302 continue;
3303 if (!sym_is_global (abfd, syms[idx]))
3304 num_locals++;
3305 else
3306 num_globals++;
3309 /* We will be adding a section symbol for each normal BFD section. Most
3310 sections will already have a section symbol in outsymbols, but
3311 eg. SHT_GROUP sections will not, and we need the section symbol mapped
3312 at least in that case. */
3313 for (asect = abfd->sections; asect; asect = asect->next)
3315 if (sect_syms[asect->index] == NULL)
3317 if (!sym_is_global (abfd, asect->symbol))
3318 num_locals++;
3319 else
3320 num_globals++;
3324 /* Now sort the symbols so the local symbols are first. */
3325 new_syms = (asymbol **) bfd_alloc2 (abfd, num_locals + num_globals,
3326 sizeof (asymbol *));
3328 if (new_syms == NULL)
3329 return FALSE;
3331 for (idx = 0; idx < symcount; idx++)
3333 asymbol *sym = syms[idx];
3334 unsigned int i;
3336 if (ignore_section_sym (abfd, sym))
3337 continue;
3338 if (!sym_is_global (abfd, sym))
3339 i = num_locals2++;
3340 else
3341 i = num_locals + num_globals2++;
3342 new_syms[i] = sym;
3343 sym->udata.i = i + 1;
3345 for (asect = abfd->sections; asect; asect = asect->next)
3347 if (sect_syms[asect->index] == NULL)
3349 asymbol *sym = asect->symbol;
3350 unsigned int i;
3352 sect_syms[asect->index] = sym;
3353 if (!sym_is_global (abfd, sym))
3354 i = num_locals2++;
3355 else
3356 i = num_locals + num_globals2++;
3357 new_syms[i] = sym;
3358 sym->udata.i = i + 1;
3362 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
3364 elf_num_locals (abfd) = num_locals;
3365 elf_num_globals (abfd) = num_globals;
3366 return TRUE;
3369 /* Align to the maximum file alignment that could be required for any
3370 ELF data structure. */
3372 static inline file_ptr
3373 align_file_position (file_ptr off, int align)
3375 return (off + align - 1) & ~(align - 1);
3378 /* Assign a file position to a section, optionally aligning to the
3379 required section alignment. */
3381 file_ptr
3382 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
3383 file_ptr offset,
3384 bfd_boolean align)
3386 if (align && i_shdrp->sh_addralign > 1)
3387 offset = BFD_ALIGN (offset, i_shdrp->sh_addralign);
3388 i_shdrp->sh_offset = offset;
3389 if (i_shdrp->bfd_section != NULL)
3390 i_shdrp->bfd_section->filepos = offset;
3391 if (i_shdrp->sh_type != SHT_NOBITS)
3392 offset += i_shdrp->sh_size;
3393 return offset;
3396 /* Compute the file positions we are going to put the sections at, and
3397 otherwise prepare to begin writing out the ELF file. If LINK_INFO
3398 is not NULL, this is being called by the ELF backend linker. */
3400 bfd_boolean
3401 _bfd_elf_compute_section_file_positions (bfd *abfd,
3402 struct bfd_link_info *link_info)
3404 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3405 struct fake_section_arg fsargs;
3406 bfd_boolean failed;
3407 struct bfd_strtab_hash *strtab = NULL;
3408 Elf_Internal_Shdr *shstrtab_hdr;
3409 bfd_boolean need_symtab;
3411 if (abfd->output_has_begun)
3412 return TRUE;
3414 /* Do any elf backend specific processing first. */
3415 if (bed->elf_backend_begin_write_processing)
3416 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
3418 if (! prep_headers (abfd))
3419 return FALSE;
3421 /* Post process the headers if necessary. */
3422 if (bed->elf_backend_post_process_headers)
3423 (*bed->elf_backend_post_process_headers) (abfd, link_info);
3425 fsargs.failed = FALSE;
3426 fsargs.link_info = link_info;
3427 bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
3428 if (fsargs.failed)
3429 return FALSE;
3431 if (!assign_section_numbers (abfd, link_info))
3432 return FALSE;
3434 /* The backend linker builds symbol table information itself. */
3435 need_symtab = (link_info == NULL
3436 && (bfd_get_symcount (abfd) > 0
3437 || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
3438 == HAS_RELOC)));
3439 if (need_symtab)
3441 /* Non-zero if doing a relocatable link. */
3442 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
3444 if (! swap_out_syms (abfd, &strtab, relocatable_p))
3445 return FALSE;
3448 failed = FALSE;
3449 if (link_info == NULL)
3451 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
3452 if (failed)
3453 return FALSE;
3456 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
3457 /* sh_name was set in prep_headers. */
3458 shstrtab_hdr->sh_type = SHT_STRTAB;
3459 shstrtab_hdr->sh_flags = 0;
3460 shstrtab_hdr->sh_addr = 0;
3461 shstrtab_hdr->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
3462 shstrtab_hdr->sh_entsize = 0;
3463 shstrtab_hdr->sh_link = 0;
3464 shstrtab_hdr->sh_info = 0;
3465 /* sh_offset is set in assign_file_positions_except_relocs. */
3466 shstrtab_hdr->sh_addralign = 1;
3468 if (!assign_file_positions_except_relocs (abfd, link_info))
3469 return FALSE;
3471 if (need_symtab)
3473 file_ptr off;
3474 Elf_Internal_Shdr *hdr;
3476 off = elf_tdata (abfd)->next_file_pos;
3478 hdr = &elf_tdata (abfd)->symtab_hdr;
3479 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3481 hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
3482 if (hdr->sh_size != 0)
3483 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3485 hdr = &elf_tdata (abfd)->strtab_hdr;
3486 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3488 elf_tdata (abfd)->next_file_pos = off;
3490 /* Now that we know where the .strtab section goes, write it
3491 out. */
3492 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
3493 || ! _bfd_stringtab_emit (abfd, strtab))
3494 return FALSE;
3495 _bfd_stringtab_free (strtab);
3498 abfd->output_has_begun = TRUE;
3500 return TRUE;
3503 /* Make an initial estimate of the size of the program header. If we
3504 get the number wrong here, we'll redo section placement. */
3506 static bfd_size_type
3507 get_program_header_size (bfd *abfd, struct bfd_link_info *info)
3509 size_t segs;
3510 asection *s;
3511 const struct elf_backend_data *bed;
3513 /* Assume we will need exactly two PT_LOAD segments: one for text
3514 and one for data. */
3515 segs = 2;
3517 s = bfd_get_section_by_name (abfd, ".interp");
3518 if (s != NULL && (s->flags & SEC_LOAD) != 0)
3520 /* If we have a loadable interpreter section, we need a
3521 PT_INTERP segment. In this case, assume we also need a
3522 PT_PHDR segment, although that may not be true for all
3523 targets. */
3524 segs += 2;
3527 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
3529 /* We need a PT_DYNAMIC segment. */
3530 ++segs;
3533 if (info != NULL && info->relro)
3535 /* We need a PT_GNU_RELRO segment. */
3536 ++segs;
3539 if (elf_tdata (abfd)->eh_frame_hdr)
3541 /* We need a PT_GNU_EH_FRAME segment. */
3542 ++segs;
3545 if (elf_tdata (abfd)->stack_flags)
3547 /* We need a PT_GNU_STACK segment. */
3548 ++segs;
3551 for (s = abfd->sections; s != NULL; s = s->next)
3553 if ((s->flags & SEC_LOAD) != 0
3554 && CONST_STRNEQ (s->name, ".note"))
3556 /* We need a PT_NOTE segment. */
3557 ++segs;
3558 /* Try to create just one PT_NOTE segment
3559 for all adjacent loadable .note* sections.
3560 gABI requires that within a PT_NOTE segment
3561 (and also inside of each SHT_NOTE section)
3562 each note is padded to a multiple of 4 size,
3563 so we check whether the sections are correctly
3564 aligned. */
3565 if (s->alignment_power == 2)
3566 while (s->next != NULL
3567 && s->next->alignment_power == 2
3568 && (s->next->flags & SEC_LOAD) != 0
3569 && CONST_STRNEQ (s->next->name, ".note"))
3570 s = s->next;
3574 for (s = abfd->sections; s != NULL; s = s->next)
3576 if (s->flags & SEC_THREAD_LOCAL)
3578 /* We need a PT_TLS segment. */
3579 ++segs;
3580 break;
3584 /* Let the backend count up any program headers it might need. */
3585 bed = get_elf_backend_data (abfd);
3586 if (bed->elf_backend_additional_program_headers)
3588 int a;
3590 a = (*bed->elf_backend_additional_program_headers) (abfd, info);
3591 if (a == -1)
3592 abort ();
3593 segs += a;
3596 return segs * bed->s->sizeof_phdr;
3599 /* Find the segment that contains the output_section of section. */
3601 Elf_Internal_Phdr *
3602 _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
3604 struct elf_segment_map *m;
3605 Elf_Internal_Phdr *p;
3607 for (m = elf_tdata (abfd)->segment_map,
3608 p = elf_tdata (abfd)->phdr;
3609 m != NULL;
3610 m = m->next, p++)
3612 int i;
3614 for (i = m->count - 1; i >= 0; i--)
3615 if (m->sections[i] == section)
3616 return p;
3619 return NULL;
3622 /* Create a mapping from a set of sections to a program segment. */
3624 static struct elf_segment_map *
3625 make_mapping (bfd *abfd,
3626 asection **sections,
3627 unsigned int from,
3628 unsigned int to,
3629 bfd_boolean phdr)
3631 struct elf_segment_map *m;
3632 unsigned int i;
3633 asection **hdrpp;
3634 bfd_size_type amt;
3636 amt = sizeof (struct elf_segment_map);
3637 amt += (to - from - 1) * sizeof (asection *);
3638 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
3639 if (m == NULL)
3640 return NULL;
3641 m->next = NULL;
3642 m->p_type = PT_LOAD;
3643 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
3644 m->sections[i - from] = *hdrpp;
3645 m->count = to - from;
3647 if (from == 0 && phdr)
3649 /* Include the headers in the first PT_LOAD segment. */
3650 m->includes_filehdr = 1;
3651 m->includes_phdrs = 1;
3654 return m;
3657 /* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL
3658 on failure. */
3660 struct elf_segment_map *
3661 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
3663 struct elf_segment_map *m;
3665 m = (struct elf_segment_map *) bfd_zalloc (abfd,
3666 sizeof (struct elf_segment_map));
3667 if (m == NULL)
3668 return NULL;
3669 m->next = NULL;
3670 m->p_type = PT_DYNAMIC;
3671 m->count = 1;
3672 m->sections[0] = dynsec;
3674 return m;
3677 /* Possibly add or remove segments from the segment map. */
3679 static bfd_boolean
3680 elf_modify_segment_map (bfd *abfd,
3681 struct bfd_link_info *info,
3682 bfd_boolean remove_empty_load)
3684 struct elf_segment_map **m;
3685 const struct elf_backend_data *bed;
3687 /* The placement algorithm assumes that non allocated sections are
3688 not in PT_LOAD segments. We ensure this here by removing such
3689 sections from the segment map. We also remove excluded
3690 sections. Finally, any PT_LOAD segment without sections is
3691 removed. */
3692 m = &elf_tdata (abfd)->segment_map;
3693 while (*m)
3695 unsigned int i, new_count;
3697 for (new_count = 0, i = 0; i < (*m)->count; i++)
3699 if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
3700 && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
3701 || (*m)->p_type != PT_LOAD))
3703 (*m)->sections[new_count] = (*m)->sections[i];
3704 new_count++;
3707 (*m)->count = new_count;
3709 if (remove_empty_load && (*m)->p_type == PT_LOAD && (*m)->count == 0)
3710 *m = (*m)->next;
3711 else
3712 m = &(*m)->next;
3715 bed = get_elf_backend_data (abfd);
3716 if (bed->elf_backend_modify_segment_map != NULL)
3718 if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
3719 return FALSE;
3722 return TRUE;
3725 /* Set up a mapping from BFD sections to program segments. */
3727 bfd_boolean
3728 _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
3730 unsigned int count;
3731 struct elf_segment_map *m;
3732 asection **sections = NULL;
3733 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3734 bfd_boolean no_user_phdrs;
3736 no_user_phdrs = elf_tdata (abfd)->segment_map == NULL;
3737 if (no_user_phdrs && bfd_count_sections (abfd) != 0)
3739 asection *s;
3740 unsigned int i;
3741 struct elf_segment_map *mfirst;
3742 struct elf_segment_map **pm;
3743 asection *last_hdr;
3744 bfd_vma last_size;
3745 unsigned int phdr_index;
3746 bfd_vma maxpagesize;
3747 asection **hdrpp;
3748 bfd_boolean phdr_in_segment = TRUE;
3749 bfd_boolean writable;
3750 int tls_count = 0;
3751 asection *first_tls = NULL;
3752 asection *dynsec, *eh_frame_hdr;
3753 bfd_size_type amt;
3754 bfd_vma addr_mask, wrap_to = 0;
3756 /* Select the allocated sections, and sort them. */
3758 sections = (asection **) bfd_malloc2 (bfd_count_sections (abfd),
3759 sizeof (asection *));
3760 if (sections == NULL)
3761 goto error_return;
3763 /* Calculate top address, avoiding undefined behaviour of shift
3764 left operator when shift count is equal to size of type
3765 being shifted. */
3766 addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
3767 addr_mask = (addr_mask << 1) + 1;
3769 i = 0;
3770 for (s = abfd->sections; s != NULL; s = s->next)
3772 if ((s->flags & SEC_ALLOC) != 0)
3774 sections[i] = s;
3775 ++i;
3776 /* A wrapping section potentially clashes with header. */
3777 if (((s->lma + s->size) & addr_mask) < (s->lma & addr_mask))
3778 wrap_to = (s->lma + s->size) & addr_mask;
3781 BFD_ASSERT (i <= bfd_count_sections (abfd));
3782 count = i;
3784 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
3786 /* Build the mapping. */
3788 mfirst = NULL;
3789 pm = &mfirst;
3791 /* If we have a .interp section, then create a PT_PHDR segment for
3792 the program headers and a PT_INTERP segment for the .interp
3793 section. */
3794 s = bfd_get_section_by_name (abfd, ".interp");
3795 if (s != NULL && (s->flags & SEC_LOAD) != 0)
3797 amt = sizeof (struct elf_segment_map);
3798 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
3799 if (m == NULL)
3800 goto error_return;
3801 m->next = NULL;
3802 m->p_type = PT_PHDR;
3803 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
3804 m->p_flags = PF_R | PF_X;
3805 m->p_flags_valid = 1;
3806 m->includes_phdrs = 1;
3808 *pm = m;
3809 pm = &m->next;
3811 amt = sizeof (struct elf_segment_map);
3812 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
3813 if (m == NULL)
3814 goto error_return;
3815 m->next = NULL;
3816 m->p_type = PT_INTERP;
3817 m->count = 1;
3818 m->sections[0] = s;
3820 *pm = m;
3821 pm = &m->next;
3824 /* Look through the sections. We put sections in the same program
3825 segment when the start of the second section can be placed within
3826 a few bytes of the end of the first section. */
3827 last_hdr = NULL;
3828 last_size = 0;
3829 phdr_index = 0;
3830 maxpagesize = bed->maxpagesize;
3831 writable = FALSE;
3832 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
3833 if (dynsec != NULL
3834 && (dynsec->flags & SEC_LOAD) == 0)
3835 dynsec = NULL;
3837 /* Deal with -Ttext or something similar such that the first section
3838 is not adjacent to the program headers. This is an
3839 approximation, since at this point we don't know exactly how many
3840 program headers we will need. */
3841 if (count > 0)
3843 bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size;
3845 if (phdr_size == (bfd_size_type) -1)
3846 phdr_size = get_program_header_size (abfd, info);
3847 if ((abfd->flags & D_PAGED) == 0
3848 || (sections[0]->lma & addr_mask) < phdr_size
3849 || ((sections[0]->lma & addr_mask) % maxpagesize
3850 < phdr_size % maxpagesize)
3851 || (sections[0]->lma & addr_mask & -maxpagesize) < wrap_to)
3852 phdr_in_segment = FALSE;
3855 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
3857 asection *hdr;
3858 bfd_boolean new_segment;
3860 hdr = *hdrpp;
3862 /* See if this section and the last one will fit in the same
3863 segment. */
3865 if (last_hdr == NULL)
3867 /* If we don't have a segment yet, then we don't need a new
3868 one (we build the last one after this loop). */
3869 new_segment = FALSE;
3871 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
3873 /* If this section has a different relation between the
3874 virtual address and the load address, then we need a new
3875 segment. */
3876 new_segment = TRUE;
3878 else if (hdr->lma < last_hdr->lma + last_size
3879 || last_hdr->lma + last_size < last_hdr->lma)
3881 /* If this section has a load address that makes it overlap
3882 the previous section, then we need a new segment. */
3883 new_segment = TRUE;
3885 /* In the next test we have to be careful when last_hdr->lma is close
3886 to the end of the address space. If the aligned address wraps
3887 around to the start of the address space, then there are no more
3888 pages left in memory and it is OK to assume that the current
3889 section can be included in the current segment. */
3890 else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize
3891 > last_hdr->lma)
3892 && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize
3893 <= hdr->lma))
3895 /* If putting this section in this segment would force us to
3896 skip a page in the segment, then we need a new segment. */
3897 new_segment = TRUE;
3899 else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
3900 && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
3902 /* We don't want to put a loadable section after a
3903 nonloadable section in the same segment.
3904 Consider .tbss sections as loadable for this purpose. */
3905 new_segment = TRUE;
3907 else if ((abfd->flags & D_PAGED) == 0)
3909 /* If the file is not demand paged, which means that we
3910 don't require the sections to be correctly aligned in the
3911 file, then there is no other reason for a new segment. */
3912 new_segment = FALSE;
3914 else if (! writable
3915 && (hdr->flags & SEC_READONLY) == 0
3916 && (((last_hdr->lma + last_size - 1) & -maxpagesize)
3917 != (hdr->lma & -maxpagesize)))
3919 /* We don't want to put a writable section in a read only
3920 segment, unless they are on the same page in memory
3921 anyhow. We already know that the last section does not
3922 bring us past the current section on the page, so the
3923 only case in which the new section is not on the same
3924 page as the previous section is when the previous section
3925 ends precisely on a page boundary. */
3926 new_segment = TRUE;
3928 else
3930 /* Otherwise, we can use the same segment. */
3931 new_segment = FALSE;
3934 /* Allow interested parties a chance to override our decision. */
3935 if (last_hdr != NULL
3936 && info != NULL
3937 && info->callbacks->override_segment_assignment != NULL)
3938 new_segment
3939 = info->callbacks->override_segment_assignment (info, abfd, hdr,
3940 last_hdr,
3941 new_segment);
3943 if (! new_segment)
3945 if ((hdr->flags & SEC_READONLY) == 0)
3946 writable = TRUE;
3947 last_hdr = hdr;
3948 /* .tbss sections effectively have zero size. */
3949 if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD))
3950 != SEC_THREAD_LOCAL)
3951 last_size = hdr->size;
3952 else
3953 last_size = 0;
3954 continue;
3957 /* We need a new program segment. We must create a new program
3958 header holding all the sections from phdr_index until hdr. */
3960 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
3961 if (m == NULL)
3962 goto error_return;
3964 *pm = m;
3965 pm = &m->next;
3967 if ((hdr->flags & SEC_READONLY) == 0)
3968 writable = TRUE;
3969 else
3970 writable = FALSE;
3972 last_hdr = hdr;
3973 /* .tbss sections effectively have zero size. */
3974 if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL)
3975 last_size = hdr->size;
3976 else
3977 last_size = 0;
3978 phdr_index = i;
3979 phdr_in_segment = FALSE;
3982 /* Create a final PT_LOAD program segment. */
3983 if (last_hdr != NULL)
3985 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
3986 if (m == NULL)
3987 goto error_return;
3989 *pm = m;
3990 pm = &m->next;
3993 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
3994 if (dynsec != NULL)
3996 m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
3997 if (m == NULL)
3998 goto error_return;
3999 *pm = m;
4000 pm = &m->next;
4003 /* For each batch of consecutive loadable .note sections,
4004 add a PT_NOTE segment. We don't use bfd_get_section_by_name,
4005 because if we link together nonloadable .note sections and
4006 loadable .note sections, we will generate two .note sections
4007 in the output file. FIXME: Using names for section types is
4008 bogus anyhow. */
4009 for (s = abfd->sections; s != NULL; s = s->next)
4011 if ((s->flags & SEC_LOAD) != 0
4012 && CONST_STRNEQ (s->name, ".note"))
4014 asection *s2;
4016 count = 1;
4017 amt = sizeof (struct elf_segment_map);
4018 if (s->alignment_power == 2)
4019 for (s2 = s; s2->next != NULL; s2 = s2->next)
4021 if (s2->next->alignment_power == 2
4022 && (s2->next->flags & SEC_LOAD) != 0
4023 && CONST_STRNEQ (s2->next->name, ".note")
4024 && align_power (s2->lma + s2->size, 2)
4025 == s2->next->lma)
4026 count++;
4027 else
4028 break;
4030 amt += (count - 1) * sizeof (asection *);
4031 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4032 if (m == NULL)
4033 goto error_return;
4034 m->next = NULL;
4035 m->p_type = PT_NOTE;
4036 m->count = count;
4037 while (count > 1)
4039 m->sections[m->count - count--] = s;
4040 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
4041 s = s->next;
4043 m->sections[m->count - 1] = s;
4044 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
4045 *pm = m;
4046 pm = &m->next;
4048 if (s->flags & SEC_THREAD_LOCAL)
4050 if (! tls_count)
4051 first_tls = s;
4052 tls_count++;
4056 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
4057 if (tls_count > 0)
4059 amt = sizeof (struct elf_segment_map);
4060 amt += (tls_count - 1) * sizeof (asection *);
4061 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4062 if (m == NULL)
4063 goto error_return;
4064 m->next = NULL;
4065 m->p_type = PT_TLS;
4066 m->count = tls_count;
4067 /* Mandated PF_R. */
4068 m->p_flags = PF_R;
4069 m->p_flags_valid = 1;
4070 for (i = 0; i < (unsigned int) tls_count; ++i)
4072 BFD_ASSERT (first_tls->flags & SEC_THREAD_LOCAL);
4073 m->sections[i] = first_tls;
4074 first_tls = first_tls->next;
4077 *pm = m;
4078 pm = &m->next;
4081 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
4082 segment. */
4083 eh_frame_hdr = elf_tdata (abfd)->eh_frame_hdr;
4084 if (eh_frame_hdr != NULL
4085 && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
4087 amt = sizeof (struct elf_segment_map);
4088 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4089 if (m == NULL)
4090 goto error_return;
4091 m->next = NULL;
4092 m->p_type = PT_GNU_EH_FRAME;
4093 m->count = 1;
4094 m->sections[0] = eh_frame_hdr->output_section;
4096 *pm = m;
4097 pm = &m->next;
4100 if (elf_tdata (abfd)->stack_flags)
4102 amt = sizeof (struct elf_segment_map);
4103 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4104 if (m == NULL)
4105 goto error_return;
4106 m->next = NULL;
4107 m->p_type = PT_GNU_STACK;
4108 m->p_flags = elf_tdata (abfd)->stack_flags;
4109 m->p_flags_valid = 1;
4111 *pm = m;
4112 pm = &m->next;
4115 if (info != NULL && info->relro)
4117 for (m = mfirst; m != NULL; m = m->next)
4119 if (m->p_type == PT_LOAD)
4121 asection *last = m->sections[m->count - 1];
4122 bfd_vma vaddr = m->sections[0]->vma;
4123 bfd_vma filesz = last->vma - vaddr + last->size;
4125 if (vaddr < info->relro_end
4126 && vaddr >= info->relro_start
4127 && (vaddr + filesz) >= info->relro_end)
4128 break;
4132 /* Make a PT_GNU_RELRO segment only when it isn't empty. */
4133 if (m != NULL)
4135 amt = sizeof (struct elf_segment_map);
4136 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4137 if (m == NULL)
4138 goto error_return;
4139 m->next = NULL;
4140 m->p_type = PT_GNU_RELRO;
4141 m->p_flags = PF_R;
4142 m->p_flags_valid = 1;
4144 *pm = m;
4145 pm = &m->next;
4149 free (sections);
4150 elf_tdata (abfd)->segment_map = mfirst;
4153 if (!elf_modify_segment_map (abfd, info, no_user_phdrs))
4154 return FALSE;
4156 for (count = 0, m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
4157 ++count;
4158 elf_tdata (abfd)->program_header_size = count * bed->s->sizeof_phdr;
4160 return TRUE;
4162 error_return:
4163 if (sections != NULL)
4164 free (sections);
4165 return FALSE;
4168 /* Sort sections by address. */
4170 static int
4171 elf_sort_sections (const void *arg1, const void *arg2)
4173 const asection *sec1 = *(const asection **) arg1;
4174 const asection *sec2 = *(const asection **) arg2;
4175 bfd_size_type size1, size2;
4177 /* Sort by LMA first, since this is the address used to
4178 place the section into a segment. */
4179 if (sec1->lma < sec2->lma)
4180 return -1;
4181 else if (sec1->lma > sec2->lma)
4182 return 1;
4184 /* Then sort by VMA. Normally the LMA and the VMA will be
4185 the same, and this will do nothing. */
4186 if (sec1->vma < sec2->vma)
4187 return -1;
4188 else if (sec1->vma > sec2->vma)
4189 return 1;
4191 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
4193 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
4195 if (TOEND (sec1))
4197 if (TOEND (sec2))
4199 /* If the indicies are the same, do not return 0
4200 here, but continue to try the next comparison. */
4201 if (sec1->target_index - sec2->target_index != 0)
4202 return sec1->target_index - sec2->target_index;
4204 else
4205 return 1;
4207 else if (TOEND (sec2))
4208 return -1;
4210 #undef TOEND
4212 /* Sort by size, to put zero sized sections
4213 before others at the same address. */
4215 size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
4216 size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
4218 if (size1 < size2)
4219 return -1;
4220 if (size1 > size2)
4221 return 1;
4223 return sec1->target_index - sec2->target_index;
4226 /* Ian Lance Taylor writes:
4228 We shouldn't be using % with a negative signed number. That's just
4229 not good. We have to make sure either that the number is not
4230 negative, or that the number has an unsigned type. When the types
4231 are all the same size they wind up as unsigned. When file_ptr is a
4232 larger signed type, the arithmetic winds up as signed long long,
4233 which is wrong.
4235 What we're trying to say here is something like ``increase OFF by
4236 the least amount that will cause it to be equal to the VMA modulo
4237 the page size.'' */
4238 /* In other words, something like:
4240 vma_offset = m->sections[0]->vma % bed->maxpagesize;
4241 off_offset = off % bed->maxpagesize;
4242 if (vma_offset < off_offset)
4243 adjustment = vma_offset + bed->maxpagesize - off_offset;
4244 else
4245 adjustment = vma_offset - off_offset;
4247 which can can be collapsed into the expression below. */
4249 static file_ptr
4250 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
4252 return ((vma - off) % maxpagesize);
4255 static void
4256 print_segment_map (const struct elf_segment_map *m)
4258 unsigned int j;
4259 const char *pt = get_segment_type (m->p_type);
4260 char buf[32];
4262 if (pt == NULL)
4264 if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
4265 sprintf (buf, "LOPROC+%7.7x",
4266 (unsigned int) (m->p_type - PT_LOPROC));
4267 else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
4268 sprintf (buf, "LOOS+%7.7x",
4269 (unsigned int) (m->p_type - PT_LOOS));
4270 else
4271 snprintf (buf, sizeof (buf), "%8.8x",
4272 (unsigned int) m->p_type);
4273 pt = buf;
4275 fprintf (stderr, "%s:", pt);
4276 for (j = 0; j < m->count; j++)
4277 fprintf (stderr, " %s", m->sections [j]->name);
4278 putc ('\n',stderr);
4281 static bfd_boolean
4282 write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
4284 void *buf;
4285 bfd_boolean ret;
4287 if (bfd_seek (abfd, pos, SEEK_SET) != 0)
4288 return FALSE;
4289 buf = bfd_zmalloc (len);
4290 if (buf == NULL)
4291 return FALSE;
4292 ret = bfd_bwrite (buf, len, abfd) == len;
4293 free (buf);
4294 return ret;
4297 /* Assign file positions to the sections based on the mapping from
4298 sections to segments. This function also sets up some fields in
4299 the file header. */
4301 static bfd_boolean
4302 assign_file_positions_for_load_sections (bfd *abfd,
4303 struct bfd_link_info *link_info)
4305 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4306 struct elf_segment_map *m;
4307 Elf_Internal_Phdr *phdrs;
4308 Elf_Internal_Phdr *p;
4309 file_ptr off;
4310 bfd_size_type maxpagesize;
4311 unsigned int alloc;
4312 unsigned int i, j;
4313 bfd_vma header_pad = 0;
4315 if (link_info == NULL
4316 && !_bfd_elf_map_sections_to_segments (abfd, link_info))
4317 return FALSE;
4319 alloc = 0;
4320 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
4322 ++alloc;
4323 if (m->header_size)
4324 header_pad = m->header_size;
4327 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
4328 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
4329 elf_elfheader (abfd)->e_phnum = alloc;
4331 if (elf_tdata (abfd)->program_header_size == (bfd_size_type) -1)
4332 elf_tdata (abfd)->program_header_size = alloc * bed->s->sizeof_phdr;
4333 else
4334 BFD_ASSERT (elf_tdata (abfd)->program_header_size
4335 >= alloc * bed->s->sizeof_phdr);
4337 if (alloc == 0)
4339 elf_tdata (abfd)->next_file_pos = bed->s->sizeof_ehdr;
4340 return TRUE;
4343 /* We're writing the size in elf_tdata (abfd)->program_header_size,
4344 see assign_file_positions_except_relocs, so make sure we have
4345 that amount allocated, with trailing space cleared.
4346 The variable alloc contains the computed need, while elf_tdata
4347 (abfd)->program_header_size contains the size used for the
4348 layout.
4349 See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
4350 where the layout is forced to according to a larger size in the
4351 last iterations for the testcase ld-elf/header. */
4352 BFD_ASSERT (elf_tdata (abfd)->program_header_size % bed->s->sizeof_phdr
4353 == 0);
4354 phdrs = (Elf_Internal_Phdr *)
4355 bfd_zalloc2 (abfd,
4356 (elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr),
4357 sizeof (Elf_Internal_Phdr));
4358 elf_tdata (abfd)->phdr = phdrs;
4359 if (phdrs == NULL)
4360 return FALSE;
4362 maxpagesize = 1;
4363 if ((abfd->flags & D_PAGED) != 0)
4364 maxpagesize = bed->maxpagesize;
4366 off = bed->s->sizeof_ehdr;
4367 off += alloc * bed->s->sizeof_phdr;
4368 if (header_pad < (bfd_vma) off)
4369 header_pad = 0;
4370 else
4371 header_pad -= off;
4372 off += header_pad;
4374 for (m = elf_tdata (abfd)->segment_map, p = phdrs, j = 0;
4375 m != NULL;
4376 m = m->next, p++, j++)
4378 asection **secpp;
4379 bfd_vma off_adjust;
4380 bfd_boolean no_contents;
4382 /* If elf_segment_map is not from map_sections_to_segments, the
4383 sections may not be correctly ordered. NOTE: sorting should
4384 not be done to the PT_NOTE section of a corefile, which may
4385 contain several pseudo-sections artificially created by bfd.
4386 Sorting these pseudo-sections breaks things badly. */
4387 if (m->count > 1
4388 && !(elf_elfheader (abfd)->e_type == ET_CORE
4389 && m->p_type == PT_NOTE))
4390 qsort (m->sections, (size_t) m->count, sizeof (asection *),
4391 elf_sort_sections);
4393 /* An ELF segment (described by Elf_Internal_Phdr) may contain a
4394 number of sections with contents contributing to both p_filesz
4395 and p_memsz, followed by a number of sections with no contents
4396 that just contribute to p_memsz. In this loop, OFF tracks next
4397 available file offset for PT_LOAD and PT_NOTE segments. */
4398 p->p_type = m->p_type;
4399 p->p_flags = m->p_flags;
4401 if (m->count == 0)
4402 p->p_vaddr = 0;
4403 else
4404 p->p_vaddr = m->sections[0]->vma - m->p_vaddr_offset;
4406 if (m->p_paddr_valid)
4407 p->p_paddr = m->p_paddr;
4408 else if (m->count == 0)
4409 p->p_paddr = 0;
4410 else
4411 p->p_paddr = m->sections[0]->lma - m->p_vaddr_offset;
4413 if (p->p_type == PT_LOAD
4414 && (abfd->flags & D_PAGED) != 0)
4416 /* p_align in demand paged PT_LOAD segments effectively stores
4417 the maximum page size. When copying an executable with
4418 objcopy, we set m->p_align from the input file. Use this
4419 value for maxpagesize rather than bed->maxpagesize, which
4420 may be different. Note that we use maxpagesize for PT_TLS
4421 segment alignment later in this function, so we are relying
4422 on at least one PT_LOAD segment appearing before a PT_TLS
4423 segment. */
4424 if (m->p_align_valid)
4425 maxpagesize = m->p_align;
4427 p->p_align = maxpagesize;
4429 else if (m->p_align_valid)
4430 p->p_align = m->p_align;
4431 else if (m->count == 0)
4432 p->p_align = 1 << bed->s->log_file_align;
4433 else
4434 p->p_align = 0;
4436 no_contents = FALSE;
4437 off_adjust = 0;
4438 if (p->p_type == PT_LOAD
4439 && m->count > 0)
4441 bfd_size_type align;
4442 unsigned int align_power = 0;
4444 if (m->p_align_valid)
4445 align = p->p_align;
4446 else
4448 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
4450 unsigned int secalign;
4452 secalign = bfd_get_section_alignment (abfd, *secpp);
4453 if (secalign > align_power)
4454 align_power = secalign;
4456 align = (bfd_size_type) 1 << align_power;
4457 if (align < maxpagesize)
4458 align = maxpagesize;
4461 for (i = 0; i < m->count; i++)
4462 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
4463 /* If we aren't making room for this section, then
4464 it must be SHT_NOBITS regardless of what we've
4465 set via struct bfd_elf_special_section. */
4466 elf_section_type (m->sections[i]) = SHT_NOBITS;
4468 /* Find out whether this segment contains any loadable
4469 sections. */
4470 no_contents = TRUE;
4471 for (i = 0; i < m->count; i++)
4472 if (elf_section_type (m->sections[i]) != SHT_NOBITS)
4474 no_contents = FALSE;
4475 break;
4478 off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align);
4479 off += off_adjust;
4480 if (no_contents)
4482 /* We shouldn't need to align the segment on disk since
4483 the segment doesn't need file space, but the gABI
4484 arguably requires the alignment and glibc ld.so
4485 checks it. So to comply with the alignment
4486 requirement but not waste file space, we adjust
4487 p_offset for just this segment. (OFF_ADJUST is
4488 subtracted from OFF later.) This may put p_offset
4489 past the end of file, but that shouldn't matter. */
4491 else
4492 off_adjust = 0;
4494 /* Make sure the .dynamic section is the first section in the
4495 PT_DYNAMIC segment. */
4496 else if (p->p_type == PT_DYNAMIC
4497 && m->count > 1
4498 && strcmp (m->sections[0]->name, ".dynamic") != 0)
4500 _bfd_error_handler
4501 (_("%B: The first section in the PT_DYNAMIC segment is not the .dynamic section"),
4502 abfd);
4503 bfd_set_error (bfd_error_bad_value);
4504 return FALSE;
4506 /* Set the note section type to SHT_NOTE. */
4507 else if (p->p_type == PT_NOTE)
4508 for (i = 0; i < m->count; i++)
4509 elf_section_type (m->sections[i]) = SHT_NOTE;
4511 p->p_offset = 0;
4512 p->p_filesz = 0;
4513 p->p_memsz = 0;
4515 if (m->includes_filehdr)
4517 if (!m->p_flags_valid)
4518 p->p_flags |= PF_R;
4519 p->p_filesz = bed->s->sizeof_ehdr;
4520 p->p_memsz = bed->s->sizeof_ehdr;
4521 if (m->count > 0)
4523 BFD_ASSERT (p->p_type == PT_LOAD);
4525 if (p->p_vaddr < (bfd_vma) off)
4527 (*_bfd_error_handler)
4528 (_("%B: Not enough room for program headers, try linking with -N"),
4529 abfd);
4530 bfd_set_error (bfd_error_bad_value);
4531 return FALSE;
4534 p->p_vaddr -= off;
4535 if (!m->p_paddr_valid)
4536 p->p_paddr -= off;
4540 if (m->includes_phdrs)
4542 if (!m->p_flags_valid)
4543 p->p_flags |= PF_R;
4545 if (!m->includes_filehdr)
4547 p->p_offset = bed->s->sizeof_ehdr;
4549 if (m->count > 0)
4551 BFD_ASSERT (p->p_type == PT_LOAD);
4552 p->p_vaddr -= off - p->p_offset;
4553 if (!m->p_paddr_valid)
4554 p->p_paddr -= off - p->p_offset;
4558 p->p_filesz += alloc * bed->s->sizeof_phdr;
4559 p->p_memsz += alloc * bed->s->sizeof_phdr;
4560 if (m->count)
4562 p->p_filesz += header_pad;
4563 p->p_memsz += header_pad;
4567 if (p->p_type == PT_LOAD
4568 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
4570 if (!m->includes_filehdr && !m->includes_phdrs)
4571 p->p_offset = off;
4572 else
4574 file_ptr adjust;
4576 adjust = off - (p->p_offset + p->p_filesz);
4577 if (!no_contents)
4578 p->p_filesz += adjust;
4579 p->p_memsz += adjust;
4583 /* Set up p_filesz, p_memsz, p_align and p_flags from the section
4584 maps. Set filepos for sections in PT_LOAD segments, and in
4585 core files, for sections in PT_NOTE segments.
4586 assign_file_positions_for_non_load_sections will set filepos
4587 for other sections and update p_filesz for other segments. */
4588 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
4590 asection *sec;
4591 bfd_size_type align;
4592 Elf_Internal_Shdr *this_hdr;
4594 sec = *secpp;
4595 this_hdr = &elf_section_data (sec)->this_hdr;
4596 align = (bfd_size_type) 1 << bfd_get_section_alignment (abfd, sec);
4598 if ((p->p_type == PT_LOAD
4599 || p->p_type == PT_TLS)
4600 && (this_hdr->sh_type != SHT_NOBITS
4601 || ((this_hdr->sh_flags & SHF_ALLOC) != 0
4602 && ((this_hdr->sh_flags & SHF_TLS) == 0
4603 || p->p_type == PT_TLS))))
4605 bfd_vma p_start = p->p_paddr;
4606 bfd_vma p_end = p_start + p->p_memsz;
4607 bfd_vma s_start = sec->lma;
4608 bfd_vma adjust = s_start - p_end;
4610 if (adjust != 0
4611 && (s_start < p_end
4612 || p_end < p_start))
4614 (*_bfd_error_handler)
4615 (_("%B: section %A lma %#lx adjusted to %#lx"), abfd, sec,
4616 (unsigned long) s_start, (unsigned long) p_end);
4617 adjust = 0;
4618 sec->lma = p_end;
4620 p->p_memsz += adjust;
4622 if (this_hdr->sh_type != SHT_NOBITS)
4624 if (p->p_filesz + adjust < p->p_memsz)
4626 /* We have a PROGBITS section following NOBITS ones.
4627 Allocate file space for the NOBITS section(s) and
4628 zero it. */
4629 adjust = p->p_memsz - p->p_filesz;
4630 if (!write_zeros (abfd, off, adjust))
4631 return FALSE;
4633 off += adjust;
4634 p->p_filesz += adjust;
4638 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
4640 /* The section at i == 0 is the one that actually contains
4641 everything. */
4642 if (i == 0)
4644 this_hdr->sh_offset = sec->filepos = off;
4645 off += this_hdr->sh_size;
4646 p->p_filesz = this_hdr->sh_size;
4647 p->p_memsz = 0;
4648 p->p_align = 1;
4650 else
4652 /* The rest are fake sections that shouldn't be written. */
4653 sec->filepos = 0;
4654 sec->size = 0;
4655 sec->flags = 0;
4656 continue;
4659 else
4661 if (p->p_type == PT_LOAD)
4663 this_hdr->sh_offset = sec->filepos = off;
4664 if (this_hdr->sh_type != SHT_NOBITS)
4665 off += this_hdr->sh_size;
4668 if (this_hdr->sh_type != SHT_NOBITS)
4670 p->p_filesz += this_hdr->sh_size;
4671 /* A load section without SHF_ALLOC is something like
4672 a note section in a PT_NOTE segment. These take
4673 file space but are not loaded into memory. */
4674 if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
4675 p->p_memsz += this_hdr->sh_size;
4677 else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
4679 if (p->p_type == PT_TLS)
4680 p->p_memsz += this_hdr->sh_size;
4682 /* .tbss is special. It doesn't contribute to p_memsz of
4683 normal segments. */
4684 else if ((this_hdr->sh_flags & SHF_TLS) == 0)
4685 p->p_memsz += this_hdr->sh_size;
4688 if (align > p->p_align
4689 && !m->p_align_valid
4690 && (p->p_type != PT_LOAD
4691 || (abfd->flags & D_PAGED) == 0))
4692 p->p_align = align;
4695 if (!m->p_flags_valid)
4697 p->p_flags |= PF_R;
4698 if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
4699 p->p_flags |= PF_X;
4700 if ((this_hdr->sh_flags & SHF_WRITE) != 0)
4701 p->p_flags |= PF_W;
4704 off -= off_adjust;
4706 /* Check that all sections are in a PT_LOAD segment.
4707 Don't check funky gdb generated core files. */
4708 if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
4710 bfd_boolean check_vma = TRUE;
4712 for (i = 1; i < m->count; i++)
4713 if (m->sections[i]->vma == m->sections[i - 1]->vma
4714 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
4715 ->this_hdr), p) != 0
4716 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
4717 ->this_hdr), p) != 0)
4719 /* Looks like we have overlays packed into the segment. */
4720 check_vma = FALSE;
4721 break;
4724 for (i = 0; i < m->count; i++)
4726 Elf_Internal_Shdr *this_hdr;
4727 asection *sec;
4729 sec = m->sections[i];
4730 this_hdr = &(elf_section_data(sec)->this_hdr);
4731 if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0))
4733 (*_bfd_error_handler)
4734 (_("%B: section `%A' can't be allocated in segment %d"),
4735 abfd, sec, j);
4736 print_segment_map (m);
4742 elf_tdata (abfd)->next_file_pos = off;
4743 return TRUE;
4746 /* Assign file positions for the other sections. */
4748 static bfd_boolean
4749 assign_file_positions_for_non_load_sections (bfd *abfd,
4750 struct bfd_link_info *link_info)
4752 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4753 Elf_Internal_Shdr **i_shdrpp;
4754 Elf_Internal_Shdr **hdrpp;
4755 Elf_Internal_Phdr *phdrs;
4756 Elf_Internal_Phdr *p;
4757 struct elf_segment_map *m;
4758 bfd_vma filehdr_vaddr, filehdr_paddr;
4759 bfd_vma phdrs_vaddr, phdrs_paddr;
4760 file_ptr off;
4761 unsigned int num_sec;
4762 unsigned int i;
4763 unsigned int count;
4765 i_shdrpp = elf_elfsections (abfd);
4766 num_sec = elf_numsections (abfd);
4767 off = elf_tdata (abfd)->next_file_pos;
4768 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
4770 struct elf_obj_tdata *tdata = elf_tdata (abfd);
4771 Elf_Internal_Shdr *hdr;
4773 hdr = *hdrpp;
4774 if (hdr->bfd_section != NULL
4775 && (hdr->bfd_section->filepos != 0
4776 || (hdr->sh_type == SHT_NOBITS
4777 && hdr->contents == NULL)))
4778 BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
4779 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
4781 (*_bfd_error_handler)
4782 (_("%B: warning: allocated section `%s' not in segment"),
4783 abfd,
4784 (hdr->bfd_section == NULL
4785 ? "*unknown*"
4786 : hdr->bfd_section->name));
4787 /* We don't need to page align empty sections. */
4788 if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
4789 off += vma_page_aligned_bias (hdr->sh_addr, off,
4790 bed->maxpagesize);
4791 else
4792 off += vma_page_aligned_bias (hdr->sh_addr, off,
4793 hdr->sh_addralign);
4794 off = _bfd_elf_assign_file_position_for_section (hdr, off,
4795 FALSE);
4797 else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
4798 && hdr->bfd_section == NULL)
4799 || hdr == i_shdrpp[tdata->symtab_section]
4800 || hdr == i_shdrpp[tdata->symtab_shndx_section]
4801 || hdr == i_shdrpp[tdata->strtab_section])
4802 hdr->sh_offset = -1;
4803 else
4804 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4807 /* Now that we have set the section file positions, we can set up
4808 the file positions for the non PT_LOAD segments. */
4809 count = 0;
4810 filehdr_vaddr = 0;
4811 filehdr_paddr = 0;
4812 phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
4813 phdrs_paddr = 0;
4814 phdrs = elf_tdata (abfd)->phdr;
4815 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
4816 m != NULL;
4817 m = m->next, p++)
4819 ++count;
4820 if (p->p_type != PT_LOAD)
4821 continue;
4823 if (m->includes_filehdr)
4825 filehdr_vaddr = p->p_vaddr;
4826 filehdr_paddr = p->p_paddr;
4828 if (m->includes_phdrs)
4830 phdrs_vaddr = p->p_vaddr;
4831 phdrs_paddr = p->p_paddr;
4832 if (m->includes_filehdr)
4834 phdrs_vaddr += bed->s->sizeof_ehdr;
4835 phdrs_paddr += bed->s->sizeof_ehdr;
4840 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
4841 m != NULL;
4842 m = m->next, p++)
4844 if (p->p_type == PT_GNU_RELRO)
4846 const Elf_Internal_Phdr *lp;
4848 BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs);
4850 if (link_info != NULL)
4852 /* During linking the range of the RELRO segment is passed
4853 in link_info. */
4854 for (lp = phdrs; lp < phdrs + count; ++lp)
4856 if (lp->p_type == PT_LOAD
4857 && lp->p_vaddr >= link_info->relro_start
4858 && lp->p_vaddr < link_info->relro_end
4859 && lp->p_vaddr + lp->p_filesz >= link_info->relro_end)
4860 break;
4863 else
4865 /* Otherwise we are copying an executable or shared
4866 library, but we need to use the same linker logic. */
4867 for (lp = phdrs; lp < phdrs + count; ++lp)
4869 if (lp->p_type == PT_LOAD
4870 && lp->p_paddr == p->p_paddr)
4871 break;
4875 if (lp < phdrs + count)
4877 p->p_vaddr = lp->p_vaddr;
4878 p->p_paddr = lp->p_paddr;
4879 p->p_offset = lp->p_offset;
4880 if (link_info != NULL)
4881 p->p_filesz = link_info->relro_end - lp->p_vaddr;
4882 else if (m->p_size_valid)
4883 p->p_filesz = m->p_size;
4884 else
4885 abort ();
4886 p->p_memsz = p->p_filesz;
4887 p->p_align = 1;
4888 p->p_flags = (lp->p_flags & ~PF_W);
4890 else
4892 memset (p, 0, sizeof *p);
4893 p->p_type = PT_NULL;
4896 else if (m->count != 0)
4898 if (p->p_type != PT_LOAD
4899 && (p->p_type != PT_NOTE
4900 || bfd_get_format (abfd) != bfd_core))
4902 Elf_Internal_Shdr *hdr;
4903 asection *sect;
4905 BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs);
4907 sect = m->sections[m->count - 1];
4908 hdr = &elf_section_data (sect)->this_hdr;
4909 p->p_filesz = sect->filepos - m->sections[0]->filepos;
4910 if (hdr->sh_type != SHT_NOBITS)
4911 p->p_filesz += hdr->sh_size;
4912 p->p_offset = m->sections[0]->filepos;
4915 else if (m->includes_filehdr)
4917 p->p_vaddr = filehdr_vaddr;
4918 if (! m->p_paddr_valid)
4919 p->p_paddr = filehdr_paddr;
4921 else if (m->includes_phdrs)
4923 p->p_vaddr = phdrs_vaddr;
4924 if (! m->p_paddr_valid)
4925 p->p_paddr = phdrs_paddr;
4929 elf_tdata (abfd)->next_file_pos = off;
4931 return TRUE;
4934 /* Work out the file positions of all the sections. This is called by
4935 _bfd_elf_compute_section_file_positions. All the section sizes and
4936 VMAs must be known before this is called.
4938 Reloc sections come in two flavours: Those processed specially as
4939 "side-channel" data attached to a section to which they apply, and
4940 those that bfd doesn't process as relocations. The latter sort are
4941 stored in a normal bfd section by bfd_section_from_shdr. We don't
4942 consider the former sort here, unless they form part of the loadable
4943 image. Reloc sections not assigned here will be handled later by
4944 assign_file_positions_for_relocs.
4946 We also don't set the positions of the .symtab and .strtab here. */
4948 static bfd_boolean
4949 assign_file_positions_except_relocs (bfd *abfd,
4950 struct bfd_link_info *link_info)
4952 struct elf_obj_tdata *tdata = elf_tdata (abfd);
4953 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
4954 file_ptr off;
4955 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4957 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
4958 && bfd_get_format (abfd) != bfd_core)
4960 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
4961 unsigned int num_sec = elf_numsections (abfd);
4962 Elf_Internal_Shdr **hdrpp;
4963 unsigned int i;
4965 /* Start after the ELF header. */
4966 off = i_ehdrp->e_ehsize;
4968 /* We are not creating an executable, which means that we are
4969 not creating a program header, and that the actual order of
4970 the sections in the file is unimportant. */
4971 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
4973 Elf_Internal_Shdr *hdr;
4975 hdr = *hdrpp;
4976 if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
4977 && hdr->bfd_section == NULL)
4978 || i == tdata->symtab_section
4979 || i == tdata->symtab_shndx_section
4980 || i == tdata->strtab_section)
4982 hdr->sh_offset = -1;
4984 else
4985 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4988 else
4990 unsigned int alloc;
4992 /* Assign file positions for the loaded sections based on the
4993 assignment of sections to segments. */
4994 if (!assign_file_positions_for_load_sections (abfd, link_info))
4995 return FALSE;
4997 /* And for non-load sections. */
4998 if (!assign_file_positions_for_non_load_sections (abfd, link_info))
4999 return FALSE;
5001 if (bed->elf_backend_modify_program_headers != NULL)
5003 if (!(*bed->elf_backend_modify_program_headers) (abfd, link_info))
5004 return FALSE;
5007 /* Write out the program headers. */
5008 alloc = tdata->program_header_size / bed->s->sizeof_phdr;
5009 if (bfd_seek (abfd, (bfd_signed_vma) bed->s->sizeof_ehdr, SEEK_SET) != 0
5010 || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
5011 return FALSE;
5013 off = tdata->next_file_pos;
5016 /* Place the section headers. */
5017 off = align_file_position (off, 1 << bed->s->log_file_align);
5018 i_ehdrp->e_shoff = off;
5019 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
5021 tdata->next_file_pos = off;
5023 return TRUE;
5026 static bfd_boolean
5027 prep_headers (bfd *abfd)
5029 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form. */
5030 struct elf_strtab_hash *shstrtab;
5031 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5033 i_ehdrp = elf_elfheader (abfd);
5035 shstrtab = _bfd_elf_strtab_init ();
5036 if (shstrtab == NULL)
5037 return FALSE;
5039 elf_shstrtab (abfd) = shstrtab;
5041 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
5042 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
5043 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
5044 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
5046 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
5047 i_ehdrp->e_ident[EI_DATA] =
5048 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
5049 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
5051 if ((abfd->flags & DYNAMIC) != 0)
5052 i_ehdrp->e_type = ET_DYN;
5053 else if ((abfd->flags & EXEC_P) != 0)
5054 i_ehdrp->e_type = ET_EXEC;
5055 else if (bfd_get_format (abfd) == bfd_core)
5056 i_ehdrp->e_type = ET_CORE;
5057 else
5058 i_ehdrp->e_type = ET_REL;
5060 switch (bfd_get_arch (abfd))
5062 case bfd_arch_unknown:
5063 i_ehdrp->e_machine = EM_NONE;
5064 break;
5066 /* There used to be a long list of cases here, each one setting
5067 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
5068 in the corresponding bfd definition. To avoid duplication,
5069 the switch was removed. Machines that need special handling
5070 can generally do it in elf_backend_final_write_processing(),
5071 unless they need the information earlier than the final write.
5072 Such need can generally be supplied by replacing the tests for
5073 e_machine with the conditions used to determine it. */
5074 default:
5075 i_ehdrp->e_machine = bed->elf_machine_code;
5078 i_ehdrp->e_version = bed->s->ev_current;
5079 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
5081 /* No program header, for now. */
5082 i_ehdrp->e_phoff = 0;
5083 i_ehdrp->e_phentsize = 0;
5084 i_ehdrp->e_phnum = 0;
5086 /* Each bfd section is section header entry. */
5087 i_ehdrp->e_entry = bfd_get_start_address (abfd);
5088 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
5090 /* If we're building an executable, we'll need a program header table. */
5091 if (abfd->flags & EXEC_P)
5092 /* It all happens later. */
5094 else
5096 i_ehdrp->e_phentsize = 0;
5097 i_ehdrp->e_phoff = 0;
5100 elf_tdata (abfd)->symtab_hdr.sh_name =
5101 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE);
5102 elf_tdata (abfd)->strtab_hdr.sh_name =
5103 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", FALSE);
5104 elf_tdata (abfd)->shstrtab_hdr.sh_name =
5105 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", FALSE);
5106 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
5107 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
5108 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
5109 return FALSE;
5111 return TRUE;
5114 /* Assign file positions for all the reloc sections which are not part
5115 of the loadable file image. */
5117 void
5118 _bfd_elf_assign_file_positions_for_relocs (bfd *abfd)
5120 file_ptr off;
5121 unsigned int i, num_sec;
5122 Elf_Internal_Shdr **shdrpp;
5124 off = elf_tdata (abfd)->next_file_pos;
5126 num_sec = elf_numsections (abfd);
5127 for (i = 1, shdrpp = elf_elfsections (abfd) + 1; i < num_sec; i++, shdrpp++)
5129 Elf_Internal_Shdr *shdrp;
5131 shdrp = *shdrpp;
5132 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
5133 && shdrp->sh_offset == -1)
5134 off = _bfd_elf_assign_file_position_for_section (shdrp, off, TRUE);
5137 elf_tdata (abfd)->next_file_pos = off;
5140 bfd_boolean
5141 _bfd_elf_write_object_contents (bfd *abfd)
5143 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5144 Elf_Internal_Shdr **i_shdrp;
5145 bfd_boolean failed;
5146 unsigned int count, num_sec;
5148 if (! abfd->output_has_begun
5149 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
5150 return FALSE;
5152 i_shdrp = elf_elfsections (abfd);
5154 failed = FALSE;
5155 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
5156 if (failed)
5157 return FALSE;
5159 _bfd_elf_assign_file_positions_for_relocs (abfd);
5161 /* After writing the headers, we need to write the sections too... */
5162 num_sec = elf_numsections (abfd);
5163 for (count = 1; count < num_sec; count++)
5165 if (bed->elf_backend_section_processing)
5166 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
5167 if (i_shdrp[count]->contents)
5169 bfd_size_type amt = i_shdrp[count]->sh_size;
5171 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
5172 || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
5173 return FALSE;
5177 /* Write out the section header names. */
5178 if (elf_shstrtab (abfd) != NULL
5179 && (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
5180 || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
5181 return FALSE;
5183 if (bed->elf_backend_final_write_processing)
5184 (*bed->elf_backend_final_write_processing) (abfd,
5185 elf_tdata (abfd)->linker);
5187 if (!bed->s->write_shdrs_and_ehdr (abfd))
5188 return FALSE;
5190 /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
5191 if (elf_tdata (abfd)->after_write_object_contents)
5192 return (*elf_tdata (abfd)->after_write_object_contents) (abfd);
5194 return TRUE;
5197 bfd_boolean
5198 _bfd_elf_write_corefile_contents (bfd *abfd)
5200 /* Hopefully this can be done just like an object file. */
5201 return _bfd_elf_write_object_contents (abfd);
5204 /* Given a section, search the header to find them. */
5206 unsigned int
5207 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
5209 const struct elf_backend_data *bed;
5210 unsigned int sec_index;
5212 if (elf_section_data (asect) != NULL
5213 && elf_section_data (asect)->this_idx != 0)
5214 return elf_section_data (asect)->this_idx;
5216 if (bfd_is_abs_section (asect))
5217 sec_index = SHN_ABS;
5218 else if (bfd_is_com_section (asect))
5219 sec_index = SHN_COMMON;
5220 else if (bfd_is_und_section (asect))
5221 sec_index = SHN_UNDEF;
5222 else
5223 sec_index = SHN_BAD;
5225 bed = get_elf_backend_data (abfd);
5226 if (bed->elf_backend_section_from_bfd_section)
5228 int retval = sec_index;
5230 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
5231 return retval;
5234 if (sec_index == SHN_BAD)
5235 bfd_set_error (bfd_error_nonrepresentable_section);
5237 return sec_index;
5240 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
5241 on error. */
5244 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
5246 asymbol *asym_ptr = *asym_ptr_ptr;
5247 int idx;
5248 flagword flags = asym_ptr->flags;
5250 /* When gas creates relocations against local labels, it creates its
5251 own symbol for the section, but does put the symbol into the
5252 symbol chain, so udata is 0. When the linker is generating
5253 relocatable output, this section symbol may be for one of the
5254 input sections rather than the output section. */
5255 if (asym_ptr->udata.i == 0
5256 && (flags & BSF_SECTION_SYM)
5257 && asym_ptr->section)
5259 asection *sec;
5260 int indx;
5262 sec = asym_ptr->section;
5263 if (sec->owner != abfd && sec->output_section != NULL)
5264 sec = sec->output_section;
5265 if (sec->owner == abfd
5266 && (indx = sec->index) < elf_num_section_syms (abfd)
5267 && elf_section_syms (abfd)[indx] != NULL)
5268 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
5271 idx = asym_ptr->udata.i;
5273 if (idx == 0)
5275 /* This case can occur when using --strip-symbol on a symbol
5276 which is used in a relocation entry. */
5277 (*_bfd_error_handler)
5278 (_("%B: symbol `%s' required but not present"),
5279 abfd, bfd_asymbol_name (asym_ptr));
5280 bfd_set_error (bfd_error_no_symbols);
5281 return -1;
5284 #if DEBUG & 4
5286 fprintf (stderr,
5287 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx\n",
5288 (long) asym_ptr, asym_ptr->name, idx, (long) flags);
5289 fflush (stderr);
5291 #endif
5293 return idx;
5296 /* Rewrite program header information. */
5298 static bfd_boolean
5299 rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
5301 Elf_Internal_Ehdr *iehdr;
5302 struct elf_segment_map *map;
5303 struct elf_segment_map *map_first;
5304 struct elf_segment_map **pointer_to_map;
5305 Elf_Internal_Phdr *segment;
5306 asection *section;
5307 unsigned int i;
5308 unsigned int num_segments;
5309 bfd_boolean phdr_included = FALSE;
5310 bfd_boolean p_paddr_valid;
5311 bfd_vma maxpagesize;
5312 struct elf_segment_map *phdr_adjust_seg = NULL;
5313 unsigned int phdr_adjust_num = 0;
5314 const struct elf_backend_data *bed;
5316 bed = get_elf_backend_data (ibfd);
5317 iehdr = elf_elfheader (ibfd);
5319 map_first = NULL;
5320 pointer_to_map = &map_first;
5322 num_segments = elf_elfheader (ibfd)->e_phnum;
5323 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
5325 /* Returns the end address of the segment + 1. */
5326 #define SEGMENT_END(segment, start) \
5327 (start + (segment->p_memsz > segment->p_filesz \
5328 ? segment->p_memsz : segment->p_filesz))
5330 #define SECTION_SIZE(section, segment) \
5331 (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) \
5332 != SEC_THREAD_LOCAL || segment->p_type == PT_TLS) \
5333 ? section->size : 0)
5335 /* Returns TRUE if the given section is contained within
5336 the given segment. VMA addresses are compared. */
5337 #define IS_CONTAINED_BY_VMA(section, segment) \
5338 (section->vma >= segment->p_vaddr \
5339 && (section->vma + SECTION_SIZE (section, segment) \
5340 <= (SEGMENT_END (segment, segment->p_vaddr))))
5342 /* Returns TRUE if the given section is contained within
5343 the given segment. LMA addresses are compared. */
5344 #define IS_CONTAINED_BY_LMA(section, segment, base) \
5345 (section->lma >= base \
5346 && (section->lma + SECTION_SIZE (section, segment) \
5347 <= SEGMENT_END (segment, base)))
5349 /* Handle PT_NOTE segment. */
5350 #define IS_NOTE(p, s) \
5351 (p->p_type == PT_NOTE \
5352 && elf_section_type (s) == SHT_NOTE \
5353 && (bfd_vma) s->filepos >= p->p_offset \
5354 && ((bfd_vma) s->filepos + s->size \
5355 <= p->p_offset + p->p_filesz))
5357 /* Special case: corefile "NOTE" section containing regs, prpsinfo
5358 etc. */
5359 #define IS_COREFILE_NOTE(p, s) \
5360 (IS_NOTE (p, s) \
5361 && bfd_get_format (ibfd) == bfd_core \
5362 && s->vma == 0 \
5363 && s->lma == 0)
5365 /* The complicated case when p_vaddr is 0 is to handle the Solaris
5366 linker, which generates a PT_INTERP section with p_vaddr and
5367 p_memsz set to 0. */
5368 #define IS_SOLARIS_PT_INTERP(p, s) \
5369 (p->p_vaddr == 0 \
5370 && p->p_paddr == 0 \
5371 && p->p_memsz == 0 \
5372 && p->p_filesz > 0 \
5373 && (s->flags & SEC_HAS_CONTENTS) != 0 \
5374 && s->size > 0 \
5375 && (bfd_vma) s->filepos >= p->p_offset \
5376 && ((bfd_vma) s->filepos + s->size \
5377 <= p->p_offset + p->p_filesz))
5379 /* Decide if the given section should be included in the given segment.
5380 A section will be included if:
5381 1. It is within the address space of the segment -- we use the LMA
5382 if that is set for the segment and the VMA otherwise,
5383 2. It is an allocated section or a NOTE section in a PT_NOTE
5384 segment.
5385 3. There is an output section associated with it,
5386 4. The section has not already been allocated to a previous segment.
5387 5. PT_GNU_STACK segments do not include any sections.
5388 6. PT_TLS segment includes only SHF_TLS sections.
5389 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
5390 8. PT_DYNAMIC should not contain empty sections at the beginning
5391 (with the possible exception of .dynamic). */
5392 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed) \
5393 ((((segment->p_paddr \
5394 ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \
5395 : IS_CONTAINED_BY_VMA (section, segment)) \
5396 && (section->flags & SEC_ALLOC) != 0) \
5397 || IS_NOTE (segment, section)) \
5398 && segment->p_type != PT_GNU_STACK \
5399 && (segment->p_type != PT_TLS \
5400 || (section->flags & SEC_THREAD_LOCAL)) \
5401 && (segment->p_type == PT_LOAD \
5402 || segment->p_type == PT_TLS \
5403 || (section->flags & SEC_THREAD_LOCAL) == 0) \
5404 && (segment->p_type != PT_DYNAMIC \
5405 || SECTION_SIZE (section, segment) > 0 \
5406 || (segment->p_paddr \
5407 ? segment->p_paddr != section->lma \
5408 : segment->p_vaddr != section->vma) \
5409 || (strcmp (bfd_get_section_name (ibfd, section), ".dynamic") \
5410 == 0)) \
5411 && !section->segment_mark)
5413 /* If the output section of a section in the input segment is NULL,
5414 it is removed from the corresponding output segment. */
5415 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \
5416 (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed) \
5417 && section->output_section != NULL)
5419 /* Returns TRUE iff seg1 starts after the end of seg2. */
5420 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
5421 (seg1->field >= SEGMENT_END (seg2, seg2->field))
5423 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
5424 their VMA address ranges and their LMA address ranges overlap.
5425 It is possible to have overlapping VMA ranges without overlapping LMA
5426 ranges. RedBoot images for example can have both .data and .bss mapped
5427 to the same VMA range, but with the .data section mapped to a different
5428 LMA. */
5429 #define SEGMENT_OVERLAPS(seg1, seg2) \
5430 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
5431 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
5432 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
5433 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
5435 /* Initialise the segment mark field. */
5436 for (section = ibfd->sections; section != NULL; section = section->next)
5437 section->segment_mark = FALSE;
5439 /* The Solaris linker creates program headers in which all the
5440 p_paddr fields are zero. When we try to objcopy or strip such a
5441 file, we get confused. Check for this case, and if we find it
5442 don't set the p_paddr_valid fields. */
5443 p_paddr_valid = FALSE;
5444 for (i = 0, segment = elf_tdata (ibfd)->phdr;
5445 i < num_segments;
5446 i++, segment++)
5447 if (segment->p_paddr != 0)
5449 p_paddr_valid = TRUE;
5450 break;
5453 /* Scan through the segments specified in the program header
5454 of the input BFD. For this first scan we look for overlaps
5455 in the loadable segments. These can be created by weird
5456 parameters to objcopy. Also, fix some solaris weirdness. */
5457 for (i = 0, segment = elf_tdata (ibfd)->phdr;
5458 i < num_segments;
5459 i++, segment++)
5461 unsigned int j;
5462 Elf_Internal_Phdr *segment2;
5464 if (segment->p_type == PT_INTERP)
5465 for (section = ibfd->sections; section; section = section->next)
5466 if (IS_SOLARIS_PT_INTERP (segment, section))
5468 /* Mininal change so that the normal section to segment
5469 assignment code will work. */
5470 segment->p_vaddr = section->vma;
5471 break;
5474 if (segment->p_type != PT_LOAD)
5476 /* Remove PT_GNU_RELRO segment. */
5477 if (segment->p_type == PT_GNU_RELRO)
5478 segment->p_type = PT_NULL;
5479 continue;
5482 /* Determine if this segment overlaps any previous segments. */
5483 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
5485 bfd_signed_vma extra_length;
5487 if (segment2->p_type != PT_LOAD
5488 || !SEGMENT_OVERLAPS (segment, segment2))
5489 continue;
5491 /* Merge the two segments together. */
5492 if (segment2->p_vaddr < segment->p_vaddr)
5494 /* Extend SEGMENT2 to include SEGMENT and then delete
5495 SEGMENT. */
5496 extra_length = (SEGMENT_END (segment, segment->p_vaddr)
5497 - SEGMENT_END (segment2, segment2->p_vaddr));
5499 if (extra_length > 0)
5501 segment2->p_memsz += extra_length;
5502 segment2->p_filesz += extra_length;
5505 segment->p_type = PT_NULL;
5507 /* Since we have deleted P we must restart the outer loop. */
5508 i = 0;
5509 segment = elf_tdata (ibfd)->phdr;
5510 break;
5512 else
5514 /* Extend SEGMENT to include SEGMENT2 and then delete
5515 SEGMENT2. */
5516 extra_length = (SEGMENT_END (segment2, segment2->p_vaddr)
5517 - SEGMENT_END (segment, segment->p_vaddr));
5519 if (extra_length > 0)
5521 segment->p_memsz += extra_length;
5522 segment->p_filesz += extra_length;
5525 segment2->p_type = PT_NULL;
5530 /* The second scan attempts to assign sections to segments. */
5531 for (i = 0, segment = elf_tdata (ibfd)->phdr;
5532 i < num_segments;
5533 i++, segment++)
5535 unsigned int section_count;
5536 asection **sections;
5537 asection *output_section;
5538 unsigned int isec;
5539 bfd_vma matching_lma;
5540 bfd_vma suggested_lma;
5541 unsigned int j;
5542 bfd_size_type amt;
5543 asection *first_section;
5544 bfd_boolean first_matching_lma;
5545 bfd_boolean first_suggested_lma;
5547 if (segment->p_type == PT_NULL)
5548 continue;
5550 first_section = NULL;
5551 /* Compute how many sections might be placed into this segment. */
5552 for (section = ibfd->sections, section_count = 0;
5553 section != NULL;
5554 section = section->next)
5556 /* Find the first section in the input segment, which may be
5557 removed from the corresponding output segment. */
5558 if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed))
5560 if (first_section == NULL)
5561 first_section = section;
5562 if (section->output_section != NULL)
5563 ++section_count;
5567 /* Allocate a segment map big enough to contain
5568 all of the sections we have selected. */
5569 amt = sizeof (struct elf_segment_map);
5570 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
5571 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
5572 if (map == NULL)
5573 return FALSE;
5575 /* Initialise the fields of the segment map. Default to
5576 using the physical address of the segment in the input BFD. */
5577 map->next = NULL;
5578 map->p_type = segment->p_type;
5579 map->p_flags = segment->p_flags;
5580 map->p_flags_valid = 1;
5582 /* If the first section in the input segment is removed, there is
5583 no need to preserve segment physical address in the corresponding
5584 output segment. */
5585 if (!first_section || first_section->output_section != NULL)
5587 map->p_paddr = segment->p_paddr;
5588 map->p_paddr_valid = p_paddr_valid;
5591 /* Determine if this segment contains the ELF file header
5592 and if it contains the program headers themselves. */
5593 map->includes_filehdr = (segment->p_offset == 0
5594 && segment->p_filesz >= iehdr->e_ehsize);
5595 map->includes_phdrs = 0;
5597 if (!phdr_included || segment->p_type != PT_LOAD)
5599 map->includes_phdrs =
5600 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
5601 && (segment->p_offset + segment->p_filesz
5602 >= ((bfd_vma) iehdr->e_phoff
5603 + iehdr->e_phnum * iehdr->e_phentsize)));
5605 if (segment->p_type == PT_LOAD && map->includes_phdrs)
5606 phdr_included = TRUE;
5609 if (section_count == 0)
5611 /* Special segments, such as the PT_PHDR segment, may contain
5612 no sections, but ordinary, loadable segments should contain
5613 something. They are allowed by the ELF spec however, so only
5614 a warning is produced. */
5615 if (segment->p_type == PT_LOAD)
5616 (*_bfd_error_handler) (_("%B: warning: Empty loadable segment"
5617 " detected, is this intentional ?\n"),
5618 ibfd);
5620 map->count = 0;
5621 *pointer_to_map = map;
5622 pointer_to_map = &map->next;
5624 continue;
5627 /* Now scan the sections in the input BFD again and attempt
5628 to add their corresponding output sections to the segment map.
5629 The problem here is how to handle an output section which has
5630 been moved (ie had its LMA changed). There are four possibilities:
5632 1. None of the sections have been moved.
5633 In this case we can continue to use the segment LMA from the
5634 input BFD.
5636 2. All of the sections have been moved by the same amount.
5637 In this case we can change the segment's LMA to match the LMA
5638 of the first section.
5640 3. Some of the sections have been moved, others have not.
5641 In this case those sections which have not been moved can be
5642 placed in the current segment which will have to have its size,
5643 and possibly its LMA changed, and a new segment or segments will
5644 have to be created to contain the other sections.
5646 4. The sections have been moved, but not by the same amount.
5647 In this case we can change the segment's LMA to match the LMA
5648 of the first section and we will have to create a new segment
5649 or segments to contain the other sections.
5651 In order to save time, we allocate an array to hold the section
5652 pointers that we are interested in. As these sections get assigned
5653 to a segment, they are removed from this array. */
5655 sections = (asection **) bfd_malloc2 (section_count, sizeof (asection *));
5656 if (sections == NULL)
5657 return FALSE;
5659 /* Step One: Scan for segment vs section LMA conflicts.
5660 Also add the sections to the section array allocated above.
5661 Also add the sections to the current segment. In the common
5662 case, where the sections have not been moved, this means that
5663 we have completely filled the segment, and there is nothing
5664 more to do. */
5665 isec = 0;
5666 matching_lma = 0;
5667 suggested_lma = 0;
5668 first_matching_lma = TRUE;
5669 first_suggested_lma = TRUE;
5671 for (section = ibfd->sections;
5672 section != NULL;
5673 section = section->next)
5674 if (section == first_section)
5675 break;
5677 for (j = 0; section != NULL; section = section->next)
5679 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
5681 output_section = section->output_section;
5683 sections[j++] = section;
5685 /* The Solaris native linker always sets p_paddr to 0.
5686 We try to catch that case here, and set it to the
5687 correct value. Note - some backends require that
5688 p_paddr be left as zero. */
5689 if (!p_paddr_valid
5690 && segment->p_vaddr != 0
5691 && !bed->want_p_paddr_set_to_zero
5692 && isec == 0
5693 && output_section->lma != 0
5694 && output_section->vma == (segment->p_vaddr
5695 + (map->includes_filehdr
5696 ? iehdr->e_ehsize
5697 : 0)
5698 + (map->includes_phdrs
5699 ? (iehdr->e_phnum
5700 * iehdr->e_phentsize)
5701 : 0)))
5702 map->p_paddr = segment->p_vaddr;
5704 /* Match up the physical address of the segment with the
5705 LMA address of the output section. */
5706 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
5707 || IS_COREFILE_NOTE (segment, section)
5708 || (bed->want_p_paddr_set_to_zero
5709 && IS_CONTAINED_BY_VMA (output_section, segment)))
5711 if (first_matching_lma || output_section->lma < matching_lma)
5713 matching_lma = output_section->lma;
5714 first_matching_lma = FALSE;
5717 /* We assume that if the section fits within the segment
5718 then it does not overlap any other section within that
5719 segment. */
5720 map->sections[isec++] = output_section;
5722 else if (first_suggested_lma)
5724 suggested_lma = output_section->lma;
5725 first_suggested_lma = FALSE;
5728 if (j == section_count)
5729 break;
5733 BFD_ASSERT (j == section_count);
5735 /* Step Two: Adjust the physical address of the current segment,
5736 if necessary. */
5737 if (isec == section_count)
5739 /* All of the sections fitted within the segment as currently
5740 specified. This is the default case. Add the segment to
5741 the list of built segments and carry on to process the next
5742 program header in the input BFD. */
5743 map->count = section_count;
5744 *pointer_to_map = map;
5745 pointer_to_map = &map->next;
5747 if (p_paddr_valid
5748 && !bed->want_p_paddr_set_to_zero
5749 && matching_lma != map->p_paddr
5750 && !map->includes_filehdr
5751 && !map->includes_phdrs)
5752 /* There is some padding before the first section in the
5753 segment. So, we must account for that in the output
5754 segment's vma. */
5755 map->p_vaddr_offset = matching_lma - map->p_paddr;
5757 free (sections);
5758 continue;
5760 else
5762 if (!first_matching_lma)
5764 /* At least one section fits inside the current segment.
5765 Keep it, but modify its physical address to match the
5766 LMA of the first section that fitted. */
5767 map->p_paddr = matching_lma;
5769 else
5771 /* None of the sections fitted inside the current segment.
5772 Change the current segment's physical address to match
5773 the LMA of the first section. */
5774 map->p_paddr = suggested_lma;
5777 /* Offset the segment physical address from the lma
5778 to allow for space taken up by elf headers. */
5779 if (map->includes_filehdr)
5781 if (map->p_paddr >= iehdr->e_ehsize)
5782 map->p_paddr -= iehdr->e_ehsize;
5783 else
5785 map->includes_filehdr = FALSE;
5786 map->includes_phdrs = FALSE;
5790 if (map->includes_phdrs)
5792 if (map->p_paddr >= iehdr->e_phnum * iehdr->e_phentsize)
5794 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
5796 /* iehdr->e_phnum is just an estimate of the number
5797 of program headers that we will need. Make a note
5798 here of the number we used and the segment we chose
5799 to hold these headers, so that we can adjust the
5800 offset when we know the correct value. */
5801 phdr_adjust_num = iehdr->e_phnum;
5802 phdr_adjust_seg = map;
5804 else
5805 map->includes_phdrs = FALSE;
5809 /* Step Three: Loop over the sections again, this time assigning
5810 those that fit to the current segment and removing them from the
5811 sections array; but making sure not to leave large gaps. Once all
5812 possible sections have been assigned to the current segment it is
5813 added to the list of built segments and if sections still remain
5814 to be assigned, a new segment is constructed before repeating
5815 the loop. */
5816 isec = 0;
5819 map->count = 0;
5820 suggested_lma = 0;
5821 first_suggested_lma = TRUE;
5823 /* Fill the current segment with sections that fit. */
5824 for (j = 0; j < section_count; j++)
5826 section = sections[j];
5828 if (section == NULL)
5829 continue;
5831 output_section = section->output_section;
5833 BFD_ASSERT (output_section != NULL);
5835 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
5836 || IS_COREFILE_NOTE (segment, section))
5838 if (map->count == 0)
5840 /* If the first section in a segment does not start at
5841 the beginning of the segment, then something is
5842 wrong. */
5843 if (output_section->lma
5844 != (map->p_paddr
5845 + (map->includes_filehdr ? iehdr->e_ehsize : 0)
5846 + (map->includes_phdrs
5847 ? iehdr->e_phnum * iehdr->e_phentsize
5848 : 0)))
5849 abort ();
5851 else
5853 asection *prev_sec;
5855 prev_sec = map->sections[map->count - 1];
5857 /* If the gap between the end of the previous section
5858 and the start of this section is more than
5859 maxpagesize then we need to start a new segment. */
5860 if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
5861 maxpagesize)
5862 < BFD_ALIGN (output_section->lma, maxpagesize))
5863 || (prev_sec->lma + prev_sec->size
5864 > output_section->lma))
5866 if (first_suggested_lma)
5868 suggested_lma = output_section->lma;
5869 first_suggested_lma = FALSE;
5872 continue;
5876 map->sections[map->count++] = output_section;
5877 ++isec;
5878 sections[j] = NULL;
5879 section->segment_mark = TRUE;
5881 else if (first_suggested_lma)
5883 suggested_lma = output_section->lma;
5884 first_suggested_lma = FALSE;
5888 BFD_ASSERT (map->count > 0);
5890 /* Add the current segment to the list of built segments. */
5891 *pointer_to_map = map;
5892 pointer_to_map = &map->next;
5894 if (isec < section_count)
5896 /* We still have not allocated all of the sections to
5897 segments. Create a new segment here, initialise it
5898 and carry on looping. */
5899 amt = sizeof (struct elf_segment_map);
5900 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
5901 map = (struct elf_segment_map *) bfd_alloc (obfd, amt);
5902 if (map == NULL)
5904 free (sections);
5905 return FALSE;
5908 /* Initialise the fields of the segment map. Set the physical
5909 physical address to the LMA of the first section that has
5910 not yet been assigned. */
5911 map->next = NULL;
5912 map->p_type = segment->p_type;
5913 map->p_flags = segment->p_flags;
5914 map->p_flags_valid = 1;
5915 map->p_paddr = suggested_lma;
5916 map->p_paddr_valid = p_paddr_valid;
5917 map->includes_filehdr = 0;
5918 map->includes_phdrs = 0;
5921 while (isec < section_count);
5923 free (sections);
5926 elf_tdata (obfd)->segment_map = map_first;
5928 /* If we had to estimate the number of program headers that were
5929 going to be needed, then check our estimate now and adjust
5930 the offset if necessary. */
5931 if (phdr_adjust_seg != NULL)
5933 unsigned int count;
5935 for (count = 0, map = map_first; map != NULL; map = map->next)
5936 count++;
5938 if (count > phdr_adjust_num)
5939 phdr_adjust_seg->p_paddr
5940 -= (count - phdr_adjust_num) * iehdr->e_phentsize;
5943 #undef SEGMENT_END
5944 #undef SECTION_SIZE
5945 #undef IS_CONTAINED_BY_VMA
5946 #undef IS_CONTAINED_BY_LMA
5947 #undef IS_NOTE
5948 #undef IS_COREFILE_NOTE
5949 #undef IS_SOLARIS_PT_INTERP
5950 #undef IS_SECTION_IN_INPUT_SEGMENT
5951 #undef INCLUDE_SECTION_IN_SEGMENT
5952 #undef SEGMENT_AFTER_SEGMENT
5953 #undef SEGMENT_OVERLAPS
5954 return TRUE;
5957 /* Copy ELF program header information. */
5959 static bfd_boolean
5960 copy_elf_program_header (bfd *ibfd, bfd *obfd)
5962 Elf_Internal_Ehdr *iehdr;
5963 struct elf_segment_map *map;
5964 struct elf_segment_map *map_first;
5965 struct elf_segment_map **pointer_to_map;
5966 Elf_Internal_Phdr *segment;
5967 unsigned int i;
5968 unsigned int num_segments;
5969 bfd_boolean phdr_included = FALSE;
5970 bfd_boolean p_paddr_valid;
5972 iehdr = elf_elfheader (ibfd);
5974 map_first = NULL;
5975 pointer_to_map = &map_first;
5977 /* If all the segment p_paddr fields are zero, don't set
5978 map->p_paddr_valid. */
5979 p_paddr_valid = FALSE;
5980 num_segments = elf_elfheader (ibfd)->e_phnum;
5981 for (i = 0, segment = elf_tdata (ibfd)->phdr;
5982 i < num_segments;
5983 i++, segment++)
5984 if (segment->p_paddr != 0)
5986 p_paddr_valid = TRUE;
5987 break;
5990 for (i = 0, segment = elf_tdata (ibfd)->phdr;
5991 i < num_segments;
5992 i++, segment++)
5994 asection *section;
5995 unsigned int section_count;
5996 bfd_size_type amt;
5997 Elf_Internal_Shdr *this_hdr;
5998 asection *first_section = NULL;
5999 asection *lowest_section;
6001 /* Compute how many sections are in this segment. */
6002 for (section = ibfd->sections, section_count = 0;
6003 section != NULL;
6004 section = section->next)
6006 this_hdr = &(elf_section_data(section)->this_hdr);
6007 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
6009 if (first_section == NULL)
6010 first_section = section;
6011 section_count++;
6015 /* Allocate a segment map big enough to contain
6016 all of the sections we have selected. */
6017 amt = sizeof (struct elf_segment_map);
6018 if (section_count != 0)
6019 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
6020 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
6021 if (map == NULL)
6022 return FALSE;
6024 /* Initialize the fields of the output segment map with the
6025 input segment. */
6026 map->next = NULL;
6027 map->p_type = segment->p_type;
6028 map->p_flags = segment->p_flags;
6029 map->p_flags_valid = 1;
6030 map->p_paddr = segment->p_paddr;
6031 map->p_paddr_valid = p_paddr_valid;
6032 map->p_align = segment->p_align;
6033 map->p_align_valid = 1;
6034 map->p_vaddr_offset = 0;
6036 if (map->p_type == PT_GNU_RELRO)
6038 /* The PT_GNU_RELRO segment may contain the first a few
6039 bytes in the .got.plt section even if the whole .got.plt
6040 section isn't in the PT_GNU_RELRO segment. We won't
6041 change the size of the PT_GNU_RELRO segment. */
6042 map->p_size = segment->p_memsz;
6043 map->p_size_valid = 1;
6046 /* Determine if this segment contains the ELF file header
6047 and if it contains the program headers themselves. */
6048 map->includes_filehdr = (segment->p_offset == 0
6049 && segment->p_filesz >= iehdr->e_ehsize);
6051 map->includes_phdrs = 0;
6052 if (! phdr_included || segment->p_type != PT_LOAD)
6054 map->includes_phdrs =
6055 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
6056 && (segment->p_offset + segment->p_filesz
6057 >= ((bfd_vma) iehdr->e_phoff
6058 + iehdr->e_phnum * iehdr->e_phentsize)));
6060 if (segment->p_type == PT_LOAD && map->includes_phdrs)
6061 phdr_included = TRUE;
6064 lowest_section = first_section;
6065 if (section_count != 0)
6067 unsigned int isec = 0;
6069 for (section = first_section;
6070 section != NULL;
6071 section = section->next)
6073 this_hdr = &(elf_section_data(section)->this_hdr);
6074 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
6076 map->sections[isec++] = section->output_section;
6077 if (section->lma < lowest_section->lma)
6078 lowest_section = section;
6079 if ((section->flags & SEC_ALLOC) != 0)
6081 bfd_vma seg_off;
6083 /* Section lmas are set up from PT_LOAD header
6084 p_paddr in _bfd_elf_make_section_from_shdr.
6085 If this header has a p_paddr that disagrees
6086 with the section lma, flag the p_paddr as
6087 invalid. */
6088 if ((section->flags & SEC_LOAD) != 0)
6089 seg_off = this_hdr->sh_offset - segment->p_offset;
6090 else
6091 seg_off = this_hdr->sh_addr - segment->p_vaddr;
6092 if (section->lma - segment->p_paddr != seg_off)
6093 map->p_paddr_valid = FALSE;
6095 if (isec == section_count)
6096 break;
6101 if (map->includes_filehdr && lowest_section != NULL)
6102 /* We need to keep the space used by the headers fixed. */
6103 map->header_size = lowest_section->vma - segment->p_vaddr;
6105 if (!map->includes_phdrs
6106 && !map->includes_filehdr
6107 && map->p_paddr_valid)
6108 /* There is some other padding before the first section. */
6109 map->p_vaddr_offset = ((lowest_section ? lowest_section->lma : 0)
6110 - segment->p_paddr);
6112 map->count = section_count;
6113 *pointer_to_map = map;
6114 pointer_to_map = &map->next;
6117 elf_tdata (obfd)->segment_map = map_first;
6118 return TRUE;
6121 /* Copy private BFD data. This copies or rewrites ELF program header
6122 information. */
6124 static bfd_boolean
6125 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
6127 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
6128 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
6129 return TRUE;
6131 if (elf_tdata (ibfd)->phdr == NULL)
6132 return TRUE;
6134 if (ibfd->xvec == obfd->xvec)
6136 /* Check to see if any sections in the input BFD
6137 covered by ELF program header have changed. */
6138 Elf_Internal_Phdr *segment;
6139 asection *section, *osec;
6140 unsigned int i, num_segments;
6141 Elf_Internal_Shdr *this_hdr;
6142 const struct elf_backend_data *bed;
6144 bed = get_elf_backend_data (ibfd);
6146 /* Regenerate the segment map if p_paddr is set to 0. */
6147 if (bed->want_p_paddr_set_to_zero)
6148 goto rewrite;
6150 /* Initialize the segment mark field. */
6151 for (section = obfd->sections; section != NULL;
6152 section = section->next)
6153 section->segment_mark = FALSE;
6155 num_segments = elf_elfheader (ibfd)->e_phnum;
6156 for (i = 0, segment = elf_tdata (ibfd)->phdr;
6157 i < num_segments;
6158 i++, segment++)
6160 /* PR binutils/3535. The Solaris linker always sets the p_paddr
6161 and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
6162 which severly confuses things, so always regenerate the segment
6163 map in this case. */
6164 if (segment->p_paddr == 0
6165 && segment->p_memsz == 0
6166 && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
6167 goto rewrite;
6169 for (section = ibfd->sections;
6170 section != NULL; section = section->next)
6172 /* We mark the output section so that we know it comes
6173 from the input BFD. */
6174 osec = section->output_section;
6175 if (osec)
6176 osec->segment_mark = TRUE;
6178 /* Check if this section is covered by the segment. */
6179 this_hdr = &(elf_section_data(section)->this_hdr);
6180 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
6182 /* FIXME: Check if its output section is changed or
6183 removed. What else do we need to check? */
6184 if (osec == NULL
6185 || section->flags != osec->flags
6186 || section->lma != osec->lma
6187 || section->vma != osec->vma
6188 || section->size != osec->size
6189 || section->rawsize != osec->rawsize
6190 || section->alignment_power != osec->alignment_power)
6191 goto rewrite;
6196 /* Check to see if any output section do not come from the
6197 input BFD. */
6198 for (section = obfd->sections; section != NULL;
6199 section = section->next)
6201 if (section->segment_mark == FALSE)
6202 goto rewrite;
6203 else
6204 section->segment_mark = FALSE;
6207 return copy_elf_program_header (ibfd, obfd);
6210 rewrite:
6211 return rewrite_elf_program_header (ibfd, obfd);
6214 /* Initialize private output section information from input section. */
6216 bfd_boolean
6217 _bfd_elf_init_private_section_data (bfd *ibfd,
6218 asection *isec,
6219 bfd *obfd,
6220 asection *osec,
6221 struct bfd_link_info *link_info)
6224 Elf_Internal_Shdr *ihdr, *ohdr;
6225 bfd_boolean final_link = link_info != NULL && !link_info->relocatable;
6227 if (ibfd->xvec->flavour != bfd_target_elf_flavour
6228 || obfd->xvec->flavour != bfd_target_elf_flavour)
6229 return TRUE;
6231 /* For objcopy and relocatable link, don't copy the output ELF
6232 section type from input if the output BFD section flags have been
6233 set to something different. For a final link allow some flags
6234 that the linker clears to differ. */
6235 if (elf_section_type (osec) == SHT_NULL
6236 && (osec->flags == isec->flags
6237 || (final_link
6238 && ((osec->flags ^ isec->flags)
6239 & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
6240 elf_section_type (osec) = elf_section_type (isec);
6242 /* FIXME: Is this correct for all OS/PROC specific flags? */
6243 elf_section_flags (osec) |= (elf_section_flags (isec)
6244 & (SHF_MASKOS | SHF_MASKPROC));
6246 /* Set things up for objcopy and relocatable link. The output
6247 SHT_GROUP section will have its elf_next_in_group pointing back
6248 to the input group members. Ignore linker created group section.
6249 See elfNN_ia64_object_p in elfxx-ia64.c. */
6250 if (!final_link)
6252 if (elf_sec_group (isec) == NULL
6253 || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0)
6255 if (elf_section_flags (isec) & SHF_GROUP)
6256 elf_section_flags (osec) |= SHF_GROUP;
6257 elf_next_in_group (osec) = elf_next_in_group (isec);
6258 elf_section_data (osec)->group = elf_section_data (isec)->group;
6262 ihdr = &elf_section_data (isec)->this_hdr;
6264 /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
6265 don't use the output section of the linked-to section since it
6266 may be NULL at this point. */
6267 if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
6269 ohdr = &elf_section_data (osec)->this_hdr;
6270 ohdr->sh_flags |= SHF_LINK_ORDER;
6271 elf_linked_to_section (osec) = elf_linked_to_section (isec);
6274 osec->use_rela_p = isec->use_rela_p;
6276 return TRUE;
6279 /* Copy private section information. This copies over the entsize
6280 field, and sometimes the info field. */
6282 bfd_boolean
6283 _bfd_elf_copy_private_section_data (bfd *ibfd,
6284 asection *isec,
6285 bfd *obfd,
6286 asection *osec)
6288 Elf_Internal_Shdr *ihdr, *ohdr;
6290 if (ibfd->xvec->flavour != bfd_target_elf_flavour
6291 || obfd->xvec->flavour != bfd_target_elf_flavour)
6292 return TRUE;
6294 ihdr = &elf_section_data (isec)->this_hdr;
6295 ohdr = &elf_section_data (osec)->this_hdr;
6297 ohdr->sh_entsize = ihdr->sh_entsize;
6299 if (ihdr->sh_type == SHT_SYMTAB
6300 || ihdr->sh_type == SHT_DYNSYM
6301 || ihdr->sh_type == SHT_GNU_verneed
6302 || ihdr->sh_type == SHT_GNU_verdef)
6303 ohdr->sh_info = ihdr->sh_info;
6305 return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
6306 NULL);
6309 /* Look at all the SHT_GROUP sections in IBFD, making any adjustments
6310 necessary if we are removing either the SHT_GROUP section or any of
6311 the group member sections. DISCARDED is the value that a section's
6312 output_section has if the section will be discarded, NULL when this
6313 function is called from objcopy, bfd_abs_section_ptr when called
6314 from the linker. */
6316 bfd_boolean
6317 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
6319 asection *isec;
6321 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
6322 if (elf_section_type (isec) == SHT_GROUP)
6324 asection *first = elf_next_in_group (isec);
6325 asection *s = first;
6326 bfd_size_type removed = 0;
6328 while (s != NULL)
6330 /* If this member section is being output but the
6331 SHT_GROUP section is not, then clear the group info
6332 set up by _bfd_elf_copy_private_section_data. */
6333 if (s->output_section != discarded
6334 && isec->output_section == discarded)
6336 elf_section_flags (s->output_section) &= ~SHF_GROUP;
6337 elf_group_name (s->output_section) = NULL;
6339 /* Conversely, if the member section is not being output
6340 but the SHT_GROUP section is, then adjust its size. */
6341 else if (s->output_section == discarded
6342 && isec->output_section != discarded)
6343 removed += 4;
6344 s = elf_next_in_group (s);
6345 if (s == first)
6346 break;
6348 if (removed != 0)
6350 if (discarded != NULL)
6352 /* If we've been called for ld -r, then we need to
6353 adjust the input section size. This function may
6354 be called multiple times, so save the original
6355 size. */
6356 if (isec->rawsize == 0)
6357 isec->rawsize = isec->size;
6358 isec->size = isec->rawsize - removed;
6360 else
6362 /* Adjust the output section size when called from
6363 objcopy. */
6364 isec->output_section->size -= removed;
6369 return TRUE;
6372 /* Copy private header information. */
6374 bfd_boolean
6375 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
6377 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
6378 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
6379 return TRUE;
6381 /* Copy over private BFD data if it has not already been copied.
6382 This must be done here, rather than in the copy_private_bfd_data
6383 entry point, because the latter is called after the section
6384 contents have been set, which means that the program headers have
6385 already been worked out. */
6386 if (elf_tdata (obfd)->segment_map == NULL && elf_tdata (ibfd)->phdr != NULL)
6388 if (! copy_private_bfd_data (ibfd, obfd))
6389 return FALSE;
6392 return _bfd_elf_fixup_group_sections (ibfd, NULL);
6395 /* Copy private symbol information. If this symbol is in a section
6396 which we did not map into a BFD section, try to map the section
6397 index correctly. We use special macro definitions for the mapped
6398 section indices; these definitions are interpreted by the
6399 swap_out_syms function. */
6401 #define MAP_ONESYMTAB (SHN_HIOS + 1)
6402 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
6403 #define MAP_STRTAB (SHN_HIOS + 3)
6404 #define MAP_SHSTRTAB (SHN_HIOS + 4)
6405 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
6407 bfd_boolean
6408 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
6409 asymbol *isymarg,
6410 bfd *obfd,
6411 asymbol *osymarg)
6413 elf_symbol_type *isym, *osym;
6415 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
6416 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
6417 return TRUE;
6419 isym = elf_symbol_from (ibfd, isymarg);
6420 osym = elf_symbol_from (obfd, osymarg);
6422 if (isym != NULL
6423 && isym->internal_elf_sym.st_shndx != 0
6424 && osym != NULL
6425 && bfd_is_abs_section (isym->symbol.section))
6427 unsigned int shndx;
6429 shndx = isym->internal_elf_sym.st_shndx;
6430 if (shndx == elf_onesymtab (ibfd))
6431 shndx = MAP_ONESYMTAB;
6432 else if (shndx == elf_dynsymtab (ibfd))
6433 shndx = MAP_DYNSYMTAB;
6434 else if (shndx == elf_tdata (ibfd)->strtab_section)
6435 shndx = MAP_STRTAB;
6436 else if (shndx == elf_tdata (ibfd)->shstrtab_section)
6437 shndx = MAP_SHSTRTAB;
6438 else if (shndx == elf_tdata (ibfd)->symtab_shndx_section)
6439 shndx = MAP_SYM_SHNDX;
6440 osym->internal_elf_sym.st_shndx = shndx;
6443 return TRUE;
6446 /* Swap out the symbols. */
6448 static bfd_boolean
6449 swap_out_syms (bfd *abfd,
6450 struct bfd_strtab_hash **sttp,
6451 int relocatable_p)
6453 const struct elf_backend_data *bed;
6454 int symcount;
6455 asymbol **syms;
6456 struct bfd_strtab_hash *stt;
6457 Elf_Internal_Shdr *symtab_hdr;
6458 Elf_Internal_Shdr *symtab_shndx_hdr;
6459 Elf_Internal_Shdr *symstrtab_hdr;
6460 bfd_byte *outbound_syms;
6461 bfd_byte *outbound_shndx;
6462 int idx;
6463 bfd_size_type amt;
6464 bfd_boolean name_local_sections;
6466 if (!elf_map_symbols (abfd))
6467 return FALSE;
6469 /* Dump out the symtabs. */
6470 stt = _bfd_elf_stringtab_init ();
6471 if (stt == NULL)
6472 return FALSE;
6474 bed = get_elf_backend_data (abfd);
6475 symcount = bfd_get_symcount (abfd);
6476 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
6477 symtab_hdr->sh_type = SHT_SYMTAB;
6478 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
6479 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
6480 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
6481 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
6483 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
6484 symstrtab_hdr->sh_type = SHT_STRTAB;
6486 outbound_syms = (bfd_byte *) bfd_alloc2 (abfd, 1 + symcount,
6487 bed->s->sizeof_sym);
6488 if (outbound_syms == NULL)
6490 _bfd_stringtab_free (stt);
6491 return FALSE;
6493 symtab_hdr->contents = outbound_syms;
6495 outbound_shndx = NULL;
6496 symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
6497 if (symtab_shndx_hdr->sh_name != 0)
6499 amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx);
6500 outbound_shndx = (bfd_byte *)
6501 bfd_zalloc2 (abfd, 1 + symcount, sizeof (Elf_External_Sym_Shndx));
6502 if (outbound_shndx == NULL)
6504 _bfd_stringtab_free (stt);
6505 return FALSE;
6508 symtab_shndx_hdr->contents = outbound_shndx;
6509 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
6510 symtab_shndx_hdr->sh_size = amt;
6511 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
6512 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
6515 /* Now generate the data (for "contents"). */
6517 /* Fill in zeroth symbol and swap it out. */
6518 Elf_Internal_Sym sym;
6519 sym.st_name = 0;
6520 sym.st_value = 0;
6521 sym.st_size = 0;
6522 sym.st_info = 0;
6523 sym.st_other = 0;
6524 sym.st_shndx = SHN_UNDEF;
6525 bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
6526 outbound_syms += bed->s->sizeof_sym;
6527 if (outbound_shndx != NULL)
6528 outbound_shndx += sizeof (Elf_External_Sym_Shndx);
6531 name_local_sections
6532 = (bed->elf_backend_name_local_section_symbols
6533 && bed->elf_backend_name_local_section_symbols (abfd));
6535 syms = bfd_get_outsymbols (abfd);
6536 for (idx = 0; idx < symcount; idx++)
6538 Elf_Internal_Sym sym;
6539 bfd_vma value = syms[idx]->value;
6540 elf_symbol_type *type_ptr;
6541 flagword flags = syms[idx]->flags;
6542 int type;
6544 if (!name_local_sections
6545 && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
6547 /* Local section symbols have no name. */
6548 sym.st_name = 0;
6550 else
6552 sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
6553 syms[idx]->name,
6554 TRUE, FALSE);
6555 if (sym.st_name == (unsigned long) -1)
6557 _bfd_stringtab_free (stt);
6558 return FALSE;
6562 type_ptr = elf_symbol_from (abfd, syms[idx]);
6564 if ((flags & BSF_SECTION_SYM) == 0
6565 && bfd_is_com_section (syms[idx]->section))
6567 /* ELF common symbols put the alignment into the `value' field,
6568 and the size into the `size' field. This is backwards from
6569 how BFD handles it, so reverse it here. */
6570 sym.st_size = value;
6571 if (type_ptr == NULL
6572 || type_ptr->internal_elf_sym.st_value == 0)
6573 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
6574 else
6575 sym.st_value = type_ptr->internal_elf_sym.st_value;
6576 sym.st_shndx = _bfd_elf_section_from_bfd_section
6577 (abfd, syms[idx]->section);
6579 else
6581 asection *sec = syms[idx]->section;
6582 unsigned int shndx;
6584 if (sec->output_section)
6586 value += sec->output_offset;
6587 sec = sec->output_section;
6590 /* Don't add in the section vma for relocatable output. */
6591 if (! relocatable_p)
6592 value += sec->vma;
6593 sym.st_value = value;
6594 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
6596 if (bfd_is_abs_section (sec)
6597 && type_ptr != NULL
6598 && type_ptr->internal_elf_sym.st_shndx != 0)
6600 /* This symbol is in a real ELF section which we did
6601 not create as a BFD section. Undo the mapping done
6602 by copy_private_symbol_data. */
6603 shndx = type_ptr->internal_elf_sym.st_shndx;
6604 switch (shndx)
6606 case MAP_ONESYMTAB:
6607 shndx = elf_onesymtab (abfd);
6608 break;
6609 case MAP_DYNSYMTAB:
6610 shndx = elf_dynsymtab (abfd);
6611 break;
6612 case MAP_STRTAB:
6613 shndx = elf_tdata (abfd)->strtab_section;
6614 break;
6615 case MAP_SHSTRTAB:
6616 shndx = elf_tdata (abfd)->shstrtab_section;
6617 break;
6618 case MAP_SYM_SHNDX:
6619 shndx = elf_tdata (abfd)->symtab_shndx_section;
6620 break;
6621 default:
6622 break;
6625 else
6627 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
6629 if (shndx == SHN_BAD)
6631 asection *sec2;
6633 /* Writing this would be a hell of a lot easier if
6634 we had some decent documentation on bfd, and
6635 knew what to expect of the library, and what to
6636 demand of applications. For example, it
6637 appears that `objcopy' might not set the
6638 section of a symbol to be a section that is
6639 actually in the output file. */
6640 sec2 = bfd_get_section_by_name (abfd, sec->name);
6641 if (sec2 == NULL)
6643 _bfd_error_handler (_("\
6644 Unable to find equivalent output section for symbol '%s' from section '%s'"),
6645 syms[idx]->name ? syms[idx]->name : "<Local sym>",
6646 sec->name);
6647 bfd_set_error (bfd_error_invalid_operation);
6648 _bfd_stringtab_free (stt);
6649 return FALSE;
6652 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
6653 BFD_ASSERT (shndx != SHN_BAD);
6657 sym.st_shndx = shndx;
6660 if ((flags & BSF_THREAD_LOCAL) != 0)
6661 type = STT_TLS;
6662 else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
6663 type = STT_GNU_IFUNC;
6664 else if ((flags & BSF_FUNCTION) != 0)
6665 type = STT_FUNC;
6666 else if ((flags & BSF_OBJECT) != 0)
6667 type = STT_OBJECT;
6668 else if ((flags & BSF_RELC) != 0)
6669 type = STT_RELC;
6670 else if ((flags & BSF_SRELC) != 0)
6671 type = STT_SRELC;
6672 else
6673 type = STT_NOTYPE;
6675 if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
6676 type = STT_TLS;
6678 /* Processor-specific types. */
6679 if (type_ptr != NULL
6680 && bed->elf_backend_get_symbol_type)
6681 type = ((*bed->elf_backend_get_symbol_type)
6682 (&type_ptr->internal_elf_sym, type));
6684 if (flags & BSF_SECTION_SYM)
6686 if (flags & BSF_GLOBAL)
6687 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6688 else
6689 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
6691 else if (bfd_is_com_section (syms[idx]->section))
6693 #ifdef USE_STT_COMMON
6694 if (type == STT_OBJECT)
6695 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_COMMON);
6696 else
6697 #endif
6698 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
6700 else if (bfd_is_und_section (syms[idx]->section))
6701 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
6702 ? STB_WEAK
6703 : STB_GLOBAL),
6704 type);
6705 else if (flags & BSF_FILE)
6706 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
6707 else
6709 int bind = STB_LOCAL;
6711 if (flags & BSF_LOCAL)
6712 bind = STB_LOCAL;
6713 else if (flags & BSF_GNU_UNIQUE)
6714 bind = STB_GNU_UNIQUE;
6715 else if (flags & BSF_WEAK)
6716 bind = STB_WEAK;
6717 else if (flags & BSF_GLOBAL)
6718 bind = STB_GLOBAL;
6720 sym.st_info = ELF_ST_INFO (bind, type);
6723 if (type_ptr != NULL)
6724 sym.st_other = type_ptr->internal_elf_sym.st_other;
6725 else
6726 sym.st_other = 0;
6728 bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
6729 outbound_syms += bed->s->sizeof_sym;
6730 if (outbound_shndx != NULL)
6731 outbound_shndx += sizeof (Elf_External_Sym_Shndx);
6734 *sttp = stt;
6735 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
6736 symstrtab_hdr->sh_type = SHT_STRTAB;
6738 symstrtab_hdr->sh_flags = 0;
6739 symstrtab_hdr->sh_addr = 0;
6740 symstrtab_hdr->sh_entsize = 0;
6741 symstrtab_hdr->sh_link = 0;
6742 symstrtab_hdr->sh_info = 0;
6743 symstrtab_hdr->sh_addralign = 1;
6745 return TRUE;
6748 /* Return the number of bytes required to hold the symtab vector.
6750 Note that we base it on the count plus 1, since we will null terminate
6751 the vector allocated based on this size. However, the ELF symbol table
6752 always has a dummy entry as symbol #0, so it ends up even. */
6754 long
6755 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
6757 long symcount;
6758 long symtab_size;
6759 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
6761 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
6762 symtab_size = (symcount + 1) * (sizeof (asymbol *));
6763 if (symcount > 0)
6764 symtab_size -= sizeof (asymbol *);
6766 return symtab_size;
6769 long
6770 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
6772 long symcount;
6773 long symtab_size;
6774 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
6776 if (elf_dynsymtab (abfd) == 0)
6778 bfd_set_error (bfd_error_invalid_operation);
6779 return -1;
6782 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
6783 symtab_size = (symcount + 1) * (sizeof (asymbol *));
6784 if (symcount > 0)
6785 symtab_size -= sizeof (asymbol *);
6787 return symtab_size;
6790 long
6791 _bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
6792 sec_ptr asect)
6794 return (asect->reloc_count + 1) * sizeof (arelent *);
6797 /* Canonicalize the relocs. */
6799 long
6800 _bfd_elf_canonicalize_reloc (bfd *abfd,
6801 sec_ptr section,
6802 arelent **relptr,
6803 asymbol **symbols)
6805 arelent *tblptr;
6806 unsigned int i;
6807 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6809 if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
6810 return -1;
6812 tblptr = section->relocation;
6813 for (i = 0; i < section->reloc_count; i++)
6814 *relptr++ = tblptr++;
6816 *relptr = NULL;
6818 return section->reloc_count;
6821 long
6822 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
6824 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6825 long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
6827 if (symcount >= 0)
6828 bfd_get_symcount (abfd) = symcount;
6829 return symcount;
6832 long
6833 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
6834 asymbol **allocation)
6836 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6837 long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
6839 if (symcount >= 0)
6840 bfd_get_dynamic_symcount (abfd) = symcount;
6841 return symcount;
6844 /* Return the size required for the dynamic reloc entries. Any loadable
6845 section that was actually installed in the BFD, and has type SHT_REL
6846 or SHT_RELA, and uses the dynamic symbol table, is considered to be a
6847 dynamic reloc section. */
6849 long
6850 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
6852 long ret;
6853 asection *s;
6855 if (elf_dynsymtab (abfd) == 0)
6857 bfd_set_error (bfd_error_invalid_operation);
6858 return -1;
6861 ret = sizeof (arelent *);
6862 for (s = abfd->sections; s != NULL; s = s->next)
6863 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6864 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6865 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6866 ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize)
6867 * sizeof (arelent *));
6869 return ret;
6872 /* Canonicalize the dynamic relocation entries. Note that we return the
6873 dynamic relocations as a single block, although they are actually
6874 associated with particular sections; the interface, which was
6875 designed for SunOS style shared libraries, expects that there is only
6876 one set of dynamic relocs. Any loadable section that was actually
6877 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
6878 dynamic symbol table, is considered to be a dynamic reloc section. */
6880 long
6881 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
6882 arelent **storage,
6883 asymbol **syms)
6885 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
6886 asection *s;
6887 long ret;
6889 if (elf_dynsymtab (abfd) == 0)
6891 bfd_set_error (bfd_error_invalid_operation);
6892 return -1;
6895 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
6896 ret = 0;
6897 for (s = abfd->sections; s != NULL; s = s->next)
6899 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6900 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6901 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6903 arelent *p;
6904 long count, i;
6906 if (! (*slurp_relocs) (abfd, s, syms, TRUE))
6907 return -1;
6908 count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
6909 p = s->relocation;
6910 for (i = 0; i < count; i++)
6911 *storage++ = p++;
6912 ret += count;
6916 *storage = NULL;
6918 return ret;
6921 /* Read in the version information. */
6923 bfd_boolean
6924 _bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
6926 bfd_byte *contents = NULL;
6927 unsigned int freeidx = 0;
6929 if (elf_dynverref (abfd) != 0)
6931 Elf_Internal_Shdr *hdr;
6932 Elf_External_Verneed *everneed;
6933 Elf_Internal_Verneed *iverneed;
6934 unsigned int i;
6935 bfd_byte *contents_end;
6937 hdr = &elf_tdata (abfd)->dynverref_hdr;
6939 elf_tdata (abfd)->verref = (Elf_Internal_Verneed *)
6940 bfd_zalloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed));
6941 if (elf_tdata (abfd)->verref == NULL)
6942 goto error_return;
6944 elf_tdata (abfd)->cverrefs = hdr->sh_info;
6946 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
6947 if (contents == NULL)
6949 error_return_verref:
6950 elf_tdata (abfd)->verref = NULL;
6951 elf_tdata (abfd)->cverrefs = 0;
6952 goto error_return;
6954 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
6955 || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
6956 goto error_return_verref;
6958 if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verneed))
6959 goto error_return_verref;
6961 BFD_ASSERT (sizeof (Elf_External_Verneed)
6962 == sizeof (Elf_External_Vernaux));
6963 contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
6964 everneed = (Elf_External_Verneed *) contents;
6965 iverneed = elf_tdata (abfd)->verref;
6966 for (i = 0; i < hdr->sh_info; i++, iverneed++)
6968 Elf_External_Vernaux *evernaux;
6969 Elf_Internal_Vernaux *ivernaux;
6970 unsigned int j;
6972 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
6974 iverneed->vn_bfd = abfd;
6976 iverneed->vn_filename =
6977 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
6978 iverneed->vn_file);
6979 if (iverneed->vn_filename == NULL)
6980 goto error_return_verref;
6982 if (iverneed->vn_cnt == 0)
6983 iverneed->vn_auxptr = NULL;
6984 else
6986 iverneed->vn_auxptr = (struct elf_internal_vernaux *)
6987 bfd_alloc2 (abfd, iverneed->vn_cnt,
6988 sizeof (Elf_Internal_Vernaux));
6989 if (iverneed->vn_auxptr == NULL)
6990 goto error_return_verref;
6993 if (iverneed->vn_aux
6994 > (size_t) (contents_end - (bfd_byte *) everneed))
6995 goto error_return_verref;
6997 evernaux = ((Elf_External_Vernaux *)
6998 ((bfd_byte *) everneed + iverneed->vn_aux));
6999 ivernaux = iverneed->vn_auxptr;
7000 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
7002 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
7004 ivernaux->vna_nodename =
7005 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7006 ivernaux->vna_name);
7007 if (ivernaux->vna_nodename == NULL)
7008 goto error_return_verref;
7010 if (j + 1 < iverneed->vn_cnt)
7011 ivernaux->vna_nextptr = ivernaux + 1;
7012 else
7013 ivernaux->vna_nextptr = NULL;
7015 if (ivernaux->vna_next
7016 > (size_t) (contents_end - (bfd_byte *) evernaux))
7017 goto error_return_verref;
7019 evernaux = ((Elf_External_Vernaux *)
7020 ((bfd_byte *) evernaux + ivernaux->vna_next));
7022 if (ivernaux->vna_other > freeidx)
7023 freeidx = ivernaux->vna_other;
7026 if (i + 1 < hdr->sh_info)
7027 iverneed->vn_nextref = iverneed + 1;
7028 else
7029 iverneed->vn_nextref = NULL;
7031 if (iverneed->vn_next
7032 > (size_t) (contents_end - (bfd_byte *) everneed))
7033 goto error_return_verref;
7035 everneed = ((Elf_External_Verneed *)
7036 ((bfd_byte *) everneed + iverneed->vn_next));
7039 free (contents);
7040 contents = NULL;
7043 if (elf_dynverdef (abfd) != 0)
7045 Elf_Internal_Shdr *hdr;
7046 Elf_External_Verdef *everdef;
7047 Elf_Internal_Verdef *iverdef;
7048 Elf_Internal_Verdef *iverdefarr;
7049 Elf_Internal_Verdef iverdefmem;
7050 unsigned int i;
7051 unsigned int maxidx;
7052 bfd_byte *contents_end_def, *contents_end_aux;
7054 hdr = &elf_tdata (abfd)->dynverdef_hdr;
7056 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
7057 if (contents == NULL)
7058 goto error_return;
7059 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
7060 || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
7061 goto error_return;
7063 if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verdef))
7064 goto error_return;
7066 BFD_ASSERT (sizeof (Elf_External_Verdef)
7067 >= sizeof (Elf_External_Verdaux));
7068 contents_end_def = contents + hdr->sh_size
7069 - sizeof (Elf_External_Verdef);
7070 contents_end_aux = contents + hdr->sh_size
7071 - sizeof (Elf_External_Verdaux);
7073 /* We know the number of entries in the section but not the maximum
7074 index. Therefore we have to run through all entries and find
7075 the maximum. */
7076 everdef = (Elf_External_Verdef *) contents;
7077 maxidx = 0;
7078 for (i = 0; i < hdr->sh_info; ++i)
7080 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
7082 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
7083 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
7085 if (iverdefmem.vd_next
7086 > (size_t) (contents_end_def - (bfd_byte *) everdef))
7087 goto error_return;
7089 everdef = ((Elf_External_Verdef *)
7090 ((bfd_byte *) everdef + iverdefmem.vd_next));
7093 if (default_imported_symver)
7095 if (freeidx > maxidx)
7096 maxidx = ++freeidx;
7097 else
7098 freeidx = ++maxidx;
7100 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
7101 bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef));
7102 if (elf_tdata (abfd)->verdef == NULL)
7103 goto error_return;
7105 elf_tdata (abfd)->cverdefs = maxidx;
7107 everdef = (Elf_External_Verdef *) contents;
7108 iverdefarr = elf_tdata (abfd)->verdef;
7109 for (i = 0; i < hdr->sh_info; i++)
7111 Elf_External_Verdaux *everdaux;
7112 Elf_Internal_Verdaux *iverdaux;
7113 unsigned int j;
7115 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
7117 if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
7119 error_return_verdef:
7120 elf_tdata (abfd)->verdef = NULL;
7121 elf_tdata (abfd)->cverdefs = 0;
7122 goto error_return;
7125 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
7126 memcpy (iverdef, &iverdefmem, sizeof (Elf_Internal_Verdef));
7128 iverdef->vd_bfd = abfd;
7130 if (iverdef->vd_cnt == 0)
7131 iverdef->vd_auxptr = NULL;
7132 else
7134 iverdef->vd_auxptr = (struct elf_internal_verdaux *)
7135 bfd_alloc2 (abfd, iverdef->vd_cnt,
7136 sizeof (Elf_Internal_Verdaux));
7137 if (iverdef->vd_auxptr == NULL)
7138 goto error_return_verdef;
7141 if (iverdef->vd_aux
7142 > (size_t) (contents_end_aux - (bfd_byte *) everdef))
7143 goto error_return_verdef;
7145 everdaux = ((Elf_External_Verdaux *)
7146 ((bfd_byte *) everdef + iverdef->vd_aux));
7147 iverdaux = iverdef->vd_auxptr;
7148 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
7150 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
7152 iverdaux->vda_nodename =
7153 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7154 iverdaux->vda_name);
7155 if (iverdaux->vda_nodename == NULL)
7156 goto error_return_verdef;
7158 if (j + 1 < iverdef->vd_cnt)
7159 iverdaux->vda_nextptr = iverdaux + 1;
7160 else
7161 iverdaux->vda_nextptr = NULL;
7163 if (iverdaux->vda_next
7164 > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
7165 goto error_return_verdef;
7167 everdaux = ((Elf_External_Verdaux *)
7168 ((bfd_byte *) everdaux + iverdaux->vda_next));
7171 if (iverdef->vd_cnt)
7172 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
7174 if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
7175 iverdef->vd_nextdef = iverdef + 1;
7176 else
7177 iverdef->vd_nextdef = NULL;
7179 everdef = ((Elf_External_Verdef *)
7180 ((bfd_byte *) everdef + iverdef->vd_next));
7183 free (contents);
7184 contents = NULL;
7186 else if (default_imported_symver)
7188 if (freeidx < 3)
7189 freeidx = 3;
7190 else
7191 freeidx++;
7193 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
7194 bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef));
7195 if (elf_tdata (abfd)->verdef == NULL)
7196 goto error_return;
7198 elf_tdata (abfd)->cverdefs = freeidx;
7201 /* Create a default version based on the soname. */
7202 if (default_imported_symver)
7204 Elf_Internal_Verdef *iverdef;
7205 Elf_Internal_Verdaux *iverdaux;
7207 iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];;
7209 iverdef->vd_version = VER_DEF_CURRENT;
7210 iverdef->vd_flags = 0;
7211 iverdef->vd_ndx = freeidx;
7212 iverdef->vd_cnt = 1;
7214 iverdef->vd_bfd = abfd;
7216 iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
7217 if (iverdef->vd_nodename == NULL)
7218 goto error_return_verdef;
7219 iverdef->vd_nextdef = NULL;
7220 iverdef->vd_auxptr = (struct elf_internal_verdaux *)
7221 bfd_alloc (abfd, sizeof (Elf_Internal_Verdaux));
7222 if (iverdef->vd_auxptr == NULL)
7223 goto error_return_verdef;
7225 iverdaux = iverdef->vd_auxptr;
7226 iverdaux->vda_nodename = iverdef->vd_nodename;
7227 iverdaux->vda_nextptr = NULL;
7230 return TRUE;
7232 error_return:
7233 if (contents != NULL)
7234 free (contents);
7235 return FALSE;
7238 asymbol *
7239 _bfd_elf_make_empty_symbol (bfd *abfd)
7241 elf_symbol_type *newsym;
7242 bfd_size_type amt = sizeof (elf_symbol_type);
7244 newsym = (elf_symbol_type *) bfd_zalloc (abfd, amt);
7245 if (!newsym)
7246 return NULL;
7247 else
7249 newsym->symbol.the_bfd = abfd;
7250 return &newsym->symbol;
7254 void
7255 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
7256 asymbol *symbol,
7257 symbol_info *ret)
7259 bfd_symbol_info (symbol, ret);
7262 /* Return whether a symbol name implies a local symbol. Most targets
7263 use this function for the is_local_label_name entry point, but some
7264 override it. */
7266 bfd_boolean
7267 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
7268 const char *name)
7270 /* Normal local symbols start with ``.L''. */
7271 if (name[0] == '.' && name[1] == 'L')
7272 return TRUE;
7274 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
7275 DWARF debugging symbols starting with ``..''. */
7276 if (name[0] == '.' && name[1] == '.')
7277 return TRUE;
7279 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
7280 emitting DWARF debugging output. I suspect this is actually a
7281 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
7282 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
7283 underscore to be emitted on some ELF targets). For ease of use,
7284 we treat such symbols as local. */
7285 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
7286 return TRUE;
7288 return FALSE;
7291 alent *
7292 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
7293 asymbol *symbol ATTRIBUTE_UNUSED)
7295 abort ();
7296 return NULL;
7299 bfd_boolean
7300 _bfd_elf_set_arch_mach (bfd *abfd,
7301 enum bfd_architecture arch,
7302 unsigned long machine)
7304 /* If this isn't the right architecture for this backend, and this
7305 isn't the generic backend, fail. */
7306 if (arch != get_elf_backend_data (abfd)->arch
7307 && arch != bfd_arch_unknown
7308 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
7309 return FALSE;
7311 return bfd_default_set_arch_mach (abfd, arch, machine);
7314 /* Find the function to a particular section and offset,
7315 for error reporting. */
7317 static bfd_boolean
7318 elf_find_function (bfd *abfd,
7319 asection *section,
7320 asymbol **symbols,
7321 bfd_vma offset,
7322 const char **filename_ptr,
7323 const char **functionname_ptr)
7325 const char *filename;
7326 asymbol *func, *file;
7327 bfd_vma low_func;
7328 asymbol **p;
7329 /* ??? Given multiple file symbols, it is impossible to reliably
7330 choose the right file name for global symbols. File symbols are
7331 local symbols, and thus all file symbols must sort before any
7332 global symbols. The ELF spec may be interpreted to say that a
7333 file symbol must sort before other local symbols, but currently
7334 ld -r doesn't do this. So, for ld -r output, it is possible to
7335 make a better choice of file name for local symbols by ignoring
7336 file symbols appearing after a given local symbol. */
7337 enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
7338 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7340 filename = NULL;
7341 func = NULL;
7342 file = NULL;
7343 low_func = 0;
7344 state = nothing_seen;
7346 for (p = symbols; *p != NULL; p++)
7348 elf_symbol_type *q;
7349 unsigned int type;
7351 q = (elf_symbol_type *) *p;
7353 type = ELF_ST_TYPE (q->internal_elf_sym.st_info);
7354 switch (type)
7356 case STT_FILE:
7357 file = &q->symbol;
7358 if (state == symbol_seen)
7359 state = file_after_symbol_seen;
7360 continue;
7361 default:
7362 if (!bed->is_function_type (type))
7363 break;
7364 case STT_NOTYPE:
7365 if (bfd_get_section (&q->symbol) == section
7366 && q->symbol.value >= low_func
7367 && q->symbol.value <= offset)
7369 func = (asymbol *) q;
7370 low_func = q->symbol.value;
7371 filename = NULL;
7372 if (file != NULL
7373 && (ELF_ST_BIND (q->internal_elf_sym.st_info) == STB_LOCAL
7374 || state != file_after_symbol_seen))
7375 filename = bfd_asymbol_name (file);
7377 break;
7379 if (state == nothing_seen)
7380 state = symbol_seen;
7383 if (func == NULL)
7384 return FALSE;
7386 if (filename_ptr)
7387 *filename_ptr = filename;
7388 if (functionname_ptr)
7389 *functionname_ptr = bfd_asymbol_name (func);
7391 return TRUE;
7394 /* Find the nearest line to a particular section and offset,
7395 for error reporting. */
7397 bfd_boolean
7398 _bfd_elf_find_nearest_line (bfd *abfd,
7399 asection *section,
7400 asymbol **symbols,
7401 bfd_vma offset,
7402 const char **filename_ptr,
7403 const char **functionname_ptr,
7404 unsigned int *line_ptr)
7406 bfd_boolean found;
7408 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
7409 filename_ptr, functionname_ptr,
7410 line_ptr))
7412 if (!*functionname_ptr)
7413 elf_find_function (abfd, section, symbols, offset,
7414 *filename_ptr ? NULL : filename_ptr,
7415 functionname_ptr);
7417 return TRUE;
7420 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
7421 filename_ptr, functionname_ptr,
7422 line_ptr, 0,
7423 &elf_tdata (abfd)->dwarf2_find_line_info))
7425 if (!*functionname_ptr)
7426 elf_find_function (abfd, section, symbols, offset,
7427 *filename_ptr ? NULL : filename_ptr,
7428 functionname_ptr);
7430 return TRUE;
7433 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
7434 &found, filename_ptr,
7435 functionname_ptr, line_ptr,
7436 &elf_tdata (abfd)->line_info))
7437 return FALSE;
7438 if (found && (*functionname_ptr || *line_ptr))
7439 return TRUE;
7441 if (symbols == NULL)
7442 return FALSE;
7444 if (! elf_find_function (abfd, section, symbols, offset,
7445 filename_ptr, functionname_ptr))
7446 return FALSE;
7448 *line_ptr = 0;
7449 return TRUE;
7452 /* Find the line for a symbol. */
7454 bfd_boolean
7455 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
7456 const char **filename_ptr, unsigned int *line_ptr)
7458 return _bfd_dwarf2_find_line (abfd, symbols, symbol,
7459 filename_ptr, line_ptr, 0,
7460 &elf_tdata (abfd)->dwarf2_find_line_info);
7463 /* After a call to bfd_find_nearest_line, successive calls to
7464 bfd_find_inliner_info can be used to get source information about
7465 each level of function inlining that terminated at the address
7466 passed to bfd_find_nearest_line. Currently this is only supported
7467 for DWARF2 with appropriate DWARF3 extensions. */
7469 bfd_boolean
7470 _bfd_elf_find_inliner_info (bfd *abfd,
7471 const char **filename_ptr,
7472 const char **functionname_ptr,
7473 unsigned int *line_ptr)
7475 bfd_boolean found;
7476 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
7477 functionname_ptr, line_ptr,
7478 & elf_tdata (abfd)->dwarf2_find_line_info);
7479 return found;
7483 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
7485 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7486 int ret = bed->s->sizeof_ehdr;
7488 if (!info->relocatable)
7490 bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size;
7492 if (phdr_size == (bfd_size_type) -1)
7494 struct elf_segment_map *m;
7496 phdr_size = 0;
7497 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
7498 phdr_size += bed->s->sizeof_phdr;
7500 if (phdr_size == 0)
7501 phdr_size = get_program_header_size (abfd, info);
7504 elf_tdata (abfd)->program_header_size = phdr_size;
7505 ret += phdr_size;
7508 return ret;
7511 bfd_boolean
7512 _bfd_elf_set_section_contents (bfd *abfd,
7513 sec_ptr section,
7514 const void *location,
7515 file_ptr offset,
7516 bfd_size_type count)
7518 Elf_Internal_Shdr *hdr;
7519 bfd_signed_vma pos;
7521 if (! abfd->output_has_begun
7522 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
7523 return FALSE;
7525 hdr = &elf_section_data (section)->this_hdr;
7526 pos = hdr->sh_offset + offset;
7527 if (bfd_seek (abfd, pos, SEEK_SET) != 0
7528 || bfd_bwrite (location, count, abfd) != count)
7529 return FALSE;
7531 return TRUE;
7534 void
7535 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
7536 arelent *cache_ptr ATTRIBUTE_UNUSED,
7537 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
7539 abort ();
7542 /* Try to convert a non-ELF reloc into an ELF one. */
7544 bfd_boolean
7545 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
7547 /* Check whether we really have an ELF howto. */
7549 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
7551 bfd_reloc_code_real_type code;
7552 reloc_howto_type *howto;
7554 /* Alien reloc: Try to determine its type to replace it with an
7555 equivalent ELF reloc. */
7557 if (areloc->howto->pc_relative)
7559 switch (areloc->howto->bitsize)
7561 case 8:
7562 code = BFD_RELOC_8_PCREL;
7563 break;
7564 case 12:
7565 code = BFD_RELOC_12_PCREL;
7566 break;
7567 case 16:
7568 code = BFD_RELOC_16_PCREL;
7569 break;
7570 case 24:
7571 code = BFD_RELOC_24_PCREL;
7572 break;
7573 case 32:
7574 code = BFD_RELOC_32_PCREL;
7575 break;
7576 case 64:
7577 code = BFD_RELOC_64_PCREL;
7578 break;
7579 default:
7580 goto fail;
7583 howto = bfd_reloc_type_lookup (abfd, code);
7585 if (areloc->howto->pcrel_offset != howto->pcrel_offset)
7587 if (howto->pcrel_offset)
7588 areloc->addend += areloc->address;
7589 else
7590 areloc->addend -= areloc->address; /* addend is unsigned!! */
7593 else
7595 switch (areloc->howto->bitsize)
7597 case 8:
7598 code = BFD_RELOC_8;
7599 break;
7600 case 14:
7601 code = BFD_RELOC_14;
7602 break;
7603 case 16:
7604 code = BFD_RELOC_16;
7605 break;
7606 case 26:
7607 code = BFD_RELOC_26;
7608 break;
7609 case 32:
7610 code = BFD_RELOC_32;
7611 break;
7612 case 64:
7613 code = BFD_RELOC_64;
7614 break;
7615 default:
7616 goto fail;
7619 howto = bfd_reloc_type_lookup (abfd, code);
7622 if (howto)
7623 areloc->howto = howto;
7624 else
7625 goto fail;
7628 return TRUE;
7630 fail:
7631 (*_bfd_error_handler)
7632 (_("%B: unsupported relocation type %s"),
7633 abfd, areloc->howto->name);
7634 bfd_set_error (bfd_error_bad_value);
7635 return FALSE;
7638 bfd_boolean
7639 _bfd_elf_close_and_cleanup (bfd *abfd)
7641 if (bfd_get_format (abfd) == bfd_object)
7643 if (elf_tdata (abfd) != NULL && elf_shstrtab (abfd) != NULL)
7644 _bfd_elf_strtab_free (elf_shstrtab (abfd));
7645 _bfd_dwarf2_cleanup_debug_info (abfd);
7648 return _bfd_generic_close_and_cleanup (abfd);
7651 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
7652 in the relocation's offset. Thus we cannot allow any sort of sanity
7653 range-checking to interfere. There is nothing else to do in processing
7654 this reloc. */
7656 bfd_reloc_status_type
7657 _bfd_elf_rel_vtable_reloc_fn
7658 (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
7659 struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
7660 void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
7661 bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
7663 return bfd_reloc_ok;
7666 /* Elf core file support. Much of this only works on native
7667 toolchains, since we rely on knowing the
7668 machine-dependent procfs structure in order to pick
7669 out details about the corefile. */
7671 #ifdef HAVE_SYS_PROCFS_H
7672 /* Needed for new procfs interface on sparc-solaris. */
7673 # define _STRUCTURED_PROC 1
7674 # include <sys/procfs.h>
7675 #endif
7677 /* Return a PID that identifies a "thread" for threaded cores, or the
7678 PID of the main process for non-threaded cores. */
7680 static int
7681 elfcore_make_pid (bfd *abfd)
7683 int pid;
7685 pid = elf_tdata (abfd)->core_lwpid;
7686 if (pid == 0)
7687 pid = elf_tdata (abfd)->core_pid;
7689 return pid;
7692 /* If there isn't a section called NAME, make one, using
7693 data from SECT. Note, this function will generate a
7694 reference to NAME, so you shouldn't deallocate or
7695 overwrite it. */
7697 static bfd_boolean
7698 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
7700 asection *sect2;
7702 if (bfd_get_section_by_name (abfd, name) != NULL)
7703 return TRUE;
7705 sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
7706 if (sect2 == NULL)
7707 return FALSE;
7709 sect2->size = sect->size;
7710 sect2->filepos = sect->filepos;
7711 sect2->alignment_power = sect->alignment_power;
7712 return TRUE;
7715 /* Create a pseudosection containing SIZE bytes at FILEPOS. This
7716 actually creates up to two pseudosections:
7717 - For the single-threaded case, a section named NAME, unless
7718 such a section already exists.
7719 - For the multi-threaded case, a section named "NAME/PID", where
7720 PID is elfcore_make_pid (abfd).
7721 Both pseudosections have identical contents. */
7722 bfd_boolean
7723 _bfd_elfcore_make_pseudosection (bfd *abfd,
7724 char *name,
7725 size_t size,
7726 ufile_ptr filepos)
7728 char buf[100];
7729 char *threaded_name;
7730 size_t len;
7731 asection *sect;
7733 /* Build the section name. */
7735 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
7736 len = strlen (buf) + 1;
7737 threaded_name = (char *) bfd_alloc (abfd, len);
7738 if (threaded_name == NULL)
7739 return FALSE;
7740 memcpy (threaded_name, buf, len);
7742 sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
7743 SEC_HAS_CONTENTS);
7744 if (sect == NULL)
7745 return FALSE;
7746 sect->size = size;
7747 sect->filepos = filepos;
7748 sect->alignment_power = 2;
7750 return elfcore_maybe_make_sect (abfd, name, sect);
7753 /* prstatus_t exists on:
7754 solaris 2.5+
7755 linux 2.[01] + glibc
7756 unixware 4.2
7759 #if defined (HAVE_PRSTATUS_T)
7761 static bfd_boolean
7762 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
7764 size_t size;
7765 int offset;
7767 if (note->descsz == sizeof (prstatus_t))
7769 prstatus_t prstat;
7771 size = sizeof (prstat.pr_reg);
7772 offset = offsetof (prstatus_t, pr_reg);
7773 memcpy (&prstat, note->descdata, sizeof (prstat));
7775 /* Do not overwrite the core signal if it
7776 has already been set by another thread. */
7777 if (elf_tdata (abfd)->core_signal == 0)
7778 elf_tdata (abfd)->core_signal = prstat.pr_cursig;
7779 if (elf_tdata (abfd)->core_pid == 0)
7780 elf_tdata (abfd)->core_pid = prstat.pr_pid;
7782 /* pr_who exists on:
7783 solaris 2.5+
7784 unixware 4.2
7785 pr_who doesn't exist on:
7786 linux 2.[01]
7788 #if defined (HAVE_PRSTATUS_T_PR_WHO)
7789 elf_tdata (abfd)->core_lwpid = prstat.pr_who;
7790 #else
7791 elf_tdata (abfd)->core_lwpid = prstat.pr_pid;
7792 #endif
7794 #if defined (HAVE_PRSTATUS32_T)
7795 else if (note->descsz == sizeof (prstatus32_t))
7797 /* 64-bit host, 32-bit corefile */
7798 prstatus32_t prstat;
7800 size = sizeof (prstat.pr_reg);
7801 offset = offsetof (prstatus32_t, pr_reg);
7802 memcpy (&prstat, note->descdata, sizeof (prstat));
7804 /* Do not overwrite the core signal if it
7805 has already been set by another thread. */
7806 if (elf_tdata (abfd)->core_signal == 0)
7807 elf_tdata (abfd)->core_signal = prstat.pr_cursig;
7808 if (elf_tdata (abfd)->core_pid == 0)
7809 elf_tdata (abfd)->core_pid = prstat.pr_pid;
7811 /* pr_who exists on:
7812 solaris 2.5+
7813 unixware 4.2
7814 pr_who doesn't exist on:
7815 linux 2.[01]
7817 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
7818 elf_tdata (abfd)->core_lwpid = prstat.pr_who;
7819 #else
7820 elf_tdata (abfd)->core_lwpid = prstat.pr_pid;
7821 #endif
7823 #endif /* HAVE_PRSTATUS32_T */
7824 else
7826 /* Fail - we don't know how to handle any other
7827 note size (ie. data object type). */
7828 return TRUE;
7831 /* Make a ".reg/999" section and a ".reg" section. */
7832 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
7833 size, note->descpos + offset);
7835 #endif /* defined (HAVE_PRSTATUS_T) */
7837 /* Create a pseudosection containing the exact contents of NOTE. */
7838 static bfd_boolean
7839 elfcore_make_note_pseudosection (bfd *abfd,
7840 char *name,
7841 Elf_Internal_Note *note)
7843 return _bfd_elfcore_make_pseudosection (abfd, name,
7844 note->descsz, note->descpos);
7847 /* There isn't a consistent prfpregset_t across platforms,
7848 but it doesn't matter, because we don't have to pick this
7849 data structure apart. */
7851 static bfd_boolean
7852 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
7854 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
7857 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
7858 type of NT_PRXFPREG. Just include the whole note's contents
7859 literally. */
7861 static bfd_boolean
7862 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
7864 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
7867 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
7868 with a note type of NT_X86_XSTATE. Just include the whole note's
7869 contents literally. */
7871 static bfd_boolean
7872 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
7874 return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
7877 static bfd_boolean
7878 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
7880 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
7883 static bfd_boolean
7884 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
7886 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
7889 static bfd_boolean
7890 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
7892 return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
7895 static bfd_boolean
7896 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
7898 return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
7901 static bfd_boolean
7902 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
7904 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
7907 static bfd_boolean
7908 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
7910 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
7913 static bfd_boolean
7914 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
7916 return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
7919 static bfd_boolean
7920 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
7922 return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
7925 #if defined (HAVE_PRPSINFO_T)
7926 typedef prpsinfo_t elfcore_psinfo_t;
7927 #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
7928 typedef prpsinfo32_t elfcore_psinfo32_t;
7929 #endif
7930 #endif
7932 #if defined (HAVE_PSINFO_T)
7933 typedef psinfo_t elfcore_psinfo_t;
7934 #if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
7935 typedef psinfo32_t elfcore_psinfo32_t;
7936 #endif
7937 #endif
7939 /* return a malloc'ed copy of a string at START which is at
7940 most MAX bytes long, possibly without a terminating '\0'.
7941 the copy will always have a terminating '\0'. */
7943 char *
7944 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
7946 char *dups;
7947 char *end = (char *) memchr (start, '\0', max);
7948 size_t len;
7950 if (end == NULL)
7951 len = max;
7952 else
7953 len = end - start;
7955 dups = (char *) bfd_alloc (abfd, len + 1);
7956 if (dups == NULL)
7957 return NULL;
7959 memcpy (dups, start, len);
7960 dups[len] = '\0';
7962 return dups;
7965 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
7966 static bfd_boolean
7967 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
7969 if (note->descsz == sizeof (elfcore_psinfo_t))
7971 elfcore_psinfo_t psinfo;
7973 memcpy (&psinfo, note->descdata, sizeof (psinfo));
7975 elf_tdata (abfd)->core_program
7976 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
7977 sizeof (psinfo.pr_fname));
7979 elf_tdata (abfd)->core_command
7980 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
7981 sizeof (psinfo.pr_psargs));
7983 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
7984 else if (note->descsz == sizeof (elfcore_psinfo32_t))
7986 /* 64-bit host, 32-bit corefile */
7987 elfcore_psinfo32_t psinfo;
7989 memcpy (&psinfo, note->descdata, sizeof (psinfo));
7991 elf_tdata (abfd)->core_program
7992 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
7993 sizeof (psinfo.pr_fname));
7995 elf_tdata (abfd)->core_command
7996 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
7997 sizeof (psinfo.pr_psargs));
7999 #endif
8001 else
8003 /* Fail - we don't know how to handle any other
8004 note size (ie. data object type). */
8005 return TRUE;
8008 /* Note that for some reason, a spurious space is tacked
8009 onto the end of the args in some (at least one anyway)
8010 implementations, so strip it off if it exists. */
8013 char *command = elf_tdata (abfd)->core_command;
8014 int n = strlen (command);
8016 if (0 < n && command[n - 1] == ' ')
8017 command[n - 1] = '\0';
8020 return TRUE;
8022 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
8024 #if defined (HAVE_PSTATUS_T)
8025 static bfd_boolean
8026 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
8028 if (note->descsz == sizeof (pstatus_t)
8029 #if defined (HAVE_PXSTATUS_T)
8030 || note->descsz == sizeof (pxstatus_t)
8031 #endif
8034 pstatus_t pstat;
8036 memcpy (&pstat, note->descdata, sizeof (pstat));
8038 elf_tdata (abfd)->core_pid = pstat.pr_pid;
8040 #if defined (HAVE_PSTATUS32_T)
8041 else if (note->descsz == sizeof (pstatus32_t))
8043 /* 64-bit host, 32-bit corefile */
8044 pstatus32_t pstat;
8046 memcpy (&pstat, note->descdata, sizeof (pstat));
8048 elf_tdata (abfd)->core_pid = pstat.pr_pid;
8050 #endif
8051 /* Could grab some more details from the "representative"
8052 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
8053 NT_LWPSTATUS note, presumably. */
8055 return TRUE;
8057 #endif /* defined (HAVE_PSTATUS_T) */
8059 #if defined (HAVE_LWPSTATUS_T)
8060 static bfd_boolean
8061 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
8063 lwpstatus_t lwpstat;
8064 char buf[100];
8065 char *name;
8066 size_t len;
8067 asection *sect;
8069 if (note->descsz != sizeof (lwpstat)
8070 #if defined (HAVE_LWPXSTATUS_T)
8071 && note->descsz != sizeof (lwpxstatus_t)
8072 #endif
8074 return TRUE;
8076 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
8078 elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
8079 /* Do not overwrite the core signal if it has already been set by
8080 another thread. */
8081 if (elf_tdata (abfd)->core_signal == 0)
8082 elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
8084 /* Make a ".reg/999" section. */
8086 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
8087 len = strlen (buf) + 1;
8088 name = bfd_alloc (abfd, len);
8089 if (name == NULL)
8090 return FALSE;
8091 memcpy (name, buf, len);
8093 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8094 if (sect == NULL)
8095 return FALSE;
8097 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8098 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
8099 sect->filepos = note->descpos
8100 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
8101 #endif
8103 #if defined (HAVE_LWPSTATUS_T_PR_REG)
8104 sect->size = sizeof (lwpstat.pr_reg);
8105 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
8106 #endif
8108 sect->alignment_power = 2;
8110 if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
8111 return FALSE;
8113 /* Make a ".reg2/999" section */
8115 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
8116 len = strlen (buf) + 1;
8117 name = bfd_alloc (abfd, len);
8118 if (name == NULL)
8119 return FALSE;
8120 memcpy (name, buf, len);
8122 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8123 if (sect == NULL)
8124 return FALSE;
8126 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8127 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
8128 sect->filepos = note->descpos
8129 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
8130 #endif
8132 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
8133 sect->size = sizeof (lwpstat.pr_fpreg);
8134 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
8135 #endif
8137 sect->alignment_power = 2;
8139 return elfcore_maybe_make_sect (abfd, ".reg2", sect);
8141 #endif /* defined (HAVE_LWPSTATUS_T) */
8143 static bfd_boolean
8144 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
8146 char buf[30];
8147 char *name;
8148 size_t len;
8149 asection *sect;
8150 int type;
8151 int is_active_thread;
8152 bfd_vma base_addr;
8154 if (note->descsz < 728)
8155 return TRUE;
8157 if (! CONST_STRNEQ (note->namedata, "win32"))
8158 return TRUE;
8160 type = bfd_get_32 (abfd, note->descdata);
8162 switch (type)
8164 case 1 /* NOTE_INFO_PROCESS */:
8165 /* FIXME: need to add ->core_command. */
8166 /* process_info.pid */
8167 elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 8);
8168 /* process_info.signal */
8169 elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 12);
8170 break;
8172 case 2 /* NOTE_INFO_THREAD */:
8173 /* Make a ".reg/999" section. */
8174 /* thread_info.tid */
8175 sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8));
8177 len = strlen (buf) + 1;
8178 name = (char *) bfd_alloc (abfd, len);
8179 if (name == NULL)
8180 return FALSE;
8182 memcpy (name, buf, len);
8184 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8185 if (sect == NULL)
8186 return FALSE;
8188 /* sizeof (thread_info.thread_context) */
8189 sect->size = 716;
8190 /* offsetof (thread_info.thread_context) */
8191 sect->filepos = note->descpos + 12;
8192 sect->alignment_power = 2;
8194 /* thread_info.is_active_thread */
8195 is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
8197 if (is_active_thread)
8198 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
8199 return FALSE;
8200 break;
8202 case 3 /* NOTE_INFO_MODULE */:
8203 /* Make a ".module/xxxxxxxx" section. */
8204 /* module_info.base_address */
8205 base_addr = bfd_get_32 (abfd, note->descdata + 4);
8206 sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
8208 len = strlen (buf) + 1;
8209 name = (char *) bfd_alloc (abfd, len);
8210 if (name == NULL)
8211 return FALSE;
8213 memcpy (name, buf, len);
8215 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8217 if (sect == NULL)
8218 return FALSE;
8220 sect->size = note->descsz;
8221 sect->filepos = note->descpos;
8222 sect->alignment_power = 2;
8223 break;
8225 default:
8226 return TRUE;
8229 return TRUE;
8232 static bfd_boolean
8233 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
8235 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8237 switch (note->type)
8239 default:
8240 return TRUE;
8242 case NT_PRSTATUS:
8243 if (bed->elf_backend_grok_prstatus)
8244 if ((*bed->elf_backend_grok_prstatus) (abfd, note))
8245 return TRUE;
8246 #if defined (HAVE_PRSTATUS_T)
8247 return elfcore_grok_prstatus (abfd, note);
8248 #else
8249 return TRUE;
8250 #endif
8252 #if defined (HAVE_PSTATUS_T)
8253 case NT_PSTATUS:
8254 return elfcore_grok_pstatus (abfd, note);
8255 #endif
8257 #if defined (HAVE_LWPSTATUS_T)
8258 case NT_LWPSTATUS:
8259 return elfcore_grok_lwpstatus (abfd, note);
8260 #endif
8262 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
8263 return elfcore_grok_prfpreg (abfd, note);
8265 case NT_WIN32PSTATUS:
8266 return elfcore_grok_win32pstatus (abfd, note);
8268 case NT_PRXFPREG: /* Linux SSE extension */
8269 if (note->namesz == 6
8270 && strcmp (note->namedata, "LINUX") == 0)
8271 return elfcore_grok_prxfpreg (abfd, note);
8272 else
8273 return TRUE;
8275 case NT_X86_XSTATE: /* Linux XSAVE extension */
8276 if (note->namesz == 6
8277 && strcmp (note->namedata, "LINUX") == 0)
8278 return elfcore_grok_xstatereg (abfd, note);
8279 else
8280 return TRUE;
8282 case NT_PPC_VMX:
8283 if (note->namesz == 6
8284 && strcmp (note->namedata, "LINUX") == 0)
8285 return elfcore_grok_ppc_vmx (abfd, note);
8286 else
8287 return TRUE;
8289 case NT_PPC_VSX:
8290 if (note->namesz == 6
8291 && strcmp (note->namedata, "LINUX") == 0)
8292 return elfcore_grok_ppc_vsx (abfd, note);
8293 else
8294 return TRUE;
8296 case NT_S390_HIGH_GPRS:
8297 if (note->namesz == 6
8298 && strcmp (note->namedata, "LINUX") == 0)
8299 return elfcore_grok_s390_high_gprs (abfd, note);
8300 else
8301 return TRUE;
8303 case NT_S390_TIMER:
8304 if (note->namesz == 6
8305 && strcmp (note->namedata, "LINUX") == 0)
8306 return elfcore_grok_s390_timer (abfd, note);
8307 else
8308 return TRUE;
8310 case NT_S390_TODCMP:
8311 if (note->namesz == 6
8312 && strcmp (note->namedata, "LINUX") == 0)
8313 return elfcore_grok_s390_todcmp (abfd, note);
8314 else
8315 return TRUE;
8317 case NT_S390_TODPREG:
8318 if (note->namesz == 6
8319 && strcmp (note->namedata, "LINUX") == 0)
8320 return elfcore_grok_s390_todpreg (abfd, note);
8321 else
8322 return TRUE;
8324 case NT_S390_CTRS:
8325 if (note->namesz == 6
8326 && strcmp (note->namedata, "LINUX") == 0)
8327 return elfcore_grok_s390_ctrs (abfd, note);
8328 else
8329 return TRUE;
8331 case NT_S390_PREFIX:
8332 if (note->namesz == 6
8333 && strcmp (note->namedata, "LINUX") == 0)
8334 return elfcore_grok_s390_prefix (abfd, note);
8335 else
8336 return TRUE;
8338 case NT_PRPSINFO:
8339 case NT_PSINFO:
8340 if (bed->elf_backend_grok_psinfo)
8341 if ((*bed->elf_backend_grok_psinfo) (abfd, note))
8342 return TRUE;
8343 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8344 return elfcore_grok_psinfo (abfd, note);
8345 #else
8346 return TRUE;
8347 #endif
8349 case NT_AUXV:
8351 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
8352 SEC_HAS_CONTENTS);
8354 if (sect == NULL)
8355 return FALSE;
8356 sect->size = note->descsz;
8357 sect->filepos = note->descpos;
8358 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8360 return TRUE;
8365 static bfd_boolean
8366 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
8368 elf_tdata (abfd)->build_id_size = note->descsz;
8369 elf_tdata (abfd)->build_id = (bfd_byte *) bfd_alloc (abfd, note->descsz);
8370 if (elf_tdata (abfd)->build_id == NULL)
8371 return FALSE;
8373 memcpy (elf_tdata (abfd)->build_id, note->descdata, note->descsz);
8375 return TRUE;
8378 static bfd_boolean
8379 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
8381 switch (note->type)
8383 default:
8384 return TRUE;
8386 case NT_GNU_BUILD_ID:
8387 return elfobj_grok_gnu_build_id (abfd, note);
8391 static bfd_boolean
8392 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
8394 char *cp;
8396 cp = strchr (note->namedata, '@');
8397 if (cp != NULL)
8399 *lwpidp = atoi(cp + 1);
8400 return TRUE;
8402 return FALSE;
8405 static bfd_boolean
8406 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
8408 /* Signal number at offset 0x08. */
8409 elf_tdata (abfd)->core_signal
8410 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
8412 /* Process ID at offset 0x50. */
8413 elf_tdata (abfd)->core_pid
8414 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
8416 /* Command name at 0x7c (max 32 bytes, including nul). */
8417 elf_tdata (abfd)->core_command
8418 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
8420 return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
8421 note);
8424 static bfd_boolean
8425 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
8427 int lwp;
8429 if (elfcore_netbsd_get_lwpid (note, &lwp))
8430 elf_tdata (abfd)->core_lwpid = lwp;
8432 if (note->type == NT_NETBSDCORE_PROCINFO)
8434 /* NetBSD-specific core "procinfo". Note that we expect to
8435 find this note before any of the others, which is fine,
8436 since the kernel writes this note out first when it
8437 creates a core file. */
8439 return elfcore_grok_netbsd_procinfo (abfd, note);
8442 /* As of Jan 2002 there are no other machine-independent notes
8443 defined for NetBSD core files. If the note type is less
8444 than the start of the machine-dependent note types, we don't
8445 understand it. */
8447 if (note->type < NT_NETBSDCORE_FIRSTMACH)
8448 return TRUE;
8451 switch (bfd_get_arch (abfd))
8453 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
8454 PT_GETFPREGS == mach+2. */
8456 case bfd_arch_alpha:
8457 case bfd_arch_sparc:
8458 switch (note->type)
8460 case NT_NETBSDCORE_FIRSTMACH+0:
8461 return elfcore_make_note_pseudosection (abfd, ".reg", note);
8463 case NT_NETBSDCORE_FIRSTMACH+2:
8464 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8466 default:
8467 return TRUE;
8470 /* On all other arch's, PT_GETREGS == mach+1 and
8471 PT_GETFPREGS == mach+3. */
8473 default:
8474 switch (note->type)
8476 case NT_NETBSDCORE_FIRSTMACH+1:
8477 return elfcore_make_note_pseudosection (abfd, ".reg", note);
8479 case NT_NETBSDCORE_FIRSTMACH+3:
8480 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8482 default:
8483 return TRUE;
8486 /* NOTREACHED */
8489 static bfd_boolean
8490 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
8492 /* Signal number at offset 0x08. */
8493 elf_tdata (abfd)->core_signal
8494 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
8496 /* Process ID at offset 0x20. */
8497 elf_tdata (abfd)->core_pid
8498 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
8500 /* Command name at 0x48 (max 32 bytes, including nul). */
8501 elf_tdata (abfd)->core_command
8502 = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
8504 return TRUE;
8507 static bfd_boolean
8508 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
8510 if (note->type == NT_OPENBSD_PROCINFO)
8511 return elfcore_grok_openbsd_procinfo (abfd, note);
8513 if (note->type == NT_OPENBSD_REGS)
8514 return elfcore_make_note_pseudosection (abfd, ".reg", note);
8516 if (note->type == NT_OPENBSD_FPREGS)
8517 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8519 if (note->type == NT_OPENBSD_XFPREGS)
8520 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
8522 if (note->type == NT_OPENBSD_AUXV)
8524 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
8525 SEC_HAS_CONTENTS);
8527 if (sect == NULL)
8528 return FALSE;
8529 sect->size = note->descsz;
8530 sect->filepos = note->descpos;
8531 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8533 return TRUE;
8536 if (note->type == NT_OPENBSD_WCOOKIE)
8538 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
8539 SEC_HAS_CONTENTS);
8541 if (sect == NULL)
8542 return FALSE;
8543 sect->size = note->descsz;
8544 sect->filepos = note->descpos;
8545 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8547 return TRUE;
8550 return TRUE;
8553 static bfd_boolean
8554 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
8556 void *ddata = note->descdata;
8557 char buf[100];
8558 char *name;
8559 asection *sect;
8560 short sig;
8561 unsigned flags;
8563 /* nto_procfs_status 'pid' field is at offset 0. */
8564 elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
8566 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */
8567 *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
8569 /* nto_procfs_status 'flags' field is at offset 8. */
8570 flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
8572 /* nto_procfs_status 'what' field is at offset 14. */
8573 if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
8575 elf_tdata (abfd)->core_signal = sig;
8576 elf_tdata (abfd)->core_lwpid = *tid;
8579 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores
8580 do not come from signals so we make sure we set the current
8581 thread just in case. */
8582 if (flags & 0x00000080)
8583 elf_tdata (abfd)->core_lwpid = *tid;
8585 /* Make a ".qnx_core_status/%d" section. */
8586 sprintf (buf, ".qnx_core_status/%ld", *tid);
8588 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
8589 if (name == NULL)
8590 return FALSE;
8591 strcpy (name, buf);
8593 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8594 if (sect == NULL)
8595 return FALSE;
8597 sect->size = note->descsz;
8598 sect->filepos = note->descpos;
8599 sect->alignment_power = 2;
8601 return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
8604 static bfd_boolean
8605 elfcore_grok_nto_regs (bfd *abfd,
8606 Elf_Internal_Note *note,
8607 long tid,
8608 char *base)
8610 char buf[100];
8611 char *name;
8612 asection *sect;
8614 /* Make a "(base)/%d" section. */
8615 sprintf (buf, "%s/%ld", base, tid);
8617 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
8618 if (name == NULL)
8619 return FALSE;
8620 strcpy (name, buf);
8622 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8623 if (sect == NULL)
8624 return FALSE;
8626 sect->size = note->descsz;
8627 sect->filepos = note->descpos;
8628 sect->alignment_power = 2;
8630 /* This is the current thread. */
8631 if (elf_tdata (abfd)->core_lwpid == tid)
8632 return elfcore_maybe_make_sect (abfd, base, sect);
8634 return TRUE;
8637 #define BFD_QNT_CORE_INFO 7
8638 #define BFD_QNT_CORE_STATUS 8
8639 #define BFD_QNT_CORE_GREG 9
8640 #define BFD_QNT_CORE_FPREG 10
8642 static bfd_boolean
8643 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
8645 /* Every GREG section has a STATUS section before it. Store the
8646 tid from the previous call to pass down to the next gregs
8647 function. */
8648 static long tid = 1;
8650 switch (note->type)
8652 case BFD_QNT_CORE_INFO:
8653 return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
8654 case BFD_QNT_CORE_STATUS:
8655 return elfcore_grok_nto_status (abfd, note, &tid);
8656 case BFD_QNT_CORE_GREG:
8657 return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
8658 case BFD_QNT_CORE_FPREG:
8659 return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
8660 default:
8661 return TRUE;
8665 static bfd_boolean
8666 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
8668 char *name;
8669 asection *sect;
8670 size_t len;
8672 /* Use note name as section name. */
8673 len = note->namesz;
8674 name = (char *) bfd_alloc (abfd, len);
8675 if (name == NULL)
8676 return FALSE;
8677 memcpy (name, note->namedata, len);
8678 name[len - 1] = '\0';
8680 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8681 if (sect == NULL)
8682 return FALSE;
8684 sect->size = note->descsz;
8685 sect->filepos = note->descpos;
8686 sect->alignment_power = 1;
8688 return TRUE;
8691 /* Function: elfcore_write_note
8693 Inputs:
8694 buffer to hold note, and current size of buffer
8695 name of note
8696 type of note
8697 data for note
8698 size of data for note
8700 Writes note to end of buffer. ELF64 notes are written exactly as
8701 for ELF32, despite the current (as of 2006) ELF gabi specifying
8702 that they ought to have 8-byte namesz and descsz field, and have
8703 8-byte alignment. Other writers, eg. Linux kernel, do the same.
8705 Return:
8706 Pointer to realloc'd buffer, *BUFSIZ updated. */
8708 char *
8709 elfcore_write_note (bfd *abfd,
8710 char *buf,
8711 int *bufsiz,
8712 const char *name,
8713 int type,
8714 const void *input,
8715 int size)
8717 Elf_External_Note *xnp;
8718 size_t namesz;
8719 size_t newspace;
8720 char *dest;
8722 namesz = 0;
8723 if (name != NULL)
8724 namesz = strlen (name) + 1;
8726 newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
8728 buf = (char *) realloc (buf, *bufsiz + newspace);
8729 if (buf == NULL)
8730 return buf;
8731 dest = buf + *bufsiz;
8732 *bufsiz += newspace;
8733 xnp = (Elf_External_Note *) dest;
8734 H_PUT_32 (abfd, namesz, xnp->namesz);
8735 H_PUT_32 (abfd, size, xnp->descsz);
8736 H_PUT_32 (abfd, type, xnp->type);
8737 dest = xnp->name;
8738 if (name != NULL)
8740 memcpy (dest, name, namesz);
8741 dest += namesz;
8742 while (namesz & 3)
8744 *dest++ = '\0';
8745 ++namesz;
8748 memcpy (dest, input, size);
8749 dest += size;
8750 while (size & 3)
8752 *dest++ = '\0';
8753 ++size;
8755 return buf;
8758 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8759 char *
8760 elfcore_write_prpsinfo (bfd *abfd,
8761 char *buf,
8762 int *bufsiz,
8763 const char *fname,
8764 const char *psargs)
8766 const char *note_name = "CORE";
8767 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8769 if (bed->elf_backend_write_core_note != NULL)
8771 char *ret;
8772 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
8773 NT_PRPSINFO, fname, psargs);
8774 if (ret != NULL)
8775 return ret;
8778 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
8779 if (bed->s->elfclass == ELFCLASS32)
8781 #if defined (HAVE_PSINFO32_T)
8782 psinfo32_t data;
8783 int note_type = NT_PSINFO;
8784 #else
8785 prpsinfo32_t data;
8786 int note_type = NT_PRPSINFO;
8787 #endif
8789 memset (&data, 0, sizeof (data));
8790 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
8791 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
8792 return elfcore_write_note (abfd, buf, bufsiz,
8793 note_name, note_type, &data, sizeof (data));
8795 else
8796 #endif
8798 #if defined (HAVE_PSINFO_T)
8799 psinfo_t data;
8800 int note_type = NT_PSINFO;
8801 #else
8802 prpsinfo_t data;
8803 int note_type = NT_PRPSINFO;
8804 #endif
8806 memset (&data, 0, sizeof (data));
8807 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
8808 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
8809 return elfcore_write_note (abfd, buf, bufsiz,
8810 note_name, note_type, &data, sizeof (data));
8813 #endif /* PSINFO_T or PRPSINFO_T */
8815 #if defined (HAVE_PRSTATUS_T)
8816 char *
8817 elfcore_write_prstatus (bfd *abfd,
8818 char *buf,
8819 int *bufsiz,
8820 long pid,
8821 int cursig,
8822 const void *gregs)
8824 const char *note_name = "CORE";
8825 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8827 if (bed->elf_backend_write_core_note != NULL)
8829 char *ret;
8830 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
8831 NT_PRSTATUS,
8832 pid, cursig, gregs);
8833 if (ret != NULL)
8834 return ret;
8837 #if defined (HAVE_PRSTATUS32_T)
8838 if (bed->s->elfclass == ELFCLASS32)
8840 prstatus32_t prstat;
8842 memset (&prstat, 0, sizeof (prstat));
8843 prstat.pr_pid = pid;
8844 prstat.pr_cursig = cursig;
8845 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
8846 return elfcore_write_note (abfd, buf, bufsiz, note_name,
8847 NT_PRSTATUS, &prstat, sizeof (prstat));
8849 else
8850 #endif
8852 prstatus_t prstat;
8854 memset (&prstat, 0, sizeof (prstat));
8855 prstat.pr_pid = pid;
8856 prstat.pr_cursig = cursig;
8857 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
8858 return elfcore_write_note (abfd, buf, bufsiz, note_name,
8859 NT_PRSTATUS, &prstat, sizeof (prstat));
8862 #endif /* HAVE_PRSTATUS_T */
8864 #if defined (HAVE_LWPSTATUS_T)
8865 char *
8866 elfcore_write_lwpstatus (bfd *abfd,
8867 char *buf,
8868 int *bufsiz,
8869 long pid,
8870 int cursig,
8871 const void *gregs)
8873 lwpstatus_t lwpstat;
8874 const char *note_name = "CORE";
8876 memset (&lwpstat, 0, sizeof (lwpstat));
8877 lwpstat.pr_lwpid = pid >> 16;
8878 lwpstat.pr_cursig = cursig;
8879 #if defined (HAVE_LWPSTATUS_T_PR_REG)
8880 memcpy (lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
8881 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8882 #if !defined(gregs)
8883 memcpy (lwpstat.pr_context.uc_mcontext.gregs,
8884 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
8885 #else
8886 memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
8887 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
8888 #endif
8889 #endif
8890 return elfcore_write_note (abfd, buf, bufsiz, note_name,
8891 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
8893 #endif /* HAVE_LWPSTATUS_T */
8895 #if defined (HAVE_PSTATUS_T)
8896 char *
8897 elfcore_write_pstatus (bfd *abfd,
8898 char *buf,
8899 int *bufsiz,
8900 long pid,
8901 int cursig ATTRIBUTE_UNUSED,
8902 const void *gregs ATTRIBUTE_UNUSED)
8904 const char *note_name = "CORE";
8905 #if defined (HAVE_PSTATUS32_T)
8906 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8908 if (bed->s->elfclass == ELFCLASS32)
8910 pstatus32_t pstat;
8912 memset (&pstat, 0, sizeof (pstat));
8913 pstat.pr_pid = pid & 0xffff;
8914 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
8915 NT_PSTATUS, &pstat, sizeof (pstat));
8916 return buf;
8918 else
8919 #endif
8921 pstatus_t pstat;
8923 memset (&pstat, 0, sizeof (pstat));
8924 pstat.pr_pid = pid & 0xffff;
8925 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
8926 NT_PSTATUS, &pstat, sizeof (pstat));
8927 return buf;
8930 #endif /* HAVE_PSTATUS_T */
8932 char *
8933 elfcore_write_prfpreg (bfd *abfd,
8934 char *buf,
8935 int *bufsiz,
8936 const void *fpregs,
8937 int size)
8939 const char *note_name = "CORE";
8940 return elfcore_write_note (abfd, buf, bufsiz,
8941 note_name, NT_FPREGSET, fpregs, size);
8944 char *
8945 elfcore_write_prxfpreg (bfd *abfd,
8946 char *buf,
8947 int *bufsiz,
8948 const void *xfpregs,
8949 int size)
8951 char *note_name = "LINUX";
8952 return elfcore_write_note (abfd, buf, bufsiz,
8953 note_name, NT_PRXFPREG, xfpregs, size);
8956 char *
8957 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
8958 const void *xfpregs, int size)
8960 char *note_name = "LINUX";
8961 return elfcore_write_note (abfd, buf, bufsiz,
8962 note_name, NT_X86_XSTATE, xfpregs, size);
8965 char *
8966 elfcore_write_ppc_vmx (bfd *abfd,
8967 char *buf,
8968 int *bufsiz,
8969 const void *ppc_vmx,
8970 int size)
8972 char *note_name = "LINUX";
8973 return elfcore_write_note (abfd, buf, bufsiz,
8974 note_name, NT_PPC_VMX, ppc_vmx, size);
8977 char *
8978 elfcore_write_ppc_vsx (bfd *abfd,
8979 char *buf,
8980 int *bufsiz,
8981 const void *ppc_vsx,
8982 int size)
8984 char *note_name = "LINUX";
8985 return elfcore_write_note (abfd, buf, bufsiz,
8986 note_name, NT_PPC_VSX, ppc_vsx, size);
8989 static char *
8990 elfcore_write_s390_high_gprs (bfd *abfd,
8991 char *buf,
8992 int *bufsiz,
8993 const void *s390_high_gprs,
8994 int size)
8996 char *note_name = "LINUX";
8997 return elfcore_write_note (abfd, buf, bufsiz,
8998 note_name, NT_S390_HIGH_GPRS,
8999 s390_high_gprs, size);
9002 char *
9003 elfcore_write_s390_timer (bfd *abfd,
9004 char *buf,
9005 int *bufsiz,
9006 const void *s390_timer,
9007 int size)
9009 char *note_name = "LINUX";
9010 return elfcore_write_note (abfd, buf, bufsiz,
9011 note_name, NT_S390_TIMER, s390_timer, size);
9014 char *
9015 elfcore_write_s390_todcmp (bfd *abfd,
9016 char *buf,
9017 int *bufsiz,
9018 const void *s390_todcmp,
9019 int size)
9021 char *note_name = "LINUX";
9022 return elfcore_write_note (abfd, buf, bufsiz,
9023 note_name, NT_S390_TODCMP, s390_todcmp, size);
9026 char *
9027 elfcore_write_s390_todpreg (bfd *abfd,
9028 char *buf,
9029 int *bufsiz,
9030 const void *s390_todpreg,
9031 int size)
9033 char *note_name = "LINUX";
9034 return elfcore_write_note (abfd, buf, bufsiz,
9035 note_name, NT_S390_TODPREG, s390_todpreg, size);
9038 char *
9039 elfcore_write_s390_ctrs (bfd *abfd,
9040 char *buf,
9041 int *bufsiz,
9042 const void *s390_ctrs,
9043 int size)
9045 char *note_name = "LINUX";
9046 return elfcore_write_note (abfd, buf, bufsiz,
9047 note_name, NT_S390_CTRS, s390_ctrs, size);
9050 char *
9051 elfcore_write_s390_prefix (bfd *abfd,
9052 char *buf,
9053 int *bufsiz,
9054 const void *s390_prefix,
9055 int size)
9057 char *note_name = "LINUX";
9058 return elfcore_write_note (abfd, buf, bufsiz,
9059 note_name, NT_S390_PREFIX, s390_prefix, size);
9062 char *
9063 elfcore_write_register_note (bfd *abfd,
9064 char *buf,
9065 int *bufsiz,
9066 const char *section,
9067 const void *data,
9068 int size)
9070 if (strcmp (section, ".reg2") == 0)
9071 return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
9072 if (strcmp (section, ".reg-xfp") == 0)
9073 return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
9074 if (strcmp (section, ".reg-xstate") == 0)
9075 return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
9076 if (strcmp (section, ".reg-ppc-vmx") == 0)
9077 return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
9078 if (strcmp (section, ".reg-ppc-vsx") == 0)
9079 return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
9080 if (strcmp (section, ".reg-s390-high-gprs") == 0)
9081 return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
9082 if (strcmp (section, ".reg-s390-timer") == 0)
9083 return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
9084 if (strcmp (section, ".reg-s390-todcmp") == 0)
9085 return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
9086 if (strcmp (section, ".reg-s390-todpreg") == 0)
9087 return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
9088 if (strcmp (section, ".reg-s390-ctrs") == 0)
9089 return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
9090 if (strcmp (section, ".reg-s390-prefix") == 0)
9091 return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
9092 return NULL;
9095 static bfd_boolean
9096 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset)
9098 char *p;
9100 p = buf;
9101 while (p < buf + size)
9103 /* FIXME: bad alignment assumption. */
9104 Elf_External_Note *xnp = (Elf_External_Note *) p;
9105 Elf_Internal_Note in;
9107 if (offsetof (Elf_External_Note, name) > buf - p + size)
9108 return FALSE;
9110 in.type = H_GET_32 (abfd, xnp->type);
9112 in.namesz = H_GET_32 (abfd, xnp->namesz);
9113 in.namedata = xnp->name;
9114 if (in.namesz > buf - in.namedata + size)
9115 return FALSE;
9117 in.descsz = H_GET_32 (abfd, xnp->descsz);
9118 in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
9119 in.descpos = offset + (in.descdata - buf);
9120 if (in.descsz != 0
9121 && (in.descdata >= buf + size
9122 || in.descsz > buf - in.descdata + size))
9123 return FALSE;
9125 switch (bfd_get_format (abfd))
9127 default:
9128 return TRUE;
9130 case bfd_core:
9131 if (CONST_STRNEQ (in.namedata, "NetBSD-CORE"))
9133 if (! elfcore_grok_netbsd_note (abfd, &in))
9134 return FALSE;
9136 else if (CONST_STRNEQ (in.namedata, "OpenBSD"))
9138 if (! elfcore_grok_openbsd_note (abfd, &in))
9139 return FALSE;
9141 else if (CONST_STRNEQ (in.namedata, "QNX"))
9143 if (! elfcore_grok_nto_note (abfd, &in))
9144 return FALSE;
9146 else if (CONST_STRNEQ (in.namedata, "SPU/"))
9148 if (! elfcore_grok_spu_note (abfd, &in))
9149 return FALSE;
9151 else
9153 if (! elfcore_grok_note (abfd, &in))
9154 return FALSE;
9156 break;
9158 case bfd_object:
9159 if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
9161 if (! elfobj_grok_gnu_note (abfd, &in))
9162 return FALSE;
9164 break;
9167 p = in.descdata + BFD_ALIGN (in.descsz, 4);
9170 return TRUE;
9173 static bfd_boolean
9174 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size)
9176 char *buf;
9178 if (size <= 0)
9179 return TRUE;
9181 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
9182 return FALSE;
9184 buf = (char *) bfd_malloc (size);
9185 if (buf == NULL)
9186 return FALSE;
9188 if (bfd_bread (buf, size, abfd) != size
9189 || !elf_parse_notes (abfd, buf, size, offset))
9191 free (buf);
9192 return FALSE;
9195 free (buf);
9196 return TRUE;
9199 /* Providing external access to the ELF program header table. */
9201 /* Return an upper bound on the number of bytes required to store a
9202 copy of ABFD's program header table entries. Return -1 if an error
9203 occurs; bfd_get_error will return an appropriate code. */
9205 long
9206 bfd_get_elf_phdr_upper_bound (bfd *abfd)
9208 if (abfd->xvec->flavour != bfd_target_elf_flavour)
9210 bfd_set_error (bfd_error_wrong_format);
9211 return -1;
9214 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
9217 /* Copy ABFD's program header table entries to *PHDRS. The entries
9218 will be stored as an array of Elf_Internal_Phdr structures, as
9219 defined in include/elf/internal.h. To find out how large the
9220 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
9222 Return the number of program header table entries read, or -1 if an
9223 error occurs; bfd_get_error will return an appropriate code. */
9226 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
9228 int num_phdrs;
9230 if (abfd->xvec->flavour != bfd_target_elf_flavour)
9232 bfd_set_error (bfd_error_wrong_format);
9233 return -1;
9236 num_phdrs = elf_elfheader (abfd)->e_phnum;
9237 memcpy (phdrs, elf_tdata (abfd)->phdr,
9238 num_phdrs * sizeof (Elf_Internal_Phdr));
9240 return num_phdrs;
9243 enum elf_reloc_type_class
9244 _bfd_elf_reloc_type_class (const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
9246 return reloc_class_normal;
9249 /* For RELA architectures, return the relocation value for a
9250 relocation against a local symbol. */
9252 bfd_vma
9253 _bfd_elf_rela_local_sym (bfd *abfd,
9254 Elf_Internal_Sym *sym,
9255 asection **psec,
9256 Elf_Internal_Rela *rel)
9258 asection *sec = *psec;
9259 bfd_vma relocation;
9261 relocation = (sec->output_section->vma
9262 + sec->output_offset
9263 + sym->st_value);
9264 if ((sec->flags & SEC_MERGE)
9265 && ELF_ST_TYPE (sym->st_info) == STT_SECTION
9266 && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
9268 rel->r_addend =
9269 _bfd_merged_section_offset (abfd, psec,
9270 elf_section_data (sec)->sec_info,
9271 sym->st_value + rel->r_addend);
9272 if (sec != *psec)
9274 /* If we have changed the section, and our original section is
9275 marked with SEC_EXCLUDE, it means that the original
9276 SEC_MERGE section has been completely subsumed in some
9277 other SEC_MERGE section. In this case, we need to leave
9278 some info around for --emit-relocs. */
9279 if ((sec->flags & SEC_EXCLUDE) != 0)
9280 sec->kept_section = *psec;
9281 sec = *psec;
9283 rel->r_addend -= relocation;
9284 rel->r_addend += sec->output_section->vma + sec->output_offset;
9286 return relocation;
9289 bfd_vma
9290 _bfd_elf_rel_local_sym (bfd *abfd,
9291 Elf_Internal_Sym *sym,
9292 asection **psec,
9293 bfd_vma addend)
9295 asection *sec = *psec;
9297 if (sec->sec_info_type != ELF_INFO_TYPE_MERGE)
9298 return sym->st_value + addend;
9300 return _bfd_merged_section_offset (abfd, psec,
9301 elf_section_data (sec)->sec_info,
9302 sym->st_value + addend);
9305 bfd_vma
9306 _bfd_elf_section_offset (bfd *abfd,
9307 struct bfd_link_info *info,
9308 asection *sec,
9309 bfd_vma offset)
9311 switch (sec->sec_info_type)
9313 case ELF_INFO_TYPE_STABS:
9314 return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
9315 offset);
9316 case ELF_INFO_TYPE_EH_FRAME:
9317 return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
9318 default:
9319 return offset;
9323 /* Create a new BFD as if by bfd_openr. Rather than opening a file,
9324 reconstruct an ELF file by reading the segments out of remote memory
9325 based on the ELF file header at EHDR_VMA and the ELF program headers it
9326 points to. If not null, *LOADBASEP is filled in with the difference
9327 between the VMAs from which the segments were read, and the VMAs the
9328 file headers (and hence BFD's idea of each section's VMA) put them at.
9330 The function TARGET_READ_MEMORY is called to copy LEN bytes from the
9331 remote memory at target address VMA into the local buffer at MYADDR; it
9332 should return zero on success or an `errno' code on failure. TEMPL must
9333 be a BFD for an ELF target with the word size and byte order found in
9334 the remote memory. */
9336 bfd *
9337 bfd_elf_bfd_from_remote_memory
9338 (bfd *templ,
9339 bfd_vma ehdr_vma,
9340 bfd_vma *loadbasep,
9341 int (*target_read_memory) (bfd_vma, bfd_byte *, int))
9343 return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
9344 (templ, ehdr_vma, loadbasep, target_read_memory);
9347 long
9348 _bfd_elf_get_synthetic_symtab (bfd *abfd,
9349 long symcount ATTRIBUTE_UNUSED,
9350 asymbol **syms ATTRIBUTE_UNUSED,
9351 long dynsymcount,
9352 asymbol **dynsyms,
9353 asymbol **ret)
9355 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9356 asection *relplt;
9357 asymbol *s;
9358 const char *relplt_name;
9359 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
9360 arelent *p;
9361 long count, i, n;
9362 size_t size;
9363 Elf_Internal_Shdr *hdr;
9364 char *names;
9365 asection *plt;
9367 *ret = NULL;
9369 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
9370 return 0;
9372 if (dynsymcount <= 0)
9373 return 0;
9375 if (!bed->plt_sym_val)
9376 return 0;
9378 relplt_name = bed->relplt_name;
9379 if (relplt_name == NULL)
9380 relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
9381 relplt = bfd_get_section_by_name (abfd, relplt_name);
9382 if (relplt == NULL)
9383 return 0;
9385 hdr = &elf_section_data (relplt)->this_hdr;
9386 if (hdr->sh_link != elf_dynsymtab (abfd)
9387 || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
9388 return 0;
9390 plt = bfd_get_section_by_name (abfd, ".plt");
9391 if (plt == NULL)
9392 return 0;
9394 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
9395 if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
9396 return -1;
9398 count = relplt->size / hdr->sh_entsize;
9399 size = count * sizeof (asymbol);
9400 p = relplt->relocation;
9401 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
9403 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
9404 if (p->addend != 0)
9406 #ifdef BFD64
9407 size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
9408 #else
9409 size += sizeof ("+0x") - 1 + 8;
9410 #endif
9414 s = *ret = (asymbol *) bfd_malloc (size);
9415 if (s == NULL)
9416 return -1;
9418 names = (char *) (s + count);
9419 p = relplt->relocation;
9420 n = 0;
9421 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
9423 size_t len;
9424 bfd_vma addr;
9426 addr = bed->plt_sym_val (i, plt, p);
9427 if (addr == (bfd_vma) -1)
9428 continue;
9430 *s = **p->sym_ptr_ptr;
9431 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
9432 we are defining a symbol, ensure one of them is set. */
9433 if ((s->flags & BSF_LOCAL) == 0)
9434 s->flags |= BSF_GLOBAL;
9435 s->flags |= BSF_SYNTHETIC;
9436 s->section = plt;
9437 s->value = addr - plt->vma;
9438 s->name = names;
9439 s->udata.p = NULL;
9440 len = strlen ((*p->sym_ptr_ptr)->name);
9441 memcpy (names, (*p->sym_ptr_ptr)->name, len);
9442 names += len;
9443 if (p->addend != 0)
9445 char buf[30], *a;
9447 memcpy (names, "+0x", sizeof ("+0x") - 1);
9448 names += sizeof ("+0x") - 1;
9449 bfd_sprintf_vma (abfd, buf, p->addend);
9450 for (a = buf; *a == '0'; ++a)
9452 len = strlen (a);
9453 memcpy (names, a, len);
9454 names += len;
9456 memcpy (names, "@plt", sizeof ("@plt"));
9457 names += sizeof ("@plt");
9458 ++s, ++n;
9461 return n;
9464 /* It is only used by x86-64 so far. */
9465 asection _bfd_elf_large_com_section
9466 = BFD_FAKE_SECTION (_bfd_elf_large_com_section,
9467 SEC_IS_COMMON, NULL, "LARGE_COMMON", 0);
9469 void
9470 _bfd_elf_set_osabi (bfd * abfd,
9471 struct bfd_link_info * link_info ATTRIBUTE_UNUSED)
9473 Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */
9475 i_ehdrp = elf_elfheader (abfd);
9477 i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
9479 /* To make things simpler for the loader on Linux systems we set the
9480 osabi field to ELFOSABI_LINUX if the binary contains symbols of
9481 the STT_GNU_IFUNC type. */
9482 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE
9483 && elf_tdata (abfd)->has_ifunc_symbols)
9484 i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX;
9488 /* Return TRUE for ELF symbol types that represent functions.
9489 This is the default version of this function, which is sufficient for
9490 most targets. It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC. */
9492 bfd_boolean
9493 _bfd_elf_is_function_type (unsigned int type)
9495 return (type == STT_FUNC
9496 || type == STT_GNU_IFUNC);