1 /* ELF executable support for BFD.
3 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
6 This file is part of BFD, the Binary File Descriptor library.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
26 BFD support for ELF formats is being worked on.
27 Currently, the best supported back ends are for sparc and i386
28 (running svr4 or Solaris 2).
30 Documentation of the internals of the support code still needs
31 to be written. The code is changing quickly enough that we
32 haven't bothered yet. */
34 /* For sparc64-cross-sparc32. */
42 #include "libiberty.h"
44 static int elf_sort_sections (const void *, const void *);
45 static bfd_boolean
assign_file_positions_except_relocs (bfd
*, struct bfd_link_info
*);
46 static bfd_boolean
prep_headers (bfd
*);
47 static bfd_boolean
swap_out_syms (bfd
*, struct bfd_strtab_hash
**, int) ;
48 static bfd_boolean
elfcore_read_notes (bfd
*, file_ptr
, bfd_size_type
) ;
50 /* Swap version information in and out. The version information is
51 currently size independent. If that ever changes, this code will
52 need to move into elfcode.h. */
54 /* Swap in a Verdef structure. */
57 _bfd_elf_swap_verdef_in (bfd
*abfd
,
58 const Elf_External_Verdef
*src
,
59 Elf_Internal_Verdef
*dst
)
61 dst
->vd_version
= H_GET_16 (abfd
, src
->vd_version
);
62 dst
->vd_flags
= H_GET_16 (abfd
, src
->vd_flags
);
63 dst
->vd_ndx
= H_GET_16 (abfd
, src
->vd_ndx
);
64 dst
->vd_cnt
= H_GET_16 (abfd
, src
->vd_cnt
);
65 dst
->vd_hash
= H_GET_32 (abfd
, src
->vd_hash
);
66 dst
->vd_aux
= H_GET_32 (abfd
, src
->vd_aux
);
67 dst
->vd_next
= H_GET_32 (abfd
, src
->vd_next
);
70 /* Swap out a Verdef structure. */
73 _bfd_elf_swap_verdef_out (bfd
*abfd
,
74 const Elf_Internal_Verdef
*src
,
75 Elf_External_Verdef
*dst
)
77 H_PUT_16 (abfd
, src
->vd_version
, dst
->vd_version
);
78 H_PUT_16 (abfd
, src
->vd_flags
, dst
->vd_flags
);
79 H_PUT_16 (abfd
, src
->vd_ndx
, dst
->vd_ndx
);
80 H_PUT_16 (abfd
, src
->vd_cnt
, dst
->vd_cnt
);
81 H_PUT_32 (abfd
, src
->vd_hash
, dst
->vd_hash
);
82 H_PUT_32 (abfd
, src
->vd_aux
, dst
->vd_aux
);
83 H_PUT_32 (abfd
, src
->vd_next
, dst
->vd_next
);
86 /* Swap in a Verdaux structure. */
89 _bfd_elf_swap_verdaux_in (bfd
*abfd
,
90 const Elf_External_Verdaux
*src
,
91 Elf_Internal_Verdaux
*dst
)
93 dst
->vda_name
= H_GET_32 (abfd
, src
->vda_name
);
94 dst
->vda_next
= H_GET_32 (abfd
, src
->vda_next
);
97 /* Swap out a Verdaux structure. */
100 _bfd_elf_swap_verdaux_out (bfd
*abfd
,
101 const Elf_Internal_Verdaux
*src
,
102 Elf_External_Verdaux
*dst
)
104 H_PUT_32 (abfd
, src
->vda_name
, dst
->vda_name
);
105 H_PUT_32 (abfd
, src
->vda_next
, dst
->vda_next
);
108 /* Swap in a Verneed structure. */
111 _bfd_elf_swap_verneed_in (bfd
*abfd
,
112 const Elf_External_Verneed
*src
,
113 Elf_Internal_Verneed
*dst
)
115 dst
->vn_version
= H_GET_16 (abfd
, src
->vn_version
);
116 dst
->vn_cnt
= H_GET_16 (abfd
, src
->vn_cnt
);
117 dst
->vn_file
= H_GET_32 (abfd
, src
->vn_file
);
118 dst
->vn_aux
= H_GET_32 (abfd
, src
->vn_aux
);
119 dst
->vn_next
= H_GET_32 (abfd
, src
->vn_next
);
122 /* Swap out a Verneed structure. */
125 _bfd_elf_swap_verneed_out (bfd
*abfd
,
126 const Elf_Internal_Verneed
*src
,
127 Elf_External_Verneed
*dst
)
129 H_PUT_16 (abfd
, src
->vn_version
, dst
->vn_version
);
130 H_PUT_16 (abfd
, src
->vn_cnt
, dst
->vn_cnt
);
131 H_PUT_32 (abfd
, src
->vn_file
, dst
->vn_file
);
132 H_PUT_32 (abfd
, src
->vn_aux
, dst
->vn_aux
);
133 H_PUT_32 (abfd
, src
->vn_next
, dst
->vn_next
);
136 /* Swap in a Vernaux structure. */
139 _bfd_elf_swap_vernaux_in (bfd
*abfd
,
140 const Elf_External_Vernaux
*src
,
141 Elf_Internal_Vernaux
*dst
)
143 dst
->vna_hash
= H_GET_32 (abfd
, src
->vna_hash
);
144 dst
->vna_flags
= H_GET_16 (abfd
, src
->vna_flags
);
145 dst
->vna_other
= H_GET_16 (abfd
, src
->vna_other
);
146 dst
->vna_name
= H_GET_32 (abfd
, src
->vna_name
);
147 dst
->vna_next
= H_GET_32 (abfd
, src
->vna_next
);
150 /* Swap out a Vernaux structure. */
153 _bfd_elf_swap_vernaux_out (bfd
*abfd
,
154 const Elf_Internal_Vernaux
*src
,
155 Elf_External_Vernaux
*dst
)
157 H_PUT_32 (abfd
, src
->vna_hash
, dst
->vna_hash
);
158 H_PUT_16 (abfd
, src
->vna_flags
, dst
->vna_flags
);
159 H_PUT_16 (abfd
, src
->vna_other
, dst
->vna_other
);
160 H_PUT_32 (abfd
, src
->vna_name
, dst
->vna_name
);
161 H_PUT_32 (abfd
, src
->vna_next
, dst
->vna_next
);
164 /* Swap in a Versym structure. */
167 _bfd_elf_swap_versym_in (bfd
*abfd
,
168 const Elf_External_Versym
*src
,
169 Elf_Internal_Versym
*dst
)
171 dst
->vs_vers
= H_GET_16 (abfd
, src
->vs_vers
);
174 /* Swap out a Versym structure. */
177 _bfd_elf_swap_versym_out (bfd
*abfd
,
178 const Elf_Internal_Versym
*src
,
179 Elf_External_Versym
*dst
)
181 H_PUT_16 (abfd
, src
->vs_vers
, dst
->vs_vers
);
184 /* Standard ELF hash function. Do not change this function; you will
185 cause invalid hash tables to be generated. */
188 bfd_elf_hash (const char *namearg
)
190 const unsigned char *name
= (const unsigned char *) namearg
;
195 while ((ch
= *name
++) != '\0')
198 if ((g
= (h
& 0xf0000000)) != 0)
201 /* The ELF ABI says `h &= ~g', but this is equivalent in
202 this case and on some machines one insn instead of two. */
206 return h
& 0xffffffff;
209 /* Read a specified number of bytes at a specified offset in an ELF
210 file, into a newly allocated buffer, and return a pointer to the
214 elf_read (bfd
*abfd
, file_ptr offset
, bfd_size_type size
)
218 if ((buf
= bfd_alloc (abfd
, size
)) == NULL
)
220 if (bfd_seek (abfd
, offset
, SEEK_SET
) != 0)
222 if (bfd_bread (buf
, size
, abfd
) != size
)
224 if (bfd_get_error () != bfd_error_system_call
)
225 bfd_set_error (bfd_error_file_truncated
);
232 bfd_elf_mkobject (bfd
*abfd
)
234 /* This just does initialization. */
235 /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
236 elf_tdata (abfd
) = bfd_zalloc (abfd
, sizeof (struct elf_obj_tdata
));
237 if (elf_tdata (abfd
) == 0)
239 /* Since everything is done at close time, do we need any
246 bfd_elf_mkcorefile (bfd
*abfd
)
248 /* I think this can be done just like an object file. */
249 return bfd_elf_mkobject (abfd
);
253 bfd_elf_get_str_section (bfd
*abfd
, unsigned int shindex
)
255 Elf_Internal_Shdr
**i_shdrp
;
256 char *shstrtab
= NULL
;
258 bfd_size_type shstrtabsize
;
260 i_shdrp
= elf_elfsections (abfd
);
261 if (i_shdrp
== 0 || i_shdrp
[shindex
] == 0)
264 shstrtab
= (char *) i_shdrp
[shindex
]->contents
;
265 if (shstrtab
== NULL
)
267 /* No cached one, attempt to read, and cache what we read. */
268 offset
= i_shdrp
[shindex
]->sh_offset
;
269 shstrtabsize
= i_shdrp
[shindex
]->sh_size
;
270 shstrtab
= elf_read (abfd
, offset
, shstrtabsize
);
271 i_shdrp
[shindex
]->contents
= shstrtab
;
277 bfd_elf_string_from_elf_section (bfd
*abfd
,
278 unsigned int shindex
,
279 unsigned int strindex
)
281 Elf_Internal_Shdr
*hdr
;
286 hdr
= elf_elfsections (abfd
)[shindex
];
288 if (hdr
->contents
== NULL
289 && bfd_elf_get_str_section (abfd
, shindex
) == NULL
)
292 if (strindex
>= hdr
->sh_size
)
294 unsigned int shstrndx
= elf_elfheader(abfd
)->e_shstrndx
;
295 (*_bfd_error_handler
)
296 (_("%B: invalid string offset %u >= %lu for section `%s'"),
297 abfd
, strindex
, (unsigned long) hdr
->sh_size
,
298 (shindex
== shstrndx
&& strindex
== hdr
->sh_name
300 : bfd_elf_string_from_elf_section (abfd
, shstrndx
, hdr
->sh_name
)));
304 return ((char *) hdr
->contents
) + strindex
;
307 /* Read and convert symbols to internal format.
308 SYMCOUNT specifies the number of symbols to read, starting from
309 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
310 are non-NULL, they are used to store the internal symbols, external
311 symbols, and symbol section index extensions, respectively. */
314 bfd_elf_get_elf_syms (bfd
*ibfd
,
315 Elf_Internal_Shdr
*symtab_hdr
,
318 Elf_Internal_Sym
*intsym_buf
,
320 Elf_External_Sym_Shndx
*extshndx_buf
)
322 Elf_Internal_Shdr
*shndx_hdr
;
324 const bfd_byte
*esym
;
325 Elf_External_Sym_Shndx
*alloc_extshndx
;
326 Elf_External_Sym_Shndx
*shndx
;
327 Elf_Internal_Sym
*isym
;
328 Elf_Internal_Sym
*isymend
;
329 const struct elf_backend_data
*bed
;
337 /* Normal syms might have section extension entries. */
339 if (symtab_hdr
== &elf_tdata (ibfd
)->symtab_hdr
)
340 shndx_hdr
= &elf_tdata (ibfd
)->symtab_shndx_hdr
;
342 /* Read the symbols. */
344 alloc_extshndx
= NULL
;
345 bed
= get_elf_backend_data (ibfd
);
346 extsym_size
= bed
->s
->sizeof_sym
;
347 amt
= symcount
* extsym_size
;
348 pos
= symtab_hdr
->sh_offset
+ symoffset
* extsym_size
;
349 if (extsym_buf
== NULL
)
351 alloc_ext
= bfd_malloc (amt
);
352 extsym_buf
= alloc_ext
;
354 if (extsym_buf
== NULL
355 || bfd_seek (ibfd
, pos
, SEEK_SET
) != 0
356 || bfd_bread (extsym_buf
, amt
, ibfd
) != amt
)
362 if (shndx_hdr
== NULL
|| shndx_hdr
->sh_size
== 0)
366 amt
= symcount
* sizeof (Elf_External_Sym_Shndx
);
367 pos
= shndx_hdr
->sh_offset
+ symoffset
* sizeof (Elf_External_Sym_Shndx
);
368 if (extshndx_buf
== NULL
)
370 alloc_extshndx
= bfd_malloc (amt
);
371 extshndx_buf
= alloc_extshndx
;
373 if (extshndx_buf
== NULL
374 || bfd_seek (ibfd
, pos
, SEEK_SET
) != 0
375 || bfd_bread (extshndx_buf
, amt
, ibfd
) != amt
)
382 if (intsym_buf
== NULL
)
384 bfd_size_type amt
= symcount
* sizeof (Elf_Internal_Sym
);
385 intsym_buf
= bfd_malloc (amt
);
386 if (intsym_buf
== NULL
)
390 /* Convert the symbols to internal form. */
391 isymend
= intsym_buf
+ symcount
;
392 for (esym
= extsym_buf
, isym
= intsym_buf
, shndx
= extshndx_buf
;
394 esym
+= extsym_size
, isym
++, shndx
= shndx
!= NULL
? shndx
+ 1 : NULL
)
395 (*bed
->s
->swap_symbol_in
) (ibfd
, esym
, shndx
, isym
);
398 if (alloc_ext
!= NULL
)
400 if (alloc_extshndx
!= NULL
)
401 free (alloc_extshndx
);
406 /* Look up a symbol name. */
408 bfd_elf_sym_name (bfd
*abfd
,
409 Elf_Internal_Shdr
*symtab_hdr
,
410 Elf_Internal_Sym
*isym
)
412 unsigned int iname
= isym
->st_name
;
413 unsigned int shindex
= symtab_hdr
->sh_link
;
414 if (iname
== 0 && ELF_ST_TYPE (isym
->st_info
) == STT_SECTION
415 /* Check for a bogus st_shndx to avoid crashing. */
416 && isym
->st_shndx
< elf_numsections (abfd
)
417 && !(isym
->st_shndx
>= SHN_LORESERVE
&& isym
->st_shndx
<= SHN_HIRESERVE
))
419 iname
= elf_elfsections (abfd
)[isym
->st_shndx
]->sh_name
;
420 shindex
= elf_elfheader (abfd
)->e_shstrndx
;
423 return bfd_elf_string_from_elf_section (abfd
, shindex
, iname
);
426 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
427 sections. The first element is the flags, the rest are section
430 typedef union elf_internal_group
{
431 Elf_Internal_Shdr
*shdr
;
433 } Elf_Internal_Group
;
435 /* Return the name of the group signature symbol. Why isn't the
436 signature just a string? */
439 group_signature (bfd
*abfd
, Elf_Internal_Shdr
*ghdr
)
441 Elf_Internal_Shdr
*hdr
;
442 unsigned char esym
[sizeof (Elf64_External_Sym
)];
443 Elf_External_Sym_Shndx eshndx
;
444 Elf_Internal_Sym isym
;
446 /* First we need to ensure the symbol table is available. */
447 if (! bfd_section_from_shdr (abfd
, ghdr
->sh_link
))
450 /* Go read the symbol. */
451 hdr
= &elf_tdata (abfd
)->symtab_hdr
;
452 if (bfd_elf_get_elf_syms (abfd
, hdr
, 1, ghdr
->sh_info
,
453 &isym
, esym
, &eshndx
) == NULL
)
456 return bfd_elf_sym_name (abfd
, hdr
, &isym
);
459 /* Set next_in_group list pointer, and group name for NEWSECT. */
462 setup_group (bfd
*abfd
, Elf_Internal_Shdr
*hdr
, asection
*newsect
)
464 unsigned int num_group
= elf_tdata (abfd
)->num_group
;
466 /* If num_group is zero, read in all SHT_GROUP sections. The count
467 is set to -1 if there are no SHT_GROUP sections. */
470 unsigned int i
, shnum
;
472 /* First count the number of groups. If we have a SHT_GROUP
473 section with just a flag word (ie. sh_size is 4), ignore it. */
474 shnum
= elf_numsections (abfd
);
476 for (i
= 0; i
< shnum
; i
++)
478 Elf_Internal_Shdr
*shdr
= elf_elfsections (abfd
)[i
];
479 if (shdr
->sh_type
== SHT_GROUP
&& shdr
->sh_size
>= 8)
484 num_group
= (unsigned) -1;
485 elf_tdata (abfd
)->num_group
= num_group
;
489 /* We keep a list of elf section headers for group sections,
490 so we can find them quickly. */
491 bfd_size_type amt
= num_group
* sizeof (Elf_Internal_Shdr
*);
492 elf_tdata (abfd
)->group_sect_ptr
= bfd_alloc (abfd
, amt
);
493 if (elf_tdata (abfd
)->group_sect_ptr
== NULL
)
497 for (i
= 0; i
< shnum
; i
++)
499 Elf_Internal_Shdr
*shdr
= elf_elfsections (abfd
)[i
];
500 if (shdr
->sh_type
== SHT_GROUP
&& shdr
->sh_size
>= 8)
503 Elf_Internal_Group
*dest
;
505 /* Add to list of sections. */
506 elf_tdata (abfd
)->group_sect_ptr
[num_group
] = shdr
;
509 /* Read the raw contents. */
510 BFD_ASSERT (sizeof (*dest
) >= 4);
511 amt
= shdr
->sh_size
* sizeof (*dest
) / 4;
512 shdr
->contents
= bfd_alloc (abfd
, amt
);
513 if (shdr
->contents
== NULL
514 || bfd_seek (abfd
, shdr
->sh_offset
, SEEK_SET
) != 0
515 || (bfd_bread (shdr
->contents
, shdr
->sh_size
, abfd
)
519 /* Translate raw contents, a flag word followed by an
520 array of elf section indices all in target byte order,
521 to the flag word followed by an array of elf section
523 src
= shdr
->contents
+ shdr
->sh_size
;
524 dest
= (Elf_Internal_Group
*) (shdr
->contents
+ amt
);
531 idx
= H_GET_32 (abfd
, src
);
532 if (src
== shdr
->contents
)
535 if (shdr
->bfd_section
!= NULL
&& (idx
& GRP_COMDAT
))
536 shdr
->bfd_section
->flags
537 |= SEC_LINK_ONCE
| SEC_LINK_DUPLICATES_DISCARD
;
542 ((*_bfd_error_handler
)
543 (_("%B: invalid SHT_GROUP entry"), abfd
));
546 dest
->shdr
= elf_elfsections (abfd
)[idx
];
553 if (num_group
!= (unsigned) -1)
557 for (i
= 0; i
< num_group
; i
++)
559 Elf_Internal_Shdr
*shdr
= elf_tdata (abfd
)->group_sect_ptr
[i
];
560 Elf_Internal_Group
*idx
= (Elf_Internal_Group
*) shdr
->contents
;
561 unsigned int n_elt
= shdr
->sh_size
/ 4;
563 /* Look through this group's sections to see if current
564 section is a member. */
566 if ((++idx
)->shdr
== hdr
)
570 /* We are a member of this group. Go looking through
571 other members to see if any others are linked via
573 idx
= (Elf_Internal_Group
*) shdr
->contents
;
574 n_elt
= shdr
->sh_size
/ 4;
576 if ((s
= (++idx
)->shdr
->bfd_section
) != NULL
577 && elf_next_in_group (s
) != NULL
)
581 /* Snarf the group name from other member, and
582 insert current section in circular list. */
583 elf_group_name (newsect
) = elf_group_name (s
);
584 elf_next_in_group (newsect
) = elf_next_in_group (s
);
585 elf_next_in_group (s
) = newsect
;
591 gname
= group_signature (abfd
, shdr
);
594 elf_group_name (newsect
) = gname
;
596 /* Start a circular list with one element. */
597 elf_next_in_group (newsect
) = newsect
;
600 /* If the group section has been created, point to the
602 if (shdr
->bfd_section
!= NULL
)
603 elf_next_in_group (shdr
->bfd_section
) = newsect
;
611 if (elf_group_name (newsect
) == NULL
)
613 (*_bfd_error_handler
) (_("%B: no group info for section %A"),
620 _bfd_elf_setup_group_pointers (bfd
*abfd
)
623 unsigned int num_group
= elf_tdata (abfd
)->num_group
;
624 bfd_boolean result
= TRUE
;
626 if (num_group
== (unsigned) -1)
629 for (i
= 0; i
< num_group
; i
++)
631 Elf_Internal_Shdr
*shdr
= elf_tdata (abfd
)->group_sect_ptr
[i
];
632 Elf_Internal_Group
*idx
= (Elf_Internal_Group
*) shdr
->contents
;
633 unsigned int n_elt
= shdr
->sh_size
/ 4;
636 if ((++idx
)->shdr
->bfd_section
)
637 elf_sec_group (idx
->shdr
->bfd_section
) = shdr
->bfd_section
;
638 else if (idx
->shdr
->sh_type
== SHT_RELA
639 || idx
->shdr
->sh_type
== SHT_REL
)
640 /* We won't include relocation sections in section groups in
641 output object files. We adjust the group section size here
642 so that relocatable link will work correctly when
643 relocation sections are in section group in input object
645 shdr
->bfd_section
->size
-= 4;
648 /* There are some unknown sections in the group. */
649 (*_bfd_error_handler
)
650 (_("%B: unknown [%d] section `%s' in group [%s]"),
652 (unsigned int) idx
->shdr
->sh_type
,
653 bfd_elf_string_from_elf_section (abfd
,
654 (elf_elfheader (abfd
)
657 shdr
->bfd_section
->name
);
665 bfd_elf_is_group_section (bfd
*abfd ATTRIBUTE_UNUSED
, const asection
*sec
)
667 return elf_next_in_group (sec
) != NULL
;
670 /* Make a BFD section from an ELF section. We store a pointer to the
671 BFD section in the bfd_section field of the header. */
674 _bfd_elf_make_section_from_shdr (bfd
*abfd
,
675 Elf_Internal_Shdr
*hdr
,
680 const struct elf_backend_data
*bed
;
682 if (hdr
->bfd_section
!= NULL
)
684 BFD_ASSERT (strcmp (name
,
685 bfd_get_section_name (abfd
, hdr
->bfd_section
)) == 0);
689 newsect
= bfd_make_section_anyway (abfd
, name
);
693 hdr
->bfd_section
= newsect
;
694 elf_section_data (newsect
)->this_hdr
= *hdr
;
696 /* Always use the real type/flags. */
697 elf_section_type (newsect
) = hdr
->sh_type
;
698 elf_section_flags (newsect
) = hdr
->sh_flags
;
700 newsect
->filepos
= hdr
->sh_offset
;
702 if (! bfd_set_section_vma (abfd
, newsect
, hdr
->sh_addr
)
703 || ! bfd_set_section_size (abfd
, newsect
, hdr
->sh_size
)
704 || ! bfd_set_section_alignment (abfd
, newsect
,
705 bfd_log2 ((bfd_vma
) hdr
->sh_addralign
)))
708 flags
= SEC_NO_FLAGS
;
709 if (hdr
->sh_type
!= SHT_NOBITS
)
710 flags
|= SEC_HAS_CONTENTS
;
711 if (hdr
->sh_type
== SHT_GROUP
)
712 flags
|= SEC_GROUP
| SEC_EXCLUDE
;
713 if ((hdr
->sh_flags
& SHF_ALLOC
) != 0)
716 if (hdr
->sh_type
!= SHT_NOBITS
)
719 if ((hdr
->sh_flags
& SHF_WRITE
) == 0)
720 flags
|= SEC_READONLY
;
721 if ((hdr
->sh_flags
& SHF_EXECINSTR
) != 0)
723 else if ((flags
& SEC_LOAD
) != 0)
725 if ((hdr
->sh_flags
& SHF_MERGE
) != 0)
728 newsect
->entsize
= hdr
->sh_entsize
;
729 if ((hdr
->sh_flags
& SHF_STRINGS
) != 0)
730 flags
|= SEC_STRINGS
;
732 if (hdr
->sh_flags
& SHF_GROUP
)
733 if (!setup_group (abfd
, hdr
, newsect
))
735 if ((hdr
->sh_flags
& SHF_TLS
) != 0)
736 flags
|= SEC_THREAD_LOCAL
;
738 /* The debugging sections appear to be recognized only by name, not
741 static const char *debug_sec_names
[] =
750 for (i
= ARRAY_SIZE (debug_sec_names
); i
--;)
751 if (strncmp (name
, debug_sec_names
[i
], strlen (debug_sec_names
[i
])) == 0)
755 flags
|= SEC_DEBUGGING
;
758 /* As a GNU extension, if the name begins with .gnu.linkonce, we
759 only link a single copy of the section. This is used to support
760 g++. g++ will emit each template expansion in its own section.
761 The symbols will be defined as weak, so that multiple definitions
762 are permitted. The GNU linker extension is to actually discard
763 all but one of the sections. */
764 if (strncmp (name
, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0
765 && elf_next_in_group (newsect
) == NULL
)
766 flags
|= SEC_LINK_ONCE
| SEC_LINK_DUPLICATES_DISCARD
;
768 bed
= get_elf_backend_data (abfd
);
769 if (bed
->elf_backend_section_flags
)
770 if (! bed
->elf_backend_section_flags (&flags
, hdr
))
773 if (! bfd_set_section_flags (abfd
, newsect
, flags
))
776 if ((flags
& SEC_ALLOC
) != 0)
778 Elf_Internal_Phdr
*phdr
;
781 /* Look through the phdrs to see if we need to adjust the lma.
782 If all the p_paddr fields are zero, we ignore them, since
783 some ELF linkers produce such output. */
784 phdr
= elf_tdata (abfd
)->phdr
;
785 for (i
= 0; i
< elf_elfheader (abfd
)->e_phnum
; i
++, phdr
++)
787 if (phdr
->p_paddr
!= 0)
790 if (i
< elf_elfheader (abfd
)->e_phnum
)
792 phdr
= elf_tdata (abfd
)->phdr
;
793 for (i
= 0; i
< elf_elfheader (abfd
)->e_phnum
; i
++, phdr
++)
795 /* This section is part of this segment if its file
796 offset plus size lies within the segment's memory
797 span and, if the section is loaded, the extent of the
798 loaded data lies within the extent of the segment.
800 Note - we used to check the p_paddr field as well, and
801 refuse to set the LMA if it was 0. This is wrong
802 though, as a perfectly valid initialised segment can
803 have a p_paddr of zero. Some architectures, eg ARM,
804 place special significance on the address 0 and
805 executables need to be able to have a segment which
806 covers this address. */
807 if (phdr
->p_type
== PT_LOAD
808 && (bfd_vma
) hdr
->sh_offset
>= phdr
->p_offset
809 && (hdr
->sh_offset
+ hdr
->sh_size
810 <= phdr
->p_offset
+ phdr
->p_memsz
)
811 && ((flags
& SEC_LOAD
) == 0
812 || (hdr
->sh_offset
+ hdr
->sh_size
813 <= phdr
->p_offset
+ phdr
->p_filesz
)))
815 if ((flags
& SEC_LOAD
) == 0)
816 newsect
->lma
= (phdr
->p_paddr
817 + hdr
->sh_addr
- phdr
->p_vaddr
);
819 /* We used to use the same adjustment for SEC_LOAD
820 sections, but that doesn't work if the segment
821 is packed with code from multiple VMAs.
822 Instead we calculate the section LMA based on
823 the segment LMA. It is assumed that the
824 segment will contain sections with contiguous
825 LMAs, even if the VMAs are not. */
826 newsect
->lma
= (phdr
->p_paddr
827 + hdr
->sh_offset
- phdr
->p_offset
);
829 /* With contiguous segments, we can't tell from file
830 offsets whether a section with zero size should
831 be placed at the end of one segment or the
832 beginning of the next. Decide based on vaddr. */
833 if (hdr
->sh_addr
>= phdr
->p_vaddr
834 && (hdr
->sh_addr
+ hdr
->sh_size
835 <= phdr
->p_vaddr
+ phdr
->p_memsz
))
850 struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
853 Helper functions for GDB to locate the string tables.
854 Since BFD hides string tables from callers, GDB needs to use an
855 internal hook to find them. Sun's .stabstr, in particular,
856 isn't even pointed to by the .stab section, so ordinary
857 mechanisms wouldn't work to find it, even if we had some.
860 struct elf_internal_shdr
*
861 bfd_elf_find_section (bfd
*abfd
, char *name
)
863 Elf_Internal_Shdr
**i_shdrp
;
868 i_shdrp
= elf_elfsections (abfd
);
871 shstrtab
= bfd_elf_get_str_section (abfd
,
872 elf_elfheader (abfd
)->e_shstrndx
);
873 if (shstrtab
!= NULL
)
875 max
= elf_numsections (abfd
);
876 for (i
= 1; i
< max
; i
++)
877 if (!strcmp (&shstrtab
[i_shdrp
[i
]->sh_name
], name
))
884 const char *const bfd_elf_section_type_names
[] = {
885 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
886 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
887 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
890 /* ELF relocs are against symbols. If we are producing relocatable
891 output, and the reloc is against an external symbol, and nothing
892 has given us any additional addend, the resulting reloc will also
893 be against the same symbol. In such a case, we don't want to
894 change anything about the way the reloc is handled, since it will
895 all be done at final link time. Rather than put special case code
896 into bfd_perform_relocation, all the reloc types use this howto
897 function. It just short circuits the reloc if producing
898 relocatable output against an external symbol. */
900 bfd_reloc_status_type
901 bfd_elf_generic_reloc (bfd
*abfd ATTRIBUTE_UNUSED
,
902 arelent
*reloc_entry
,
904 void *data ATTRIBUTE_UNUSED
,
905 asection
*input_section
,
907 char **error_message ATTRIBUTE_UNUSED
)
909 if (output_bfd
!= NULL
910 && (symbol
->flags
& BSF_SECTION_SYM
) == 0
911 && (! reloc_entry
->howto
->partial_inplace
912 || reloc_entry
->addend
== 0))
914 reloc_entry
->address
+= input_section
->output_offset
;
918 return bfd_reloc_continue
;
921 /* Make sure sec_info_type is cleared if sec_info is cleared too. */
924 merge_sections_remove_hook (bfd
*abfd ATTRIBUTE_UNUSED
,
927 BFD_ASSERT (sec
->sec_info_type
== ELF_INFO_TYPE_MERGE
);
928 sec
->sec_info_type
= ELF_INFO_TYPE_NONE
;
931 /* Finish SHF_MERGE section merging. */
934 _bfd_elf_merge_sections (bfd
*abfd
, struct bfd_link_info
*info
)
939 if (!is_elf_hash_table (info
->hash
))
942 for (ibfd
= info
->input_bfds
; ibfd
!= NULL
; ibfd
= ibfd
->link_next
)
943 if ((ibfd
->flags
& DYNAMIC
) == 0)
944 for (sec
= ibfd
->sections
; sec
!= NULL
; sec
= sec
->next
)
945 if ((sec
->flags
& SEC_MERGE
) != 0
946 && !bfd_is_abs_section (sec
->output_section
))
948 struct bfd_elf_section_data
*secdata
;
950 secdata
= elf_section_data (sec
);
951 if (! _bfd_add_merge_section (abfd
,
952 &elf_hash_table (info
)->merge_info
,
953 sec
, &secdata
->sec_info
))
955 else if (secdata
->sec_info
)
956 sec
->sec_info_type
= ELF_INFO_TYPE_MERGE
;
959 if (elf_hash_table (info
)->merge_info
!= NULL
)
960 _bfd_merge_sections (abfd
, info
, elf_hash_table (info
)->merge_info
,
961 merge_sections_remove_hook
);
966 _bfd_elf_link_just_syms (asection
*sec
, struct bfd_link_info
*info
)
968 sec
->output_section
= bfd_abs_section_ptr
;
969 sec
->output_offset
= sec
->vma
;
970 if (!is_elf_hash_table (info
->hash
))
973 sec
->sec_info_type
= ELF_INFO_TYPE_JUST_SYMS
;
976 /* Copy the program header and other data from one object module to
980 _bfd_elf_copy_private_bfd_data (bfd
*ibfd
, bfd
*obfd
)
982 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
983 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
986 BFD_ASSERT (!elf_flags_init (obfd
)
987 || (elf_elfheader (obfd
)->e_flags
988 == elf_elfheader (ibfd
)->e_flags
));
990 elf_gp (obfd
) = elf_gp (ibfd
);
991 elf_elfheader (obfd
)->e_flags
= elf_elfheader (ibfd
)->e_flags
;
992 elf_flags_init (obfd
) = TRUE
;
996 /* Print out the program headers. */
999 _bfd_elf_print_private_bfd_data (bfd
*abfd
, void *farg
)
1002 Elf_Internal_Phdr
*p
;
1004 bfd_byte
*dynbuf
= NULL
;
1006 p
= elf_tdata (abfd
)->phdr
;
1011 fprintf (f
, _("\nProgram Header:\n"));
1012 c
= elf_elfheader (abfd
)->e_phnum
;
1013 for (i
= 0; i
< c
; i
++, p
++)
1020 case PT_NULL
: pt
= "NULL"; break;
1021 case PT_LOAD
: pt
= "LOAD"; break;
1022 case PT_DYNAMIC
: pt
= "DYNAMIC"; break;
1023 case PT_INTERP
: pt
= "INTERP"; break;
1024 case PT_NOTE
: pt
= "NOTE"; break;
1025 case PT_SHLIB
: pt
= "SHLIB"; break;
1026 case PT_PHDR
: pt
= "PHDR"; break;
1027 case PT_TLS
: pt
= "TLS"; break;
1028 case PT_GNU_EH_FRAME
: pt
= "EH_FRAME"; break;
1029 case PT_GNU_STACK
: pt
= "STACK"; break;
1030 case PT_GNU_RELRO
: pt
= "RELRO"; break;
1031 default: sprintf (buf
, "0x%lx", p
->p_type
); pt
= buf
; break;
1033 fprintf (f
, "%8s off 0x", pt
);
1034 bfd_fprintf_vma (abfd
, f
, p
->p_offset
);
1035 fprintf (f
, " vaddr 0x");
1036 bfd_fprintf_vma (abfd
, f
, p
->p_vaddr
);
1037 fprintf (f
, " paddr 0x");
1038 bfd_fprintf_vma (abfd
, f
, p
->p_paddr
);
1039 fprintf (f
, " align 2**%u\n", bfd_log2 (p
->p_align
));
1040 fprintf (f
, " filesz 0x");
1041 bfd_fprintf_vma (abfd
, f
, p
->p_filesz
);
1042 fprintf (f
, " memsz 0x");
1043 bfd_fprintf_vma (abfd
, f
, p
->p_memsz
);
1044 fprintf (f
, " flags %c%c%c",
1045 (p
->p_flags
& PF_R
) != 0 ? 'r' : '-',
1046 (p
->p_flags
& PF_W
) != 0 ? 'w' : '-',
1047 (p
->p_flags
& PF_X
) != 0 ? 'x' : '-');
1048 if ((p
->p_flags
&~ (unsigned) (PF_R
| PF_W
| PF_X
)) != 0)
1049 fprintf (f
, " %lx", p
->p_flags
&~ (unsigned) (PF_R
| PF_W
| PF_X
));
1054 s
= bfd_get_section_by_name (abfd
, ".dynamic");
1058 unsigned long shlink
;
1059 bfd_byte
*extdyn
, *extdynend
;
1061 void (*swap_dyn_in
) (bfd
*, const void *, Elf_Internal_Dyn
*);
1063 fprintf (f
, _("\nDynamic Section:\n"));
1065 if (!bfd_malloc_and_get_section (abfd
, s
, &dynbuf
))
1068 elfsec
= _bfd_elf_section_from_bfd_section (abfd
, s
);
1071 shlink
= elf_elfsections (abfd
)[elfsec
]->sh_link
;
1073 extdynsize
= get_elf_backend_data (abfd
)->s
->sizeof_dyn
;
1074 swap_dyn_in
= get_elf_backend_data (abfd
)->s
->swap_dyn_in
;
1077 extdynend
= extdyn
+ s
->size
;
1078 for (; extdyn
< extdynend
; extdyn
+= extdynsize
)
1080 Elf_Internal_Dyn dyn
;
1083 bfd_boolean stringp
;
1085 (*swap_dyn_in
) (abfd
, extdyn
, &dyn
);
1087 if (dyn
.d_tag
== DT_NULL
)
1094 sprintf (ab
, "0x%lx", (unsigned long) dyn
.d_tag
);
1098 case DT_NEEDED
: name
= "NEEDED"; stringp
= TRUE
; break;
1099 case DT_PLTRELSZ
: name
= "PLTRELSZ"; break;
1100 case DT_PLTGOT
: name
= "PLTGOT"; break;
1101 case DT_HASH
: name
= "HASH"; break;
1102 case DT_STRTAB
: name
= "STRTAB"; break;
1103 case DT_SYMTAB
: name
= "SYMTAB"; break;
1104 case DT_RELA
: name
= "RELA"; break;
1105 case DT_RELASZ
: name
= "RELASZ"; break;
1106 case DT_RELAENT
: name
= "RELAENT"; break;
1107 case DT_STRSZ
: name
= "STRSZ"; break;
1108 case DT_SYMENT
: name
= "SYMENT"; break;
1109 case DT_INIT
: name
= "INIT"; break;
1110 case DT_FINI
: name
= "FINI"; break;
1111 case DT_SONAME
: name
= "SONAME"; stringp
= TRUE
; break;
1112 case DT_RPATH
: name
= "RPATH"; stringp
= TRUE
; break;
1113 case DT_SYMBOLIC
: name
= "SYMBOLIC"; break;
1114 case DT_REL
: name
= "REL"; break;
1115 case DT_RELSZ
: name
= "RELSZ"; break;
1116 case DT_RELENT
: name
= "RELENT"; break;
1117 case DT_PLTREL
: name
= "PLTREL"; break;
1118 case DT_DEBUG
: name
= "DEBUG"; break;
1119 case DT_TEXTREL
: name
= "TEXTREL"; break;
1120 case DT_JMPREL
: name
= "JMPREL"; break;
1121 case DT_BIND_NOW
: name
= "BIND_NOW"; break;
1122 case DT_INIT_ARRAY
: name
= "INIT_ARRAY"; break;
1123 case DT_FINI_ARRAY
: name
= "FINI_ARRAY"; break;
1124 case DT_INIT_ARRAYSZ
: name
= "INIT_ARRAYSZ"; break;
1125 case DT_FINI_ARRAYSZ
: name
= "FINI_ARRAYSZ"; break;
1126 case DT_RUNPATH
: name
= "RUNPATH"; stringp
= TRUE
; break;
1127 case DT_FLAGS
: name
= "FLAGS"; break;
1128 case DT_PREINIT_ARRAY
: name
= "PREINIT_ARRAY"; break;
1129 case DT_PREINIT_ARRAYSZ
: name
= "PREINIT_ARRAYSZ"; break;
1130 case DT_CHECKSUM
: name
= "CHECKSUM"; break;
1131 case DT_PLTPADSZ
: name
= "PLTPADSZ"; break;
1132 case DT_MOVEENT
: name
= "MOVEENT"; break;
1133 case DT_MOVESZ
: name
= "MOVESZ"; break;
1134 case DT_FEATURE
: name
= "FEATURE"; break;
1135 case DT_POSFLAG_1
: name
= "POSFLAG_1"; break;
1136 case DT_SYMINSZ
: name
= "SYMINSZ"; break;
1137 case DT_SYMINENT
: name
= "SYMINENT"; break;
1138 case DT_CONFIG
: name
= "CONFIG"; stringp
= TRUE
; break;
1139 case DT_DEPAUDIT
: name
= "DEPAUDIT"; stringp
= TRUE
; break;
1140 case DT_AUDIT
: name
= "AUDIT"; stringp
= TRUE
; break;
1141 case DT_PLTPAD
: name
= "PLTPAD"; break;
1142 case DT_MOVETAB
: name
= "MOVETAB"; break;
1143 case DT_SYMINFO
: name
= "SYMINFO"; break;
1144 case DT_RELACOUNT
: name
= "RELACOUNT"; break;
1145 case DT_RELCOUNT
: name
= "RELCOUNT"; break;
1146 case DT_FLAGS_1
: name
= "FLAGS_1"; break;
1147 case DT_VERSYM
: name
= "VERSYM"; break;
1148 case DT_VERDEF
: name
= "VERDEF"; break;
1149 case DT_VERDEFNUM
: name
= "VERDEFNUM"; break;
1150 case DT_VERNEED
: name
= "VERNEED"; break;
1151 case DT_VERNEEDNUM
: name
= "VERNEEDNUM"; break;
1152 case DT_AUXILIARY
: name
= "AUXILIARY"; stringp
= TRUE
; break;
1153 case DT_USED
: name
= "USED"; break;
1154 case DT_FILTER
: name
= "FILTER"; stringp
= TRUE
; break;
1157 fprintf (f
, " %-11s ", name
);
1159 fprintf (f
, "0x%lx", (unsigned long) dyn
.d_un
.d_val
);
1163 unsigned int tagv
= dyn
.d_un
.d_val
;
1165 string
= bfd_elf_string_from_elf_section (abfd
, shlink
, tagv
);
1168 fprintf (f
, "%s", string
);
1177 if ((elf_dynverdef (abfd
) != 0 && elf_tdata (abfd
)->verdef
== NULL
)
1178 || (elf_dynverref (abfd
) != 0 && elf_tdata (abfd
)->verref
== NULL
))
1180 if (! _bfd_elf_slurp_version_tables (abfd
, FALSE
))
1184 if (elf_dynverdef (abfd
) != 0)
1186 Elf_Internal_Verdef
*t
;
1188 fprintf (f
, _("\nVersion definitions:\n"));
1189 for (t
= elf_tdata (abfd
)->verdef
; t
!= NULL
; t
= t
->vd_nextdef
)
1191 fprintf (f
, "%d 0x%2.2x 0x%8.8lx %s\n", t
->vd_ndx
,
1192 t
->vd_flags
, t
->vd_hash
, t
->vd_nodename
);
1193 if (t
->vd_auxptr
->vda_nextptr
!= NULL
)
1195 Elf_Internal_Verdaux
*a
;
1198 for (a
= t
->vd_auxptr
->vda_nextptr
;
1201 fprintf (f
, "%s ", a
->vda_nodename
);
1207 if (elf_dynverref (abfd
) != 0)
1209 Elf_Internal_Verneed
*t
;
1211 fprintf (f
, _("\nVersion References:\n"));
1212 for (t
= elf_tdata (abfd
)->verref
; t
!= NULL
; t
= t
->vn_nextref
)
1214 Elf_Internal_Vernaux
*a
;
1216 fprintf (f
, _(" required from %s:\n"), t
->vn_filename
);
1217 for (a
= t
->vn_auxptr
; a
!= NULL
; a
= a
->vna_nextptr
)
1218 fprintf (f
, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a
->vna_hash
,
1219 a
->vna_flags
, a
->vna_other
, a
->vna_nodename
);
1231 /* Display ELF-specific fields of a symbol. */
1234 bfd_elf_print_symbol (bfd
*abfd
,
1237 bfd_print_symbol_type how
)
1242 case bfd_print_symbol_name
:
1243 fprintf (file
, "%s", symbol
->name
);
1245 case bfd_print_symbol_more
:
1246 fprintf (file
, "elf ");
1247 bfd_fprintf_vma (abfd
, file
, symbol
->value
);
1248 fprintf (file
, " %lx", (long) symbol
->flags
);
1250 case bfd_print_symbol_all
:
1252 const char *section_name
;
1253 const char *name
= NULL
;
1254 const struct elf_backend_data
*bed
;
1255 unsigned char st_other
;
1258 section_name
= symbol
->section
? symbol
->section
->name
: "(*none*)";
1260 bed
= get_elf_backend_data (abfd
);
1261 if (bed
->elf_backend_print_symbol_all
)
1262 name
= (*bed
->elf_backend_print_symbol_all
) (abfd
, filep
, symbol
);
1266 name
= symbol
->name
;
1267 bfd_print_symbol_vandf (abfd
, file
, symbol
);
1270 fprintf (file
, " %s\t", section_name
);
1271 /* Print the "other" value for a symbol. For common symbols,
1272 we've already printed the size; now print the alignment.
1273 For other symbols, we have no specified alignment, and
1274 we've printed the address; now print the size. */
1275 if (bfd_is_com_section (symbol
->section
))
1276 val
= ((elf_symbol_type
*) symbol
)->internal_elf_sym
.st_value
;
1278 val
= ((elf_symbol_type
*) symbol
)->internal_elf_sym
.st_size
;
1279 bfd_fprintf_vma (abfd
, file
, val
);
1281 /* If we have version information, print it. */
1282 if (elf_tdata (abfd
)->dynversym_section
!= 0
1283 && (elf_tdata (abfd
)->dynverdef_section
!= 0
1284 || elf_tdata (abfd
)->dynverref_section
!= 0))
1286 unsigned int vernum
;
1287 const char *version_string
;
1289 vernum
= ((elf_symbol_type
*) symbol
)->version
& VERSYM_VERSION
;
1292 version_string
= "";
1293 else if (vernum
== 1)
1294 version_string
= "Base";
1295 else if (vernum
<= elf_tdata (abfd
)->cverdefs
)
1297 elf_tdata (abfd
)->verdef
[vernum
- 1].vd_nodename
;
1300 Elf_Internal_Verneed
*t
;
1302 version_string
= "";
1303 for (t
= elf_tdata (abfd
)->verref
;
1307 Elf_Internal_Vernaux
*a
;
1309 for (a
= t
->vn_auxptr
; a
!= NULL
; a
= a
->vna_nextptr
)
1311 if (a
->vna_other
== vernum
)
1313 version_string
= a
->vna_nodename
;
1320 if ((((elf_symbol_type
*) symbol
)->version
& VERSYM_HIDDEN
) == 0)
1321 fprintf (file
, " %-11s", version_string
);
1326 fprintf (file
, " (%s)", version_string
);
1327 for (i
= 10 - strlen (version_string
); i
> 0; --i
)
1332 /* If the st_other field is not zero, print it. */
1333 st_other
= ((elf_symbol_type
*) symbol
)->internal_elf_sym
.st_other
;
1338 case STV_INTERNAL
: fprintf (file
, " .internal"); break;
1339 case STV_HIDDEN
: fprintf (file
, " .hidden"); break;
1340 case STV_PROTECTED
: fprintf (file
, " .protected"); break;
1342 /* Some other non-defined flags are also present, so print
1344 fprintf (file
, " 0x%02x", (unsigned int) st_other
);
1347 fprintf (file
, " %s", name
);
1353 /* Create an entry in an ELF linker hash table. */
1355 struct bfd_hash_entry
*
1356 _bfd_elf_link_hash_newfunc (struct bfd_hash_entry
*entry
,
1357 struct bfd_hash_table
*table
,
1360 /* Allocate the structure if it has not already been allocated by a
1364 entry
= bfd_hash_allocate (table
, sizeof (struct elf_link_hash_entry
));
1369 /* Call the allocation method of the superclass. */
1370 entry
= _bfd_link_hash_newfunc (entry
, table
, string
);
1373 struct elf_link_hash_entry
*ret
= (struct elf_link_hash_entry
*) entry
;
1374 struct elf_link_hash_table
*htab
= (struct elf_link_hash_table
*) table
;
1376 /* Set local fields. */
1379 ret
->got
= ret
->plt
= htab
->init_refcount
;
1380 memset (&ret
->size
, 0, (sizeof (struct elf_link_hash_entry
)
1381 - offsetof (struct elf_link_hash_entry
, size
)));
1382 /* Assume that we have been called by a non-ELF symbol reader.
1383 This flag is then reset by the code which reads an ELF input
1384 file. This ensures that a symbol created by a non-ELF symbol
1385 reader will have the flag set correctly. */
1392 /* Copy data from an indirect symbol to its direct symbol, hiding the
1393 old indirect symbol. Also used for copying flags to a weakdef. */
1396 _bfd_elf_link_hash_copy_indirect (const struct elf_backend_data
*bed
,
1397 struct elf_link_hash_entry
*dir
,
1398 struct elf_link_hash_entry
*ind
)
1401 bfd_signed_vma lowest_valid
= bed
->can_refcount
;
1403 /* Copy down any references that we may have already seen to the
1404 symbol which just became indirect. */
1406 dir
->ref_dynamic
|= ind
->ref_dynamic
;
1407 dir
->ref_regular
|= ind
->ref_regular
;
1408 dir
->ref_regular_nonweak
|= ind
->ref_regular_nonweak
;
1409 dir
->non_got_ref
|= ind
->non_got_ref
;
1410 dir
->needs_plt
|= ind
->needs_plt
;
1411 dir
->pointer_equality_needed
|= ind
->pointer_equality_needed
;
1413 if (ind
->root
.type
!= bfd_link_hash_indirect
)
1416 /* Copy over the global and procedure linkage table refcount entries.
1417 These may have been already set up by a check_relocs routine. */
1418 tmp
= dir
->got
.refcount
;
1419 if (tmp
< lowest_valid
)
1421 dir
->got
.refcount
= ind
->got
.refcount
;
1422 ind
->got
.refcount
= tmp
;
1425 BFD_ASSERT (ind
->got
.refcount
< lowest_valid
);
1427 tmp
= dir
->plt
.refcount
;
1428 if (tmp
< lowest_valid
)
1430 dir
->plt
.refcount
= ind
->plt
.refcount
;
1431 ind
->plt
.refcount
= tmp
;
1434 BFD_ASSERT (ind
->plt
.refcount
< lowest_valid
);
1436 if (dir
->dynindx
== -1)
1438 dir
->dynindx
= ind
->dynindx
;
1439 dir
->dynstr_index
= ind
->dynstr_index
;
1441 ind
->dynstr_index
= 0;
1444 BFD_ASSERT (ind
->dynindx
== -1);
1448 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info
*info
,
1449 struct elf_link_hash_entry
*h
,
1450 bfd_boolean force_local
)
1452 h
->plt
= elf_hash_table (info
)->init_offset
;
1456 h
->forced_local
= 1;
1457 if (h
->dynindx
!= -1)
1460 _bfd_elf_strtab_delref (elf_hash_table (info
)->dynstr
,
1466 /* Initialize an ELF linker hash table. */
1469 _bfd_elf_link_hash_table_init
1470 (struct elf_link_hash_table
*table
,
1472 struct bfd_hash_entry
*(*newfunc
) (struct bfd_hash_entry
*,
1473 struct bfd_hash_table
*,
1478 table
->dynamic_sections_created
= FALSE
;
1479 table
->dynobj
= NULL
;
1480 /* Make sure can_refcount is extended to the width and signedness of
1481 init_refcount before we subtract one from it. */
1482 table
->init_refcount
.refcount
= get_elf_backend_data (abfd
)->can_refcount
;
1483 table
->init_refcount
.refcount
-= 1;
1484 table
->init_offset
.offset
= -(bfd_vma
) 1;
1485 /* The first dynamic symbol is a dummy. */
1486 table
->dynsymcount
= 1;
1487 table
->dynstr
= NULL
;
1488 table
->bucketcount
= 0;
1489 table
->needed
= NULL
;
1491 table
->merge_info
= NULL
;
1492 memset (&table
->stab_info
, 0, sizeof (table
->stab_info
));
1493 memset (&table
->eh_info
, 0, sizeof (table
->eh_info
));
1494 table
->dynlocal
= NULL
;
1495 table
->runpath
= NULL
;
1496 table
->tls_sec
= NULL
;
1497 table
->tls_size
= 0;
1498 table
->loaded
= NULL
;
1500 ret
= _bfd_link_hash_table_init (&table
->root
, abfd
, newfunc
);
1501 table
->root
.type
= bfd_link_elf_hash_table
;
1506 /* Create an ELF linker hash table. */
1508 struct bfd_link_hash_table
*
1509 _bfd_elf_link_hash_table_create (bfd
*abfd
)
1511 struct elf_link_hash_table
*ret
;
1512 bfd_size_type amt
= sizeof (struct elf_link_hash_table
);
1514 ret
= bfd_malloc (amt
);
1518 if (! _bfd_elf_link_hash_table_init (ret
, abfd
, _bfd_elf_link_hash_newfunc
))
1527 /* This is a hook for the ELF emulation code in the generic linker to
1528 tell the backend linker what file name to use for the DT_NEEDED
1529 entry for a dynamic object. */
1532 bfd_elf_set_dt_needed_name (bfd
*abfd
, const char *name
)
1534 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
1535 && bfd_get_format (abfd
) == bfd_object
)
1536 elf_dt_name (abfd
) = name
;
1540 bfd_elf_get_dyn_lib_class (bfd
*abfd
)
1543 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
1544 && bfd_get_format (abfd
) == bfd_object
)
1545 lib_class
= elf_dyn_lib_class (abfd
);
1552 bfd_elf_set_dyn_lib_class (bfd
*abfd
, int lib_class
)
1554 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
1555 && bfd_get_format (abfd
) == bfd_object
)
1556 elf_dyn_lib_class (abfd
) = lib_class
;
1559 /* Get the list of DT_NEEDED entries for a link. This is a hook for
1560 the linker ELF emulation code. */
1562 struct bfd_link_needed_list
*
1563 bfd_elf_get_needed_list (bfd
*abfd ATTRIBUTE_UNUSED
,
1564 struct bfd_link_info
*info
)
1566 if (! is_elf_hash_table (info
->hash
))
1568 return elf_hash_table (info
)->needed
;
1571 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link. This is a
1572 hook for the linker ELF emulation code. */
1574 struct bfd_link_needed_list
*
1575 bfd_elf_get_runpath_list (bfd
*abfd ATTRIBUTE_UNUSED
,
1576 struct bfd_link_info
*info
)
1578 if (! is_elf_hash_table (info
->hash
))
1580 return elf_hash_table (info
)->runpath
;
1583 /* Get the name actually used for a dynamic object for a link. This
1584 is the SONAME entry if there is one. Otherwise, it is the string
1585 passed to bfd_elf_set_dt_needed_name, or it is the filename. */
1588 bfd_elf_get_dt_soname (bfd
*abfd
)
1590 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
1591 && bfd_get_format (abfd
) == bfd_object
)
1592 return elf_dt_name (abfd
);
1596 /* Get the list of DT_NEEDED entries from a BFD. This is a hook for
1597 the ELF linker emulation code. */
1600 bfd_elf_get_bfd_needed_list (bfd
*abfd
,
1601 struct bfd_link_needed_list
**pneeded
)
1604 bfd_byte
*dynbuf
= NULL
;
1606 unsigned long shlink
;
1607 bfd_byte
*extdyn
, *extdynend
;
1609 void (*swap_dyn_in
) (bfd
*, const void *, Elf_Internal_Dyn
*);
1613 if (bfd_get_flavour (abfd
) != bfd_target_elf_flavour
1614 || bfd_get_format (abfd
) != bfd_object
)
1617 s
= bfd_get_section_by_name (abfd
, ".dynamic");
1618 if (s
== NULL
|| s
->size
== 0)
1621 if (!bfd_malloc_and_get_section (abfd
, s
, &dynbuf
))
1624 elfsec
= _bfd_elf_section_from_bfd_section (abfd
, s
);
1628 shlink
= elf_elfsections (abfd
)[elfsec
]->sh_link
;
1630 extdynsize
= get_elf_backend_data (abfd
)->s
->sizeof_dyn
;
1631 swap_dyn_in
= get_elf_backend_data (abfd
)->s
->swap_dyn_in
;
1634 extdynend
= extdyn
+ s
->size
;
1635 for (; extdyn
< extdynend
; extdyn
+= extdynsize
)
1637 Elf_Internal_Dyn dyn
;
1639 (*swap_dyn_in
) (abfd
, extdyn
, &dyn
);
1641 if (dyn
.d_tag
== DT_NULL
)
1644 if (dyn
.d_tag
== DT_NEEDED
)
1647 struct bfd_link_needed_list
*l
;
1648 unsigned int tagv
= dyn
.d_un
.d_val
;
1651 string
= bfd_elf_string_from_elf_section (abfd
, shlink
, tagv
);
1656 l
= bfd_alloc (abfd
, amt
);
1677 /* Allocate an ELF string table--force the first byte to be zero. */
1679 struct bfd_strtab_hash
*
1680 _bfd_elf_stringtab_init (void)
1682 struct bfd_strtab_hash
*ret
;
1684 ret
= _bfd_stringtab_init ();
1689 loc
= _bfd_stringtab_add (ret
, "", TRUE
, FALSE
);
1690 BFD_ASSERT (loc
== 0 || loc
== (bfd_size_type
) -1);
1691 if (loc
== (bfd_size_type
) -1)
1693 _bfd_stringtab_free (ret
);
1700 /* ELF .o/exec file reading */
1702 /* Create a new bfd section from an ELF section header. */
1705 bfd_section_from_shdr (bfd
*abfd
, unsigned int shindex
)
1707 Elf_Internal_Shdr
*hdr
= elf_elfsections (abfd
)[shindex
];
1708 Elf_Internal_Ehdr
*ehdr
= elf_elfheader (abfd
);
1709 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
1712 name
= bfd_elf_string_from_elf_section (abfd
,
1713 elf_elfheader (abfd
)->e_shstrndx
,
1716 switch (hdr
->sh_type
)
1719 /* Inactive section. Throw it away. */
1722 case SHT_PROGBITS
: /* Normal section with contents. */
1723 case SHT_NOBITS
: /* .bss section. */
1724 case SHT_HASH
: /* .hash section. */
1725 case SHT_NOTE
: /* .note section. */
1726 case SHT_INIT_ARRAY
: /* .init_array section. */
1727 case SHT_FINI_ARRAY
: /* .fini_array section. */
1728 case SHT_PREINIT_ARRAY
: /* .preinit_array section. */
1729 case SHT_GNU_LIBLIST
: /* .gnu.liblist section. */
1730 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1732 case SHT_DYNAMIC
: /* Dynamic linking information. */
1733 if (! _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
))
1735 if (elf_elfsections (abfd
)[hdr
->sh_link
]->sh_type
!= SHT_STRTAB
)
1737 Elf_Internal_Shdr
*dynsymhdr
;
1739 /* The shared libraries distributed with hpux11 have a bogus
1740 sh_link field for the ".dynamic" section. Find the
1741 string table for the ".dynsym" section instead. */
1742 if (elf_dynsymtab (abfd
) != 0)
1744 dynsymhdr
= elf_elfsections (abfd
)[elf_dynsymtab (abfd
)];
1745 hdr
->sh_link
= dynsymhdr
->sh_link
;
1749 unsigned int i
, num_sec
;
1751 num_sec
= elf_numsections (abfd
);
1752 for (i
= 1; i
< num_sec
; i
++)
1754 dynsymhdr
= elf_elfsections (abfd
)[i
];
1755 if (dynsymhdr
->sh_type
== SHT_DYNSYM
)
1757 hdr
->sh_link
= dynsymhdr
->sh_link
;
1765 case SHT_SYMTAB
: /* A symbol table */
1766 if (elf_onesymtab (abfd
) == shindex
)
1769 BFD_ASSERT (hdr
->sh_entsize
== bed
->s
->sizeof_sym
);
1770 BFD_ASSERT (elf_onesymtab (abfd
) == 0);
1771 elf_onesymtab (abfd
) = shindex
;
1772 elf_tdata (abfd
)->symtab_hdr
= *hdr
;
1773 elf_elfsections (abfd
)[shindex
] = hdr
= &elf_tdata (abfd
)->symtab_hdr
;
1774 abfd
->flags
|= HAS_SYMS
;
1776 /* Sometimes a shared object will map in the symbol table. If
1777 SHF_ALLOC is set, and this is a shared object, then we also
1778 treat this section as a BFD section. We can not base the
1779 decision purely on SHF_ALLOC, because that flag is sometimes
1780 set in a relocatable object file, which would confuse the
1782 if ((hdr
->sh_flags
& SHF_ALLOC
) != 0
1783 && (abfd
->flags
& DYNAMIC
) != 0
1784 && ! _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
))
1787 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
1788 can't read symbols without that section loaded as well. It
1789 is most likely specified by the next section header. */
1790 if (elf_elfsections (abfd
)[elf_symtab_shndx (abfd
)]->sh_link
!= shindex
)
1792 unsigned int i
, num_sec
;
1794 num_sec
= elf_numsections (abfd
);
1795 for (i
= shindex
+ 1; i
< num_sec
; i
++)
1797 Elf_Internal_Shdr
*hdr2
= elf_elfsections (abfd
)[i
];
1798 if (hdr2
->sh_type
== SHT_SYMTAB_SHNDX
1799 && hdr2
->sh_link
== shindex
)
1803 for (i
= 1; i
< shindex
; i
++)
1805 Elf_Internal_Shdr
*hdr2
= elf_elfsections (abfd
)[i
];
1806 if (hdr2
->sh_type
== SHT_SYMTAB_SHNDX
1807 && hdr2
->sh_link
== shindex
)
1811 return bfd_section_from_shdr (abfd
, i
);
1815 case SHT_DYNSYM
: /* A dynamic symbol table */
1816 if (elf_dynsymtab (abfd
) == shindex
)
1819 BFD_ASSERT (hdr
->sh_entsize
== bed
->s
->sizeof_sym
);
1820 BFD_ASSERT (elf_dynsymtab (abfd
) == 0);
1821 elf_dynsymtab (abfd
) = shindex
;
1822 elf_tdata (abfd
)->dynsymtab_hdr
= *hdr
;
1823 elf_elfsections (abfd
)[shindex
] = hdr
= &elf_tdata (abfd
)->dynsymtab_hdr
;
1824 abfd
->flags
|= HAS_SYMS
;
1826 /* Besides being a symbol table, we also treat this as a regular
1827 section, so that objcopy can handle it. */
1828 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1830 case SHT_SYMTAB_SHNDX
: /* Symbol section indices when >64k sections */
1831 if (elf_symtab_shndx (abfd
) == shindex
)
1834 BFD_ASSERT (elf_symtab_shndx (abfd
) == 0);
1835 elf_symtab_shndx (abfd
) = shindex
;
1836 elf_tdata (abfd
)->symtab_shndx_hdr
= *hdr
;
1837 elf_elfsections (abfd
)[shindex
] = &elf_tdata (abfd
)->symtab_shndx_hdr
;
1840 case SHT_STRTAB
: /* A string table */
1841 if (hdr
->bfd_section
!= NULL
)
1843 if (ehdr
->e_shstrndx
== shindex
)
1845 elf_tdata (abfd
)->shstrtab_hdr
= *hdr
;
1846 elf_elfsections (abfd
)[shindex
] = &elf_tdata (abfd
)->shstrtab_hdr
;
1849 if (elf_elfsections (abfd
)[elf_onesymtab (abfd
)]->sh_link
== shindex
)
1852 elf_tdata (abfd
)->strtab_hdr
= *hdr
;
1853 elf_elfsections (abfd
)[shindex
] = &elf_tdata (abfd
)->strtab_hdr
;
1856 if (elf_elfsections (abfd
)[elf_dynsymtab (abfd
)]->sh_link
== shindex
)
1859 elf_tdata (abfd
)->dynstrtab_hdr
= *hdr
;
1860 hdr
= &elf_tdata (abfd
)->dynstrtab_hdr
;
1861 elf_elfsections (abfd
)[shindex
] = hdr
;
1862 /* We also treat this as a regular section, so that objcopy
1864 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1867 /* If the string table isn't one of the above, then treat it as a
1868 regular section. We need to scan all the headers to be sure,
1869 just in case this strtab section appeared before the above. */
1870 if (elf_onesymtab (abfd
) == 0 || elf_dynsymtab (abfd
) == 0)
1872 unsigned int i
, num_sec
;
1874 num_sec
= elf_numsections (abfd
);
1875 for (i
= 1; i
< num_sec
; i
++)
1877 Elf_Internal_Shdr
*hdr2
= elf_elfsections (abfd
)[i
];
1878 if (hdr2
->sh_link
== shindex
)
1880 if (! bfd_section_from_shdr (abfd
, i
))
1882 if (elf_onesymtab (abfd
) == i
)
1884 if (elf_dynsymtab (abfd
) == i
)
1885 goto dynsymtab_strtab
;
1889 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1893 /* *These* do a lot of work -- but build no sections! */
1895 asection
*target_sect
;
1896 Elf_Internal_Shdr
*hdr2
;
1897 unsigned int num_sec
= elf_numsections (abfd
);
1899 /* Check for a bogus link to avoid crashing. */
1900 if ((hdr
->sh_link
>= SHN_LORESERVE
&& hdr
->sh_link
<= SHN_HIRESERVE
)
1901 || hdr
->sh_link
>= num_sec
)
1903 ((*_bfd_error_handler
)
1904 (_("%B: invalid link %lu for reloc section %s (index %u)"),
1905 abfd
, hdr
->sh_link
, name
, shindex
));
1906 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1909 /* For some incomprehensible reason Oracle distributes
1910 libraries for Solaris in which some of the objects have
1911 bogus sh_link fields. It would be nice if we could just
1912 reject them, but, unfortunately, some people need to use
1913 them. We scan through the section headers; if we find only
1914 one suitable symbol table, we clobber the sh_link to point
1915 to it. I hope this doesn't break anything. */
1916 if (elf_elfsections (abfd
)[hdr
->sh_link
]->sh_type
!= SHT_SYMTAB
1917 && elf_elfsections (abfd
)[hdr
->sh_link
]->sh_type
!= SHT_DYNSYM
)
1923 for (scan
= 1; scan
< num_sec
; scan
++)
1925 if (elf_elfsections (abfd
)[scan
]->sh_type
== SHT_SYMTAB
1926 || elf_elfsections (abfd
)[scan
]->sh_type
== SHT_DYNSYM
)
1937 hdr
->sh_link
= found
;
1940 /* Get the symbol table. */
1941 if ((elf_elfsections (abfd
)[hdr
->sh_link
]->sh_type
== SHT_SYMTAB
1942 || elf_elfsections (abfd
)[hdr
->sh_link
]->sh_type
== SHT_DYNSYM
)
1943 && ! bfd_section_from_shdr (abfd
, hdr
->sh_link
))
1946 /* If this reloc section does not use the main symbol table we
1947 don't treat it as a reloc section. BFD can't adequately
1948 represent such a section, so at least for now, we don't
1949 try. We just present it as a normal section. We also
1950 can't use it as a reloc section if it points to the null
1952 if (hdr
->sh_link
!= elf_onesymtab (abfd
) || hdr
->sh_info
== SHN_UNDEF
)
1953 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1955 if (! bfd_section_from_shdr (abfd
, hdr
->sh_info
))
1957 target_sect
= bfd_section_from_elf_index (abfd
, hdr
->sh_info
);
1958 if (target_sect
== NULL
)
1961 if ((target_sect
->flags
& SEC_RELOC
) == 0
1962 || target_sect
->reloc_count
== 0)
1963 hdr2
= &elf_section_data (target_sect
)->rel_hdr
;
1967 BFD_ASSERT (elf_section_data (target_sect
)->rel_hdr2
== NULL
);
1968 amt
= sizeof (*hdr2
);
1969 hdr2
= bfd_alloc (abfd
, amt
);
1970 elf_section_data (target_sect
)->rel_hdr2
= hdr2
;
1973 elf_elfsections (abfd
)[shindex
] = hdr2
;
1974 target_sect
->reloc_count
+= NUM_SHDR_ENTRIES (hdr
);
1975 target_sect
->flags
|= SEC_RELOC
;
1976 target_sect
->relocation
= NULL
;
1977 target_sect
->rel_filepos
= hdr
->sh_offset
;
1978 /* In the section to which the relocations apply, mark whether
1979 its relocations are of the REL or RELA variety. */
1980 if (hdr
->sh_size
!= 0)
1981 target_sect
->use_rela_p
= hdr
->sh_type
== SHT_RELA
;
1982 abfd
->flags
|= HAS_RELOC
;
1987 case SHT_GNU_verdef
:
1988 elf_dynverdef (abfd
) = shindex
;
1989 elf_tdata (abfd
)->dynverdef_hdr
= *hdr
;
1990 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1993 case SHT_GNU_versym
:
1994 elf_dynversym (abfd
) = shindex
;
1995 elf_tdata (abfd
)->dynversym_hdr
= *hdr
;
1996 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1999 case SHT_GNU_verneed
:
2000 elf_dynverref (abfd
) = shindex
;
2001 elf_tdata (abfd
)->dynverref_hdr
= *hdr
;
2002 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
2009 /* We need a BFD section for objcopy and relocatable linking,
2010 and it's handy to have the signature available as the section
2012 name
= group_signature (abfd
, hdr
);
2015 if (!_bfd_elf_make_section_from_shdr (abfd
, hdr
, name
))
2017 if (hdr
->contents
!= NULL
)
2019 Elf_Internal_Group
*idx
= (Elf_Internal_Group
*) hdr
->contents
;
2020 unsigned int n_elt
= hdr
->sh_size
/ 4;
2023 if (idx
->flags
& GRP_COMDAT
)
2024 hdr
->bfd_section
->flags
2025 |= SEC_LINK_ONCE
| SEC_LINK_DUPLICATES_DISCARD
;
2027 /* We try to keep the same section order as it comes in. */
2029 while (--n_elt
!= 0)
2030 if ((s
= (--idx
)->shdr
->bfd_section
) != NULL
2031 && elf_next_in_group (s
) != NULL
)
2033 elf_next_in_group (hdr
->bfd_section
) = s
;
2040 /* Check for any processor-specific section types. */
2041 if (bed
->elf_backend_section_from_shdr
)
2042 (*bed
->elf_backend_section_from_shdr
) (abfd
, hdr
, name
);
2049 /* Return the section for the local symbol specified by ABFD, R_SYMNDX.
2050 Return SEC for sections that have no elf section, and NULL on error. */
2053 bfd_section_from_r_symndx (bfd
*abfd
,
2054 struct sym_sec_cache
*cache
,
2056 unsigned long r_symndx
)
2058 Elf_Internal_Shdr
*symtab_hdr
;
2059 unsigned char esym
[sizeof (Elf64_External_Sym
)];
2060 Elf_External_Sym_Shndx eshndx
;
2061 Elf_Internal_Sym isym
;
2062 unsigned int ent
= r_symndx
% LOCAL_SYM_CACHE_SIZE
;
2064 if (cache
->abfd
== abfd
&& cache
->indx
[ent
] == r_symndx
)
2065 return cache
->sec
[ent
];
2067 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
2068 if (bfd_elf_get_elf_syms (abfd
, symtab_hdr
, 1, r_symndx
,
2069 &isym
, esym
, &eshndx
) == NULL
)
2072 if (cache
->abfd
!= abfd
)
2074 memset (cache
->indx
, -1, sizeof (cache
->indx
));
2077 cache
->indx
[ent
] = r_symndx
;
2078 cache
->sec
[ent
] = sec
;
2079 if ((isym
.st_shndx
!= SHN_UNDEF
&& isym
.st_shndx
< SHN_LORESERVE
)
2080 || isym
.st_shndx
> SHN_HIRESERVE
)
2083 s
= bfd_section_from_elf_index (abfd
, isym
.st_shndx
);
2085 cache
->sec
[ent
] = s
;
2087 return cache
->sec
[ent
];
2090 /* Given an ELF section number, retrieve the corresponding BFD
2094 bfd_section_from_elf_index (bfd
*abfd
, unsigned int index
)
2096 if (index
>= elf_numsections (abfd
))
2098 return elf_elfsections (abfd
)[index
]->bfd_section
;
2101 static struct bfd_elf_special_section
const special_sections
[] =
2103 { ".bss", 4, -2, SHT_NOBITS
, SHF_ALLOC
+ SHF_WRITE
},
2104 { ".gnu.linkonce.b",15, -2, SHT_NOBITS
, SHF_ALLOC
+ SHF_WRITE
},
2105 { ".comment", 8, 0, SHT_PROGBITS
, 0 },
2106 { ".data", 5, -2, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
},
2107 { ".data1", 6, 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
},
2108 { ".debug", 6, 0, SHT_PROGBITS
, 0 },
2109 { ".fini", 5, 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_EXECINSTR
},
2110 { ".init", 5, 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_EXECINSTR
},
2111 { ".line", 5, 0, SHT_PROGBITS
, 0 },
2112 { ".rodata", 7, -2, SHT_PROGBITS
, SHF_ALLOC
},
2113 { ".rodata1", 8, 0, SHT_PROGBITS
, SHF_ALLOC
},
2114 { ".tbss", 5, -2, SHT_NOBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_TLS
},
2115 { ".tdata", 6, -2, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
+ SHF_TLS
},
2116 { ".text", 5, -2, SHT_PROGBITS
, SHF_ALLOC
+ SHF_EXECINSTR
},
2117 { ".init_array", 11, 0, SHT_INIT_ARRAY
, SHF_ALLOC
+ SHF_WRITE
},
2118 { ".fini_array", 11, 0, SHT_FINI_ARRAY
, SHF_ALLOC
+ SHF_WRITE
},
2119 { ".preinit_array", 14, 0, SHT_PREINIT_ARRAY
, SHF_ALLOC
+ SHF_WRITE
},
2120 { ".debug_line", 11, 0, SHT_PROGBITS
, 0 },
2121 { ".debug_info", 11, 0, SHT_PROGBITS
, 0 },
2122 { ".debug_abbrev", 13, 0, SHT_PROGBITS
, 0 },
2123 { ".debug_aranges", 14, 0, SHT_PROGBITS
, 0 },
2124 { ".dynamic", 8, 0, SHT_DYNAMIC
, SHF_ALLOC
},
2125 { ".dynstr", 7, 0, SHT_STRTAB
, SHF_ALLOC
},
2126 { ".dynsym", 7, 0, SHT_DYNSYM
, SHF_ALLOC
},
2127 { ".got", 4, 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_WRITE
},
2128 { ".hash", 5, 0, SHT_HASH
, SHF_ALLOC
},
2129 { ".interp", 7, 0, SHT_PROGBITS
, 0 },
2130 { ".plt", 4, 0, SHT_PROGBITS
, SHF_ALLOC
+ SHF_EXECINSTR
},
2131 { ".shstrtab", 9, 0, SHT_STRTAB
, 0 },
2132 { ".strtab", 7, 0, SHT_STRTAB
, 0 },
2133 { ".symtab", 7, 0, SHT_SYMTAB
, 0 },
2134 { ".gnu.version", 12, 0, SHT_GNU_versym
, 0 },
2135 { ".gnu.version_d", 14, 0, SHT_GNU_verdef
, 0 },
2136 { ".gnu.version_r", 14, 0, SHT_GNU_verneed
, 0 },
2137 { ".note.GNU-stack",15, 0, SHT_PROGBITS
, 0 },
2138 { ".note", 5, -1, SHT_NOTE
, 0 },
2139 { ".rela", 5, -1, SHT_RELA
, 0 },
2140 { ".rel", 4, -1, SHT_REL
, 0 },
2141 { ".stabstr", 5, 3, SHT_STRTAB
, 0 },
2142 { ".gnu.liblist", 12, 0, SHT_GNU_LIBLIST
, SHF_ALLOC
},
2143 { ".gnu.conflict", 13, 0, SHT_RELA
, SHF_ALLOC
},
2144 { NULL
, 0, 0, 0, 0 }
2147 static const struct bfd_elf_special_section
*
2148 get_special_section (const char *name
,
2149 const struct bfd_elf_special_section
*special_sections
,
2153 int len
= strlen (name
);
2155 for (i
= 0; special_sections
[i
].prefix
!= NULL
; i
++)
2158 int prefix_len
= special_sections
[i
].prefix_length
;
2160 if (len
< prefix_len
)
2162 if (memcmp (name
, special_sections
[i
].prefix
, prefix_len
) != 0)
2165 suffix_len
= special_sections
[i
].suffix_length
;
2166 if (suffix_len
<= 0)
2168 if (name
[prefix_len
] != 0)
2170 if (suffix_len
== 0)
2172 if (name
[prefix_len
] != '.'
2173 && (suffix_len
== -2
2174 || (rela
&& special_sections
[i
].type
== SHT_REL
)))
2180 if (len
< prefix_len
+ suffix_len
)
2182 if (memcmp (name
+ len
- suffix_len
,
2183 special_sections
[i
].prefix
+ prefix_len
,
2187 return &special_sections
[i
];
2193 const struct bfd_elf_special_section
*
2194 _bfd_elf_get_sec_type_attr (bfd
*abfd
, const char *name
)
2196 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
2197 const struct bfd_elf_special_section
*ssect
= NULL
;
2199 /* See if this is one of the special sections. */
2202 unsigned int rela
= bed
->default_use_rela_p
;
2204 if (bed
->special_sections
)
2205 ssect
= get_special_section (name
, bed
->special_sections
, rela
);
2208 ssect
= get_special_section (name
, special_sections
, rela
);
2215 _bfd_elf_new_section_hook (bfd
*abfd
, asection
*sec
)
2217 struct bfd_elf_section_data
*sdata
;
2218 const struct bfd_elf_special_section
*ssect
;
2220 sdata
= (struct bfd_elf_section_data
*) sec
->used_by_bfd
;
2223 sdata
= bfd_zalloc (abfd
, sizeof (*sdata
));
2226 sec
->used_by_bfd
= sdata
;
2229 elf_section_type (sec
) = SHT_NULL
;
2230 ssect
= _bfd_elf_get_sec_type_attr (abfd
, sec
->name
);
2233 elf_section_type (sec
) = ssect
->type
;
2234 elf_section_flags (sec
) = ssect
->attr
;
2237 /* Indicate whether or not this section should use RELA relocations. */
2238 sec
->use_rela_p
= get_elf_backend_data (abfd
)->default_use_rela_p
;
2243 /* Create a new bfd section from an ELF program header.
2245 Since program segments have no names, we generate a synthetic name
2246 of the form segment<NUM>, where NUM is generally the index in the
2247 program header table. For segments that are split (see below) we
2248 generate the names segment<NUM>a and segment<NUM>b.
2250 Note that some program segments may have a file size that is different than
2251 (less than) the memory size. All this means is that at execution the
2252 system must allocate the amount of memory specified by the memory size,
2253 but only initialize it with the first "file size" bytes read from the
2254 file. This would occur for example, with program segments consisting
2255 of combined data+bss.
2257 To handle the above situation, this routine generates TWO bfd sections
2258 for the single program segment. The first has the length specified by
2259 the file size of the segment, and the second has the length specified
2260 by the difference between the two sizes. In effect, the segment is split
2261 into it's initialized and uninitialized parts.
2266 _bfd_elf_make_section_from_phdr (bfd
*abfd
,
2267 Elf_Internal_Phdr
*hdr
,
2269 const char *typename
)
2277 split
= ((hdr
->p_memsz
> 0)
2278 && (hdr
->p_filesz
> 0)
2279 && (hdr
->p_memsz
> hdr
->p_filesz
));
2280 sprintf (namebuf
, "%s%d%s", typename
, index
, split
? "a" : "");
2281 len
= strlen (namebuf
) + 1;
2282 name
= bfd_alloc (abfd
, len
);
2285 memcpy (name
, namebuf
, len
);
2286 newsect
= bfd_make_section (abfd
, name
);
2287 if (newsect
== NULL
)
2289 newsect
->vma
= hdr
->p_vaddr
;
2290 newsect
->lma
= hdr
->p_paddr
;
2291 newsect
->size
= hdr
->p_filesz
;
2292 newsect
->filepos
= hdr
->p_offset
;
2293 newsect
->flags
|= SEC_HAS_CONTENTS
;
2294 newsect
->alignment_power
= bfd_log2 (hdr
->p_align
);
2295 if (hdr
->p_type
== PT_LOAD
)
2297 newsect
->flags
|= SEC_ALLOC
;
2298 newsect
->flags
|= SEC_LOAD
;
2299 if (hdr
->p_flags
& PF_X
)
2301 /* FIXME: all we known is that it has execute PERMISSION,
2303 newsect
->flags
|= SEC_CODE
;
2306 if (!(hdr
->p_flags
& PF_W
))
2308 newsect
->flags
|= SEC_READONLY
;
2313 sprintf (namebuf
, "%s%db", typename
, index
);
2314 len
= strlen (namebuf
) + 1;
2315 name
= bfd_alloc (abfd
, len
);
2318 memcpy (name
, namebuf
, len
);
2319 newsect
= bfd_make_section (abfd
, name
);
2320 if (newsect
== NULL
)
2322 newsect
->vma
= hdr
->p_vaddr
+ hdr
->p_filesz
;
2323 newsect
->lma
= hdr
->p_paddr
+ hdr
->p_filesz
;
2324 newsect
->size
= hdr
->p_memsz
- hdr
->p_filesz
;
2325 if (hdr
->p_type
== PT_LOAD
)
2327 newsect
->flags
|= SEC_ALLOC
;
2328 if (hdr
->p_flags
& PF_X
)
2329 newsect
->flags
|= SEC_CODE
;
2331 if (!(hdr
->p_flags
& PF_W
))
2332 newsect
->flags
|= SEC_READONLY
;
2339 bfd_section_from_phdr (bfd
*abfd
, Elf_Internal_Phdr
*hdr
, int index
)
2341 const struct elf_backend_data
*bed
;
2343 switch (hdr
->p_type
)
2346 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "null");
2349 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "load");
2352 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "dynamic");
2355 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "interp");
2358 if (! _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "note"))
2360 if (! elfcore_read_notes (abfd
, hdr
->p_offset
, hdr
->p_filesz
))
2365 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "shlib");
2368 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "phdr");
2370 case PT_GNU_EH_FRAME
:
2371 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
,
2375 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "stack");
2378 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "relro");
2381 /* Check for any processor-specific program segment types.
2382 If no handler for them, default to making "segment" sections. */
2383 bed
= get_elf_backend_data (abfd
);
2384 if (bed
->elf_backend_section_from_phdr
)
2385 return (*bed
->elf_backend_section_from_phdr
) (abfd
, hdr
, index
);
2387 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "segment");
2391 /* Initialize REL_HDR, the section-header for new section, containing
2392 relocations against ASECT. If USE_RELA_P is TRUE, we use RELA
2393 relocations; otherwise, we use REL relocations. */
2396 _bfd_elf_init_reloc_shdr (bfd
*abfd
,
2397 Elf_Internal_Shdr
*rel_hdr
,
2399 bfd_boolean use_rela_p
)
2402 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
2403 bfd_size_type amt
= sizeof ".rela" + strlen (asect
->name
);
2405 name
= bfd_alloc (abfd
, amt
);
2408 sprintf (name
, "%s%s", use_rela_p
? ".rela" : ".rel", asect
->name
);
2410 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd
), name
,
2412 if (rel_hdr
->sh_name
== (unsigned int) -1)
2414 rel_hdr
->sh_type
= use_rela_p
? SHT_RELA
: SHT_REL
;
2415 rel_hdr
->sh_entsize
= (use_rela_p
2416 ? bed
->s
->sizeof_rela
2417 : bed
->s
->sizeof_rel
);
2418 rel_hdr
->sh_addralign
= 1 << bed
->s
->log_file_align
;
2419 rel_hdr
->sh_flags
= 0;
2420 rel_hdr
->sh_addr
= 0;
2421 rel_hdr
->sh_size
= 0;
2422 rel_hdr
->sh_offset
= 0;
2427 /* Set up an ELF internal section header for a section. */
2430 elf_fake_sections (bfd
*abfd
, asection
*asect
, void *failedptrarg
)
2432 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
2433 bfd_boolean
*failedptr
= failedptrarg
;
2434 Elf_Internal_Shdr
*this_hdr
;
2438 /* We already failed; just get out of the bfd_map_over_sections
2443 this_hdr
= &elf_section_data (asect
)->this_hdr
;
2445 this_hdr
->sh_name
= (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd
),
2446 asect
->name
, FALSE
);
2447 if (this_hdr
->sh_name
== (unsigned int) -1)
2453 this_hdr
->sh_flags
= 0;
2455 if ((asect
->flags
& SEC_ALLOC
) != 0
2456 || asect
->user_set_vma
)
2457 this_hdr
->sh_addr
= asect
->vma
;
2459 this_hdr
->sh_addr
= 0;
2461 this_hdr
->sh_offset
= 0;
2462 this_hdr
->sh_size
= asect
->size
;
2463 this_hdr
->sh_link
= 0;
2464 this_hdr
->sh_addralign
= 1 << asect
->alignment_power
;
2465 /* The sh_entsize and sh_info fields may have been set already by
2466 copy_private_section_data. */
2468 this_hdr
->bfd_section
= asect
;
2469 this_hdr
->contents
= NULL
;
2471 /* If the section type is unspecified, we set it based on
2473 if (this_hdr
->sh_type
== SHT_NULL
)
2475 if ((asect
->flags
& SEC_GROUP
) != 0)
2477 /* We also need to mark SHF_GROUP here for relocatable
2479 struct bfd_link_order
*l
;
2482 for (l
= asect
->link_order_head
; l
!= NULL
; l
= l
->next
)
2483 if (l
->type
== bfd_indirect_link_order
2484 && (elt
= elf_next_in_group (l
->u
.indirect
.section
)) != NULL
)
2487 /* The name is not important. Anything will do. */
2488 elf_group_name (elt
->output_section
) = "G";
2489 elf_section_flags (elt
->output_section
) |= SHF_GROUP
;
2491 elt
= elf_next_in_group (elt
);
2492 /* During a relocatable link, the lists are
2495 while (elt
!= elf_next_in_group (l
->u
.indirect
.section
));
2497 this_hdr
->sh_type
= SHT_GROUP
;
2499 else if ((asect
->flags
& SEC_ALLOC
) != 0
2500 && (((asect
->flags
& (SEC_LOAD
| SEC_HAS_CONTENTS
)) == 0)
2501 || (asect
->flags
& SEC_NEVER_LOAD
) != 0))
2502 this_hdr
->sh_type
= SHT_NOBITS
;
2504 this_hdr
->sh_type
= SHT_PROGBITS
;
2507 switch (this_hdr
->sh_type
)
2513 case SHT_INIT_ARRAY
:
2514 case SHT_FINI_ARRAY
:
2515 case SHT_PREINIT_ARRAY
:
2522 this_hdr
->sh_entsize
= bed
->s
->sizeof_hash_entry
;
2526 this_hdr
->sh_entsize
= bed
->s
->sizeof_sym
;
2530 this_hdr
->sh_entsize
= bed
->s
->sizeof_dyn
;
2534 if (get_elf_backend_data (abfd
)->may_use_rela_p
)
2535 this_hdr
->sh_entsize
= bed
->s
->sizeof_rela
;
2539 if (get_elf_backend_data (abfd
)->may_use_rel_p
)
2540 this_hdr
->sh_entsize
= bed
->s
->sizeof_rel
;
2543 case SHT_GNU_versym
:
2544 this_hdr
->sh_entsize
= sizeof (Elf_External_Versym
);
2547 case SHT_GNU_verdef
:
2548 this_hdr
->sh_entsize
= 0;
2549 /* objcopy or strip will copy over sh_info, but may not set
2550 cverdefs. The linker will set cverdefs, but sh_info will be
2552 if (this_hdr
->sh_info
== 0)
2553 this_hdr
->sh_info
= elf_tdata (abfd
)->cverdefs
;
2555 BFD_ASSERT (elf_tdata (abfd
)->cverdefs
== 0
2556 || this_hdr
->sh_info
== elf_tdata (abfd
)->cverdefs
);
2559 case SHT_GNU_verneed
:
2560 this_hdr
->sh_entsize
= 0;
2561 /* objcopy or strip will copy over sh_info, but may not set
2562 cverrefs. The linker will set cverrefs, but sh_info will be
2564 if (this_hdr
->sh_info
== 0)
2565 this_hdr
->sh_info
= elf_tdata (abfd
)->cverrefs
;
2567 BFD_ASSERT (elf_tdata (abfd
)->cverrefs
== 0
2568 || this_hdr
->sh_info
== elf_tdata (abfd
)->cverrefs
);
2572 this_hdr
->sh_entsize
= 4;
2576 if ((asect
->flags
& SEC_ALLOC
) != 0)
2577 this_hdr
->sh_flags
|= SHF_ALLOC
;
2578 if ((asect
->flags
& SEC_READONLY
) == 0)
2579 this_hdr
->sh_flags
|= SHF_WRITE
;
2580 if ((asect
->flags
& SEC_CODE
) != 0)
2581 this_hdr
->sh_flags
|= SHF_EXECINSTR
;
2582 if ((asect
->flags
& SEC_MERGE
) != 0)
2584 this_hdr
->sh_flags
|= SHF_MERGE
;
2585 this_hdr
->sh_entsize
= asect
->entsize
;
2586 if ((asect
->flags
& SEC_STRINGS
) != 0)
2587 this_hdr
->sh_flags
|= SHF_STRINGS
;
2589 if ((asect
->flags
& SEC_GROUP
) == 0 && elf_group_name (asect
) != NULL
)
2590 this_hdr
->sh_flags
|= SHF_GROUP
;
2591 if ((asect
->flags
& SEC_THREAD_LOCAL
) != 0)
2593 this_hdr
->sh_flags
|= SHF_TLS
;
2594 if (asect
->size
== 0 && (asect
->flags
& SEC_HAS_CONTENTS
) == 0)
2596 struct bfd_link_order
*o
;
2598 this_hdr
->sh_size
= 0;
2599 for (o
= asect
->link_order_head
; o
!= NULL
; o
= o
->next
)
2600 if (this_hdr
->sh_size
< o
->offset
+ o
->size
)
2601 this_hdr
->sh_size
= o
->offset
+ o
->size
;
2602 if (this_hdr
->sh_size
)
2603 this_hdr
->sh_type
= SHT_NOBITS
;
2607 /* Check for processor-specific section types. */
2608 if (bed
->elf_backend_fake_sections
2609 && !(*bed
->elf_backend_fake_sections
) (abfd
, this_hdr
, asect
))
2612 /* If the section has relocs, set up a section header for the
2613 SHT_REL[A] section. If two relocation sections are required for
2614 this section, it is up to the processor-specific back-end to
2615 create the other. */
2616 if ((asect
->flags
& SEC_RELOC
) != 0
2617 && !_bfd_elf_init_reloc_shdr (abfd
,
2618 &elf_section_data (asect
)->rel_hdr
,
2624 /* Fill in the contents of a SHT_GROUP section. */
2627 bfd_elf_set_group_contents (bfd
*abfd
, asection
*sec
, void *failedptrarg
)
2629 bfd_boolean
*failedptr
= failedptrarg
;
2630 unsigned long symindx
;
2631 asection
*elt
, *first
;
2633 struct bfd_link_order
*l
;
2636 if (elf_section_data (sec
)->this_hdr
.sh_type
!= SHT_GROUP
2641 if (elf_group_id (sec
) != NULL
)
2642 symindx
= elf_group_id (sec
)->udata
.i
;
2646 /* If called from the assembler, swap_out_syms will have set up
2647 elf_section_syms; If called for "ld -r", use target_index. */
2648 if (elf_section_syms (abfd
) != NULL
)
2649 symindx
= elf_section_syms (abfd
)[sec
->index
]->udata
.i
;
2651 symindx
= sec
->target_index
;
2653 elf_section_data (sec
)->this_hdr
.sh_info
= symindx
;
2655 /* The contents won't be allocated for "ld -r" or objcopy. */
2657 if (sec
->contents
== NULL
)
2660 sec
->contents
= bfd_alloc (abfd
, sec
->size
);
2662 /* Arrange for the section to be written out. */
2663 elf_section_data (sec
)->this_hdr
.contents
= sec
->contents
;
2664 if (sec
->contents
== NULL
)
2671 loc
= sec
->contents
+ sec
->size
;
2673 /* Get the pointer to the first section in the group that gas
2674 squirreled away here. objcopy arranges for this to be set to the
2675 start of the input section group. */
2676 first
= elt
= elf_next_in_group (sec
);
2678 /* First element is a flag word. Rest of section is elf section
2679 indices for all the sections of the group. Write them backwards
2680 just to keep the group in the same order as given in .section
2681 directives, not that it matters. */
2690 s
= s
->output_section
;
2693 idx
= elf_section_data (s
)->this_idx
;
2694 H_PUT_32 (abfd
, idx
, loc
);
2695 elt
= elf_next_in_group (elt
);
2700 /* If this is a relocatable link, then the above did nothing because
2701 SEC is the output section. Look through the input sections
2703 for (l
= sec
->link_order_head
; l
!= NULL
; l
= l
->next
)
2704 if (l
->type
== bfd_indirect_link_order
2705 && (elt
= elf_next_in_group (l
->u
.indirect
.section
)) != NULL
)
2710 elf_section_data (elt
->output_section
)->this_idx
, loc
);
2711 elt
= elf_next_in_group (elt
);
2712 /* During a relocatable link, the lists are circular. */
2714 while (elt
!= elf_next_in_group (l
->u
.indirect
.section
));
2716 if ((loc
-= 4) != sec
->contents
)
2719 H_PUT_32 (abfd
, sec
->flags
& SEC_LINK_ONCE
? GRP_COMDAT
: 0, loc
);
2722 /* Assign all ELF section numbers. The dummy first section is handled here
2723 too. The link/info pointers for the standard section types are filled
2724 in here too, while we're at it. */
2727 assign_section_numbers (bfd
*abfd
)
2729 struct elf_obj_tdata
*t
= elf_tdata (abfd
);
2731 unsigned int section_number
, secn
;
2732 Elf_Internal_Shdr
**i_shdrp
;
2734 struct bfd_elf_section_data
*d
;
2738 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd
));
2740 /* Put SHT_GROUP sections first. */
2741 for (sec
= abfd
->sections
; sec
; sec
= sec
->next
)
2743 d
= elf_section_data (sec
);
2745 if (d
->this_hdr
.sh_type
== SHT_GROUP
)
2747 if (section_number
== SHN_LORESERVE
)
2748 section_number
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2749 d
->this_idx
= section_number
++;
2753 for (sec
= abfd
->sections
; sec
; sec
= sec
->next
)
2755 d
= elf_section_data (sec
);
2757 if (d
->this_hdr
.sh_type
!= SHT_GROUP
)
2759 if (section_number
== SHN_LORESERVE
)
2760 section_number
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2761 d
->this_idx
= section_number
++;
2763 _bfd_elf_strtab_addref (elf_shstrtab (abfd
), d
->this_hdr
.sh_name
);
2764 if ((sec
->flags
& SEC_RELOC
) == 0)
2768 if (section_number
== SHN_LORESERVE
)
2769 section_number
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2770 d
->rel_idx
= section_number
++;
2771 _bfd_elf_strtab_addref (elf_shstrtab (abfd
), d
->rel_hdr
.sh_name
);
2776 if (section_number
== SHN_LORESERVE
)
2777 section_number
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2778 d
->rel_idx2
= section_number
++;
2779 _bfd_elf_strtab_addref (elf_shstrtab (abfd
), d
->rel_hdr2
->sh_name
);
2785 if (section_number
== SHN_LORESERVE
)
2786 section_number
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2787 t
->shstrtab_section
= section_number
++;
2788 _bfd_elf_strtab_addref (elf_shstrtab (abfd
), t
->shstrtab_hdr
.sh_name
);
2789 elf_elfheader (abfd
)->e_shstrndx
= t
->shstrtab_section
;
2791 if (bfd_get_symcount (abfd
) > 0)
2793 if (section_number
== SHN_LORESERVE
)
2794 section_number
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2795 t
->symtab_section
= section_number
++;
2796 _bfd_elf_strtab_addref (elf_shstrtab (abfd
), t
->symtab_hdr
.sh_name
);
2797 if (section_number
> SHN_LORESERVE
- 2)
2799 if (section_number
== SHN_LORESERVE
)
2800 section_number
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2801 t
->symtab_shndx_section
= section_number
++;
2802 t
->symtab_shndx_hdr
.sh_name
2803 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd
),
2804 ".symtab_shndx", FALSE
);
2805 if (t
->symtab_shndx_hdr
.sh_name
== (unsigned int) -1)
2808 if (section_number
== SHN_LORESERVE
)
2809 section_number
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2810 t
->strtab_section
= section_number
++;
2811 _bfd_elf_strtab_addref (elf_shstrtab (abfd
), t
->strtab_hdr
.sh_name
);
2814 _bfd_elf_strtab_finalize (elf_shstrtab (abfd
));
2815 t
->shstrtab_hdr
.sh_size
= _bfd_elf_strtab_size (elf_shstrtab (abfd
));
2817 elf_numsections (abfd
) = section_number
;
2818 elf_elfheader (abfd
)->e_shnum
= section_number
;
2819 if (section_number
> SHN_LORESERVE
)
2820 elf_elfheader (abfd
)->e_shnum
-= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
2822 /* Set up the list of section header pointers, in agreement with the
2824 amt
= section_number
* sizeof (Elf_Internal_Shdr
*);
2825 i_shdrp
= bfd_zalloc (abfd
, amt
);
2826 if (i_shdrp
== NULL
)
2829 amt
= sizeof (Elf_Internal_Shdr
);
2830 i_shdrp
[0] = bfd_zalloc (abfd
, amt
);
2831 if (i_shdrp
[0] == NULL
)
2833 bfd_release (abfd
, i_shdrp
);
2837 elf_elfsections (abfd
) = i_shdrp
;
2839 i_shdrp
[t
->shstrtab_section
] = &t
->shstrtab_hdr
;
2840 if (bfd_get_symcount (abfd
) > 0)
2842 i_shdrp
[t
->symtab_section
] = &t
->symtab_hdr
;
2843 if (elf_numsections (abfd
) > SHN_LORESERVE
)
2845 i_shdrp
[t
->symtab_shndx_section
] = &t
->symtab_shndx_hdr
;
2846 t
->symtab_shndx_hdr
.sh_link
= t
->symtab_section
;
2848 i_shdrp
[t
->strtab_section
] = &t
->strtab_hdr
;
2849 t
->symtab_hdr
.sh_link
= t
->strtab_section
;
2852 for (sec
= abfd
->sections
; sec
; sec
= sec
->next
)
2854 struct bfd_elf_section_data
*d
= elf_section_data (sec
);
2858 i_shdrp
[d
->this_idx
] = &d
->this_hdr
;
2859 if (d
->rel_idx
!= 0)
2860 i_shdrp
[d
->rel_idx
] = &d
->rel_hdr
;
2861 if (d
->rel_idx2
!= 0)
2862 i_shdrp
[d
->rel_idx2
] = d
->rel_hdr2
;
2864 /* Fill in the sh_link and sh_info fields while we're at it. */
2866 /* sh_link of a reloc section is the section index of the symbol
2867 table. sh_info is the section index of the section to which
2868 the relocation entries apply. */
2869 if (d
->rel_idx
!= 0)
2871 d
->rel_hdr
.sh_link
= t
->symtab_section
;
2872 d
->rel_hdr
.sh_info
= d
->this_idx
;
2874 if (d
->rel_idx2
!= 0)
2876 d
->rel_hdr2
->sh_link
= t
->symtab_section
;
2877 d
->rel_hdr2
->sh_info
= d
->this_idx
;
2880 /* We need to set up sh_link for SHF_LINK_ORDER. */
2881 if ((d
->this_hdr
.sh_flags
& SHF_LINK_ORDER
) != 0)
2883 s
= elf_linked_to_section (sec
);
2885 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
2888 struct bfd_link_order
*p
;
2890 /* Find out what the corresponding section in output
2892 for (p
= sec
->link_order_head
; p
!= NULL
; p
= p
->next
)
2894 s
= p
->u
.indirect
.section
;
2895 if (p
->type
== bfd_indirect_link_order
2896 && (bfd_get_flavour (s
->owner
)
2897 == bfd_target_elf_flavour
))
2899 Elf_Internal_Shdr
** const elf_shdrp
2900 = elf_elfsections (s
->owner
);
2902 = _bfd_elf_section_from_bfd_section (s
->owner
, s
);
2903 elfsec
= elf_shdrp
[elfsec
]->sh_link
;
2905 The Intel C compiler generates SHT_IA_64_UNWIND with
2906 SHF_LINK_ORDER. But it doesn't set theh sh_link or
2907 sh_info fields. Hence we could get the situation
2908 where elfsec is 0. */
2911 const struct elf_backend_data
*bed
2912 = get_elf_backend_data (abfd
);
2913 if (bed
->link_order_error_handler
)
2914 bed
->link_order_error_handler
2915 (_("%B: warning: sh_link not set for section `%S'"),
2920 s
= elf_shdrp
[elfsec
]->bfd_section
->output_section
;
2921 BFD_ASSERT (s
!= NULL
);
2922 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
2930 switch (d
->this_hdr
.sh_type
)
2934 /* A reloc section which we are treating as a normal BFD
2935 section. sh_link is the section index of the symbol
2936 table. sh_info is the section index of the section to
2937 which the relocation entries apply. We assume that an
2938 allocated reloc section uses the dynamic symbol table.
2939 FIXME: How can we be sure? */
2940 s
= bfd_get_section_by_name (abfd
, ".dynsym");
2942 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
2944 /* We look up the section the relocs apply to by name. */
2946 if (d
->this_hdr
.sh_type
== SHT_REL
)
2950 s
= bfd_get_section_by_name (abfd
, name
);
2952 d
->this_hdr
.sh_info
= elf_section_data (s
)->this_idx
;
2956 /* We assume that a section named .stab*str is a stabs
2957 string section. We look for a section with the same name
2958 but without the trailing ``str'', and set its sh_link
2959 field to point to this section. */
2960 if (strncmp (sec
->name
, ".stab", sizeof ".stab" - 1) == 0
2961 && strcmp (sec
->name
+ strlen (sec
->name
) - 3, "str") == 0)
2966 len
= strlen (sec
->name
);
2967 alc
= bfd_malloc (len
- 2);
2970 memcpy (alc
, sec
->name
, len
- 3);
2971 alc
[len
- 3] = '\0';
2972 s
= bfd_get_section_by_name (abfd
, alc
);
2976 elf_section_data (s
)->this_hdr
.sh_link
= d
->this_idx
;
2978 /* This is a .stab section. */
2979 if (elf_section_data (s
)->this_hdr
.sh_entsize
== 0)
2980 elf_section_data (s
)->this_hdr
.sh_entsize
2981 = 4 + 2 * bfd_get_arch_size (abfd
) / 8;
2988 case SHT_GNU_verneed
:
2989 case SHT_GNU_verdef
:
2990 /* sh_link is the section header index of the string table
2991 used for the dynamic entries, or the symbol table, or the
2993 s
= bfd_get_section_by_name (abfd
, ".dynstr");
2995 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
2998 case SHT_GNU_LIBLIST
:
2999 /* sh_link is the section header index of the prelink library
3001 used for the dynamic entries, or the symbol table, or the
3003 s
= bfd_get_section_by_name (abfd
, (sec
->flags
& SEC_ALLOC
)
3004 ? ".dynstr" : ".gnu.libstr");
3006 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
3010 case SHT_GNU_versym
:
3011 /* sh_link is the section header index of the symbol table
3012 this hash table or version table is for. */
3013 s
= bfd_get_section_by_name (abfd
, ".dynsym");
3015 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
3019 d
->this_hdr
.sh_link
= t
->symtab_section
;
3023 for (secn
= 1; secn
< section_number
; ++secn
)
3024 if (i_shdrp
[secn
] == NULL
)
3025 i_shdrp
[secn
] = i_shdrp
[0];
3027 i_shdrp
[secn
]->sh_name
= _bfd_elf_strtab_offset (elf_shstrtab (abfd
),
3028 i_shdrp
[secn
]->sh_name
);
3032 /* Map symbol from it's internal number to the external number, moving
3033 all local symbols to be at the head of the list. */
3036 sym_is_global (bfd
*abfd
, asymbol
*sym
)
3038 /* If the backend has a special mapping, use it. */
3039 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
3040 if (bed
->elf_backend_sym_is_global
)
3041 return (*bed
->elf_backend_sym_is_global
) (abfd
, sym
);
3043 return ((sym
->flags
& (BSF_GLOBAL
| BSF_WEAK
)) != 0
3044 || bfd_is_und_section (bfd_get_section (sym
))
3045 || bfd_is_com_section (bfd_get_section (sym
)));
3049 elf_map_symbols (bfd
*abfd
)
3051 unsigned int symcount
= bfd_get_symcount (abfd
);
3052 asymbol
**syms
= bfd_get_outsymbols (abfd
);
3053 asymbol
**sect_syms
;
3054 unsigned int num_locals
= 0;
3055 unsigned int num_globals
= 0;
3056 unsigned int num_locals2
= 0;
3057 unsigned int num_globals2
= 0;
3065 fprintf (stderr
, "elf_map_symbols\n");
3069 for (asect
= abfd
->sections
; asect
; asect
= asect
->next
)
3071 if (max_index
< asect
->index
)
3072 max_index
= asect
->index
;
3076 amt
= max_index
* sizeof (asymbol
*);
3077 sect_syms
= bfd_zalloc (abfd
, amt
);
3078 if (sect_syms
== NULL
)
3080 elf_section_syms (abfd
) = sect_syms
;
3081 elf_num_section_syms (abfd
) = max_index
;
3083 /* Init sect_syms entries for any section symbols we have already
3084 decided to output. */
3085 for (idx
= 0; idx
< symcount
; idx
++)
3087 asymbol
*sym
= syms
[idx
];
3089 if ((sym
->flags
& BSF_SECTION_SYM
) != 0
3096 if (sec
->owner
!= NULL
)
3098 if (sec
->owner
!= abfd
)
3100 if (sec
->output_offset
!= 0)
3103 sec
= sec
->output_section
;
3105 /* Empty sections in the input files may have had a
3106 section symbol created for them. (See the comment
3107 near the end of _bfd_generic_link_output_symbols in
3108 linker.c). If the linker script discards such
3109 sections then we will reach this point. Since we know
3110 that we cannot avoid this case, we detect it and skip
3111 the abort and the assignment to the sect_syms array.
3112 To reproduce this particular case try running the
3113 linker testsuite test ld-scripts/weak.exp for an ELF
3114 port that uses the generic linker. */
3115 if (sec
->owner
== NULL
)
3118 BFD_ASSERT (sec
->owner
== abfd
);
3120 sect_syms
[sec
->index
] = syms
[idx
];
3125 /* Classify all of the symbols. */
3126 for (idx
= 0; idx
< symcount
; idx
++)
3128 if (!sym_is_global (abfd
, syms
[idx
]))
3134 /* We will be adding a section symbol for each BFD section. Most normal
3135 sections will already have a section symbol in outsymbols, but
3136 eg. SHT_GROUP sections will not, and we need the section symbol mapped
3137 at least in that case. */
3138 for (asect
= abfd
->sections
; asect
; asect
= asect
->next
)
3140 if (sect_syms
[asect
->index
] == NULL
)
3142 if (!sym_is_global (abfd
, asect
->symbol
))
3149 /* Now sort the symbols so the local symbols are first. */
3150 amt
= (num_locals
+ num_globals
) * sizeof (asymbol
*);
3151 new_syms
= bfd_alloc (abfd
, amt
);
3153 if (new_syms
== NULL
)
3156 for (idx
= 0; idx
< symcount
; idx
++)
3158 asymbol
*sym
= syms
[idx
];
3161 if (!sym_is_global (abfd
, sym
))
3164 i
= num_locals
+ num_globals2
++;
3166 sym
->udata
.i
= i
+ 1;
3168 for (asect
= abfd
->sections
; asect
; asect
= asect
->next
)
3170 if (sect_syms
[asect
->index
] == NULL
)
3172 asymbol
*sym
= asect
->symbol
;
3175 sect_syms
[asect
->index
] = sym
;
3176 if (!sym_is_global (abfd
, sym
))
3179 i
= num_locals
+ num_globals2
++;
3181 sym
->udata
.i
= i
+ 1;
3185 bfd_set_symtab (abfd
, new_syms
, num_locals
+ num_globals
);
3187 elf_num_locals (abfd
) = num_locals
;
3188 elf_num_globals (abfd
) = num_globals
;
3192 /* Align to the maximum file alignment that could be required for any
3193 ELF data structure. */
3195 static inline file_ptr
3196 align_file_position (file_ptr off
, int align
)
3198 return (off
+ align
- 1) & ~(align
- 1);
3201 /* Assign a file position to a section, optionally aligning to the
3202 required section alignment. */
3205 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr
*i_shdrp
,
3213 al
= i_shdrp
->sh_addralign
;
3215 offset
= BFD_ALIGN (offset
, al
);
3217 i_shdrp
->sh_offset
= offset
;
3218 if (i_shdrp
->bfd_section
!= NULL
)
3219 i_shdrp
->bfd_section
->filepos
= offset
;
3220 if (i_shdrp
->sh_type
!= SHT_NOBITS
)
3221 offset
+= i_shdrp
->sh_size
;
3225 /* Compute the file positions we are going to put the sections at, and
3226 otherwise prepare to begin writing out the ELF file. If LINK_INFO
3227 is not NULL, this is being called by the ELF backend linker. */
3230 _bfd_elf_compute_section_file_positions (bfd
*abfd
,
3231 struct bfd_link_info
*link_info
)
3233 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
3235 struct bfd_strtab_hash
*strtab
;
3236 Elf_Internal_Shdr
*shstrtab_hdr
;
3238 if (abfd
->output_has_begun
)
3241 /* Do any elf backend specific processing first. */
3242 if (bed
->elf_backend_begin_write_processing
)
3243 (*bed
->elf_backend_begin_write_processing
) (abfd
, link_info
);
3245 if (! prep_headers (abfd
))
3248 /* Post process the headers if necessary. */
3249 if (bed
->elf_backend_post_process_headers
)
3250 (*bed
->elf_backend_post_process_headers
) (abfd
, link_info
);
3253 bfd_map_over_sections (abfd
, elf_fake_sections
, &failed
);
3257 if (!assign_section_numbers (abfd
))
3260 /* The backend linker builds symbol table information itself. */
3261 if (link_info
== NULL
&& bfd_get_symcount (abfd
) > 0)
3263 /* Non-zero if doing a relocatable link. */
3264 int relocatable_p
= ! (abfd
->flags
& (EXEC_P
| DYNAMIC
));
3266 if (! swap_out_syms (abfd
, &strtab
, relocatable_p
))
3270 if (link_info
== NULL
)
3272 bfd_map_over_sections (abfd
, bfd_elf_set_group_contents
, &failed
);
3277 shstrtab_hdr
= &elf_tdata (abfd
)->shstrtab_hdr
;
3278 /* sh_name was set in prep_headers. */
3279 shstrtab_hdr
->sh_type
= SHT_STRTAB
;
3280 shstrtab_hdr
->sh_flags
= 0;
3281 shstrtab_hdr
->sh_addr
= 0;
3282 shstrtab_hdr
->sh_size
= _bfd_elf_strtab_size (elf_shstrtab (abfd
));
3283 shstrtab_hdr
->sh_entsize
= 0;
3284 shstrtab_hdr
->sh_link
= 0;
3285 shstrtab_hdr
->sh_info
= 0;
3286 /* sh_offset is set in assign_file_positions_except_relocs. */
3287 shstrtab_hdr
->sh_addralign
= 1;
3289 if (!assign_file_positions_except_relocs (abfd
, link_info
))
3292 if (link_info
== NULL
&& bfd_get_symcount (abfd
) > 0)
3295 Elf_Internal_Shdr
*hdr
;
3297 off
= elf_tdata (abfd
)->next_file_pos
;
3299 hdr
= &elf_tdata (abfd
)->symtab_hdr
;
3300 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, TRUE
);
3302 hdr
= &elf_tdata (abfd
)->symtab_shndx_hdr
;
3303 if (hdr
->sh_size
!= 0)
3304 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, TRUE
);
3306 hdr
= &elf_tdata (abfd
)->strtab_hdr
;
3307 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, TRUE
);
3309 elf_tdata (abfd
)->next_file_pos
= off
;
3311 /* Now that we know where the .strtab section goes, write it
3313 if (bfd_seek (abfd
, hdr
->sh_offset
, SEEK_SET
) != 0
3314 || ! _bfd_stringtab_emit (abfd
, strtab
))
3316 _bfd_stringtab_free (strtab
);
3319 abfd
->output_has_begun
= TRUE
;
3324 /* Create a mapping from a set of sections to a program segment. */
3326 static struct elf_segment_map
*
3327 make_mapping (bfd
*abfd
,
3328 asection
**sections
,
3333 struct elf_segment_map
*m
;
3338 amt
= sizeof (struct elf_segment_map
);
3339 amt
+= (to
- from
- 1) * sizeof (asection
*);
3340 m
= bfd_zalloc (abfd
, amt
);
3344 m
->p_type
= PT_LOAD
;
3345 for (i
= from
, hdrpp
= sections
+ from
; i
< to
; i
++, hdrpp
++)
3346 m
->sections
[i
- from
] = *hdrpp
;
3347 m
->count
= to
- from
;
3349 if (from
== 0 && phdr
)
3351 /* Include the headers in the first PT_LOAD segment. */
3352 m
->includes_filehdr
= 1;
3353 m
->includes_phdrs
= 1;
3359 /* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL
3362 struct elf_segment_map
*
3363 _bfd_elf_make_dynamic_segment (bfd
*abfd
, asection
*dynsec
)
3365 struct elf_segment_map
*m
;
3367 m
= bfd_zalloc (abfd
, sizeof (struct elf_segment_map
));
3371 m
->p_type
= PT_DYNAMIC
;
3373 m
->sections
[0] = dynsec
;
3378 /* Set up a mapping from BFD sections to program segments. */
3381 map_sections_to_segments (bfd
*abfd
)
3383 asection
**sections
= NULL
;
3387 struct elf_segment_map
*mfirst
;
3388 struct elf_segment_map
**pm
;
3389 struct elf_segment_map
*m
;
3392 unsigned int phdr_index
;
3393 bfd_vma maxpagesize
;
3395 bfd_boolean phdr_in_segment
= TRUE
;
3396 bfd_boolean writable
;
3398 asection
*first_tls
= NULL
;
3399 asection
*dynsec
, *eh_frame_hdr
;
3402 if (elf_tdata (abfd
)->segment_map
!= NULL
)
3405 if (bfd_count_sections (abfd
) == 0)
3408 /* Select the allocated sections, and sort them. */
3410 amt
= bfd_count_sections (abfd
) * sizeof (asection
*);
3411 sections
= bfd_malloc (amt
);
3412 if (sections
== NULL
)
3416 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
3418 if ((s
->flags
& SEC_ALLOC
) != 0)
3424 BFD_ASSERT (i
<= bfd_count_sections (abfd
));
3427 qsort (sections
, (size_t) count
, sizeof (asection
*), elf_sort_sections
);
3429 /* Build the mapping. */
3434 /* If we have a .interp section, then create a PT_PHDR segment for
3435 the program headers and a PT_INTERP segment for the .interp
3437 s
= bfd_get_section_by_name (abfd
, ".interp");
3438 if (s
!= NULL
&& (s
->flags
& SEC_LOAD
) != 0)
3440 amt
= sizeof (struct elf_segment_map
);
3441 m
= bfd_zalloc (abfd
, amt
);
3445 m
->p_type
= PT_PHDR
;
3446 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
3447 m
->p_flags
= PF_R
| PF_X
;
3448 m
->p_flags_valid
= 1;
3449 m
->includes_phdrs
= 1;
3454 amt
= sizeof (struct elf_segment_map
);
3455 m
= bfd_zalloc (abfd
, amt
);
3459 m
->p_type
= PT_INTERP
;
3467 /* Look through the sections. We put sections in the same program
3468 segment when the start of the second section can be placed within
3469 a few bytes of the end of the first section. */
3473 maxpagesize
= get_elf_backend_data (abfd
)->maxpagesize
;
3475 dynsec
= bfd_get_section_by_name (abfd
, ".dynamic");
3477 && (dynsec
->flags
& SEC_LOAD
) == 0)
3480 /* Deal with -Ttext or something similar such that the first section
3481 is not adjacent to the program headers. This is an
3482 approximation, since at this point we don't know exactly how many
3483 program headers we will need. */
3486 bfd_size_type phdr_size
;
3488 phdr_size
= elf_tdata (abfd
)->program_header_size
;
3490 phdr_size
= get_elf_backend_data (abfd
)->s
->sizeof_phdr
;
3491 if ((abfd
->flags
& D_PAGED
) == 0
3492 || sections
[0]->lma
< phdr_size
3493 || sections
[0]->lma
% maxpagesize
< phdr_size
% maxpagesize
)
3494 phdr_in_segment
= FALSE
;
3497 for (i
= 0, hdrpp
= sections
; i
< count
; i
++, hdrpp
++)
3500 bfd_boolean new_segment
;
3504 /* See if this section and the last one will fit in the same
3507 if (last_hdr
== NULL
)
3509 /* If we don't have a segment yet, then we don't need a new
3510 one (we build the last one after this loop). */
3511 new_segment
= FALSE
;
3513 else if (last_hdr
->lma
- last_hdr
->vma
!= hdr
->lma
- hdr
->vma
)
3515 /* If this section has a different relation between the
3516 virtual address and the load address, then we need a new
3520 else if (BFD_ALIGN (last_hdr
->lma
+ last_size
, maxpagesize
)
3521 < BFD_ALIGN (hdr
->lma
, maxpagesize
))
3523 /* If putting this section in this segment would force us to
3524 skip a page in the segment, then we need a new segment. */
3527 else if ((last_hdr
->flags
& (SEC_LOAD
| SEC_THREAD_LOCAL
)) == 0
3528 && (hdr
->flags
& (SEC_LOAD
| SEC_THREAD_LOCAL
)) != 0)
3530 /* We don't want to put a loadable section after a
3531 nonloadable section in the same segment.
3532 Consider .tbss sections as loadable for this purpose. */
3535 else if ((abfd
->flags
& D_PAGED
) == 0)
3537 /* If the file is not demand paged, which means that we
3538 don't require the sections to be correctly aligned in the
3539 file, then there is no other reason for a new segment. */
3540 new_segment
= FALSE
;
3543 && (hdr
->flags
& SEC_READONLY
) == 0
3544 && (((last_hdr
->lma
+ last_size
- 1)
3545 & ~(maxpagesize
- 1))
3546 != (hdr
->lma
& ~(maxpagesize
- 1))))
3548 /* We don't want to put a writable section in a read only
3549 segment, unless they are on the same page in memory
3550 anyhow. We already know that the last section does not
3551 bring us past the current section on the page, so the
3552 only case in which the new section is not on the same
3553 page as the previous section is when the previous section
3554 ends precisely on a page boundary. */
3559 /* Otherwise, we can use the same segment. */
3560 new_segment
= FALSE
;
3565 if ((hdr
->flags
& SEC_READONLY
) == 0)
3568 /* .tbss sections effectively have zero size. */
3569 if ((hdr
->flags
& (SEC_THREAD_LOCAL
| SEC_LOAD
)) != SEC_THREAD_LOCAL
)
3570 last_size
= hdr
->size
;
3576 /* We need a new program segment. We must create a new program
3577 header holding all the sections from phdr_index until hdr. */
3579 m
= make_mapping (abfd
, sections
, phdr_index
, i
, phdr_in_segment
);
3586 if ((hdr
->flags
& SEC_READONLY
) == 0)
3592 /* .tbss sections effectively have zero size. */
3593 if ((hdr
->flags
& (SEC_THREAD_LOCAL
| SEC_LOAD
)) != SEC_THREAD_LOCAL
)
3594 last_size
= hdr
->size
;
3598 phdr_in_segment
= FALSE
;
3601 /* Create a final PT_LOAD program segment. */
3602 if (last_hdr
!= NULL
)
3604 m
= make_mapping (abfd
, sections
, phdr_index
, i
, phdr_in_segment
);
3612 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
3615 m
= _bfd_elf_make_dynamic_segment (abfd
, dynsec
);
3622 /* For each loadable .note section, add a PT_NOTE segment. We don't
3623 use bfd_get_section_by_name, because if we link together
3624 nonloadable .note sections and loadable .note sections, we will
3625 generate two .note sections in the output file. FIXME: Using
3626 names for section types is bogus anyhow. */
3627 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
3629 if ((s
->flags
& SEC_LOAD
) != 0
3630 && strncmp (s
->name
, ".note", 5) == 0)
3632 amt
= sizeof (struct elf_segment_map
);
3633 m
= bfd_zalloc (abfd
, amt
);
3637 m
->p_type
= PT_NOTE
;
3644 if (s
->flags
& SEC_THREAD_LOCAL
)
3652 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
3657 amt
= sizeof (struct elf_segment_map
);
3658 amt
+= (tls_count
- 1) * sizeof (asection
*);
3659 m
= bfd_zalloc (abfd
, amt
);
3664 m
->count
= tls_count
;
3665 /* Mandated PF_R. */
3667 m
->p_flags_valid
= 1;
3668 for (i
= 0; i
< tls_count
; ++i
)
3670 BFD_ASSERT (first_tls
->flags
& SEC_THREAD_LOCAL
);
3671 m
->sections
[i
] = first_tls
;
3672 first_tls
= first_tls
->next
;
3679 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
3681 eh_frame_hdr
= elf_tdata (abfd
)->eh_frame_hdr
;
3682 if (eh_frame_hdr
!= NULL
3683 && (eh_frame_hdr
->output_section
->flags
& SEC_LOAD
) != 0)
3685 amt
= sizeof (struct elf_segment_map
);
3686 m
= bfd_zalloc (abfd
, amt
);
3690 m
->p_type
= PT_GNU_EH_FRAME
;
3692 m
->sections
[0] = eh_frame_hdr
->output_section
;
3698 if (elf_tdata (abfd
)->stack_flags
)
3700 amt
= sizeof (struct elf_segment_map
);
3701 m
= bfd_zalloc (abfd
, amt
);
3705 m
->p_type
= PT_GNU_STACK
;
3706 m
->p_flags
= elf_tdata (abfd
)->stack_flags
;
3707 m
->p_flags_valid
= 1;
3713 if (elf_tdata (abfd
)->relro
)
3715 amt
= sizeof (struct elf_segment_map
);
3716 m
= bfd_zalloc (abfd
, amt
);
3720 m
->p_type
= PT_GNU_RELRO
;
3722 m
->p_flags_valid
= 1;
3731 elf_tdata (abfd
)->segment_map
= mfirst
;
3735 if (sections
!= NULL
)
3740 /* Sort sections by address. */
3743 elf_sort_sections (const void *arg1
, const void *arg2
)
3745 const asection
*sec1
= *(const asection
**) arg1
;
3746 const asection
*sec2
= *(const asection
**) arg2
;
3747 bfd_size_type size1
, size2
;
3749 /* Sort by LMA first, since this is the address used to
3750 place the section into a segment. */
3751 if (sec1
->lma
< sec2
->lma
)
3753 else if (sec1
->lma
> sec2
->lma
)
3756 /* Then sort by VMA. Normally the LMA and the VMA will be
3757 the same, and this will do nothing. */
3758 if (sec1
->vma
< sec2
->vma
)
3760 else if (sec1
->vma
> sec2
->vma
)
3763 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
3765 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
3771 /* If the indicies are the same, do not return 0
3772 here, but continue to try the next comparison. */
3773 if (sec1
->target_index
- sec2
->target_index
!= 0)
3774 return sec1
->target_index
- sec2
->target_index
;
3779 else if (TOEND (sec2
))
3784 /* Sort by size, to put zero sized sections
3785 before others at the same address. */
3787 size1
= (sec1
->flags
& SEC_LOAD
) ? sec1
->size
: 0;
3788 size2
= (sec2
->flags
& SEC_LOAD
) ? sec2
->size
: 0;
3795 return sec1
->target_index
- sec2
->target_index
;
3798 /* Ian Lance Taylor writes:
3800 We shouldn't be using % with a negative signed number. That's just
3801 not good. We have to make sure either that the number is not
3802 negative, or that the number has an unsigned type. When the types
3803 are all the same size they wind up as unsigned. When file_ptr is a
3804 larger signed type, the arithmetic winds up as signed long long,
3807 What we're trying to say here is something like ``increase OFF by
3808 the least amount that will cause it to be equal to the VMA modulo
3810 /* In other words, something like:
3812 vma_offset = m->sections[0]->vma % bed->maxpagesize;
3813 off_offset = off % bed->maxpagesize;
3814 if (vma_offset < off_offset)
3815 adjustment = vma_offset + bed->maxpagesize - off_offset;
3817 adjustment = vma_offset - off_offset;
3819 which can can be collapsed into the expression below. */
3822 vma_page_aligned_bias (bfd_vma vma
, ufile_ptr off
, bfd_vma maxpagesize
)
3824 return ((vma
- off
) % maxpagesize
);
3827 /* Assign file positions to the sections based on the mapping from
3828 sections to segments. This function also sets up some fields in
3829 the file header, and writes out the program headers. */
3832 assign_file_positions_for_segments (bfd
*abfd
, struct bfd_link_info
*link_info
)
3834 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
3836 struct elf_segment_map
*m
;
3838 Elf_Internal_Phdr
*phdrs
;
3840 bfd_vma filehdr_vaddr
, filehdr_paddr
;
3841 bfd_vma phdrs_vaddr
, phdrs_paddr
;
3842 Elf_Internal_Phdr
*p
;
3845 if (elf_tdata (abfd
)->segment_map
== NULL
)
3847 if (! map_sections_to_segments (abfd
))
3852 /* The placement algorithm assumes that non allocated sections are
3853 not in PT_LOAD segments. We ensure this here by removing such
3854 sections from the segment map. */
3855 for (m
= elf_tdata (abfd
)->segment_map
;
3859 unsigned int new_count
;
3862 if (m
->p_type
!= PT_LOAD
)
3866 for (i
= 0; i
< m
->count
; i
++)
3868 if ((m
->sections
[i
]->flags
& SEC_ALLOC
) != 0)
3871 m
->sections
[new_count
] = m
->sections
[i
];
3877 if (new_count
!= m
->count
)
3878 m
->count
= new_count
;
3882 if (bed
->elf_backend_modify_segment_map
)
3884 if (! (*bed
->elf_backend_modify_segment_map
) (abfd
, link_info
))
3889 for (m
= elf_tdata (abfd
)->segment_map
; m
!= NULL
; m
= m
->next
)
3892 elf_elfheader (abfd
)->e_phoff
= bed
->s
->sizeof_ehdr
;
3893 elf_elfheader (abfd
)->e_phentsize
= bed
->s
->sizeof_phdr
;
3894 elf_elfheader (abfd
)->e_phnum
= count
;
3898 elf_tdata (abfd
)->next_file_pos
= bed
->s
->sizeof_ehdr
;
3902 /* If we already counted the number of program segments, make sure
3903 that we allocated enough space. This happens when SIZEOF_HEADERS
3904 is used in a linker script. */
3905 alloc
= elf_tdata (abfd
)->program_header_size
/ bed
->s
->sizeof_phdr
;
3906 if (alloc
!= 0 && count
> alloc
)
3908 ((*_bfd_error_handler
)
3909 (_("%B: Not enough room for program headers (allocated %u, need %u)"),
3910 abfd
, alloc
, count
));
3911 bfd_set_error (bfd_error_bad_value
);
3918 amt
= alloc
* sizeof (Elf_Internal_Phdr
);
3919 phdrs
= bfd_alloc (abfd
, amt
);
3923 off
= bed
->s
->sizeof_ehdr
;
3924 off
+= alloc
* bed
->s
->sizeof_phdr
;
3931 for (m
= elf_tdata (abfd
)->segment_map
, p
= phdrs
;
3938 /* If elf_segment_map is not from map_sections_to_segments, the
3939 sections may not be correctly ordered. NOTE: sorting should
3940 not be done to the PT_NOTE section of a corefile, which may
3941 contain several pseudo-sections artificially created by bfd.
3942 Sorting these pseudo-sections breaks things badly. */
3944 && !(elf_elfheader (abfd
)->e_type
== ET_CORE
3945 && m
->p_type
== PT_NOTE
))
3946 qsort (m
->sections
, (size_t) m
->count
, sizeof (asection
*),
3949 /* An ELF segment (described by Elf_Internal_Phdr) may contain a
3950 number of sections with contents contributing to both p_filesz
3951 and p_memsz, followed by a number of sections with no contents
3952 that just contribute to p_memsz. In this loop, OFF tracks next
3953 available file offset for PT_LOAD and PT_NOTE segments. VOFF is
3954 an adjustment we use for segments that have no file contents
3955 but need zero filled memory allocation. */
3957 p
->p_type
= m
->p_type
;
3958 p
->p_flags
= m
->p_flags
;
3960 if (p
->p_type
== PT_LOAD
3963 bfd_size_type align
;
3966 if ((abfd
->flags
& D_PAGED
) != 0)
3967 align
= bed
->maxpagesize
;
3970 unsigned int align_power
= 0;
3971 for (i
= 0, secpp
= m
->sections
; i
< m
->count
; i
++, secpp
++)
3973 unsigned int secalign
;
3975 secalign
= bfd_get_section_alignment (abfd
, *secpp
);
3976 if (secalign
> align_power
)
3977 align_power
= secalign
;
3979 align
= (bfd_size_type
) 1 << align_power
;
3982 adjust
= vma_page_aligned_bias (m
->sections
[0]->vma
, off
, align
);
3985 && !m
->includes_filehdr
3986 && !m
->includes_phdrs
3987 && (ufile_ptr
) off
>= align
)
3989 /* If the first section isn't loadable, the same holds for
3990 any other sections. Since the segment won't need file
3991 space, we can make p_offset overlap some prior segment.
3992 However, .tbss is special. If a segment starts with
3993 .tbss, we need to look at the next section to decide
3994 whether the segment has any loadable sections. */
3996 while ((m
->sections
[i
]->flags
& SEC_LOAD
) == 0)
3998 if ((m
->sections
[i
]->flags
& SEC_THREAD_LOCAL
) == 0
4002 voff
= adjust
- align
;
4008 /* Make sure the .dynamic section is the first section in the
4009 PT_DYNAMIC segment. */
4010 else if (p
->p_type
== PT_DYNAMIC
4012 && strcmp (m
->sections
[0]->name
, ".dynamic") != 0)
4015 (_("%B: The first section in the PT_DYNAMIC segment is not the .dynamic section"),
4017 bfd_set_error (bfd_error_bad_value
);
4024 p
->p_vaddr
= m
->sections
[0]->vma
;
4026 if (m
->p_paddr_valid
)
4027 p
->p_paddr
= m
->p_paddr
;
4028 else if (m
->count
== 0)
4031 p
->p_paddr
= m
->sections
[0]->lma
;
4033 if (p
->p_type
== PT_LOAD
4034 && (abfd
->flags
& D_PAGED
) != 0)
4035 p
->p_align
= bed
->maxpagesize
;
4036 else if (m
->count
== 0)
4037 p
->p_align
= 1 << bed
->s
->log_file_align
;
4045 if (m
->includes_filehdr
)
4047 if (! m
->p_flags_valid
)
4050 p
->p_filesz
= bed
->s
->sizeof_ehdr
;
4051 p
->p_memsz
= bed
->s
->sizeof_ehdr
;
4054 BFD_ASSERT (p
->p_type
== PT_LOAD
);
4056 if (p
->p_vaddr
< (bfd_vma
) off
)
4058 (*_bfd_error_handler
)
4059 (_("%B: Not enough room for program headers, try linking with -N"),
4061 bfd_set_error (bfd_error_bad_value
);
4066 if (! m
->p_paddr_valid
)
4069 if (p
->p_type
== PT_LOAD
)
4071 filehdr_vaddr
= p
->p_vaddr
;
4072 filehdr_paddr
= p
->p_paddr
;
4076 if (m
->includes_phdrs
)
4078 if (! m
->p_flags_valid
)
4081 if (m
->includes_filehdr
)
4083 if (p
->p_type
== PT_LOAD
)
4085 phdrs_vaddr
= p
->p_vaddr
+ bed
->s
->sizeof_ehdr
;
4086 phdrs_paddr
= p
->p_paddr
+ bed
->s
->sizeof_ehdr
;
4091 p
->p_offset
= bed
->s
->sizeof_ehdr
;
4095 BFD_ASSERT (p
->p_type
== PT_LOAD
);
4096 p
->p_vaddr
-= off
- p
->p_offset
;
4097 if (! m
->p_paddr_valid
)
4098 p
->p_paddr
-= off
- p
->p_offset
;
4101 if (p
->p_type
== PT_LOAD
)
4103 phdrs_vaddr
= p
->p_vaddr
;
4104 phdrs_paddr
= p
->p_paddr
;
4107 phdrs_vaddr
= bed
->maxpagesize
+ bed
->s
->sizeof_ehdr
;
4110 p
->p_filesz
+= alloc
* bed
->s
->sizeof_phdr
;
4111 p
->p_memsz
+= alloc
* bed
->s
->sizeof_phdr
;
4114 if (p
->p_type
== PT_LOAD
4115 || (p
->p_type
== PT_NOTE
&& bfd_get_format (abfd
) == bfd_core
))
4117 if (! m
->includes_filehdr
&& ! m
->includes_phdrs
)
4118 p
->p_offset
= off
+ voff
;
4123 adjust
= off
- (p
->p_offset
+ p
->p_filesz
);
4124 p
->p_filesz
+= adjust
;
4125 p
->p_memsz
+= adjust
;
4129 for (i
= 0, secpp
= m
->sections
; i
< m
->count
; i
++, secpp
++)
4133 bfd_size_type align
;
4137 align
= 1 << bfd_get_section_alignment (abfd
, sec
);
4139 if (p
->p_type
== PT_LOAD
4140 || p
->p_type
== PT_TLS
)
4142 bfd_signed_vma adjust
;
4144 if ((flags
& SEC_LOAD
) != 0)
4146 adjust
= sec
->lma
- (p
->p_paddr
+ p
->p_filesz
);
4149 (*_bfd_error_handler
)
4150 (_("%B: section %A lma 0x%lx overlaps previous sections"),
4151 abfd
, sec
, (unsigned long) sec
->lma
);
4155 p
->p_filesz
+= adjust
;
4156 p
->p_memsz
+= adjust
;
4158 /* .tbss is special. It doesn't contribute to p_memsz of
4160 else if ((flags
& SEC_THREAD_LOCAL
) == 0
4161 || p
->p_type
== PT_TLS
)
4163 /* The section VMA must equal the file position
4164 modulo the page size. */
4165 bfd_size_type page
= align
;
4166 if ((abfd
->flags
& D_PAGED
) != 0)
4167 page
= bed
->maxpagesize
;
4168 adjust
= vma_page_aligned_bias (sec
->vma
,
4169 p
->p_vaddr
+ p
->p_memsz
,
4171 p
->p_memsz
+= adjust
;
4175 if (p
->p_type
== PT_NOTE
&& bfd_get_format (abfd
) == bfd_core
)
4177 /* The section at i == 0 is the one that actually contains
4183 p
->p_filesz
= sec
->size
;
4189 /* The rest are fake sections that shouldn't be written. */
4198 if (p
->p_type
== PT_LOAD
)
4201 /* FIXME: The SEC_HAS_CONTENTS test here dates back to
4202 1997, and the exact reason for it isn't clear. One
4203 plausible explanation is that it is to work around
4204 a problem we have with linker scripts using data
4205 statements in NOLOAD sections. I don't think it
4206 makes a great deal of sense to have such a section
4207 assigned to a PT_LOAD segment, but apparently
4208 people do this. The data statement results in a
4209 bfd_data_link_order being built, and these need
4210 section contents to write into. Eventually, we get
4211 to _bfd_elf_write_object_contents which writes any
4212 section with contents to the output. Make room
4213 here for the write, so that following segments are
4215 if ((flags
& SEC_LOAD
) != 0
4216 || (flags
& SEC_HAS_CONTENTS
) != 0)
4220 if ((flags
& SEC_LOAD
) != 0)
4222 p
->p_filesz
+= sec
->size
;
4223 p
->p_memsz
+= sec
->size
;
4225 /* .tbss is special. It doesn't contribute to p_memsz of
4227 else if ((flags
& SEC_THREAD_LOCAL
) == 0
4228 || p
->p_type
== PT_TLS
)
4229 p
->p_memsz
+= sec
->size
;
4231 if (p
->p_type
== PT_TLS
4233 && (sec
->flags
& SEC_HAS_CONTENTS
) == 0)
4235 struct bfd_link_order
*o
;
4236 bfd_vma tbss_size
= 0;
4238 for (o
= sec
->link_order_head
; o
!= NULL
; o
= o
->next
)
4239 if (tbss_size
< o
->offset
+ o
->size
)
4240 tbss_size
= o
->offset
+ o
->size
;
4242 p
->p_memsz
+= tbss_size
;
4245 if (align
> p
->p_align
4246 && (p
->p_type
!= PT_LOAD
|| (abfd
->flags
& D_PAGED
) == 0))
4250 if (! m
->p_flags_valid
)
4253 if ((flags
& SEC_CODE
) != 0)
4255 if ((flags
& SEC_READONLY
) == 0)
4261 /* Now that we have set the section file positions, we can set up
4262 the file positions for the non PT_LOAD segments. */
4263 for (m
= elf_tdata (abfd
)->segment_map
, p
= phdrs
;
4267 if (p
->p_type
!= PT_LOAD
&& m
->count
> 0)
4269 BFD_ASSERT (! m
->includes_filehdr
&& ! m
->includes_phdrs
);
4270 /* If the section has not yet been assigned a file position,
4271 do so now. The ARM BPABI requires that .dynamic section
4272 not be marked SEC_ALLOC because it is not part of any
4273 PT_LOAD segment, so it will not be processed above. */
4274 if (p
->p_type
== PT_DYNAMIC
&& m
->sections
[0]->filepos
== 0)
4277 Elf_Internal_Shdr
** const i_shdrpp
= elf_elfsections (abfd
);
4280 while (i_shdrpp
[i
]->bfd_section
!= m
->sections
[0])
4282 off
= (_bfd_elf_assign_file_position_for_section
4283 (i_shdrpp
[i
], off
, TRUE
));
4284 p
->p_filesz
= m
->sections
[0]->size
;
4286 p
->p_offset
= m
->sections
[0]->filepos
;
4290 if (m
->includes_filehdr
)
4292 p
->p_vaddr
= filehdr_vaddr
;
4293 if (! m
->p_paddr_valid
)
4294 p
->p_paddr
= filehdr_paddr
;
4296 else if (m
->includes_phdrs
)
4298 p
->p_vaddr
= phdrs_vaddr
;
4299 if (! m
->p_paddr_valid
)
4300 p
->p_paddr
= phdrs_paddr
;
4302 else if (p
->p_type
== PT_GNU_RELRO
)
4304 Elf_Internal_Phdr
*lp
;
4306 for (lp
= phdrs
; lp
< phdrs
+ count
; ++lp
)
4308 if (lp
->p_type
== PT_LOAD
4309 && lp
->p_vaddr
<= link_info
->relro_end
4310 && lp
->p_vaddr
>= link_info
->relro_start
4311 && lp
->p_vaddr
+ lp
->p_filesz
4312 >= link_info
->relro_end
)
4316 if (lp
< phdrs
+ count
4317 && link_info
->relro_end
> lp
->p_vaddr
)
4319 p
->p_vaddr
= lp
->p_vaddr
;
4320 p
->p_paddr
= lp
->p_paddr
;
4321 p
->p_offset
= lp
->p_offset
;
4322 p
->p_filesz
= link_info
->relro_end
- lp
->p_vaddr
;
4323 p
->p_memsz
= p
->p_filesz
;
4325 p
->p_flags
= (lp
->p_flags
& ~PF_W
);
4329 memset (p
, 0, sizeof *p
);
4330 p
->p_type
= PT_NULL
;
4336 /* Clear out any program headers we allocated but did not use. */
4337 for (; count
< alloc
; count
++, p
++)
4339 memset (p
, 0, sizeof *p
);
4340 p
->p_type
= PT_NULL
;
4343 elf_tdata (abfd
)->phdr
= phdrs
;
4345 elf_tdata (abfd
)->next_file_pos
= off
;
4347 /* Write out the program headers. */
4348 if (bfd_seek (abfd
, (bfd_signed_vma
) bed
->s
->sizeof_ehdr
, SEEK_SET
) != 0
4349 || bed
->s
->write_out_phdrs (abfd
, phdrs
, alloc
) != 0)
4355 /* Get the size of the program header.
4357 If this is called by the linker before any of the section VMA's are set, it
4358 can't calculate the correct value for a strange memory layout. This only
4359 happens when SIZEOF_HEADERS is used in a linker script. In this case,
4360 SORTED_HDRS is NULL and we assume the normal scenario of one text and one
4361 data segment (exclusive of .interp and .dynamic).
4363 ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
4364 will be two segments. */
4366 static bfd_size_type
4367 get_program_header_size (bfd
*abfd
)
4371 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
4373 /* We can't return a different result each time we're called. */
4374 if (elf_tdata (abfd
)->program_header_size
!= 0)
4375 return elf_tdata (abfd
)->program_header_size
;
4377 if (elf_tdata (abfd
)->segment_map
!= NULL
)
4379 struct elf_segment_map
*m
;
4382 for (m
= elf_tdata (abfd
)->segment_map
; m
!= NULL
; m
= m
->next
)
4384 elf_tdata (abfd
)->program_header_size
= segs
* bed
->s
->sizeof_phdr
;
4385 return elf_tdata (abfd
)->program_header_size
;
4388 /* Assume we will need exactly two PT_LOAD segments: one for text
4389 and one for data. */
4392 s
= bfd_get_section_by_name (abfd
, ".interp");
4393 if (s
!= NULL
&& (s
->flags
& SEC_LOAD
) != 0)
4395 /* If we have a loadable interpreter section, we need a
4396 PT_INTERP segment. In this case, assume we also need a
4397 PT_PHDR segment, although that may not be true for all
4402 if (bfd_get_section_by_name (abfd
, ".dynamic") != NULL
)
4404 /* We need a PT_DYNAMIC segment. */
4408 if (elf_tdata (abfd
)->eh_frame_hdr
)
4410 /* We need a PT_GNU_EH_FRAME segment. */
4414 if (elf_tdata (abfd
)->stack_flags
)
4416 /* We need a PT_GNU_STACK segment. */
4420 if (elf_tdata (abfd
)->relro
)
4422 /* We need a PT_GNU_RELRO segment. */
4426 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
4428 if ((s
->flags
& SEC_LOAD
) != 0
4429 && strncmp (s
->name
, ".note", 5) == 0)
4431 /* We need a PT_NOTE segment. */
4436 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
4438 if (s
->flags
& SEC_THREAD_LOCAL
)
4440 /* We need a PT_TLS segment. */
4446 /* Let the backend count up any program headers it might need. */
4447 if (bed
->elf_backend_additional_program_headers
)
4451 a
= (*bed
->elf_backend_additional_program_headers
) (abfd
);
4457 elf_tdata (abfd
)->program_header_size
= segs
* bed
->s
->sizeof_phdr
;
4458 return elf_tdata (abfd
)->program_header_size
;
4461 /* Work out the file positions of all the sections. This is called by
4462 _bfd_elf_compute_section_file_positions. All the section sizes and
4463 VMAs must be known before this is called.
4465 Reloc sections come in two flavours: Those processed specially as
4466 "side-channel" data attached to a section to which they apply, and
4467 those that bfd doesn't process as relocations. The latter sort are
4468 stored in a normal bfd section by bfd_section_from_shdr. We don't
4469 consider the former sort here, unless they form part of the loadable
4470 image. Reloc sections not assigned here will be handled later by
4471 assign_file_positions_for_relocs.
4473 We also don't set the positions of the .symtab and .strtab here. */
4476 assign_file_positions_except_relocs (bfd
*abfd
,
4477 struct bfd_link_info
*link_info
)
4479 struct elf_obj_tdata
* const tdata
= elf_tdata (abfd
);
4480 Elf_Internal_Ehdr
* const i_ehdrp
= elf_elfheader (abfd
);
4481 Elf_Internal_Shdr
** const i_shdrpp
= elf_elfsections (abfd
);
4482 unsigned int num_sec
= elf_numsections (abfd
);
4484 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
4486 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0
4487 && bfd_get_format (abfd
) != bfd_core
)
4489 Elf_Internal_Shdr
**hdrpp
;
4492 /* Start after the ELF header. */
4493 off
= i_ehdrp
->e_ehsize
;
4495 /* We are not creating an executable, which means that we are
4496 not creating a program header, and that the actual order of
4497 the sections in the file is unimportant. */
4498 for (i
= 1, hdrpp
= i_shdrpp
+ 1; i
< num_sec
; i
++, hdrpp
++)
4500 Elf_Internal_Shdr
*hdr
;
4503 if (((hdr
->sh_type
== SHT_REL
|| hdr
->sh_type
== SHT_RELA
)
4504 && hdr
->bfd_section
== NULL
)
4505 || i
== tdata
->symtab_section
4506 || i
== tdata
->symtab_shndx_section
4507 || i
== tdata
->strtab_section
)
4509 hdr
->sh_offset
= -1;
4512 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, TRUE
);
4514 if (i
== SHN_LORESERVE
- 1)
4516 i
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
4517 hdrpp
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
4524 Elf_Internal_Shdr
**hdrpp
;
4526 /* Assign file positions for the loaded sections based on the
4527 assignment of sections to segments. */
4528 if (! assign_file_positions_for_segments (abfd
, link_info
))
4531 /* Assign file positions for the other sections. */
4533 off
= elf_tdata (abfd
)->next_file_pos
;
4534 for (i
= 1, hdrpp
= i_shdrpp
+ 1; i
< num_sec
; i
++, hdrpp
++)
4536 Elf_Internal_Shdr
*hdr
;
4539 if (hdr
->bfd_section
!= NULL
4540 && hdr
->bfd_section
->filepos
!= 0)
4541 hdr
->sh_offset
= hdr
->bfd_section
->filepos
;
4542 else if ((hdr
->sh_flags
& SHF_ALLOC
) != 0)
4544 ((*_bfd_error_handler
)
4545 (_("%B: warning: allocated section `%s' not in segment"),
4547 (hdr
->bfd_section
== NULL
4549 : hdr
->bfd_section
->name
)));
4550 if ((abfd
->flags
& D_PAGED
) != 0)
4551 off
+= vma_page_aligned_bias (hdr
->sh_addr
, off
,
4554 off
+= vma_page_aligned_bias (hdr
->sh_addr
, off
,
4556 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
,
4559 else if (((hdr
->sh_type
== SHT_REL
|| hdr
->sh_type
== SHT_RELA
)
4560 && hdr
->bfd_section
== NULL
)
4561 || hdr
== i_shdrpp
[tdata
->symtab_section
]
4562 || hdr
== i_shdrpp
[tdata
->symtab_shndx_section
]
4563 || hdr
== i_shdrpp
[tdata
->strtab_section
])
4564 hdr
->sh_offset
= -1;
4566 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, TRUE
);
4568 if (i
== SHN_LORESERVE
- 1)
4570 i
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
4571 hdrpp
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
4576 /* Place the section headers. */
4577 off
= align_file_position (off
, 1 << bed
->s
->log_file_align
);
4578 i_ehdrp
->e_shoff
= off
;
4579 off
+= i_ehdrp
->e_shnum
* i_ehdrp
->e_shentsize
;
4581 elf_tdata (abfd
)->next_file_pos
= off
;
4587 prep_headers (bfd
*abfd
)
4589 Elf_Internal_Ehdr
*i_ehdrp
; /* Elf file header, internal form */
4590 Elf_Internal_Phdr
*i_phdrp
= 0; /* Program header table, internal form */
4591 Elf_Internal_Shdr
**i_shdrp
; /* Section header table, internal form */
4592 struct elf_strtab_hash
*shstrtab
;
4593 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
4595 i_ehdrp
= elf_elfheader (abfd
);
4596 i_shdrp
= elf_elfsections (abfd
);
4598 shstrtab
= _bfd_elf_strtab_init ();
4599 if (shstrtab
== NULL
)
4602 elf_shstrtab (abfd
) = shstrtab
;
4604 i_ehdrp
->e_ident
[EI_MAG0
] = ELFMAG0
;
4605 i_ehdrp
->e_ident
[EI_MAG1
] = ELFMAG1
;
4606 i_ehdrp
->e_ident
[EI_MAG2
] = ELFMAG2
;
4607 i_ehdrp
->e_ident
[EI_MAG3
] = ELFMAG3
;
4609 i_ehdrp
->e_ident
[EI_CLASS
] = bed
->s
->elfclass
;
4610 i_ehdrp
->e_ident
[EI_DATA
] =
4611 bfd_big_endian (abfd
) ? ELFDATA2MSB
: ELFDATA2LSB
;
4612 i_ehdrp
->e_ident
[EI_VERSION
] = bed
->s
->ev_current
;
4614 if ((abfd
->flags
& DYNAMIC
) != 0)
4615 i_ehdrp
->e_type
= ET_DYN
;
4616 else if ((abfd
->flags
& EXEC_P
) != 0)
4617 i_ehdrp
->e_type
= ET_EXEC
;
4618 else if (bfd_get_format (abfd
) == bfd_core
)
4619 i_ehdrp
->e_type
= ET_CORE
;
4621 i_ehdrp
->e_type
= ET_REL
;
4623 switch (bfd_get_arch (abfd
))
4625 case bfd_arch_unknown
:
4626 i_ehdrp
->e_machine
= EM_NONE
;
4629 /* There used to be a long list of cases here, each one setting
4630 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
4631 in the corresponding bfd definition. To avoid duplication,
4632 the switch was removed. Machines that need special handling
4633 can generally do it in elf_backend_final_write_processing(),
4634 unless they need the information earlier than the final write.
4635 Such need can generally be supplied by replacing the tests for
4636 e_machine with the conditions used to determine it. */
4638 i_ehdrp
->e_machine
= bed
->elf_machine_code
;
4641 i_ehdrp
->e_version
= bed
->s
->ev_current
;
4642 i_ehdrp
->e_ehsize
= bed
->s
->sizeof_ehdr
;
4644 /* No program header, for now. */
4645 i_ehdrp
->e_phoff
= 0;
4646 i_ehdrp
->e_phentsize
= 0;
4647 i_ehdrp
->e_phnum
= 0;
4649 /* Each bfd section is section header entry. */
4650 i_ehdrp
->e_entry
= bfd_get_start_address (abfd
);
4651 i_ehdrp
->e_shentsize
= bed
->s
->sizeof_shdr
;
4653 /* If we're building an executable, we'll need a program header table. */
4654 if (abfd
->flags
& EXEC_P
)
4655 /* It all happens later. */
4659 i_ehdrp
->e_phentsize
= 0;
4661 i_ehdrp
->e_phoff
= 0;
4664 elf_tdata (abfd
)->symtab_hdr
.sh_name
=
4665 (unsigned int) _bfd_elf_strtab_add (shstrtab
, ".symtab", FALSE
);
4666 elf_tdata (abfd
)->strtab_hdr
.sh_name
=
4667 (unsigned int) _bfd_elf_strtab_add (shstrtab
, ".strtab", FALSE
);
4668 elf_tdata (abfd
)->shstrtab_hdr
.sh_name
=
4669 (unsigned int) _bfd_elf_strtab_add (shstrtab
, ".shstrtab", FALSE
);
4670 if (elf_tdata (abfd
)->symtab_hdr
.sh_name
== (unsigned int) -1
4671 || elf_tdata (abfd
)->symtab_hdr
.sh_name
== (unsigned int) -1
4672 || elf_tdata (abfd
)->shstrtab_hdr
.sh_name
== (unsigned int) -1)
4678 /* Assign file positions for all the reloc sections which are not part
4679 of the loadable file image. */
4682 _bfd_elf_assign_file_positions_for_relocs (bfd
*abfd
)
4685 unsigned int i
, num_sec
;
4686 Elf_Internal_Shdr
**shdrpp
;
4688 off
= elf_tdata (abfd
)->next_file_pos
;
4690 num_sec
= elf_numsections (abfd
);
4691 for (i
= 1, shdrpp
= elf_elfsections (abfd
) + 1; i
< num_sec
; i
++, shdrpp
++)
4693 Elf_Internal_Shdr
*shdrp
;
4696 if ((shdrp
->sh_type
== SHT_REL
|| shdrp
->sh_type
== SHT_RELA
)
4697 && shdrp
->sh_offset
== -1)
4698 off
= _bfd_elf_assign_file_position_for_section (shdrp
, off
, TRUE
);
4701 elf_tdata (abfd
)->next_file_pos
= off
;
4705 _bfd_elf_write_object_contents (bfd
*abfd
)
4707 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
4708 Elf_Internal_Ehdr
*i_ehdrp
;
4709 Elf_Internal_Shdr
**i_shdrp
;
4711 unsigned int count
, num_sec
;
4713 if (! abfd
->output_has_begun
4714 && ! _bfd_elf_compute_section_file_positions (abfd
, NULL
))
4717 i_shdrp
= elf_elfsections (abfd
);
4718 i_ehdrp
= elf_elfheader (abfd
);
4721 bfd_map_over_sections (abfd
, bed
->s
->write_relocs
, &failed
);
4725 _bfd_elf_assign_file_positions_for_relocs (abfd
);
4727 /* After writing the headers, we need to write the sections too... */
4728 num_sec
= elf_numsections (abfd
);
4729 for (count
= 1; count
< num_sec
; count
++)
4731 if (bed
->elf_backend_section_processing
)
4732 (*bed
->elf_backend_section_processing
) (abfd
, i_shdrp
[count
]);
4733 if (i_shdrp
[count
]->contents
)
4735 bfd_size_type amt
= i_shdrp
[count
]->sh_size
;
4737 if (bfd_seek (abfd
, i_shdrp
[count
]->sh_offset
, SEEK_SET
) != 0
4738 || bfd_bwrite (i_shdrp
[count
]->contents
, amt
, abfd
) != amt
)
4741 if (count
== SHN_LORESERVE
- 1)
4742 count
+= SHN_HIRESERVE
+ 1 - SHN_LORESERVE
;
4745 /* Write out the section header names. */
4746 if (bfd_seek (abfd
, elf_tdata (abfd
)->shstrtab_hdr
.sh_offset
, SEEK_SET
) != 0
4747 || ! _bfd_elf_strtab_emit (abfd
, elf_shstrtab (abfd
)))
4750 if (bed
->elf_backend_final_write_processing
)
4751 (*bed
->elf_backend_final_write_processing
) (abfd
,
4752 elf_tdata (abfd
)->linker
);
4754 return bed
->s
->write_shdrs_and_ehdr (abfd
);
4758 _bfd_elf_write_corefile_contents (bfd
*abfd
)
4760 /* Hopefully this can be done just like an object file. */
4761 return _bfd_elf_write_object_contents (abfd
);
4764 /* Given a section, search the header to find them. */
4767 _bfd_elf_section_from_bfd_section (bfd
*abfd
, struct bfd_section
*asect
)
4769 const struct elf_backend_data
*bed
;
4772 if (elf_section_data (asect
) != NULL
4773 && elf_section_data (asect
)->this_idx
!= 0)
4774 return elf_section_data (asect
)->this_idx
;
4776 if (bfd_is_abs_section (asect
))
4778 else if (bfd_is_com_section (asect
))
4780 else if (bfd_is_und_section (asect
))
4784 Elf_Internal_Shdr
**i_shdrp
= elf_elfsections (abfd
);
4785 int maxindex
= elf_numsections (abfd
);
4787 for (index
= 1; index
< maxindex
; index
++)
4789 Elf_Internal_Shdr
*hdr
= i_shdrp
[index
];
4791 if (hdr
!= NULL
&& hdr
->bfd_section
== asect
)
4797 bed
= get_elf_backend_data (abfd
);
4798 if (bed
->elf_backend_section_from_bfd_section
)
4802 if ((*bed
->elf_backend_section_from_bfd_section
) (abfd
, asect
, &retval
))
4807 bfd_set_error (bfd_error_nonrepresentable_section
);
4812 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
4816 _bfd_elf_symbol_from_bfd_symbol (bfd
*abfd
, asymbol
**asym_ptr_ptr
)
4818 asymbol
*asym_ptr
= *asym_ptr_ptr
;
4820 flagword flags
= asym_ptr
->flags
;
4822 /* When gas creates relocations against local labels, it creates its
4823 own symbol for the section, but does put the symbol into the
4824 symbol chain, so udata is 0. When the linker is generating
4825 relocatable output, this section symbol may be for one of the
4826 input sections rather than the output section. */
4827 if (asym_ptr
->udata
.i
== 0
4828 && (flags
& BSF_SECTION_SYM
)
4829 && asym_ptr
->section
)
4833 if (asym_ptr
->section
->output_section
!= NULL
)
4834 indx
= asym_ptr
->section
->output_section
->index
;
4836 indx
= asym_ptr
->section
->index
;
4837 if (indx
< elf_num_section_syms (abfd
)
4838 && elf_section_syms (abfd
)[indx
] != NULL
)
4839 asym_ptr
->udata
.i
= elf_section_syms (abfd
)[indx
]->udata
.i
;
4842 idx
= asym_ptr
->udata
.i
;
4846 /* This case can occur when using --strip-symbol on a symbol
4847 which is used in a relocation entry. */
4848 (*_bfd_error_handler
)
4849 (_("%B: symbol `%s' required but not present"),
4850 abfd
, bfd_asymbol_name (asym_ptr
));
4851 bfd_set_error (bfd_error_no_symbols
);
4858 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n",
4859 (long) asym_ptr
, asym_ptr
->name
, idx
, flags
,
4860 elf_symbol_flags (flags
));
4868 /* Copy private BFD data. This copies any program header information. */
4871 copy_private_bfd_data (bfd
*ibfd
, bfd
*obfd
)
4873 Elf_Internal_Ehdr
*iehdr
;
4874 struct elf_segment_map
*map
;
4875 struct elf_segment_map
*map_first
;
4876 struct elf_segment_map
**pointer_to_map
;
4877 Elf_Internal_Phdr
*segment
;
4880 unsigned int num_segments
;
4881 bfd_boolean phdr_included
= FALSE
;
4882 bfd_vma maxpagesize
;
4883 struct elf_segment_map
*phdr_adjust_seg
= NULL
;
4884 unsigned int phdr_adjust_num
= 0;
4885 const struct elf_backend_data
*bed
;
4887 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
4888 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
4891 if (elf_tdata (ibfd
)->phdr
== NULL
)
4894 bed
= get_elf_backend_data (ibfd
);
4895 iehdr
= elf_elfheader (ibfd
);
4898 pointer_to_map
= &map_first
;
4900 num_segments
= elf_elfheader (ibfd
)->e_phnum
;
4901 maxpagesize
= get_elf_backend_data (obfd
)->maxpagesize
;
4903 /* Returns the end address of the segment + 1. */
4904 #define SEGMENT_END(segment, start) \
4905 (start + (segment->p_memsz > segment->p_filesz \
4906 ? segment->p_memsz : segment->p_filesz))
4908 #define SECTION_SIZE(section, segment) \
4909 (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) \
4910 != SEC_THREAD_LOCAL || segment->p_type == PT_TLS) \
4911 ? section->size : 0)
4913 /* Returns TRUE if the given section is contained within
4914 the given segment. VMA addresses are compared. */
4915 #define IS_CONTAINED_BY_VMA(section, segment) \
4916 (section->vma >= segment->p_vaddr \
4917 && (section->vma + SECTION_SIZE (section, segment) \
4918 <= (SEGMENT_END (segment, segment->p_vaddr))))
4920 /* Returns TRUE if the given section is contained within
4921 the given segment. LMA addresses are compared. */
4922 #define IS_CONTAINED_BY_LMA(section, segment, base) \
4923 (section->lma >= base \
4924 && (section->lma + SECTION_SIZE (section, segment) \
4925 <= SEGMENT_END (segment, base)))
4927 /* Special case: corefile "NOTE" section containing regs, prpsinfo etc. */
4928 #define IS_COREFILE_NOTE(p, s) \
4929 (p->p_type == PT_NOTE \
4930 && bfd_get_format (ibfd) == bfd_core \
4931 && s->vma == 0 && s->lma == 0 \
4932 && (bfd_vma) s->filepos >= p->p_offset \
4933 && ((bfd_vma) s->filepos + s->size \
4934 <= p->p_offset + p->p_filesz))
4936 /* The complicated case when p_vaddr is 0 is to handle the Solaris
4937 linker, which generates a PT_INTERP section with p_vaddr and
4938 p_memsz set to 0. */
4939 #define IS_SOLARIS_PT_INTERP(p, s) \
4941 && p->p_paddr == 0 \
4942 && p->p_memsz == 0 \
4943 && p->p_filesz > 0 \
4944 && (s->flags & SEC_HAS_CONTENTS) != 0 \
4946 && (bfd_vma) s->filepos >= p->p_offset \
4947 && ((bfd_vma) s->filepos + s->size \
4948 <= p->p_offset + p->p_filesz))
4950 /* Decide if the given section should be included in the given segment.
4951 A section will be included if:
4952 1. It is within the address space of the segment -- we use the LMA
4953 if that is set for the segment and the VMA otherwise,
4954 2. It is an allocated segment,
4955 3. There is an output section associated with it,
4956 4. The section has not already been allocated to a previous segment.
4957 5. PT_GNU_STACK segments do not include any sections.
4958 6. PT_TLS segment includes only SHF_TLS sections.
4959 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
4960 8. PT_DYNAMIC should not contain empty sections at the beginning
4961 (with the possible exception of .dynamic). */
4962 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \
4963 ((((segment->p_paddr \
4964 ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \
4965 : IS_CONTAINED_BY_VMA (section, segment)) \
4966 && (section->flags & SEC_ALLOC) != 0) \
4967 || IS_COREFILE_NOTE (segment, section)) \
4968 && section->output_section != NULL \
4969 && segment->p_type != PT_GNU_STACK \
4970 && (segment->p_type != PT_TLS \
4971 || (section->flags & SEC_THREAD_LOCAL)) \
4972 && (segment->p_type == PT_LOAD \
4973 || segment->p_type == PT_TLS \
4974 || (section->flags & SEC_THREAD_LOCAL) == 0) \
4975 && (segment->p_type != PT_DYNAMIC \
4976 || SECTION_SIZE (section, segment) > 0 \
4977 || (segment->p_paddr \
4978 ? segment->p_paddr != section->lma \
4979 : segment->p_vaddr != section->vma) \
4980 || (strcmp (bfd_get_section_name (ibfd, section), ".dynamic") \
4982 && ! section->segment_mark)
4984 /* Returns TRUE iff seg1 starts after the end of seg2. */
4985 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
4986 (seg1->field >= SEGMENT_END (seg2, seg2->field))
4988 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
4989 their VMA address ranges and their LMA address ranges overlap.
4990 It is possible to have overlapping VMA ranges without overlapping LMA
4991 ranges. RedBoot images for example can have both .data and .bss mapped
4992 to the same VMA range, but with the .data section mapped to a different
4994 #define SEGMENT_OVERLAPS(seg1, seg2) \
4995 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
4996 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
4997 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
4998 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
5000 /* Initialise the segment mark field. */
5001 for (section
= ibfd
->sections
; section
!= NULL
; section
= section
->next
)
5002 section
->segment_mark
= FALSE
;
5004 /* Scan through the segments specified in the program header
5005 of the input BFD. For this first scan we look for overlaps
5006 in the loadable segments. These can be created by weird
5007 parameters to objcopy. Also, fix some solaris weirdness. */
5008 for (i
= 0, segment
= elf_tdata (ibfd
)->phdr
;
5013 Elf_Internal_Phdr
*segment2
;
5015 if (segment
->p_type
== PT_INTERP
)
5016 for (section
= ibfd
->sections
; section
; section
= section
->next
)
5017 if (IS_SOLARIS_PT_INTERP (segment
, section
))
5019 /* Mininal change so that the normal section to segment
5020 assignment code will work. */
5021 segment
->p_vaddr
= section
->vma
;
5025 if (segment
->p_type
!= PT_LOAD
)
5028 /* Determine if this segment overlaps any previous segments. */
5029 for (j
= 0, segment2
= elf_tdata (ibfd
)->phdr
; j
< i
; j
++, segment2
++)
5031 bfd_signed_vma extra_length
;
5033 if (segment2
->p_type
!= PT_LOAD
5034 || ! SEGMENT_OVERLAPS (segment
, segment2
))
5037 /* Merge the two segments together. */
5038 if (segment2
->p_vaddr
< segment
->p_vaddr
)
5040 /* Extend SEGMENT2 to include SEGMENT and then delete
5043 SEGMENT_END (segment
, segment
->p_vaddr
)
5044 - SEGMENT_END (segment2
, segment2
->p_vaddr
);
5046 if (extra_length
> 0)
5048 segment2
->p_memsz
+= extra_length
;
5049 segment2
->p_filesz
+= extra_length
;
5052 segment
->p_type
= PT_NULL
;
5054 /* Since we have deleted P we must restart the outer loop. */
5056 segment
= elf_tdata (ibfd
)->phdr
;
5061 /* Extend SEGMENT to include SEGMENT2 and then delete
5064 SEGMENT_END (segment2
, segment2
->p_vaddr
)
5065 - SEGMENT_END (segment
, segment
->p_vaddr
);
5067 if (extra_length
> 0)
5069 segment
->p_memsz
+= extra_length
;
5070 segment
->p_filesz
+= extra_length
;
5073 segment2
->p_type
= PT_NULL
;
5078 /* The second scan attempts to assign sections to segments. */
5079 for (i
= 0, segment
= elf_tdata (ibfd
)->phdr
;
5083 unsigned int section_count
;
5084 asection
** sections
;
5085 asection
* output_section
;
5087 bfd_vma matching_lma
;
5088 bfd_vma suggested_lma
;
5092 if (segment
->p_type
== PT_NULL
)
5095 /* Compute how many sections might be placed into this segment. */
5096 for (section
= ibfd
->sections
, section_count
= 0;
5098 section
= section
->next
)
5099 if (INCLUDE_SECTION_IN_SEGMENT (section
, segment
, bed
))
5102 /* Allocate a segment map big enough to contain
5103 all of the sections we have selected. */
5104 amt
= sizeof (struct elf_segment_map
);
5105 amt
+= ((bfd_size_type
) section_count
- 1) * sizeof (asection
*);
5106 map
= bfd_alloc (obfd
, amt
);
5110 /* Initialise the fields of the segment map. Default to
5111 using the physical address of the segment in the input BFD. */
5113 map
->p_type
= segment
->p_type
;
5114 map
->p_flags
= segment
->p_flags
;
5115 map
->p_flags_valid
= 1;
5116 map
->p_paddr
= segment
->p_paddr
;
5117 map
->p_paddr_valid
= 1;
5119 /* Determine if this segment contains the ELF file header
5120 and if it contains the program headers themselves. */
5121 map
->includes_filehdr
= (segment
->p_offset
== 0
5122 && segment
->p_filesz
>= iehdr
->e_ehsize
);
5124 map
->includes_phdrs
= 0;
5126 if (! phdr_included
|| segment
->p_type
!= PT_LOAD
)
5128 map
->includes_phdrs
=
5129 (segment
->p_offset
<= (bfd_vma
) iehdr
->e_phoff
5130 && (segment
->p_offset
+ segment
->p_filesz
5131 >= ((bfd_vma
) iehdr
->e_phoff
5132 + iehdr
->e_phnum
* iehdr
->e_phentsize
)));
5134 if (segment
->p_type
== PT_LOAD
&& map
->includes_phdrs
)
5135 phdr_included
= TRUE
;
5138 if (section_count
== 0)
5140 /* Special segments, such as the PT_PHDR segment, may contain
5141 no sections, but ordinary, loadable segments should contain
5142 something. They are allowed by the ELF spec however, so only
5143 a warning is produced. */
5144 if (segment
->p_type
== PT_LOAD
)
5145 (*_bfd_error_handler
)
5146 (_("%B: warning: Empty loadable segment detected, is this intentional ?\n"),
5150 *pointer_to_map
= map
;
5151 pointer_to_map
= &map
->next
;
5156 /* Now scan the sections in the input BFD again and attempt
5157 to add their corresponding output sections to the segment map.
5158 The problem here is how to handle an output section which has
5159 been moved (ie had its LMA changed). There are four possibilities:
5161 1. None of the sections have been moved.
5162 In this case we can continue to use the segment LMA from the
5165 2. All of the sections have been moved by the same amount.
5166 In this case we can change the segment's LMA to match the LMA
5167 of the first section.
5169 3. Some of the sections have been moved, others have not.
5170 In this case those sections which have not been moved can be
5171 placed in the current segment which will have to have its size,
5172 and possibly its LMA changed, and a new segment or segments will
5173 have to be created to contain the other sections.
5175 4. The sections have been moved, but not by the same amount.
5176 In this case we can change the segment's LMA to match the LMA
5177 of the first section and we will have to create a new segment
5178 or segments to contain the other sections.
5180 In order to save time, we allocate an array to hold the section
5181 pointers that we are interested in. As these sections get assigned
5182 to a segment, they are removed from this array. */
5184 /* Gcc 2.96 miscompiles this code on mips. Don't do casting here
5185 to work around this long long bug. */
5186 amt
= section_count
* sizeof (asection
*);
5187 sections
= bfd_malloc (amt
);
5188 if (sections
== NULL
)
5191 /* Step One: Scan for segment vs section LMA conflicts.
5192 Also add the sections to the section array allocated above.
5193 Also add the sections to the current segment. In the common
5194 case, where the sections have not been moved, this means that
5195 we have completely filled the segment, and there is nothing
5201 for (j
= 0, section
= ibfd
->sections
;
5203 section
= section
->next
)
5205 if (INCLUDE_SECTION_IN_SEGMENT (section
, segment
, bed
))
5207 output_section
= section
->output_section
;
5209 sections
[j
++] = section
;
5211 /* The Solaris native linker always sets p_paddr to 0.
5212 We try to catch that case here, and set it to the
5213 correct value. Note - some backends require that
5214 p_paddr be left as zero. */
5215 if (segment
->p_paddr
== 0
5216 && segment
->p_vaddr
!= 0
5217 && (! bed
->want_p_paddr_set_to_zero
)
5219 && output_section
->lma
!= 0
5220 && (output_section
->vma
== (segment
->p_vaddr
5221 + (map
->includes_filehdr
5224 + (map
->includes_phdrs
5226 * iehdr
->e_phentsize
)
5228 map
->p_paddr
= segment
->p_vaddr
;
5230 /* Match up the physical address of the segment with the
5231 LMA address of the output section. */
5232 if (IS_CONTAINED_BY_LMA (output_section
, segment
, map
->p_paddr
)
5233 || IS_COREFILE_NOTE (segment
, section
)
5234 || (bed
->want_p_paddr_set_to_zero
&&
5235 IS_CONTAINED_BY_VMA (output_section
, segment
))
5238 if (matching_lma
== 0)
5239 matching_lma
= output_section
->lma
;
5241 /* We assume that if the section fits within the segment
5242 then it does not overlap any other section within that
5244 map
->sections
[isec
++] = output_section
;
5246 else if (suggested_lma
== 0)
5247 suggested_lma
= output_section
->lma
;
5251 BFD_ASSERT (j
== section_count
);
5253 /* Step Two: Adjust the physical address of the current segment,
5255 if (isec
== section_count
)
5257 /* All of the sections fitted within the segment as currently
5258 specified. This is the default case. Add the segment to
5259 the list of built segments and carry on to process the next
5260 program header in the input BFD. */
5261 map
->count
= section_count
;
5262 *pointer_to_map
= map
;
5263 pointer_to_map
= &map
->next
;
5270 if (matching_lma
!= 0)
5272 /* At least one section fits inside the current segment.
5273 Keep it, but modify its physical address to match the
5274 LMA of the first section that fitted. */
5275 map
->p_paddr
= matching_lma
;
5279 /* None of the sections fitted inside the current segment.
5280 Change the current segment's physical address to match
5281 the LMA of the first section. */
5282 map
->p_paddr
= suggested_lma
;
5285 /* Offset the segment physical address from the lma
5286 to allow for space taken up by elf headers. */
5287 if (map
->includes_filehdr
)
5288 map
->p_paddr
-= iehdr
->e_ehsize
;
5290 if (map
->includes_phdrs
)
5292 map
->p_paddr
-= iehdr
->e_phnum
* iehdr
->e_phentsize
;
5294 /* iehdr->e_phnum is just an estimate of the number
5295 of program headers that we will need. Make a note
5296 here of the number we used and the segment we chose
5297 to hold these headers, so that we can adjust the
5298 offset when we know the correct value. */
5299 phdr_adjust_num
= iehdr
->e_phnum
;
5300 phdr_adjust_seg
= map
;
5304 /* Step Three: Loop over the sections again, this time assigning
5305 those that fit to the current segment and removing them from the
5306 sections array; but making sure not to leave large gaps. Once all
5307 possible sections have been assigned to the current segment it is
5308 added to the list of built segments and if sections still remain
5309 to be assigned, a new segment is constructed before repeating
5317 /* Fill the current segment with sections that fit. */
5318 for (j
= 0; j
< section_count
; j
++)
5320 section
= sections
[j
];
5322 if (section
== NULL
)
5325 output_section
= section
->output_section
;
5327 BFD_ASSERT (output_section
!= NULL
);
5329 if (IS_CONTAINED_BY_LMA (output_section
, segment
, map
->p_paddr
)
5330 || IS_COREFILE_NOTE (segment
, section
))
5332 if (map
->count
== 0)
5334 /* If the first section in a segment does not start at
5335 the beginning of the segment, then something is
5337 if (output_section
->lma
!=
5339 + (map
->includes_filehdr
? iehdr
->e_ehsize
: 0)
5340 + (map
->includes_phdrs
5341 ? iehdr
->e_phnum
* iehdr
->e_phentsize
5347 asection
* prev_sec
;
5349 prev_sec
= map
->sections
[map
->count
- 1];
5351 /* If the gap between the end of the previous section
5352 and the start of this section is more than
5353 maxpagesize then we need to start a new segment. */
5354 if ((BFD_ALIGN (prev_sec
->lma
+ prev_sec
->size
,
5356 < BFD_ALIGN (output_section
->lma
, maxpagesize
))
5357 || ((prev_sec
->lma
+ prev_sec
->size
)
5358 > output_section
->lma
))
5360 if (suggested_lma
== 0)
5361 suggested_lma
= output_section
->lma
;
5367 map
->sections
[map
->count
++] = output_section
;
5370 section
->segment_mark
= TRUE
;
5372 else if (suggested_lma
== 0)
5373 suggested_lma
= output_section
->lma
;
5376 BFD_ASSERT (map
->count
> 0);
5378 /* Add the current segment to the list of built segments. */
5379 *pointer_to_map
= map
;
5380 pointer_to_map
= &map
->next
;
5382 if (isec
< section_count
)
5384 /* We still have not allocated all of the sections to
5385 segments. Create a new segment here, initialise it
5386 and carry on looping. */
5387 amt
= sizeof (struct elf_segment_map
);
5388 amt
+= ((bfd_size_type
) section_count
- 1) * sizeof (asection
*);
5389 map
= bfd_alloc (obfd
, amt
);
5396 /* Initialise the fields of the segment map. Set the physical
5397 physical address to the LMA of the first section that has
5398 not yet been assigned. */
5400 map
->p_type
= segment
->p_type
;
5401 map
->p_flags
= segment
->p_flags
;
5402 map
->p_flags_valid
= 1;
5403 map
->p_paddr
= suggested_lma
;
5404 map
->p_paddr_valid
= 1;
5405 map
->includes_filehdr
= 0;
5406 map
->includes_phdrs
= 0;
5409 while (isec
< section_count
);
5414 /* The Solaris linker creates program headers in which all the
5415 p_paddr fields are zero. When we try to objcopy or strip such a
5416 file, we get confused. Check for this case, and if we find it
5417 reset the p_paddr_valid fields. */
5418 for (map
= map_first
; map
!= NULL
; map
= map
->next
)
5419 if (map
->p_paddr
!= 0)
5422 for (map
= map_first
; map
!= NULL
; map
= map
->next
)
5423 map
->p_paddr_valid
= 0;
5425 elf_tdata (obfd
)->segment_map
= map_first
;
5427 /* If we had to estimate the number of program headers that were
5428 going to be needed, then check our estimate now and adjust
5429 the offset if necessary. */
5430 if (phdr_adjust_seg
!= NULL
)
5434 for (count
= 0, map
= map_first
; map
!= NULL
; map
= map
->next
)
5437 if (count
> phdr_adjust_num
)
5438 phdr_adjust_seg
->p_paddr
5439 -= (count
- phdr_adjust_num
) * iehdr
->e_phentsize
;
5444 #undef IS_CONTAINED_BY_VMA
5445 #undef IS_CONTAINED_BY_LMA
5446 #undef IS_COREFILE_NOTE
5447 #undef IS_SOLARIS_PT_INTERP
5448 #undef INCLUDE_SECTION_IN_SEGMENT
5449 #undef SEGMENT_AFTER_SEGMENT
5450 #undef SEGMENT_OVERLAPS
5454 /* Copy private section information. This copies over the entsize
5455 field, and sometimes the info field. */
5458 _bfd_elf_copy_private_section_data (bfd
*ibfd
,
5463 Elf_Internal_Shdr
*ihdr
, *ohdr
;
5465 if (ibfd
->xvec
->flavour
!= bfd_target_elf_flavour
5466 || obfd
->xvec
->flavour
!= bfd_target_elf_flavour
)
5469 ihdr
= &elf_section_data (isec
)->this_hdr
;
5470 ohdr
= &elf_section_data (osec
)->this_hdr
;
5472 ohdr
->sh_entsize
= ihdr
->sh_entsize
;
5474 if (ihdr
->sh_type
== SHT_SYMTAB
5475 || ihdr
->sh_type
== SHT_DYNSYM
5476 || ihdr
->sh_type
== SHT_GNU_verneed
5477 || ihdr
->sh_type
== SHT_GNU_verdef
)
5478 ohdr
->sh_info
= ihdr
->sh_info
;
5480 /* Set things up for objcopy. The output SHT_GROUP section will
5481 have its elf_next_in_group pointing back to the input group
5483 elf_next_in_group (osec
) = elf_next_in_group (isec
);
5484 elf_group_name (osec
) = elf_group_name (isec
);
5486 osec
->use_rela_p
= isec
->use_rela_p
;
5491 /* Copy private header information. */
5494 _bfd_elf_copy_private_header_data (bfd
*ibfd
, bfd
*obfd
)
5496 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
5497 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
5500 /* Copy over private BFD data if it has not already been copied.
5501 This must be done here, rather than in the copy_private_bfd_data
5502 entry point, because the latter is called after the section
5503 contents have been set, which means that the program headers have
5504 already been worked out. */
5505 if (elf_tdata (obfd
)->segment_map
== NULL
&& elf_tdata (ibfd
)->phdr
!= NULL
)
5507 if (! copy_private_bfd_data (ibfd
, obfd
))
5514 /* Copy private symbol information. If this symbol is in a section
5515 which we did not map into a BFD section, try to map the section
5516 index correctly. We use special macro definitions for the mapped
5517 section indices; these definitions are interpreted by the
5518 swap_out_syms function. */
5520 #define MAP_ONESYMTAB (SHN_HIOS + 1)
5521 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
5522 #define MAP_STRTAB (SHN_HIOS + 3)
5523 #define MAP_SHSTRTAB (SHN_HIOS + 4)
5524 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
5527 _bfd_elf_copy_private_symbol_data (bfd
*ibfd
,
5532 elf_symbol_type
*isym
, *osym
;
5534 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
5535 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
5538 isym
= elf_symbol_from (ibfd
, isymarg
);
5539 osym
= elf_symbol_from (obfd
, osymarg
);
5543 && bfd_is_abs_section (isym
->symbol
.section
))
5547 shndx
= isym
->internal_elf_sym
.st_shndx
;
5548 if (shndx
== elf_onesymtab (ibfd
))
5549 shndx
= MAP_ONESYMTAB
;
5550 else if (shndx
== elf_dynsymtab (ibfd
))
5551 shndx
= MAP_DYNSYMTAB
;
5552 else if (shndx
== elf_tdata (ibfd
)->strtab_section
)
5554 else if (shndx
== elf_tdata (ibfd
)->shstrtab_section
)
5555 shndx
= MAP_SHSTRTAB
;
5556 else if (shndx
== elf_tdata (ibfd
)->symtab_shndx_section
)
5557 shndx
= MAP_SYM_SHNDX
;
5558 osym
->internal_elf_sym
.st_shndx
= shndx
;
5564 /* Swap out the symbols. */
5567 swap_out_syms (bfd
*abfd
,
5568 struct bfd_strtab_hash
**sttp
,
5571 const struct elf_backend_data
*bed
;
5574 struct bfd_strtab_hash
*stt
;
5575 Elf_Internal_Shdr
*symtab_hdr
;
5576 Elf_Internal_Shdr
*symtab_shndx_hdr
;
5577 Elf_Internal_Shdr
*symstrtab_hdr
;
5578 char *outbound_syms
;
5579 char *outbound_shndx
;
5582 bfd_boolean name_local_sections
;
5584 if (!elf_map_symbols (abfd
))
5587 /* Dump out the symtabs. */
5588 stt
= _bfd_elf_stringtab_init ();
5592 bed
= get_elf_backend_data (abfd
);
5593 symcount
= bfd_get_symcount (abfd
);
5594 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
5595 symtab_hdr
->sh_type
= SHT_SYMTAB
;
5596 symtab_hdr
->sh_entsize
= bed
->s
->sizeof_sym
;
5597 symtab_hdr
->sh_size
= symtab_hdr
->sh_entsize
* (symcount
+ 1);
5598 symtab_hdr
->sh_info
= elf_num_locals (abfd
) + 1;
5599 symtab_hdr
->sh_addralign
= 1 << bed
->s
->log_file_align
;
5601 symstrtab_hdr
= &elf_tdata (abfd
)->strtab_hdr
;
5602 symstrtab_hdr
->sh_type
= SHT_STRTAB
;
5604 amt
= (bfd_size_type
) (1 + symcount
) * bed
->s
->sizeof_sym
;
5605 outbound_syms
= bfd_alloc (abfd
, amt
);
5606 if (outbound_syms
== NULL
)
5608 _bfd_stringtab_free (stt
);
5611 symtab_hdr
->contents
= outbound_syms
;
5613 outbound_shndx
= NULL
;
5614 symtab_shndx_hdr
= &elf_tdata (abfd
)->symtab_shndx_hdr
;
5615 if (symtab_shndx_hdr
->sh_name
!= 0)
5617 amt
= (bfd_size_type
) (1 + symcount
) * sizeof (Elf_External_Sym_Shndx
);
5618 outbound_shndx
= bfd_zalloc (abfd
, amt
);
5619 if (outbound_shndx
== NULL
)
5621 _bfd_stringtab_free (stt
);
5625 symtab_shndx_hdr
->contents
= outbound_shndx
;
5626 symtab_shndx_hdr
->sh_type
= SHT_SYMTAB_SHNDX
;
5627 symtab_shndx_hdr
->sh_size
= amt
;
5628 symtab_shndx_hdr
->sh_addralign
= sizeof (Elf_External_Sym_Shndx
);
5629 symtab_shndx_hdr
->sh_entsize
= sizeof (Elf_External_Sym_Shndx
);
5632 /* Now generate the data (for "contents"). */
5634 /* Fill in zeroth symbol and swap it out. */
5635 Elf_Internal_Sym sym
;
5641 sym
.st_shndx
= SHN_UNDEF
;
5642 bed
->s
->swap_symbol_out (abfd
, &sym
, outbound_syms
, outbound_shndx
);
5643 outbound_syms
+= bed
->s
->sizeof_sym
;
5644 if (outbound_shndx
!= NULL
)
5645 outbound_shndx
+= sizeof (Elf_External_Sym_Shndx
);
5649 = (bed
->elf_backend_name_local_section_symbols
5650 && bed
->elf_backend_name_local_section_symbols (abfd
));
5652 syms
= bfd_get_outsymbols (abfd
);
5653 for (idx
= 0; idx
< symcount
; idx
++)
5655 Elf_Internal_Sym sym
;
5656 bfd_vma value
= syms
[idx
]->value
;
5657 elf_symbol_type
*type_ptr
;
5658 flagword flags
= syms
[idx
]->flags
;
5661 if (!name_local_sections
5662 && (flags
& (BSF_SECTION_SYM
| BSF_GLOBAL
)) == BSF_SECTION_SYM
)
5664 /* Local section symbols have no name. */
5669 sym
.st_name
= (unsigned long) _bfd_stringtab_add (stt
,
5672 if (sym
.st_name
== (unsigned long) -1)
5674 _bfd_stringtab_free (stt
);
5679 type_ptr
= elf_symbol_from (abfd
, syms
[idx
]);
5681 if ((flags
& BSF_SECTION_SYM
) == 0
5682 && bfd_is_com_section (syms
[idx
]->section
))
5684 /* ELF common symbols put the alignment into the `value' field,
5685 and the size into the `size' field. This is backwards from
5686 how BFD handles it, so reverse it here. */
5687 sym
.st_size
= value
;
5688 if (type_ptr
== NULL
5689 || type_ptr
->internal_elf_sym
.st_value
== 0)
5690 sym
.st_value
= value
>= 16 ? 16 : (1 << bfd_log2 (value
));
5692 sym
.st_value
= type_ptr
->internal_elf_sym
.st_value
;
5693 sym
.st_shndx
= _bfd_elf_section_from_bfd_section
5694 (abfd
, syms
[idx
]->section
);
5698 asection
*sec
= syms
[idx
]->section
;
5701 if (sec
->output_section
)
5703 value
+= sec
->output_offset
;
5704 sec
= sec
->output_section
;
5707 /* Don't add in the section vma for relocatable output. */
5708 if (! relocatable_p
)
5710 sym
.st_value
= value
;
5711 sym
.st_size
= type_ptr
? type_ptr
->internal_elf_sym
.st_size
: 0;
5713 if (bfd_is_abs_section (sec
)
5715 && type_ptr
->internal_elf_sym
.st_shndx
!= 0)
5717 /* This symbol is in a real ELF section which we did
5718 not create as a BFD section. Undo the mapping done
5719 by copy_private_symbol_data. */
5720 shndx
= type_ptr
->internal_elf_sym
.st_shndx
;
5724 shndx
= elf_onesymtab (abfd
);
5727 shndx
= elf_dynsymtab (abfd
);
5730 shndx
= elf_tdata (abfd
)->strtab_section
;
5733 shndx
= elf_tdata (abfd
)->shstrtab_section
;
5736 shndx
= elf_tdata (abfd
)->symtab_shndx_section
;
5744 shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec
);
5750 /* Writing this would be a hell of a lot easier if
5751 we had some decent documentation on bfd, and
5752 knew what to expect of the library, and what to
5753 demand of applications. For example, it
5754 appears that `objcopy' might not set the
5755 section of a symbol to be a section that is
5756 actually in the output file. */
5757 sec2
= bfd_get_section_by_name (abfd
, sec
->name
);
5760 _bfd_error_handler (_("\
5761 Unable to find equivalent output section for symbol '%s' from section '%s'"),
5762 syms
[idx
]->name
? syms
[idx
]->name
: "<Local sym>",
5764 bfd_set_error (bfd_error_invalid_operation
);
5765 _bfd_stringtab_free (stt
);
5769 shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec2
);
5770 BFD_ASSERT (shndx
!= -1);
5774 sym
.st_shndx
= shndx
;
5777 if ((flags
& BSF_THREAD_LOCAL
) != 0)
5779 else if ((flags
& BSF_FUNCTION
) != 0)
5781 else if ((flags
& BSF_OBJECT
) != 0)
5786 if (syms
[idx
]->section
->flags
& SEC_THREAD_LOCAL
)
5789 /* Processor-specific types. */
5790 if (type_ptr
!= NULL
5791 && bed
->elf_backend_get_symbol_type
)
5792 type
= ((*bed
->elf_backend_get_symbol_type
)
5793 (&type_ptr
->internal_elf_sym
, type
));
5795 if (flags
& BSF_SECTION_SYM
)
5797 if (flags
& BSF_GLOBAL
)
5798 sym
.st_info
= ELF_ST_INFO (STB_GLOBAL
, STT_SECTION
);
5800 sym
.st_info
= ELF_ST_INFO (STB_LOCAL
, STT_SECTION
);
5802 else if (bfd_is_com_section (syms
[idx
]->section
))
5803 sym
.st_info
= ELF_ST_INFO (STB_GLOBAL
, type
);
5804 else if (bfd_is_und_section (syms
[idx
]->section
))
5805 sym
.st_info
= ELF_ST_INFO (((flags
& BSF_WEAK
)
5809 else if (flags
& BSF_FILE
)
5810 sym
.st_info
= ELF_ST_INFO (STB_LOCAL
, STT_FILE
);
5813 int bind
= STB_LOCAL
;
5815 if (flags
& BSF_LOCAL
)
5817 else if (flags
& BSF_WEAK
)
5819 else if (flags
& BSF_GLOBAL
)
5822 sym
.st_info
= ELF_ST_INFO (bind
, type
);
5825 if (type_ptr
!= NULL
)
5826 sym
.st_other
= type_ptr
->internal_elf_sym
.st_other
;
5830 bed
->s
->swap_symbol_out (abfd
, &sym
, outbound_syms
, outbound_shndx
);
5831 outbound_syms
+= bed
->s
->sizeof_sym
;
5832 if (outbound_shndx
!= NULL
)
5833 outbound_shndx
+= sizeof (Elf_External_Sym_Shndx
);
5837 symstrtab_hdr
->sh_size
= _bfd_stringtab_size (stt
);
5838 symstrtab_hdr
->sh_type
= SHT_STRTAB
;
5840 symstrtab_hdr
->sh_flags
= 0;
5841 symstrtab_hdr
->sh_addr
= 0;
5842 symstrtab_hdr
->sh_entsize
= 0;
5843 symstrtab_hdr
->sh_link
= 0;
5844 symstrtab_hdr
->sh_info
= 0;
5845 symstrtab_hdr
->sh_addralign
= 1;
5850 /* Return the number of bytes required to hold the symtab vector.
5852 Note that we base it on the count plus 1, since we will null terminate
5853 the vector allocated based on this size. However, the ELF symbol table
5854 always has a dummy entry as symbol #0, so it ends up even. */
5857 _bfd_elf_get_symtab_upper_bound (bfd
*abfd
)
5861 Elf_Internal_Shdr
*hdr
= &elf_tdata (abfd
)->symtab_hdr
;
5863 symcount
= hdr
->sh_size
/ get_elf_backend_data (abfd
)->s
->sizeof_sym
;
5864 symtab_size
= (symcount
+ 1) * (sizeof (asymbol
*));
5866 symtab_size
-= sizeof (asymbol
*);
5872 _bfd_elf_get_dynamic_symtab_upper_bound (bfd
*abfd
)
5876 Elf_Internal_Shdr
*hdr
= &elf_tdata (abfd
)->dynsymtab_hdr
;
5878 if (elf_dynsymtab (abfd
) == 0)
5880 bfd_set_error (bfd_error_invalid_operation
);
5884 symcount
= hdr
->sh_size
/ get_elf_backend_data (abfd
)->s
->sizeof_sym
;
5885 symtab_size
= (symcount
+ 1) * (sizeof (asymbol
*));
5887 symtab_size
-= sizeof (asymbol
*);
5893 _bfd_elf_get_reloc_upper_bound (bfd
*abfd ATTRIBUTE_UNUSED
,
5896 return (asect
->reloc_count
+ 1) * sizeof (arelent
*);
5899 /* Canonicalize the relocs. */
5902 _bfd_elf_canonicalize_reloc (bfd
*abfd
,
5909 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
5911 if (! bed
->s
->slurp_reloc_table (abfd
, section
, symbols
, FALSE
))
5914 tblptr
= section
->relocation
;
5915 for (i
= 0; i
< section
->reloc_count
; i
++)
5916 *relptr
++ = tblptr
++;
5920 return section
->reloc_count
;
5924 _bfd_elf_canonicalize_symtab (bfd
*abfd
, asymbol
**allocation
)
5926 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
5927 long symcount
= bed
->s
->slurp_symbol_table (abfd
, allocation
, FALSE
);
5930 bfd_get_symcount (abfd
) = symcount
;
5935 _bfd_elf_canonicalize_dynamic_symtab (bfd
*abfd
,
5936 asymbol
**allocation
)
5938 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
5939 long symcount
= bed
->s
->slurp_symbol_table (abfd
, allocation
, TRUE
);
5942 bfd_get_dynamic_symcount (abfd
) = symcount
;
5946 /* Return the size required for the dynamic reloc entries. Any loadable
5947 section that was actually installed in the BFD, and has type SHT_REL
5948 or SHT_RELA, and uses the dynamic symbol table, is considered to be a
5949 dynamic reloc section. */
5952 _bfd_elf_get_dynamic_reloc_upper_bound (bfd
*abfd
)
5957 if (elf_dynsymtab (abfd
) == 0)
5959 bfd_set_error (bfd_error_invalid_operation
);
5963 ret
= sizeof (arelent
*);
5964 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
5965 if ((s
->flags
& SEC_LOAD
) != 0
5966 && elf_section_data (s
)->this_hdr
.sh_link
== elf_dynsymtab (abfd
)
5967 && (elf_section_data (s
)->this_hdr
.sh_type
== SHT_REL
5968 || elf_section_data (s
)->this_hdr
.sh_type
== SHT_RELA
))
5969 ret
+= ((s
->size
/ elf_section_data (s
)->this_hdr
.sh_entsize
)
5970 * sizeof (arelent
*));
5975 /* Canonicalize the dynamic relocation entries. Note that we return the
5976 dynamic relocations as a single block, although they are actually
5977 associated with particular sections; the interface, which was
5978 designed for SunOS style shared libraries, expects that there is only
5979 one set of dynamic relocs. Any loadable section that was actually
5980 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
5981 dynamic symbol table, is considered to be a dynamic reloc section. */
5984 _bfd_elf_canonicalize_dynamic_reloc (bfd
*abfd
,
5988 bfd_boolean (*slurp_relocs
) (bfd
*, asection
*, asymbol
**, bfd_boolean
);
5992 if (elf_dynsymtab (abfd
) == 0)
5994 bfd_set_error (bfd_error_invalid_operation
);
5998 slurp_relocs
= get_elf_backend_data (abfd
)->s
->slurp_reloc_table
;
6000 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
6002 if ((s
->flags
& SEC_LOAD
) != 0
6003 && elf_section_data (s
)->this_hdr
.sh_link
== elf_dynsymtab (abfd
)
6004 && (elf_section_data (s
)->this_hdr
.sh_type
== SHT_REL
6005 || elf_section_data (s
)->this_hdr
.sh_type
== SHT_RELA
))
6010 if (! (*slurp_relocs
) (abfd
, s
, syms
, TRUE
))
6012 count
= s
->size
/ elf_section_data (s
)->this_hdr
.sh_entsize
;
6014 for (i
= 0; i
< count
; i
++)
6025 /* Read in the version information. */
6028 _bfd_elf_slurp_version_tables (bfd
*abfd
, bfd_boolean default_imported_symver
)
6030 bfd_byte
*contents
= NULL
;
6032 unsigned int freeidx
= 0;
6034 if (elf_dynverref (abfd
) != 0)
6036 Elf_Internal_Shdr
*hdr
;
6037 Elf_External_Verneed
*everneed
;
6038 Elf_Internal_Verneed
*iverneed
;
6041 hdr
= &elf_tdata (abfd
)->dynverref_hdr
;
6043 amt
= (bfd_size_type
) hdr
->sh_info
* sizeof (Elf_Internal_Verneed
);
6044 elf_tdata (abfd
)->verref
= bfd_zalloc (abfd
, amt
);
6045 if (elf_tdata (abfd
)->verref
== NULL
)
6048 elf_tdata (abfd
)->cverrefs
= hdr
->sh_info
;
6050 contents
= bfd_malloc (hdr
->sh_size
);
6051 if (contents
== NULL
)
6053 if (bfd_seek (abfd
, hdr
->sh_offset
, SEEK_SET
) != 0
6054 || bfd_bread (contents
, hdr
->sh_size
, abfd
) != hdr
->sh_size
)
6057 everneed
= (Elf_External_Verneed
*) contents
;
6058 iverneed
= elf_tdata (abfd
)->verref
;
6059 for (i
= 0; i
< hdr
->sh_info
; i
++, iverneed
++)
6061 Elf_External_Vernaux
*evernaux
;
6062 Elf_Internal_Vernaux
*ivernaux
;
6065 _bfd_elf_swap_verneed_in (abfd
, everneed
, iverneed
);
6067 iverneed
->vn_bfd
= abfd
;
6069 iverneed
->vn_filename
=
6070 bfd_elf_string_from_elf_section (abfd
, hdr
->sh_link
,
6072 if (iverneed
->vn_filename
== NULL
)
6075 amt
= iverneed
->vn_cnt
;
6076 amt
*= sizeof (Elf_Internal_Vernaux
);
6077 iverneed
->vn_auxptr
= bfd_alloc (abfd
, amt
);
6079 evernaux
= ((Elf_External_Vernaux
*)
6080 ((bfd_byte
*) everneed
+ iverneed
->vn_aux
));
6081 ivernaux
= iverneed
->vn_auxptr
;
6082 for (j
= 0; j
< iverneed
->vn_cnt
; j
++, ivernaux
++)
6084 _bfd_elf_swap_vernaux_in (abfd
, evernaux
, ivernaux
);
6086 ivernaux
->vna_nodename
=
6087 bfd_elf_string_from_elf_section (abfd
, hdr
->sh_link
,
6088 ivernaux
->vna_name
);
6089 if (ivernaux
->vna_nodename
== NULL
)
6092 if (j
+ 1 < iverneed
->vn_cnt
)
6093 ivernaux
->vna_nextptr
= ivernaux
+ 1;
6095 ivernaux
->vna_nextptr
= NULL
;
6097 evernaux
= ((Elf_External_Vernaux
*)
6098 ((bfd_byte
*) evernaux
+ ivernaux
->vna_next
));
6100 if (ivernaux
->vna_other
> freeidx
)
6101 freeidx
= ivernaux
->vna_other
;
6104 if (i
+ 1 < hdr
->sh_info
)
6105 iverneed
->vn_nextref
= iverneed
+ 1;
6107 iverneed
->vn_nextref
= NULL
;
6109 everneed
= ((Elf_External_Verneed
*)
6110 ((bfd_byte
*) everneed
+ iverneed
->vn_next
));
6117 if (elf_dynverdef (abfd
) != 0)
6119 Elf_Internal_Shdr
*hdr
;
6120 Elf_External_Verdef
*everdef
;
6121 Elf_Internal_Verdef
*iverdef
;
6122 Elf_Internal_Verdef
*iverdefarr
;
6123 Elf_Internal_Verdef iverdefmem
;
6125 unsigned int maxidx
;
6127 hdr
= &elf_tdata (abfd
)->dynverdef_hdr
;
6129 contents
= bfd_malloc (hdr
->sh_size
);
6130 if (contents
== NULL
)
6132 if (bfd_seek (abfd
, hdr
->sh_offset
, SEEK_SET
) != 0
6133 || bfd_bread (contents
, hdr
->sh_size
, abfd
) != hdr
->sh_size
)
6136 /* We know the number of entries in the section but not the maximum
6137 index. Therefore we have to run through all entries and find
6139 everdef
= (Elf_External_Verdef
*) contents
;
6141 for (i
= 0; i
< hdr
->sh_info
; ++i
)
6143 _bfd_elf_swap_verdef_in (abfd
, everdef
, &iverdefmem
);
6145 if ((iverdefmem
.vd_ndx
& ((unsigned) VERSYM_VERSION
)) > maxidx
)
6146 maxidx
= iverdefmem
.vd_ndx
& ((unsigned) VERSYM_VERSION
);
6148 everdef
= ((Elf_External_Verdef
*)
6149 ((bfd_byte
*) everdef
+ iverdefmem
.vd_next
));
6152 if (default_imported_symver
)
6154 if (freeidx
> maxidx
)
6159 amt
= (bfd_size_type
) maxidx
* sizeof (Elf_Internal_Verdef
);
6160 elf_tdata (abfd
)->verdef
= bfd_zalloc (abfd
, amt
);
6161 if (elf_tdata (abfd
)->verdef
== NULL
)
6164 elf_tdata (abfd
)->cverdefs
= maxidx
;
6166 everdef
= (Elf_External_Verdef
*) contents
;
6167 iverdefarr
= elf_tdata (abfd
)->verdef
;
6168 for (i
= 0; i
< hdr
->sh_info
; i
++)
6170 Elf_External_Verdaux
*everdaux
;
6171 Elf_Internal_Verdaux
*iverdaux
;
6174 _bfd_elf_swap_verdef_in (abfd
, everdef
, &iverdefmem
);
6176 iverdef
= &iverdefarr
[(iverdefmem
.vd_ndx
& VERSYM_VERSION
) - 1];
6177 memcpy (iverdef
, &iverdefmem
, sizeof (Elf_Internal_Verdef
));
6179 iverdef
->vd_bfd
= abfd
;
6181 amt
= (bfd_size_type
) iverdef
->vd_cnt
* sizeof (Elf_Internal_Verdaux
);
6182 iverdef
->vd_auxptr
= bfd_alloc (abfd
, amt
);
6183 if (iverdef
->vd_auxptr
== NULL
)
6186 everdaux
= ((Elf_External_Verdaux
*)
6187 ((bfd_byte
*) everdef
+ iverdef
->vd_aux
));
6188 iverdaux
= iverdef
->vd_auxptr
;
6189 for (j
= 0; j
< iverdef
->vd_cnt
; j
++, iverdaux
++)
6191 _bfd_elf_swap_verdaux_in (abfd
, everdaux
, iverdaux
);
6193 iverdaux
->vda_nodename
=
6194 bfd_elf_string_from_elf_section (abfd
, hdr
->sh_link
,
6195 iverdaux
->vda_name
);
6196 if (iverdaux
->vda_nodename
== NULL
)
6199 if (j
+ 1 < iverdef
->vd_cnt
)
6200 iverdaux
->vda_nextptr
= iverdaux
+ 1;
6202 iverdaux
->vda_nextptr
= NULL
;
6204 everdaux
= ((Elf_External_Verdaux
*)
6205 ((bfd_byte
*) everdaux
+ iverdaux
->vda_next
));
6208 iverdef
->vd_nodename
= iverdef
->vd_auxptr
->vda_nodename
;
6210 if (i
+ 1 < hdr
->sh_info
)
6211 iverdef
->vd_nextdef
= iverdef
+ 1;
6213 iverdef
->vd_nextdef
= NULL
;
6215 everdef
= ((Elf_External_Verdef
*)
6216 ((bfd_byte
*) everdef
+ iverdef
->vd_next
));
6222 else if (default_imported_symver
)
6229 amt
= (bfd_size_type
) freeidx
* sizeof (Elf_Internal_Verdef
);
6230 elf_tdata (abfd
)->verdef
= bfd_zalloc (abfd
, amt
);
6231 if (elf_tdata (abfd
)->verdef
== NULL
)
6234 elf_tdata (abfd
)->cverdefs
= freeidx
;
6237 /* Create a default version based on the soname. */
6238 if (default_imported_symver
)
6240 Elf_Internal_Verdef
*iverdef
;
6241 Elf_Internal_Verdaux
*iverdaux
;
6243 iverdef
= &elf_tdata (abfd
)->verdef
[freeidx
- 1];;
6245 iverdef
->vd_version
= VER_DEF_CURRENT
;
6246 iverdef
->vd_flags
= 0;
6247 iverdef
->vd_ndx
= freeidx
;
6248 iverdef
->vd_cnt
= 1;
6250 iverdef
->vd_bfd
= abfd
;
6252 iverdef
->vd_nodename
= bfd_elf_get_dt_soname (abfd
);
6253 if (iverdef
->vd_nodename
== NULL
)
6255 iverdef
->vd_nextdef
= NULL
;
6256 amt
= (bfd_size_type
) sizeof (Elf_Internal_Verdaux
);
6257 iverdef
->vd_auxptr
= bfd_alloc (abfd
, amt
);
6259 iverdaux
= iverdef
->vd_auxptr
;
6260 iverdaux
->vda_nodename
= iverdef
->vd_nodename
;
6261 iverdaux
->vda_nextptr
= NULL
;
6267 if (contents
!= NULL
)
6273 _bfd_elf_make_empty_symbol (bfd
*abfd
)
6275 elf_symbol_type
*newsym
;
6276 bfd_size_type amt
= sizeof (elf_symbol_type
);
6278 newsym
= bfd_zalloc (abfd
, amt
);
6283 newsym
->symbol
.the_bfd
= abfd
;
6284 return &newsym
->symbol
;
6289 _bfd_elf_get_symbol_info (bfd
*abfd ATTRIBUTE_UNUSED
,
6293 bfd_symbol_info (symbol
, ret
);
6296 /* Return whether a symbol name implies a local symbol. Most targets
6297 use this function for the is_local_label_name entry point, but some
6301 _bfd_elf_is_local_label_name (bfd
*abfd ATTRIBUTE_UNUSED
,
6304 /* Normal local symbols start with ``.L''. */
6305 if (name
[0] == '.' && name
[1] == 'L')
6308 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
6309 DWARF debugging symbols starting with ``..''. */
6310 if (name
[0] == '.' && name
[1] == '.')
6313 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
6314 emitting DWARF debugging output. I suspect this is actually a
6315 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
6316 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
6317 underscore to be emitted on some ELF targets). For ease of use,
6318 we treat such symbols as local. */
6319 if (name
[0] == '_' && name
[1] == '.' && name
[2] == 'L' && name
[3] == '_')
6326 _bfd_elf_get_lineno (bfd
*abfd ATTRIBUTE_UNUSED
,
6327 asymbol
*symbol ATTRIBUTE_UNUSED
)
6334 _bfd_elf_set_arch_mach (bfd
*abfd
,
6335 enum bfd_architecture arch
,
6336 unsigned long machine
)
6338 /* If this isn't the right architecture for this backend, and this
6339 isn't the generic backend, fail. */
6340 if (arch
!= get_elf_backend_data (abfd
)->arch
6341 && arch
!= bfd_arch_unknown
6342 && get_elf_backend_data (abfd
)->arch
!= bfd_arch_unknown
)
6345 return bfd_default_set_arch_mach (abfd
, arch
, machine
);
6348 /* Find the function to a particular section and offset,
6349 for error reporting. */
6352 elf_find_function (bfd
*abfd ATTRIBUTE_UNUSED
,
6356 const char **filename_ptr
,
6357 const char **functionname_ptr
)
6359 const char *filename
;
6360 asymbol
*func
, *file
;
6363 /* ??? Given multiple file symbols, it is impossible to reliably
6364 choose the right file name for global symbols. File symbols are
6365 local symbols, and thus all file symbols must sort before any
6366 global symbols. The ELF spec may be interpreted to say that a
6367 file symbol must sort before other local symbols, but currently
6368 ld -r doesn't do this. So, for ld -r output, it is possible to
6369 make a better choice of file name for local symbols by ignoring
6370 file symbols appearing after a given local symbol. */
6371 enum { nothing_seen
, symbol_seen
, file_after_symbol_seen
} state
;
6377 state
= nothing_seen
;
6379 for (p
= symbols
; *p
!= NULL
; p
++)
6383 q
= (elf_symbol_type
*) *p
;
6385 switch (ELF_ST_TYPE (q
->internal_elf_sym
.st_info
))
6391 if (state
== symbol_seen
)
6392 state
= file_after_symbol_seen
;
6398 if (bfd_get_section (&q
->symbol
) == section
6399 && q
->symbol
.value
>= low_func
6400 && q
->symbol
.value
<= offset
)
6402 func
= (asymbol
*) q
;
6403 low_func
= q
->symbol
.value
;
6406 else if (ELF_ST_BIND (q
->internal_elf_sym
.st_info
) != STB_LOCAL
6407 && state
== file_after_symbol_seen
)
6410 filename
= bfd_asymbol_name (file
);
6414 if (state
== nothing_seen
)
6415 state
= symbol_seen
;
6422 *filename_ptr
= filename
;
6423 if (functionname_ptr
)
6424 *functionname_ptr
= bfd_asymbol_name (func
);
6429 /* Find the nearest line to a particular section and offset,
6430 for error reporting. */
6433 _bfd_elf_find_nearest_line (bfd
*abfd
,
6437 const char **filename_ptr
,
6438 const char **functionname_ptr
,
6439 unsigned int *line_ptr
)
6443 if (_bfd_dwarf1_find_nearest_line (abfd
, section
, symbols
, offset
,
6444 filename_ptr
, functionname_ptr
,
6447 if (!*functionname_ptr
)
6448 elf_find_function (abfd
, section
, symbols
, offset
,
6449 *filename_ptr
? NULL
: filename_ptr
,
6455 if (_bfd_dwarf2_find_nearest_line (abfd
, section
, symbols
, offset
,
6456 filename_ptr
, functionname_ptr
,
6458 &elf_tdata (abfd
)->dwarf2_find_line_info
))
6460 if (!*functionname_ptr
)
6461 elf_find_function (abfd
, section
, symbols
, offset
,
6462 *filename_ptr
? NULL
: filename_ptr
,
6468 if (! _bfd_stab_section_find_nearest_line (abfd
, symbols
, section
, offset
,
6469 &found
, filename_ptr
,
6470 functionname_ptr
, line_ptr
,
6471 &elf_tdata (abfd
)->line_info
))
6473 if (found
&& (*functionname_ptr
|| *line_ptr
))
6476 if (symbols
== NULL
)
6479 if (! elf_find_function (abfd
, section
, symbols
, offset
,
6480 filename_ptr
, functionname_ptr
))
6488 _bfd_elf_sizeof_headers (bfd
*abfd
, bfd_boolean reloc
)
6492 ret
= get_elf_backend_data (abfd
)->s
->sizeof_ehdr
;
6494 ret
+= get_program_header_size (abfd
);
6499 _bfd_elf_set_section_contents (bfd
*abfd
,
6501 const void *location
,
6503 bfd_size_type count
)
6505 Elf_Internal_Shdr
*hdr
;
6508 if (! abfd
->output_has_begun
6509 && ! _bfd_elf_compute_section_file_positions (abfd
, NULL
))
6512 hdr
= &elf_section_data (section
)->this_hdr
;
6513 pos
= hdr
->sh_offset
+ offset
;
6514 if (bfd_seek (abfd
, pos
, SEEK_SET
) != 0
6515 || bfd_bwrite (location
, count
, abfd
) != count
)
6522 _bfd_elf_no_info_to_howto (bfd
*abfd ATTRIBUTE_UNUSED
,
6523 arelent
*cache_ptr ATTRIBUTE_UNUSED
,
6524 Elf_Internal_Rela
*dst ATTRIBUTE_UNUSED
)
6529 /* Try to convert a non-ELF reloc into an ELF one. */
6532 _bfd_elf_validate_reloc (bfd
*abfd
, arelent
*areloc
)
6534 /* Check whether we really have an ELF howto. */
6536 if ((*areloc
->sym_ptr_ptr
)->the_bfd
->xvec
!= abfd
->xvec
)
6538 bfd_reloc_code_real_type code
;
6539 reloc_howto_type
*howto
;
6541 /* Alien reloc: Try to determine its type to replace it with an
6542 equivalent ELF reloc. */
6544 if (areloc
->howto
->pc_relative
)
6546 switch (areloc
->howto
->bitsize
)
6549 code
= BFD_RELOC_8_PCREL
;
6552 code
= BFD_RELOC_12_PCREL
;
6555 code
= BFD_RELOC_16_PCREL
;
6558 code
= BFD_RELOC_24_PCREL
;
6561 code
= BFD_RELOC_32_PCREL
;
6564 code
= BFD_RELOC_64_PCREL
;
6570 howto
= bfd_reloc_type_lookup (abfd
, code
);
6572 if (areloc
->howto
->pcrel_offset
!= howto
->pcrel_offset
)
6574 if (howto
->pcrel_offset
)
6575 areloc
->addend
+= areloc
->address
;
6577 areloc
->addend
-= areloc
->address
; /* addend is unsigned!! */
6582 switch (areloc
->howto
->bitsize
)
6588 code
= BFD_RELOC_14
;
6591 code
= BFD_RELOC_16
;
6594 code
= BFD_RELOC_26
;
6597 code
= BFD_RELOC_32
;
6600 code
= BFD_RELOC_64
;
6606 howto
= bfd_reloc_type_lookup (abfd
, code
);
6610 areloc
->howto
= howto
;
6618 (*_bfd_error_handler
)
6619 (_("%B: unsupported relocation type %s"),
6620 abfd
, areloc
->howto
->name
);
6621 bfd_set_error (bfd_error_bad_value
);
6626 _bfd_elf_close_and_cleanup (bfd
*abfd
)
6628 if (bfd_get_format (abfd
) == bfd_object
)
6630 if (elf_shstrtab (abfd
) != NULL
)
6631 _bfd_elf_strtab_free (elf_shstrtab (abfd
));
6634 return _bfd_generic_close_and_cleanup (abfd
);
6637 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
6638 in the relocation's offset. Thus we cannot allow any sort of sanity
6639 range-checking to interfere. There is nothing else to do in processing
6642 bfd_reloc_status_type
6643 _bfd_elf_rel_vtable_reloc_fn
6644 (bfd
*abfd ATTRIBUTE_UNUSED
, arelent
*re ATTRIBUTE_UNUSED
,
6645 struct bfd_symbol
*symbol ATTRIBUTE_UNUSED
,
6646 void *data ATTRIBUTE_UNUSED
, asection
*is ATTRIBUTE_UNUSED
,
6647 bfd
*obfd ATTRIBUTE_UNUSED
, char **errmsg ATTRIBUTE_UNUSED
)
6649 return bfd_reloc_ok
;
6652 /* Elf core file support. Much of this only works on native
6653 toolchains, since we rely on knowing the
6654 machine-dependent procfs structure in order to pick
6655 out details about the corefile. */
6657 #ifdef HAVE_SYS_PROCFS_H
6658 # include <sys/procfs.h>
6661 /* FIXME: this is kinda wrong, but it's what gdb wants. */
6664 elfcore_make_pid (bfd
*abfd
)
6666 return ((elf_tdata (abfd
)->core_lwpid
<< 16)
6667 + (elf_tdata (abfd
)->core_pid
));
6670 /* If there isn't a section called NAME, make one, using
6671 data from SECT. Note, this function will generate a
6672 reference to NAME, so you shouldn't deallocate or
6676 elfcore_maybe_make_sect (bfd
*abfd
, char *name
, asection
*sect
)
6680 if (bfd_get_section_by_name (abfd
, name
) != NULL
)
6683 sect2
= bfd_make_section (abfd
, name
);
6687 sect2
->size
= sect
->size
;
6688 sect2
->filepos
= sect
->filepos
;
6689 sect2
->flags
= sect
->flags
;
6690 sect2
->alignment_power
= sect
->alignment_power
;
6694 /* Create a pseudosection containing SIZE bytes at FILEPOS. This
6695 actually creates up to two pseudosections:
6696 - For the single-threaded case, a section named NAME, unless
6697 such a section already exists.
6698 - For the multi-threaded case, a section named "NAME/PID", where
6699 PID is elfcore_make_pid (abfd).
6700 Both pseudosections have identical contents. */
6702 _bfd_elfcore_make_pseudosection (bfd
*abfd
,
6708 char *threaded_name
;
6712 /* Build the section name. */
6714 sprintf (buf
, "%s/%d", name
, elfcore_make_pid (abfd
));
6715 len
= strlen (buf
) + 1;
6716 threaded_name
= bfd_alloc (abfd
, len
);
6717 if (threaded_name
== NULL
)
6719 memcpy (threaded_name
, buf
, len
);
6721 sect
= bfd_make_section_anyway (abfd
, threaded_name
);
6725 sect
->filepos
= filepos
;
6726 sect
->flags
= SEC_HAS_CONTENTS
;
6727 sect
->alignment_power
= 2;
6729 return elfcore_maybe_make_sect (abfd
, name
, sect
);
6732 /* prstatus_t exists on:
6734 linux 2.[01] + glibc
6738 #if defined (HAVE_PRSTATUS_T)
6741 elfcore_grok_prstatus (bfd
*abfd
, Elf_Internal_Note
*note
)
6746 if (note
->descsz
== sizeof (prstatus_t
))
6750 size
= sizeof (prstat
.pr_reg
);
6751 offset
= offsetof (prstatus_t
, pr_reg
);
6752 memcpy (&prstat
, note
->descdata
, sizeof (prstat
));
6754 /* Do not overwrite the core signal if it
6755 has already been set by another thread. */
6756 if (elf_tdata (abfd
)->core_signal
== 0)
6757 elf_tdata (abfd
)->core_signal
= prstat
.pr_cursig
;
6758 elf_tdata (abfd
)->core_pid
= prstat
.pr_pid
;
6760 /* pr_who exists on:
6763 pr_who doesn't exist on:
6766 #if defined (HAVE_PRSTATUS_T_PR_WHO)
6767 elf_tdata (abfd
)->core_lwpid
= prstat
.pr_who
;
6770 #if defined (HAVE_PRSTATUS32_T)
6771 else if (note
->descsz
== sizeof (prstatus32_t
))
6773 /* 64-bit host, 32-bit corefile */
6774 prstatus32_t prstat
;
6776 size
= sizeof (prstat
.pr_reg
);
6777 offset
= offsetof (prstatus32_t
, pr_reg
);
6778 memcpy (&prstat
, note
->descdata
, sizeof (prstat
));
6780 /* Do not overwrite the core signal if it
6781 has already been set by another thread. */
6782 if (elf_tdata (abfd
)->core_signal
== 0)
6783 elf_tdata (abfd
)->core_signal
= prstat
.pr_cursig
;
6784 elf_tdata (abfd
)->core_pid
= prstat
.pr_pid
;
6786 /* pr_who exists on:
6789 pr_who doesn't exist on:
6792 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
6793 elf_tdata (abfd
)->core_lwpid
= prstat
.pr_who
;
6796 #endif /* HAVE_PRSTATUS32_T */
6799 /* Fail - we don't know how to handle any other
6800 note size (ie. data object type). */
6804 /* Make a ".reg/999" section and a ".reg" section. */
6805 return _bfd_elfcore_make_pseudosection (abfd
, ".reg",
6806 size
, note
->descpos
+ offset
);
6808 #endif /* defined (HAVE_PRSTATUS_T) */
6810 /* Create a pseudosection containing the exact contents of NOTE. */
6812 elfcore_make_note_pseudosection (bfd
*abfd
,
6814 Elf_Internal_Note
*note
)
6816 return _bfd_elfcore_make_pseudosection (abfd
, name
,
6817 note
->descsz
, note
->descpos
);
6820 /* There isn't a consistent prfpregset_t across platforms,
6821 but it doesn't matter, because we don't have to pick this
6822 data structure apart. */
6825 elfcore_grok_prfpreg (bfd
*abfd
, Elf_Internal_Note
*note
)
6827 return elfcore_make_note_pseudosection (abfd
, ".reg2", note
);
6830 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
6831 type of 5 (NT_PRXFPREG). Just include the whole note's contents
6835 elfcore_grok_prxfpreg (bfd
*abfd
, Elf_Internal_Note
*note
)
6837 return elfcore_make_note_pseudosection (abfd
, ".reg-xfp", note
);
6840 #if defined (HAVE_PRPSINFO_T)
6841 typedef prpsinfo_t elfcore_psinfo_t
;
6842 #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
6843 typedef prpsinfo32_t elfcore_psinfo32_t
;
6847 #if defined (HAVE_PSINFO_T)
6848 typedef psinfo_t elfcore_psinfo_t
;
6849 #if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
6850 typedef psinfo32_t elfcore_psinfo32_t
;
6854 /* return a malloc'ed copy of a string at START which is at
6855 most MAX bytes long, possibly without a terminating '\0'.
6856 the copy will always have a terminating '\0'. */
6859 _bfd_elfcore_strndup (bfd
*abfd
, char *start
, size_t max
)
6862 char *end
= memchr (start
, '\0', max
);
6870 dups
= bfd_alloc (abfd
, len
+ 1);
6874 memcpy (dups
, start
, len
);
6880 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
6882 elfcore_grok_psinfo (bfd
*abfd
, Elf_Internal_Note
*note
)
6884 if (note
->descsz
== sizeof (elfcore_psinfo_t
))
6886 elfcore_psinfo_t psinfo
;
6888 memcpy (&psinfo
, note
->descdata
, sizeof (psinfo
));
6890 elf_tdata (abfd
)->core_program
6891 = _bfd_elfcore_strndup (abfd
, psinfo
.pr_fname
,
6892 sizeof (psinfo
.pr_fname
));
6894 elf_tdata (abfd
)->core_command
6895 = _bfd_elfcore_strndup (abfd
, psinfo
.pr_psargs
,
6896 sizeof (psinfo
.pr_psargs
));
6898 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
6899 else if (note
->descsz
== sizeof (elfcore_psinfo32_t
))
6901 /* 64-bit host, 32-bit corefile */
6902 elfcore_psinfo32_t psinfo
;
6904 memcpy (&psinfo
, note
->descdata
, sizeof (psinfo
));
6906 elf_tdata (abfd
)->core_program
6907 = _bfd_elfcore_strndup (abfd
, psinfo
.pr_fname
,
6908 sizeof (psinfo
.pr_fname
));
6910 elf_tdata (abfd
)->core_command
6911 = _bfd_elfcore_strndup (abfd
, psinfo
.pr_psargs
,
6912 sizeof (psinfo
.pr_psargs
));
6918 /* Fail - we don't know how to handle any other
6919 note size (ie. data object type). */
6923 /* Note that for some reason, a spurious space is tacked
6924 onto the end of the args in some (at least one anyway)
6925 implementations, so strip it off if it exists. */
6928 char *command
= elf_tdata (abfd
)->core_command
;
6929 int n
= strlen (command
);
6931 if (0 < n
&& command
[n
- 1] == ' ')
6932 command
[n
- 1] = '\0';
6937 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
6939 #if defined (HAVE_PSTATUS_T)
6941 elfcore_grok_pstatus (bfd
*abfd
, Elf_Internal_Note
*note
)
6943 if (note
->descsz
== sizeof (pstatus_t
)
6944 #if defined (HAVE_PXSTATUS_T)
6945 || note
->descsz
== sizeof (pxstatus_t
)
6951 memcpy (&pstat
, note
->descdata
, sizeof (pstat
));
6953 elf_tdata (abfd
)->core_pid
= pstat
.pr_pid
;
6955 #if defined (HAVE_PSTATUS32_T)
6956 else if (note
->descsz
== sizeof (pstatus32_t
))
6958 /* 64-bit host, 32-bit corefile */
6961 memcpy (&pstat
, note
->descdata
, sizeof (pstat
));
6963 elf_tdata (abfd
)->core_pid
= pstat
.pr_pid
;
6966 /* Could grab some more details from the "representative"
6967 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
6968 NT_LWPSTATUS note, presumably. */
6972 #endif /* defined (HAVE_PSTATUS_T) */
6974 #if defined (HAVE_LWPSTATUS_T)
6976 elfcore_grok_lwpstatus (bfd
*abfd
, Elf_Internal_Note
*note
)
6978 lwpstatus_t lwpstat
;
6984 if (note
->descsz
!= sizeof (lwpstat
)
6985 #if defined (HAVE_LWPXSTATUS_T)
6986 && note
->descsz
!= sizeof (lwpxstatus_t
)
6991 memcpy (&lwpstat
, note
->descdata
, sizeof (lwpstat
));
6993 elf_tdata (abfd
)->core_lwpid
= lwpstat
.pr_lwpid
;
6994 elf_tdata (abfd
)->core_signal
= lwpstat
.pr_cursig
;
6996 /* Make a ".reg/999" section. */
6998 sprintf (buf
, ".reg/%d", elfcore_make_pid (abfd
));
6999 len
= strlen (buf
) + 1;
7000 name
= bfd_alloc (abfd
, len
);
7003 memcpy (name
, buf
, len
);
7005 sect
= bfd_make_section_anyway (abfd
, name
);
7009 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
7010 sect
->size
= sizeof (lwpstat
.pr_context
.uc_mcontext
.gregs
);
7011 sect
->filepos
= note
->descpos
7012 + offsetof (lwpstatus_t
, pr_context
.uc_mcontext
.gregs
);
7015 #if defined (HAVE_LWPSTATUS_T_PR_REG)
7016 sect
->size
= sizeof (lwpstat
.pr_reg
);
7017 sect
->filepos
= note
->descpos
+ offsetof (lwpstatus_t
, pr_reg
);
7020 sect
->flags
= SEC_HAS_CONTENTS
;
7021 sect
->alignment_power
= 2;
7023 if (!elfcore_maybe_make_sect (abfd
, ".reg", sect
))
7026 /* Make a ".reg2/999" section */
7028 sprintf (buf
, ".reg2/%d", elfcore_make_pid (abfd
));
7029 len
= strlen (buf
) + 1;
7030 name
= bfd_alloc (abfd
, len
);
7033 memcpy (name
, buf
, len
);
7035 sect
= bfd_make_section_anyway (abfd
, name
);
7039 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
7040 sect
->size
= sizeof (lwpstat
.pr_context
.uc_mcontext
.fpregs
);
7041 sect
->filepos
= note
->descpos
7042 + offsetof (lwpstatus_t
, pr_context
.uc_mcontext
.fpregs
);
7045 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
7046 sect
->size
= sizeof (lwpstat
.pr_fpreg
);
7047 sect
->filepos
= note
->descpos
+ offsetof (lwpstatus_t
, pr_fpreg
);
7050 sect
->flags
= SEC_HAS_CONTENTS
;
7051 sect
->alignment_power
= 2;
7053 return elfcore_maybe_make_sect (abfd
, ".reg2", sect
);
7055 #endif /* defined (HAVE_LWPSTATUS_T) */
7057 #if defined (HAVE_WIN32_PSTATUS_T)
7059 elfcore_grok_win32pstatus (bfd
*abfd
, Elf_Internal_Note
*note
)
7065 win32_pstatus_t pstatus
;
7067 if (note
->descsz
< sizeof (pstatus
))
7070 memcpy (&pstatus
, note
->descdata
, sizeof (pstatus
));
7072 switch (pstatus
.data_type
)
7074 case NOTE_INFO_PROCESS
:
7075 /* FIXME: need to add ->core_command. */
7076 elf_tdata (abfd
)->core_signal
= pstatus
.data
.process_info
.signal
;
7077 elf_tdata (abfd
)->core_pid
= pstatus
.data
.process_info
.pid
;
7080 case NOTE_INFO_THREAD
:
7081 /* Make a ".reg/999" section. */
7082 sprintf (buf
, ".reg/%d", pstatus
.data
.thread_info
.tid
);
7084 len
= strlen (buf
) + 1;
7085 name
= bfd_alloc (abfd
, len
);
7089 memcpy (name
, buf
, len
);
7091 sect
= bfd_make_section_anyway (abfd
, name
);
7095 sect
->size
= sizeof (pstatus
.data
.thread_info
.thread_context
);
7096 sect
->filepos
= (note
->descpos
7097 + offsetof (struct win32_pstatus
,
7098 data
.thread_info
.thread_context
));
7099 sect
->flags
= SEC_HAS_CONTENTS
;
7100 sect
->alignment_power
= 2;
7102 if (pstatus
.data
.thread_info
.is_active_thread
)
7103 if (! elfcore_maybe_make_sect (abfd
, ".reg", sect
))
7107 case NOTE_INFO_MODULE
:
7108 /* Make a ".module/xxxxxxxx" section. */
7109 sprintf (buf
, ".module/%08x", pstatus
.data
.module_info
.base_address
);
7111 len
= strlen (buf
) + 1;
7112 name
= bfd_alloc (abfd
, len
);
7116 memcpy (name
, buf
, len
);
7118 sect
= bfd_make_section_anyway (abfd
, name
);
7123 sect
->size
= note
->descsz
;
7124 sect
->filepos
= note
->descpos
;
7125 sect
->flags
= SEC_HAS_CONTENTS
;
7126 sect
->alignment_power
= 2;
7135 #endif /* HAVE_WIN32_PSTATUS_T */
7138 elfcore_grok_note (bfd
*abfd
, Elf_Internal_Note
*note
)
7140 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
7148 if (bed
->elf_backend_grok_prstatus
)
7149 if ((*bed
->elf_backend_grok_prstatus
) (abfd
, note
))
7151 #if defined (HAVE_PRSTATUS_T)
7152 return elfcore_grok_prstatus (abfd
, note
);
7157 #if defined (HAVE_PSTATUS_T)
7159 return elfcore_grok_pstatus (abfd
, note
);
7162 #if defined (HAVE_LWPSTATUS_T)
7164 return elfcore_grok_lwpstatus (abfd
, note
);
7167 case NT_FPREGSET
: /* FIXME: rename to NT_PRFPREG */
7168 return elfcore_grok_prfpreg (abfd
, note
);
7170 #if defined (HAVE_WIN32_PSTATUS_T)
7171 case NT_WIN32PSTATUS
:
7172 return elfcore_grok_win32pstatus (abfd
, note
);
7175 case NT_PRXFPREG
: /* Linux SSE extension */
7176 if (note
->namesz
== 6
7177 && strcmp (note
->namedata
, "LINUX") == 0)
7178 return elfcore_grok_prxfpreg (abfd
, note
);
7184 if (bed
->elf_backend_grok_psinfo
)
7185 if ((*bed
->elf_backend_grok_psinfo
) (abfd
, note
))
7187 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
7188 return elfcore_grok_psinfo (abfd
, note
);
7195 asection
*sect
= bfd_make_section_anyway (abfd
, ".auxv");
7199 sect
->size
= note
->descsz
;
7200 sect
->filepos
= note
->descpos
;
7201 sect
->flags
= SEC_HAS_CONTENTS
;
7202 sect
->alignment_power
= 1 + bfd_get_arch_size (abfd
) / 32;
7210 elfcore_netbsd_get_lwpid (Elf_Internal_Note
*note
, int *lwpidp
)
7214 cp
= strchr (note
->namedata
, '@');
7217 *lwpidp
= atoi(cp
+ 1);
7224 elfcore_grok_netbsd_procinfo (bfd
*abfd
, Elf_Internal_Note
*note
)
7227 /* Signal number at offset 0x08. */
7228 elf_tdata (abfd
)->core_signal
7229 = bfd_h_get_32 (abfd
, (bfd_byte
*) note
->descdata
+ 0x08);
7231 /* Process ID at offset 0x50. */
7232 elf_tdata (abfd
)->core_pid
7233 = bfd_h_get_32 (abfd
, (bfd_byte
*) note
->descdata
+ 0x50);
7235 /* Command name at 0x7c (max 32 bytes, including nul). */
7236 elf_tdata (abfd
)->core_command
7237 = _bfd_elfcore_strndup (abfd
, note
->descdata
+ 0x7c, 31);
7239 return elfcore_make_note_pseudosection (abfd
, ".note.netbsdcore.procinfo",
7244 elfcore_grok_netbsd_note (bfd
*abfd
, Elf_Internal_Note
*note
)
7248 if (elfcore_netbsd_get_lwpid (note
, &lwp
))
7249 elf_tdata (abfd
)->core_lwpid
= lwp
;
7251 if (note
->type
== NT_NETBSDCORE_PROCINFO
)
7253 /* NetBSD-specific core "procinfo". Note that we expect to
7254 find this note before any of the others, which is fine,
7255 since the kernel writes this note out first when it
7256 creates a core file. */
7258 return elfcore_grok_netbsd_procinfo (abfd
, note
);
7261 /* As of Jan 2002 there are no other machine-independent notes
7262 defined for NetBSD core files. If the note type is less
7263 than the start of the machine-dependent note types, we don't
7266 if (note
->type
< NT_NETBSDCORE_FIRSTMACH
)
7270 switch (bfd_get_arch (abfd
))
7272 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
7273 PT_GETFPREGS == mach+2. */
7275 case bfd_arch_alpha
:
7276 case bfd_arch_sparc
:
7279 case NT_NETBSDCORE_FIRSTMACH
+0:
7280 return elfcore_make_note_pseudosection (abfd
, ".reg", note
);
7282 case NT_NETBSDCORE_FIRSTMACH
+2:
7283 return elfcore_make_note_pseudosection (abfd
, ".reg2", note
);
7289 /* On all other arch's, PT_GETREGS == mach+1 and
7290 PT_GETFPREGS == mach+3. */
7295 case NT_NETBSDCORE_FIRSTMACH
+1:
7296 return elfcore_make_note_pseudosection (abfd
, ".reg", note
);
7298 case NT_NETBSDCORE_FIRSTMACH
+3:
7299 return elfcore_make_note_pseudosection (abfd
, ".reg2", note
);
7309 elfcore_grok_nto_status (bfd
*abfd
, Elf_Internal_Note
*note
, pid_t
*tid
)
7311 void *ddata
= note
->descdata
;
7318 /* nto_procfs_status 'pid' field is at offset 0. */
7319 elf_tdata (abfd
)->core_pid
= bfd_get_32 (abfd
, (bfd_byte
*) ddata
);
7321 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */
7322 *tid
= bfd_get_32 (abfd
, (bfd_byte
*) ddata
+ 4);
7324 /* nto_procfs_status 'flags' field is at offset 8. */
7325 flags
= bfd_get_32 (abfd
, (bfd_byte
*) ddata
+ 8);
7327 /* nto_procfs_status 'what' field is at offset 14. */
7328 if ((sig
= bfd_get_16 (abfd
, (bfd_byte
*) ddata
+ 14)) > 0)
7330 elf_tdata (abfd
)->core_signal
= sig
;
7331 elf_tdata (abfd
)->core_lwpid
= *tid
;
7334 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores
7335 do not come from signals so we make sure we set the current
7336 thread just in case. */
7337 if (flags
& 0x00000080)
7338 elf_tdata (abfd
)->core_lwpid
= *tid
;
7340 /* Make a ".qnx_core_status/%d" section. */
7341 sprintf (buf
, ".qnx_core_status/%d", *tid
);
7343 name
= bfd_alloc (abfd
, strlen (buf
) + 1);
7348 sect
= bfd_make_section_anyway (abfd
, name
);
7352 sect
->size
= note
->descsz
;
7353 sect
->filepos
= note
->descpos
;
7354 sect
->flags
= SEC_HAS_CONTENTS
;
7355 sect
->alignment_power
= 2;
7357 return (elfcore_maybe_make_sect (abfd
, ".qnx_core_status", sect
));
7361 elfcore_grok_nto_regs (bfd
*abfd
,
7362 Elf_Internal_Note
*note
,
7370 /* Make a "(base)/%d" section. */
7371 sprintf (buf
, "%s/%d", base
, tid
);
7373 name
= bfd_alloc (abfd
, strlen (buf
) + 1);
7378 sect
= bfd_make_section_anyway (abfd
, name
);
7382 sect
->size
= note
->descsz
;
7383 sect
->filepos
= note
->descpos
;
7384 sect
->flags
= SEC_HAS_CONTENTS
;
7385 sect
->alignment_power
= 2;
7387 /* This is the current thread. */
7388 if (elf_tdata (abfd
)->core_lwpid
== tid
)
7389 return elfcore_maybe_make_sect (abfd
, base
, sect
);
7394 #define BFD_QNT_CORE_INFO 7
7395 #define BFD_QNT_CORE_STATUS 8
7396 #define BFD_QNT_CORE_GREG 9
7397 #define BFD_QNT_CORE_FPREG 10
7400 elfcore_grok_nto_note (bfd
*abfd
, Elf_Internal_Note
*note
)
7402 /* Every GREG section has a STATUS section before it. Store the
7403 tid from the previous call to pass down to the next gregs
7405 static pid_t tid
= 1;
7409 case BFD_QNT_CORE_INFO
:
7410 return elfcore_make_note_pseudosection (abfd
, ".qnx_core_info", note
);
7411 case BFD_QNT_CORE_STATUS
:
7412 return elfcore_grok_nto_status (abfd
, note
, &tid
);
7413 case BFD_QNT_CORE_GREG
:
7414 return elfcore_grok_nto_regs (abfd
, note
, tid
, ".reg");
7415 case BFD_QNT_CORE_FPREG
:
7416 return elfcore_grok_nto_regs (abfd
, note
, tid
, ".reg2");
7422 /* Function: elfcore_write_note
7429 size of data for note
7432 End of buffer containing note. */
7435 elfcore_write_note (bfd
*abfd
,
7443 Elf_External_Note
*xnp
;
7453 const struct elf_backend_data
*bed
;
7455 namesz
= strlen (name
) + 1;
7456 bed
= get_elf_backend_data (abfd
);
7457 pad
= -namesz
& ((1 << bed
->s
->log_file_align
) - 1);
7460 newspace
= 12 + namesz
+ pad
+ size
;
7462 p
= realloc (buf
, *bufsiz
+ newspace
);
7464 *bufsiz
+= newspace
;
7465 xnp
= (Elf_External_Note
*) dest
;
7466 H_PUT_32 (abfd
, namesz
, xnp
->namesz
);
7467 H_PUT_32 (abfd
, size
, xnp
->descsz
);
7468 H_PUT_32 (abfd
, type
, xnp
->type
);
7472 memcpy (dest
, name
, namesz
);
7480 memcpy (dest
, input
, size
);
7484 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
7486 elfcore_write_prpsinfo (bfd
*abfd
,
7493 char *note_name
= "CORE";
7495 #if defined (HAVE_PSINFO_T)
7497 note_type
= NT_PSINFO
;
7500 note_type
= NT_PRPSINFO
;
7503 memset (&data
, 0, sizeof (data
));
7504 strncpy (data
.pr_fname
, fname
, sizeof (data
.pr_fname
));
7505 strncpy (data
.pr_psargs
, psargs
, sizeof (data
.pr_psargs
));
7506 return elfcore_write_note (abfd
, buf
, bufsiz
,
7507 note_name
, note_type
, &data
, sizeof (data
));
7509 #endif /* PSINFO_T or PRPSINFO_T */
7511 #if defined (HAVE_PRSTATUS_T)
7513 elfcore_write_prstatus (bfd
*abfd
,
7521 char *note_name
= "CORE";
7523 memset (&prstat
, 0, sizeof (prstat
));
7524 prstat
.pr_pid
= pid
;
7525 prstat
.pr_cursig
= cursig
;
7526 memcpy (&prstat
.pr_reg
, gregs
, sizeof (prstat
.pr_reg
));
7527 return elfcore_write_note (abfd
, buf
, bufsiz
,
7528 note_name
, NT_PRSTATUS
, &prstat
, sizeof (prstat
));
7530 #endif /* HAVE_PRSTATUS_T */
7532 #if defined (HAVE_LWPSTATUS_T)
7534 elfcore_write_lwpstatus (bfd
*abfd
,
7541 lwpstatus_t lwpstat
;
7542 char *note_name
= "CORE";
7544 memset (&lwpstat
, 0, sizeof (lwpstat
));
7545 lwpstat
.pr_lwpid
= pid
>> 16;
7546 lwpstat
.pr_cursig
= cursig
;
7547 #if defined (HAVE_LWPSTATUS_T_PR_REG)
7548 memcpy (lwpstat
.pr_reg
, gregs
, sizeof (lwpstat
.pr_reg
));
7549 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
7551 memcpy (lwpstat
.pr_context
.uc_mcontext
.gregs
,
7552 gregs
, sizeof (lwpstat
.pr_context
.uc_mcontext
.gregs
));
7554 memcpy (lwpstat
.pr_context
.uc_mcontext
.__gregs
,
7555 gregs
, sizeof (lwpstat
.pr_context
.uc_mcontext
.__gregs
));
7558 return elfcore_write_note (abfd
, buf
, bufsiz
, note_name
,
7559 NT_LWPSTATUS
, &lwpstat
, sizeof (lwpstat
));
7561 #endif /* HAVE_LWPSTATUS_T */
7563 #if defined (HAVE_PSTATUS_T)
7565 elfcore_write_pstatus (bfd
*abfd
,
7573 char *note_name
= "CORE";
7575 memset (&pstat
, 0, sizeof (pstat
));
7576 pstat
.pr_pid
= pid
& 0xffff;
7577 buf
= elfcore_write_note (abfd
, buf
, bufsiz
, note_name
,
7578 NT_PSTATUS
, &pstat
, sizeof (pstat
));
7581 #endif /* HAVE_PSTATUS_T */
7584 elfcore_write_prfpreg (bfd
*abfd
,
7590 char *note_name
= "CORE";
7591 return elfcore_write_note (abfd
, buf
, bufsiz
,
7592 note_name
, NT_FPREGSET
, fpregs
, size
);
7596 elfcore_write_prxfpreg (bfd
*abfd
,
7599 const void *xfpregs
,
7602 char *note_name
= "LINUX";
7603 return elfcore_write_note (abfd
, buf
, bufsiz
,
7604 note_name
, NT_PRXFPREG
, xfpregs
, size
);
7608 elfcore_read_notes (bfd
*abfd
, file_ptr offset
, bfd_size_type size
)
7616 if (bfd_seek (abfd
, offset
, SEEK_SET
) != 0)
7619 buf
= bfd_malloc (size
);
7623 if (bfd_bread (buf
, size
, abfd
) != size
)
7631 while (p
< buf
+ size
)
7633 /* FIXME: bad alignment assumption. */
7634 Elf_External_Note
*xnp
= (Elf_External_Note
*) p
;
7635 Elf_Internal_Note in
;
7637 in
.type
= H_GET_32 (abfd
, xnp
->type
);
7639 in
.namesz
= H_GET_32 (abfd
, xnp
->namesz
);
7640 in
.namedata
= xnp
->name
;
7642 in
.descsz
= H_GET_32 (abfd
, xnp
->descsz
);
7643 in
.descdata
= in
.namedata
+ BFD_ALIGN (in
.namesz
, 4);
7644 in
.descpos
= offset
+ (in
.descdata
- buf
);
7646 if (strncmp (in
.namedata
, "NetBSD-CORE", 11) == 0)
7648 if (! elfcore_grok_netbsd_note (abfd
, &in
))
7651 else if (strncmp (in
.namedata
, "QNX", 3) == 0)
7653 if (! elfcore_grok_nto_note (abfd
, &in
))
7658 if (! elfcore_grok_note (abfd
, &in
))
7662 p
= in
.descdata
+ BFD_ALIGN (in
.descsz
, 4);
7669 /* Providing external access to the ELF program header table. */
7671 /* Return an upper bound on the number of bytes required to store a
7672 copy of ABFD's program header table entries. Return -1 if an error
7673 occurs; bfd_get_error will return an appropriate code. */
7676 bfd_get_elf_phdr_upper_bound (bfd
*abfd
)
7678 if (abfd
->xvec
->flavour
!= bfd_target_elf_flavour
)
7680 bfd_set_error (bfd_error_wrong_format
);
7684 return elf_elfheader (abfd
)->e_phnum
* sizeof (Elf_Internal_Phdr
);
7687 /* Copy ABFD's program header table entries to *PHDRS. The entries
7688 will be stored as an array of Elf_Internal_Phdr structures, as
7689 defined in include/elf/internal.h. To find out how large the
7690 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
7692 Return the number of program header table entries read, or -1 if an
7693 error occurs; bfd_get_error will return an appropriate code. */
7696 bfd_get_elf_phdrs (bfd
*abfd
, void *phdrs
)
7700 if (abfd
->xvec
->flavour
!= bfd_target_elf_flavour
)
7702 bfd_set_error (bfd_error_wrong_format
);
7706 num_phdrs
= elf_elfheader (abfd
)->e_phnum
;
7707 memcpy (phdrs
, elf_tdata (abfd
)->phdr
,
7708 num_phdrs
* sizeof (Elf_Internal_Phdr
));
7714 _bfd_elf_sprintf_vma (bfd
*abfd ATTRIBUTE_UNUSED
, char *buf
, bfd_vma value
)
7717 Elf_Internal_Ehdr
*i_ehdrp
; /* Elf file header, internal form */
7719 i_ehdrp
= elf_elfheader (abfd
);
7720 if (i_ehdrp
== NULL
)
7721 sprintf_vma (buf
, value
);
7724 if (i_ehdrp
->e_ident
[EI_CLASS
] == ELFCLASS64
)
7726 #if BFD_HOST_64BIT_LONG
7727 sprintf (buf
, "%016lx", value
);
7729 sprintf (buf
, "%08lx%08lx", _bfd_int64_high (value
),
7730 _bfd_int64_low (value
));
7734 sprintf (buf
, "%08lx", (unsigned long) (value
& 0xffffffff));
7737 sprintf_vma (buf
, value
);
7742 _bfd_elf_fprintf_vma (bfd
*abfd ATTRIBUTE_UNUSED
, void *stream
, bfd_vma value
)
7745 Elf_Internal_Ehdr
*i_ehdrp
; /* Elf file header, internal form */
7747 i_ehdrp
= elf_elfheader (abfd
);
7748 if (i_ehdrp
== NULL
)
7749 fprintf_vma ((FILE *) stream
, value
);
7752 if (i_ehdrp
->e_ident
[EI_CLASS
] == ELFCLASS64
)
7754 #if BFD_HOST_64BIT_LONG
7755 fprintf ((FILE *) stream
, "%016lx", value
);
7757 fprintf ((FILE *) stream
, "%08lx%08lx",
7758 _bfd_int64_high (value
), _bfd_int64_low (value
));
7762 fprintf ((FILE *) stream
, "%08lx",
7763 (unsigned long) (value
& 0xffffffff));
7766 fprintf_vma ((FILE *) stream
, value
);
7770 enum elf_reloc_type_class
7771 _bfd_elf_reloc_type_class (const Elf_Internal_Rela
*rela ATTRIBUTE_UNUSED
)
7773 return reloc_class_normal
;
7776 /* For RELA architectures, return the relocation value for a
7777 relocation against a local symbol. */
7780 _bfd_elf_rela_local_sym (bfd
*abfd
,
7781 Elf_Internal_Sym
*sym
,
7783 Elf_Internal_Rela
*rel
)
7785 asection
*sec
= *psec
;
7788 relocation
= (sec
->output_section
->vma
7789 + sec
->output_offset
7791 if ((sec
->flags
& SEC_MERGE
)
7792 && ELF_ST_TYPE (sym
->st_info
) == STT_SECTION
7793 && sec
->sec_info_type
== ELF_INFO_TYPE_MERGE
)
7796 _bfd_merged_section_offset (abfd
, psec
,
7797 elf_section_data (sec
)->sec_info
,
7798 sym
->st_value
+ rel
->r_addend
);
7801 /* If we have changed the section, and our original section is
7802 marked with SEC_EXCLUDE, it means that the original
7803 SEC_MERGE section has been completely subsumed in some
7804 other SEC_MERGE section. In this case, we need to leave
7805 some info around for --emit-relocs. */
7806 if ((sec
->flags
& SEC_EXCLUDE
) != 0)
7807 sec
->kept_section
= *psec
;
7810 rel
->r_addend
-= relocation
;
7811 rel
->r_addend
+= sec
->output_section
->vma
+ sec
->output_offset
;
7817 _bfd_elf_rel_local_sym (bfd
*abfd
,
7818 Elf_Internal_Sym
*sym
,
7822 asection
*sec
= *psec
;
7824 if (sec
->sec_info_type
!= ELF_INFO_TYPE_MERGE
)
7825 return sym
->st_value
+ addend
;
7827 return _bfd_merged_section_offset (abfd
, psec
,
7828 elf_section_data (sec
)->sec_info
,
7829 sym
->st_value
+ addend
);
7833 _bfd_elf_section_offset (bfd
*abfd
,
7834 struct bfd_link_info
*info
,
7838 switch (sec
->sec_info_type
)
7840 case ELF_INFO_TYPE_STABS
:
7841 return _bfd_stab_section_offset (sec
, elf_section_data (sec
)->sec_info
,
7843 case ELF_INFO_TYPE_EH_FRAME
:
7844 return _bfd_elf_eh_frame_section_offset (abfd
, info
, sec
, offset
);
7850 /* Create a new BFD as if by bfd_openr. Rather than opening a file,
7851 reconstruct an ELF file by reading the segments out of remote memory
7852 based on the ELF file header at EHDR_VMA and the ELF program headers it
7853 points to. If not null, *LOADBASEP is filled in with the difference
7854 between the VMAs from which the segments were read, and the VMAs the
7855 file headers (and hence BFD's idea of each section's VMA) put them at.
7857 The function TARGET_READ_MEMORY is called to copy LEN bytes from the
7858 remote memory at target address VMA into the local buffer at MYADDR; it
7859 should return zero on success or an `errno' code on failure. TEMPL must
7860 be a BFD for an ELF target with the word size and byte order found in
7861 the remote memory. */
7864 bfd_elf_bfd_from_remote_memory
7868 int (*target_read_memory
) (bfd_vma
, char *, int))
7870 return (*get_elf_backend_data (templ
)->elf_backend_bfd_from_remote_memory
)
7871 (templ
, ehdr_vma
, loadbasep
, target_read_memory
);
7875 _bfd_elf_get_synthetic_symtab (bfd
*abfd
,
7876 long symcount ATTRIBUTE_UNUSED
,
7877 asymbol
**syms ATTRIBUTE_UNUSED
,
7882 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
7885 const char *relplt_name
;
7886 bfd_boolean (*slurp_relocs
) (bfd
*, asection
*, asymbol
**, bfd_boolean
);
7890 Elf_Internal_Shdr
*hdr
;
7896 if ((abfd
->flags
& (DYNAMIC
| EXEC_P
)) == 0)
7899 if (dynsymcount
<= 0)
7902 if (!bed
->plt_sym_val
)
7905 relplt_name
= bed
->relplt_name
;
7906 if (relplt_name
== NULL
)
7907 relplt_name
= bed
->default_use_rela_p
? ".rela.plt" : ".rel.plt";
7908 relplt
= bfd_get_section_by_name (abfd
, relplt_name
);
7912 hdr
= &elf_section_data (relplt
)->this_hdr
;
7913 if (hdr
->sh_link
!= elf_dynsymtab (abfd
)
7914 || (hdr
->sh_type
!= SHT_REL
&& hdr
->sh_type
!= SHT_RELA
))
7917 plt
= bfd_get_section_by_name (abfd
, ".plt");
7921 slurp_relocs
= get_elf_backend_data (abfd
)->s
->slurp_reloc_table
;
7922 if (! (*slurp_relocs
) (abfd
, relplt
, dynsyms
, TRUE
))
7925 count
= relplt
->size
/ hdr
->sh_entsize
;
7926 size
= count
* sizeof (asymbol
);
7927 p
= relplt
->relocation
;
7928 for (i
= 0; i
< count
; i
++, s
++, p
++)
7929 size
+= strlen ((*p
->sym_ptr_ptr
)->name
) + sizeof ("@plt");
7931 s
= *ret
= bfd_malloc (size
);
7935 names
= (char *) (s
+ count
);
7936 p
= relplt
->relocation
;
7938 for (i
= 0; i
< count
; i
++, s
++, p
++)
7943 addr
= bed
->plt_sym_val (i
, plt
, p
);
7944 if (addr
== (bfd_vma
) -1)
7947 *s
= **p
->sym_ptr_ptr
;
7949 s
->value
= addr
- plt
->vma
;
7951 len
= strlen ((*p
->sym_ptr_ptr
)->name
);
7952 memcpy (names
, (*p
->sym_ptr_ptr
)->name
, len
);
7954 memcpy (names
, "@plt", sizeof ("@plt"));
7955 names
+= sizeof ("@plt");
7962 /* Sort symbol by binding and section. We want to put definitions
7963 sorted by section at the beginning. */
7966 elf_sort_elf_symbol (const void *arg1
, const void *arg2
)
7968 const Elf_Internal_Sym
*s1
;
7969 const Elf_Internal_Sym
*s2
;
7972 /* Make sure that undefined symbols are at the end. */
7973 s1
= (const Elf_Internal_Sym
*) arg1
;
7974 if (s1
->st_shndx
== SHN_UNDEF
)
7976 s2
= (const Elf_Internal_Sym
*) arg2
;
7977 if (s2
->st_shndx
== SHN_UNDEF
)
7980 /* Sorted by section index. */
7981 shndx
= s1
->st_shndx
- s2
->st_shndx
;
7985 /* Sorted by binding. */
7986 return ELF_ST_BIND (s1
->st_info
) - ELF_ST_BIND (s2
->st_info
);
7991 Elf_Internal_Sym
*sym
;
7996 elf_sym_name_compare (const void *arg1
, const void *arg2
)
7998 const struct elf_symbol
*s1
= (const struct elf_symbol
*) arg1
;
7999 const struct elf_symbol
*s2
= (const struct elf_symbol
*) arg2
;
8000 return strcmp (s1
->name
, s2
->name
);
8003 /* Check if 2 sections define the same set of local and global
8007 bfd_elf_match_symbols_in_sections (asection
*sec1
, asection
*sec2
)
8010 const struct elf_backend_data
*bed1
, *bed2
;
8011 Elf_Internal_Shdr
*hdr1
, *hdr2
;
8012 bfd_size_type symcount1
, symcount2
;
8013 Elf_Internal_Sym
*isymbuf1
, *isymbuf2
;
8014 Elf_Internal_Sym
*isymstart1
= NULL
, *isymstart2
= NULL
, *isym
;
8015 Elf_Internal_Sym
*isymend
;
8016 struct elf_symbol
*symp
, *symtable1
= NULL
, *symtable2
= NULL
;
8017 bfd_size_type count1
, count2
, i
;
8024 /* If both are .gnu.linkonce sections, they have to have the same
8026 if (strncmp (sec1
->name
, ".gnu.linkonce",
8027 sizeof ".gnu.linkonce" - 1) == 0
8028 && strncmp (sec2
->name
, ".gnu.linkonce",
8029 sizeof ".gnu.linkonce" - 1) == 0)
8030 return strcmp (sec1
->name
+ sizeof ".gnu.linkonce",
8031 sec2
->name
+ sizeof ".gnu.linkonce") == 0;
8033 /* Both sections have to be in ELF. */
8034 if (bfd_get_flavour (bfd1
) != bfd_target_elf_flavour
8035 || bfd_get_flavour (bfd2
) != bfd_target_elf_flavour
)
8038 if (elf_section_type (sec1
) != elf_section_type (sec2
))
8041 if ((elf_section_flags (sec1
) & SHF_GROUP
) != 0
8042 && (elf_section_flags (sec2
) & SHF_GROUP
) != 0)
8044 /* If both are members of section groups, they have to have the
8046 if (strcmp (elf_group_name (sec1
), elf_group_name (sec2
)) != 0)
8050 shndx1
= _bfd_elf_section_from_bfd_section (bfd1
, sec1
);
8051 shndx2
= _bfd_elf_section_from_bfd_section (bfd2
, sec2
);
8052 if (shndx1
== -1 || shndx2
== -1)
8055 bed1
= get_elf_backend_data (bfd1
);
8056 bed2
= get_elf_backend_data (bfd2
);
8057 hdr1
= &elf_tdata (bfd1
)->symtab_hdr
;
8058 symcount1
= hdr1
->sh_size
/ bed1
->s
->sizeof_sym
;
8059 hdr2
= &elf_tdata (bfd2
)->symtab_hdr
;
8060 symcount2
= hdr2
->sh_size
/ bed2
->s
->sizeof_sym
;
8062 if (symcount1
== 0 || symcount2
== 0)
8065 isymbuf1
= bfd_elf_get_elf_syms (bfd1
, hdr1
, symcount1
, 0,
8067 isymbuf2
= bfd_elf_get_elf_syms (bfd2
, hdr2
, symcount2
, 0,
8071 if (isymbuf1
== NULL
|| isymbuf2
== NULL
)
8074 /* Sort symbols by binding and section. Global definitions are at
8076 qsort (isymbuf1
, symcount1
, sizeof (Elf_Internal_Sym
),
8077 elf_sort_elf_symbol
);
8078 qsort (isymbuf2
, symcount2
, sizeof (Elf_Internal_Sym
),
8079 elf_sort_elf_symbol
);
8081 /* Count definitions in the section. */
8083 for (isym
= isymbuf1
, isymend
= isym
+ symcount1
;
8084 isym
< isymend
; isym
++)
8086 if (isym
->st_shndx
== (unsigned int) shndx1
)
8093 if (count1
&& isym
->st_shndx
!= (unsigned int) shndx1
)
8098 for (isym
= isymbuf2
, isymend
= isym
+ symcount2
;
8099 isym
< isymend
; isym
++)
8101 if (isym
->st_shndx
== (unsigned int) shndx2
)
8108 if (count2
&& isym
->st_shndx
!= (unsigned int) shndx2
)
8112 if (count1
== 0 || count2
== 0 || count1
!= count2
)
8115 symtable1
= bfd_malloc (count1
* sizeof (struct elf_symbol
));
8116 symtable2
= bfd_malloc (count1
* sizeof (struct elf_symbol
));
8118 if (symtable1
== NULL
|| symtable2
== NULL
)
8122 for (isym
= isymstart1
, isymend
= isym
+ count1
;
8123 isym
< isymend
; isym
++)
8126 symp
->name
= bfd_elf_string_from_elf_section (bfd1
,
8133 for (isym
= isymstart2
, isymend
= isym
+ count1
;
8134 isym
< isymend
; isym
++)
8137 symp
->name
= bfd_elf_string_from_elf_section (bfd2
,
8143 /* Sort symbol by name. */
8144 qsort (symtable1
, count1
, sizeof (struct elf_symbol
),
8145 elf_sym_name_compare
);
8146 qsort (symtable2
, count1
, sizeof (struct elf_symbol
),
8147 elf_sym_name_compare
);
8149 for (i
= 0; i
< count1
; i
++)
8150 /* Two symbols must have the same binding, type and name. */
8151 if (symtable1
[i
].sym
->st_info
!= symtable2
[i
].sym
->st_info
8152 || symtable1
[i
].sym
->st_other
!= symtable2
[i
].sym
->st_other
8153 || strcmp (symtable1
[i
].name
, symtable2
[i
].name
) != 0)