1 /* ELF executable support for BFD.
2 Copyright 1993, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
4 This file is part of BFD, the Binary File Descriptor library.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
25 BFD support for ELF formats is being worked on.
26 Currently, the best supported back ends are for sparc and i386
27 (running svr4 or Solaris 2).
29 Documentation of the internals of the support code still needs
30 to be written. The code is changing quickly enough that we
41 static INLINE
struct elf_segment_map
*make_mapping
42 PARAMS ((bfd
*, asection
**, unsigned int, unsigned int, boolean
));
43 static boolean map_sections_to_segments
PARAMS ((bfd
*));
44 static int elf_sort_sections
PARAMS ((const PTR
, const PTR
));
45 static boolean assign_file_positions_for_segments
PARAMS ((bfd
*));
46 static boolean assign_file_positions_except_relocs
PARAMS ((bfd
*));
47 static boolean prep_headers
PARAMS ((bfd
*));
48 static boolean swap_out_syms
PARAMS ((bfd
*, struct bfd_strtab_hash
**, int));
49 static boolean copy_private_bfd_data
PARAMS ((bfd
*, bfd
*));
50 static char *elf_read
PARAMS ((bfd
*, long, unsigned int));
51 static void elf_fake_sections
PARAMS ((bfd
*, asection
*, PTR
));
52 static boolean assign_section_numbers
PARAMS ((bfd
*));
53 static INLINE
int sym_is_global
PARAMS ((bfd
*, asymbol
*));
54 static boolean elf_map_symbols
PARAMS ((bfd
*));
55 static bfd_size_type get_program_header_size
PARAMS ((bfd
*));
56 static boolean elfcore_read_notes
PARAMS ((bfd
*, bfd_vma
, bfd_vma
));
58 /* Swap version information in and out. The version information is
59 currently size independent. If that ever changes, this code will
60 need to move into elfcode.h. */
62 /* Swap in a Verdef structure. */
65 _bfd_elf_swap_verdef_in (abfd
, src
, dst
)
67 const Elf_External_Verdef
*src
;
68 Elf_Internal_Verdef
*dst
;
70 dst
->vd_version
= bfd_h_get_16 (abfd
, src
->vd_version
);
71 dst
->vd_flags
= bfd_h_get_16 (abfd
, src
->vd_flags
);
72 dst
->vd_ndx
= bfd_h_get_16 (abfd
, src
->vd_ndx
);
73 dst
->vd_cnt
= bfd_h_get_16 (abfd
, src
->vd_cnt
);
74 dst
->vd_hash
= bfd_h_get_32 (abfd
, src
->vd_hash
);
75 dst
->vd_aux
= bfd_h_get_32 (abfd
, src
->vd_aux
);
76 dst
->vd_next
= bfd_h_get_32 (abfd
, src
->vd_next
);
79 /* Swap out a Verdef structure. */
82 _bfd_elf_swap_verdef_out (abfd
, src
, dst
)
84 const Elf_Internal_Verdef
*src
;
85 Elf_External_Verdef
*dst
;
87 bfd_h_put_16 (abfd
, src
->vd_version
, dst
->vd_version
);
88 bfd_h_put_16 (abfd
, src
->vd_flags
, dst
->vd_flags
);
89 bfd_h_put_16 (abfd
, src
->vd_ndx
, dst
->vd_ndx
);
90 bfd_h_put_16 (abfd
, src
->vd_cnt
, dst
->vd_cnt
);
91 bfd_h_put_32 (abfd
, src
->vd_hash
, dst
->vd_hash
);
92 bfd_h_put_32 (abfd
, src
->vd_aux
, dst
->vd_aux
);
93 bfd_h_put_32 (abfd
, src
->vd_next
, dst
->vd_next
);
96 /* Swap in a Verdaux structure. */
99 _bfd_elf_swap_verdaux_in (abfd
, src
, dst
)
101 const Elf_External_Verdaux
*src
;
102 Elf_Internal_Verdaux
*dst
;
104 dst
->vda_name
= bfd_h_get_32 (abfd
, src
->vda_name
);
105 dst
->vda_next
= bfd_h_get_32 (abfd
, src
->vda_next
);
108 /* Swap out a Verdaux structure. */
111 _bfd_elf_swap_verdaux_out (abfd
, src
, dst
)
113 const Elf_Internal_Verdaux
*src
;
114 Elf_External_Verdaux
*dst
;
116 bfd_h_put_32 (abfd
, src
->vda_name
, dst
->vda_name
);
117 bfd_h_put_32 (abfd
, src
->vda_next
, dst
->vda_next
);
120 /* Swap in a Verneed structure. */
123 _bfd_elf_swap_verneed_in (abfd
, src
, dst
)
125 const Elf_External_Verneed
*src
;
126 Elf_Internal_Verneed
*dst
;
128 dst
->vn_version
= bfd_h_get_16 (abfd
, src
->vn_version
);
129 dst
->vn_cnt
= bfd_h_get_16 (abfd
, src
->vn_cnt
);
130 dst
->vn_file
= bfd_h_get_32 (abfd
, src
->vn_file
);
131 dst
->vn_aux
= bfd_h_get_32 (abfd
, src
->vn_aux
);
132 dst
->vn_next
= bfd_h_get_32 (abfd
, src
->vn_next
);
135 /* Swap out a Verneed structure. */
138 _bfd_elf_swap_verneed_out (abfd
, src
, dst
)
140 const Elf_Internal_Verneed
*src
;
141 Elf_External_Verneed
*dst
;
143 bfd_h_put_16 (abfd
, src
->vn_version
, dst
->vn_version
);
144 bfd_h_put_16 (abfd
, src
->vn_cnt
, dst
->vn_cnt
);
145 bfd_h_put_32 (abfd
, src
->vn_file
, dst
->vn_file
);
146 bfd_h_put_32 (abfd
, src
->vn_aux
, dst
->vn_aux
);
147 bfd_h_put_32 (abfd
, src
->vn_next
, dst
->vn_next
);
150 /* Swap in a Vernaux structure. */
153 _bfd_elf_swap_vernaux_in (abfd
, src
, dst
)
155 const Elf_External_Vernaux
*src
;
156 Elf_Internal_Vernaux
*dst
;
158 dst
->vna_hash
= bfd_h_get_32 (abfd
, src
->vna_hash
);
159 dst
->vna_flags
= bfd_h_get_16 (abfd
, src
->vna_flags
);
160 dst
->vna_other
= bfd_h_get_16 (abfd
, src
->vna_other
);
161 dst
->vna_name
= bfd_h_get_32 (abfd
, src
->vna_name
);
162 dst
->vna_next
= bfd_h_get_32 (abfd
, src
->vna_next
);
165 /* Swap out a Vernaux structure. */
168 _bfd_elf_swap_vernaux_out (abfd
, src
, dst
)
170 const Elf_Internal_Vernaux
*src
;
171 Elf_External_Vernaux
*dst
;
173 bfd_h_put_32 (abfd
, src
->vna_hash
, dst
->vna_hash
);
174 bfd_h_put_16 (abfd
, src
->vna_flags
, dst
->vna_flags
);
175 bfd_h_put_16 (abfd
, src
->vna_other
, dst
->vna_other
);
176 bfd_h_put_32 (abfd
, src
->vna_name
, dst
->vna_name
);
177 bfd_h_put_32 (abfd
, src
->vna_next
, dst
->vna_next
);
180 /* Swap in a Versym structure. */
183 _bfd_elf_swap_versym_in (abfd
, src
, dst
)
185 const Elf_External_Versym
*src
;
186 Elf_Internal_Versym
*dst
;
188 dst
->vs_vers
= bfd_h_get_16 (abfd
, src
->vs_vers
);
191 /* Swap out a Versym structure. */
194 _bfd_elf_swap_versym_out (abfd
, src
, dst
)
196 const Elf_Internal_Versym
*src
;
197 Elf_External_Versym
*dst
;
199 bfd_h_put_16 (abfd
, src
->vs_vers
, dst
->vs_vers
);
202 /* Standard ELF hash function. Do not change this function; you will
203 cause invalid hash tables to be generated. */
206 bfd_elf_hash (namearg
)
209 const unsigned char *name
= (const unsigned char *) namearg
;
214 while ((ch
= *name
++) != '\0')
217 if ((g
= (h
& 0xf0000000)) != 0)
220 /* The ELF ABI says `h &= ~g', but this is equivalent in
221 this case and on some machines one insn instead of two. */
228 /* Read a specified number of bytes at a specified offset in an ELF
229 file, into a newly allocated buffer, and return a pointer to the
233 elf_read (abfd
, offset
, size
)
240 if ((buf
= bfd_alloc (abfd
, size
)) == NULL
)
242 if (bfd_seek (abfd
, offset
, SEEK_SET
) == -1)
244 if (bfd_read ((PTR
) buf
, size
, 1, abfd
) != size
)
246 if (bfd_get_error () != bfd_error_system_call
)
247 bfd_set_error (bfd_error_file_truncated
);
254 bfd_elf_mkobject (abfd
)
257 /* this just does initialization */
258 /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
259 elf_tdata (abfd
) = (struct elf_obj_tdata
*)
260 bfd_zalloc (abfd
, sizeof (struct elf_obj_tdata
));
261 if (elf_tdata (abfd
) == 0)
263 /* since everything is done at close time, do we need any
270 bfd_elf_mkcorefile (abfd
)
273 /* I think this can be done just like an object file. */
274 return bfd_elf_mkobject (abfd
);
278 bfd_elf_get_str_section (abfd
, shindex
)
280 unsigned int shindex
;
282 Elf_Internal_Shdr
**i_shdrp
;
283 char *shstrtab
= NULL
;
285 unsigned int shstrtabsize
;
287 i_shdrp
= elf_elfsections (abfd
);
288 if (i_shdrp
== 0 || i_shdrp
[shindex
] == 0)
291 shstrtab
= (char *) i_shdrp
[shindex
]->contents
;
292 if (shstrtab
== NULL
)
294 /* No cached one, attempt to read, and cache what we read. */
295 offset
= i_shdrp
[shindex
]->sh_offset
;
296 shstrtabsize
= i_shdrp
[shindex
]->sh_size
;
297 shstrtab
= elf_read (abfd
, offset
, shstrtabsize
);
298 i_shdrp
[shindex
]->contents
= (PTR
) shstrtab
;
304 bfd_elf_string_from_elf_section (abfd
, shindex
, strindex
)
306 unsigned int shindex
;
307 unsigned int strindex
;
309 Elf_Internal_Shdr
*hdr
;
314 hdr
= elf_elfsections (abfd
)[shindex
];
316 if (hdr
->contents
== NULL
317 && bfd_elf_get_str_section (abfd
, shindex
) == NULL
)
320 if (strindex
>= hdr
->sh_size
)
322 (*_bfd_error_handler
)
323 (_("%s: invalid string offset %u >= %lu for section `%s'"),
324 bfd_get_filename (abfd
), strindex
, (unsigned long) hdr
->sh_size
,
325 ((shindex
== elf_elfheader(abfd
)->e_shstrndx
326 && strindex
== hdr
->sh_name
)
328 : elf_string_from_elf_strtab (abfd
, hdr
->sh_name
)));
332 return ((char *) hdr
->contents
) + strindex
;
335 /* Make a BFD section from an ELF section. We store a pointer to the
336 BFD section in the bfd_section field of the header. */
339 _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
)
341 Elf_Internal_Shdr
*hdr
;
347 if (hdr
->bfd_section
!= NULL
)
349 BFD_ASSERT (strcmp (name
,
350 bfd_get_section_name (abfd
, hdr
->bfd_section
)) == 0);
354 newsect
= bfd_make_section_anyway (abfd
, name
);
358 newsect
->filepos
= hdr
->sh_offset
;
360 if (! bfd_set_section_vma (abfd
, newsect
, hdr
->sh_addr
)
361 || ! bfd_set_section_size (abfd
, newsect
, hdr
->sh_size
)
362 || ! bfd_set_section_alignment (abfd
, newsect
,
363 bfd_log2 (hdr
->sh_addralign
)))
366 flags
= SEC_NO_FLAGS
;
367 if (hdr
->sh_type
!= SHT_NOBITS
)
368 flags
|= SEC_HAS_CONTENTS
;
369 if ((hdr
->sh_flags
& SHF_ALLOC
) != 0)
372 if (hdr
->sh_type
!= SHT_NOBITS
)
375 if ((hdr
->sh_flags
& SHF_WRITE
) == 0)
376 flags
|= SEC_READONLY
;
377 if ((hdr
->sh_flags
& SHF_EXECINSTR
) != 0)
379 else if ((flags
& SEC_LOAD
) != 0)
382 /* The debugging sections appear to be recognized only by name, not
384 if (strncmp (name
, ".debug", sizeof ".debug" - 1) == 0
385 || strncmp (name
, ".line", sizeof ".line" - 1) == 0
386 || strncmp (name
, ".stab", sizeof ".stab" - 1) == 0)
387 flags
|= SEC_DEBUGGING
;
389 /* As a GNU extension, if the name begins with .gnu.linkonce, we
390 only link a single copy of the section. This is used to support
391 g++. g++ will emit each template expansion in its own section.
392 The symbols will be defined as weak, so that multiple definitions
393 are permitted. The GNU linker extension is to actually discard
394 all but one of the sections. */
395 if (strncmp (name
, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0)
396 flags
|= SEC_LINK_ONCE
| SEC_LINK_DUPLICATES_DISCARD
;
398 if (! bfd_set_section_flags (abfd
, newsect
, flags
))
401 if ((flags
& SEC_ALLOC
) != 0)
403 Elf_Internal_Phdr
*phdr
;
406 /* Look through the phdrs to see if we need to adjust the lma.
407 If all the p_paddr fields are zero, we ignore them, since
408 some ELF linkers produce such output. */
409 phdr
= elf_tdata (abfd
)->phdr
;
410 for (i
= 0; i
< elf_elfheader (abfd
)->e_phnum
; i
++, phdr
++)
412 if (phdr
->p_paddr
!= 0)
415 if (i
< elf_elfheader (abfd
)->e_phnum
)
417 phdr
= elf_tdata (abfd
)->phdr
;
418 for (i
= 0; i
< elf_elfheader (abfd
)->e_phnum
; i
++, phdr
++)
420 if (phdr
->p_type
== PT_LOAD
421 && phdr
->p_vaddr
!= phdr
->p_paddr
422 && phdr
->p_vaddr
<= hdr
->sh_addr
423 && (phdr
->p_vaddr
+ phdr
->p_memsz
424 >= hdr
->sh_addr
+ hdr
->sh_size
)
425 && ((flags
& SEC_LOAD
) == 0
426 || (phdr
->p_offset
<= (bfd_vma
) hdr
->sh_offset
427 && (phdr
->p_offset
+ phdr
->p_filesz
428 >= hdr
->sh_offset
+ hdr
->sh_size
))))
430 newsect
->lma
+= phdr
->p_paddr
- phdr
->p_vaddr
;
437 hdr
->bfd_section
= newsect
;
438 elf_section_data (newsect
)->this_hdr
= *hdr
;
448 struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
451 Helper functions for GDB to locate the string tables.
452 Since BFD hides string tables from callers, GDB needs to use an
453 internal hook to find them. Sun's .stabstr, in particular,
454 isn't even pointed to by the .stab section, so ordinary
455 mechanisms wouldn't work to find it, even if we had some.
458 struct elf_internal_shdr
*
459 bfd_elf_find_section (abfd
, name
)
463 Elf_Internal_Shdr
**i_shdrp
;
468 i_shdrp
= elf_elfsections (abfd
);
471 shstrtab
= bfd_elf_get_str_section
472 (abfd
, elf_elfheader (abfd
)->e_shstrndx
);
473 if (shstrtab
!= NULL
)
475 max
= elf_elfheader (abfd
)->e_shnum
;
476 for (i
= 1; i
< max
; i
++)
477 if (!strcmp (&shstrtab
[i_shdrp
[i
]->sh_name
], name
))
484 const char *const bfd_elf_section_type_names
[] = {
485 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
486 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
487 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
490 /* ELF relocs are against symbols. If we are producing relocateable
491 output, and the reloc is against an external symbol, and nothing
492 has given us any additional addend, the resulting reloc will also
493 be against the same symbol. In such a case, we don't want to
494 change anything about the way the reloc is handled, since it will
495 all be done at final link time. Rather than put special case code
496 into bfd_perform_relocation, all the reloc types use this howto
497 function. It just short circuits the reloc if producing
498 relocateable output against an external symbol. */
501 bfd_reloc_status_type
502 bfd_elf_generic_reloc (abfd
,
509 bfd
*abfd ATTRIBUTE_UNUSED
;
510 arelent
*reloc_entry
;
512 PTR data ATTRIBUTE_UNUSED
;
513 asection
*input_section
;
515 char **error_message ATTRIBUTE_UNUSED
;
517 if (output_bfd
!= (bfd
*) NULL
518 && (symbol
->flags
& BSF_SECTION_SYM
) == 0
519 && (! reloc_entry
->howto
->partial_inplace
520 || reloc_entry
->addend
== 0))
522 reloc_entry
->address
+= input_section
->output_offset
;
526 return bfd_reloc_continue
;
529 /* Print out the program headers. */
532 _bfd_elf_print_private_bfd_data (abfd
, farg
)
536 FILE *f
= (FILE *) farg
;
537 Elf_Internal_Phdr
*p
;
539 bfd_byte
*dynbuf
= NULL
;
541 p
= elf_tdata (abfd
)->phdr
;
546 fprintf (f
, _("\nProgram Header:\n"));
547 c
= elf_elfheader (abfd
)->e_phnum
;
548 for (i
= 0; i
< c
; i
++, p
++)
555 case PT_NULL
: s
= "NULL"; break;
556 case PT_LOAD
: s
= "LOAD"; break;
557 case PT_DYNAMIC
: s
= "DYNAMIC"; break;
558 case PT_INTERP
: s
= "INTERP"; break;
559 case PT_NOTE
: s
= "NOTE"; break;
560 case PT_SHLIB
: s
= "SHLIB"; break;
561 case PT_PHDR
: s
= "PHDR"; break;
562 default: sprintf (buf
, "0x%lx", p
->p_type
); s
= buf
; break;
564 fprintf (f
, "%8s off 0x", s
);
565 fprintf_vma (f
, p
->p_offset
);
566 fprintf (f
, " vaddr 0x");
567 fprintf_vma (f
, p
->p_vaddr
);
568 fprintf (f
, " paddr 0x");
569 fprintf_vma (f
, p
->p_paddr
);
570 fprintf (f
, " align 2**%u\n", bfd_log2 (p
->p_align
));
571 fprintf (f
, " filesz 0x");
572 fprintf_vma (f
, p
->p_filesz
);
573 fprintf (f
, " memsz 0x");
574 fprintf_vma (f
, p
->p_memsz
);
575 fprintf (f
, " flags %c%c%c",
576 (p
->p_flags
& PF_R
) != 0 ? 'r' : '-',
577 (p
->p_flags
& PF_W
) != 0 ? 'w' : '-',
578 (p
->p_flags
& PF_X
) != 0 ? 'x' : '-');
579 if ((p
->p_flags
&~ (PF_R
| PF_W
| PF_X
)) != 0)
580 fprintf (f
, " %lx", p
->p_flags
&~ (PF_R
| PF_W
| PF_X
));
585 s
= bfd_get_section_by_name (abfd
, ".dynamic");
590 bfd_byte
*extdyn
, *extdynend
;
592 void (*swap_dyn_in
) PARAMS ((bfd
*, const PTR
, Elf_Internal_Dyn
*));
594 fprintf (f
, _("\nDynamic Section:\n"));
596 dynbuf
= (bfd_byte
*) bfd_malloc (s
->_raw_size
);
599 if (! bfd_get_section_contents (abfd
, s
, (PTR
) dynbuf
, (file_ptr
) 0,
603 elfsec
= _bfd_elf_section_from_bfd_section (abfd
, s
);
606 link
= elf_elfsections (abfd
)[elfsec
]->sh_link
;
608 extdynsize
= get_elf_backend_data (abfd
)->s
->sizeof_dyn
;
609 swap_dyn_in
= get_elf_backend_data (abfd
)->s
->swap_dyn_in
;
612 extdynend
= extdyn
+ s
->_raw_size
;
613 for (; extdyn
< extdynend
; extdyn
+= extdynsize
)
615 Elf_Internal_Dyn dyn
;
620 (*swap_dyn_in
) (abfd
, (PTR
) extdyn
, &dyn
);
622 if (dyn
.d_tag
== DT_NULL
)
629 sprintf (ab
, "0x%lx", (unsigned long) dyn
.d_tag
);
633 case DT_NEEDED
: name
= "NEEDED"; stringp
= true; break;
634 case DT_PLTRELSZ
: name
= "PLTRELSZ"; break;
635 case DT_PLTGOT
: name
= "PLTGOT"; break;
636 case DT_HASH
: name
= "HASH"; break;
637 case DT_STRTAB
: name
= "STRTAB"; break;
638 case DT_SYMTAB
: name
= "SYMTAB"; break;
639 case DT_RELA
: name
= "RELA"; break;
640 case DT_RELASZ
: name
= "RELASZ"; break;
641 case DT_RELAENT
: name
= "RELAENT"; break;
642 case DT_STRSZ
: name
= "STRSZ"; break;
643 case DT_SYMENT
: name
= "SYMENT"; break;
644 case DT_INIT
: name
= "INIT"; break;
645 case DT_FINI
: name
= "FINI"; break;
646 case DT_SONAME
: name
= "SONAME"; stringp
= true; break;
647 case DT_RPATH
: name
= "RPATH"; stringp
= true; break;
648 case DT_SYMBOLIC
: name
= "SYMBOLIC"; break;
649 case DT_REL
: name
= "REL"; break;
650 case DT_RELSZ
: name
= "RELSZ"; break;
651 case DT_RELENT
: name
= "RELENT"; break;
652 case DT_PLTREL
: name
= "PLTREL"; break;
653 case DT_DEBUG
: name
= "DEBUG"; break;
654 case DT_TEXTREL
: name
= "TEXTREL"; break;
655 case DT_JMPREL
: name
= "JMPREL"; break;
656 case DT_AUXILIARY
: name
= "AUXILIARY"; stringp
= true; break;
657 case DT_FILTER
: name
= "FILTER"; stringp
= true; break;
658 case DT_VERSYM
: name
= "VERSYM"; break;
659 case DT_VERDEF
: name
= "VERDEF"; break;
660 case DT_VERDEFNUM
: name
= "VERDEFNUM"; break;
661 case DT_VERNEED
: name
= "VERNEED"; break;
662 case DT_VERNEEDNUM
: name
= "VERNEEDNUM"; break;
665 fprintf (f
, " %-11s ", name
);
667 fprintf (f
, "0x%lx", (unsigned long) dyn
.d_un
.d_val
);
672 string
= bfd_elf_string_from_elf_section (abfd
, link
,
676 fprintf (f
, "%s", string
);
685 if ((elf_dynverdef (abfd
) != 0 && elf_tdata (abfd
)->verdef
== NULL
)
686 || (elf_dynverref (abfd
) != 0 && elf_tdata (abfd
)->verref
== NULL
))
688 if (! _bfd_elf_slurp_version_tables (abfd
))
692 if (elf_dynverdef (abfd
) != 0)
694 Elf_Internal_Verdef
*t
;
696 fprintf (f
, _("\nVersion definitions:\n"));
697 for (t
= elf_tdata (abfd
)->verdef
; t
!= NULL
; t
= t
->vd_nextdef
)
699 fprintf (f
, "%d 0x%2.2x 0x%8.8lx %s\n", t
->vd_ndx
,
700 t
->vd_flags
, t
->vd_hash
, t
->vd_nodename
);
701 if (t
->vd_auxptr
->vda_nextptr
!= NULL
)
703 Elf_Internal_Verdaux
*a
;
706 for (a
= t
->vd_auxptr
->vda_nextptr
;
709 fprintf (f
, "%s ", a
->vda_nodename
);
715 if (elf_dynverref (abfd
) != 0)
717 Elf_Internal_Verneed
*t
;
719 fprintf (f
, _("\nVersion References:\n"));
720 for (t
= elf_tdata (abfd
)->verref
; t
!= NULL
; t
= t
->vn_nextref
)
722 Elf_Internal_Vernaux
*a
;
724 fprintf (f
, _(" required from %s:\n"), t
->vn_filename
);
725 for (a
= t
->vn_auxptr
; a
!= NULL
; a
= a
->vna_nextptr
)
726 fprintf (f
, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a
->vna_hash
,
727 a
->vna_flags
, a
->vna_other
, a
->vna_nodename
);
739 /* Display ELF-specific fields of a symbol. */
742 bfd_elf_print_symbol (abfd
, filep
, symbol
, how
)
746 bfd_print_symbol_type how
;
748 FILE *file
= (FILE *) filep
;
751 case bfd_print_symbol_name
:
752 fprintf (file
, "%s", symbol
->name
);
754 case bfd_print_symbol_more
:
755 fprintf (file
, "elf ");
756 fprintf_vma (file
, symbol
->value
);
757 fprintf (file
, " %lx", (long) symbol
->flags
);
759 case bfd_print_symbol_all
:
761 CONST
char *section_name
;
762 CONST
char *name
= NULL
;
763 struct elf_backend_data
*bed
;
764 unsigned char st_other
;
766 section_name
= symbol
->section
? symbol
->section
->name
: "(*none*)";
768 bed
= get_elf_backend_data (abfd
);
769 if (bed
->elf_backend_print_symbol_all
)
770 name
= (*bed
->elf_backend_print_symbol_all
) (abfd
, filep
, symbol
);
775 bfd_print_symbol_vandf ((PTR
) file
, symbol
);
778 fprintf (file
, " %s\t", section_name
);
779 /* Print the "other" value for a symbol. For common symbols,
780 we've already printed the size; now print the alignment.
781 For other symbols, we have no specified alignment, and
782 we've printed the address; now print the size. */
784 (bfd_is_com_section (symbol
->section
)
785 ? ((elf_symbol_type
*) symbol
)->internal_elf_sym
.st_value
786 : ((elf_symbol_type
*) symbol
)->internal_elf_sym
.st_size
));
788 /* If we have version information, print it. */
789 if (elf_tdata (abfd
)->dynversym_section
!= 0
790 && (elf_tdata (abfd
)->dynverdef_section
!= 0
791 || elf_tdata (abfd
)->dynverref_section
!= 0))
794 const char *version_string
;
796 vernum
= ((elf_symbol_type
*) symbol
)->version
& VERSYM_VERSION
;
800 else if (vernum
== 1)
801 version_string
= "Base";
802 else if (vernum
<= elf_tdata (abfd
)->cverdefs
)
804 elf_tdata (abfd
)->verdef
[vernum
- 1].vd_nodename
;
807 Elf_Internal_Verneed
*t
;
810 for (t
= elf_tdata (abfd
)->verref
;
814 Elf_Internal_Vernaux
*a
;
816 for (a
= t
->vn_auxptr
; a
!= NULL
; a
= a
->vna_nextptr
)
818 if (a
->vna_other
== vernum
)
820 version_string
= a
->vna_nodename
;
827 if ((((elf_symbol_type
*) symbol
)->version
& VERSYM_HIDDEN
) == 0)
828 fprintf (file
, " %-11s", version_string
);
833 fprintf (file
, " (%s)", version_string
);
834 for (i
= 10 - strlen (version_string
); i
> 0; --i
)
839 /* If the st_other field is not zero, print it. */
840 st_other
= ((elf_symbol_type
*) symbol
)->internal_elf_sym
.st_other
;
845 case STV_INTERNAL
: fprintf (file
, " .internal"); break;
846 case STV_HIDDEN
: fprintf (file
, " .hidden"); break;
847 case STV_PROTECTED
: fprintf (file
, " .protected"); break;
849 /* Some other non-defined flags are also present, so print
851 fprintf (file
, " 0x%02x", (unsigned int) st_other
);
854 fprintf (file
, " %s", name
);
860 /* Create an entry in an ELF linker hash table. */
862 struct bfd_hash_entry
*
863 _bfd_elf_link_hash_newfunc (entry
, table
, string
)
864 struct bfd_hash_entry
*entry
;
865 struct bfd_hash_table
*table
;
868 struct elf_link_hash_entry
*ret
= (struct elf_link_hash_entry
*) entry
;
870 /* Allocate the structure if it has not already been allocated by a
872 if (ret
== (struct elf_link_hash_entry
*) NULL
)
873 ret
= ((struct elf_link_hash_entry
*)
874 bfd_hash_allocate (table
, sizeof (struct elf_link_hash_entry
)));
875 if (ret
== (struct elf_link_hash_entry
*) NULL
)
876 return (struct bfd_hash_entry
*) ret
;
878 /* Call the allocation method of the superclass. */
879 ret
= ((struct elf_link_hash_entry
*)
880 _bfd_link_hash_newfunc ((struct bfd_hash_entry
*) ret
,
882 if (ret
!= (struct elf_link_hash_entry
*) NULL
)
884 /* Set local fields. */
888 ret
->dynstr_index
= 0;
890 ret
->got
.offset
= (bfd_vma
) -1;
891 ret
->plt
.offset
= (bfd_vma
) -1;
892 ret
->linker_section_pointer
= (elf_linker_section_pointers_t
*)0;
893 ret
->verinfo
.verdef
= NULL
;
894 ret
->vtable_entries_used
= NULL
;
895 ret
->vtable_entries_size
= 0;
896 ret
->vtable_parent
= NULL
;
897 ret
->type
= STT_NOTYPE
;
899 /* Assume that we have been called by a non-ELF symbol reader.
900 This flag is then reset by the code which reads an ELF input
901 file. This ensures that a symbol created by a non-ELF symbol
902 reader will have the flag set correctly. */
903 ret
->elf_link_hash_flags
= ELF_LINK_NON_ELF
;
906 return (struct bfd_hash_entry
*) ret
;
909 /* Copy data from an indirect symbol to its direct symbol, hiding the
910 old indirect symbol. */
913 _bfd_elf_link_hash_copy_indirect (dir
, ind
)
914 struct elf_link_hash_entry
*dir
, *ind
;
916 /* Copy down any references that we may have already seen to the
917 symbol which just became indirect. */
919 dir
->elf_link_hash_flags
|=
920 (ind
->elf_link_hash_flags
921 & (ELF_LINK_HASH_REF_DYNAMIC
922 | ELF_LINK_HASH_REF_REGULAR
923 | ELF_LINK_HASH_REF_REGULAR_NONWEAK
924 | ELF_LINK_NON_GOT_REF
));
926 /* Copy over the global and procedure linkage table offset entries.
927 These may have been already set up by a check_relocs routine. */
928 if (dir
->got
.offset
== (bfd_vma
) -1)
930 dir
->got
.offset
= ind
->got
.offset
;
931 ind
->got
.offset
= (bfd_vma
) -1;
933 BFD_ASSERT (ind
->got
.offset
== (bfd_vma
) -1);
935 if (dir
->plt
.offset
== (bfd_vma
) -1)
937 dir
->plt
.offset
= ind
->plt
.offset
;
938 ind
->plt
.offset
= (bfd_vma
) -1;
940 BFD_ASSERT (ind
->plt
.offset
== (bfd_vma
) -1);
942 if (dir
->dynindx
== -1)
944 dir
->dynindx
= ind
->dynindx
;
945 dir
->dynstr_index
= ind
->dynstr_index
;
947 ind
->dynstr_index
= 0;
949 BFD_ASSERT (ind
->dynindx
== -1);
953 _bfd_elf_link_hash_hide_symbol(h
)
954 struct elf_link_hash_entry
*h
;
956 h
->elf_link_hash_flags
&= ~ELF_LINK_HASH_NEEDS_PLT
;
958 h
->plt
.offset
= (bfd_vma
) -1;
961 /* Initialize an ELF linker hash table. */
964 _bfd_elf_link_hash_table_init (table
, abfd
, newfunc
)
965 struct elf_link_hash_table
*table
;
967 struct bfd_hash_entry
*(*newfunc
) PARAMS ((struct bfd_hash_entry
*,
968 struct bfd_hash_table
*,
971 table
->dynamic_sections_created
= false;
972 table
->dynobj
= NULL
;
973 /* The first dynamic symbol is a dummy. */
974 table
->dynsymcount
= 1;
975 table
->dynstr
= NULL
;
976 table
->bucketcount
= 0;
977 table
->needed
= NULL
;
979 table
->stab_info
= NULL
;
980 table
->dynlocal
= NULL
;
981 return _bfd_link_hash_table_init (&table
->root
, abfd
, newfunc
);
984 /* Create an ELF linker hash table. */
986 struct bfd_link_hash_table
*
987 _bfd_elf_link_hash_table_create (abfd
)
990 struct elf_link_hash_table
*ret
;
992 ret
= ((struct elf_link_hash_table
*)
993 bfd_alloc (abfd
, sizeof (struct elf_link_hash_table
)));
994 if (ret
== (struct elf_link_hash_table
*) NULL
)
997 if (! _bfd_elf_link_hash_table_init (ret
, abfd
, _bfd_elf_link_hash_newfunc
))
999 bfd_release (abfd
, ret
);
1006 /* This is a hook for the ELF emulation code in the generic linker to
1007 tell the backend linker what file name to use for the DT_NEEDED
1008 entry for a dynamic object. The generic linker passes name as an
1009 empty string to indicate that no DT_NEEDED entry should be made. */
1012 bfd_elf_set_dt_needed_name (abfd
, name
)
1016 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
1017 && bfd_get_format (abfd
) == bfd_object
)
1018 elf_dt_name (abfd
) = name
;
1021 /* Get the list of DT_NEEDED entries for a link. This is a hook for
1022 the linker ELF emulation code. */
1024 struct bfd_link_needed_list
*
1025 bfd_elf_get_needed_list (abfd
, info
)
1026 bfd
*abfd ATTRIBUTE_UNUSED
;
1027 struct bfd_link_info
*info
;
1029 if (info
->hash
->creator
->flavour
!= bfd_target_elf_flavour
)
1031 return elf_hash_table (info
)->needed
;
1034 /* Get the name actually used for a dynamic object for a link. This
1035 is the SONAME entry if there is one. Otherwise, it is the string
1036 passed to bfd_elf_set_dt_needed_name, or it is the filename. */
1039 bfd_elf_get_dt_soname (abfd
)
1042 if (bfd_get_flavour (abfd
) == bfd_target_elf_flavour
1043 && bfd_get_format (abfd
) == bfd_object
)
1044 return elf_dt_name (abfd
);
1048 /* Get the list of DT_NEEDED entries from a BFD. This is a hook for
1049 the ELF linker emulation code. */
1052 bfd_elf_get_bfd_needed_list (abfd
, pneeded
)
1054 struct bfd_link_needed_list
**pneeded
;
1057 bfd_byte
*dynbuf
= NULL
;
1060 bfd_byte
*extdyn
, *extdynend
;
1062 void (*swap_dyn_in
) PARAMS ((bfd
*, const PTR
, Elf_Internal_Dyn
*));
1066 if (bfd_get_flavour (abfd
) != bfd_target_elf_flavour
1067 || bfd_get_format (abfd
) != bfd_object
)
1070 s
= bfd_get_section_by_name (abfd
, ".dynamic");
1071 if (s
== NULL
|| s
->_raw_size
== 0)
1074 dynbuf
= (bfd_byte
*) bfd_malloc (s
->_raw_size
);
1078 if (! bfd_get_section_contents (abfd
, s
, (PTR
) dynbuf
, (file_ptr
) 0,
1082 elfsec
= _bfd_elf_section_from_bfd_section (abfd
, s
);
1086 link
= elf_elfsections (abfd
)[elfsec
]->sh_link
;
1088 extdynsize
= get_elf_backend_data (abfd
)->s
->sizeof_dyn
;
1089 swap_dyn_in
= get_elf_backend_data (abfd
)->s
->swap_dyn_in
;
1092 extdynend
= extdyn
+ s
->_raw_size
;
1093 for (; extdyn
< extdynend
; extdyn
+= extdynsize
)
1095 Elf_Internal_Dyn dyn
;
1097 (*swap_dyn_in
) (abfd
, (PTR
) extdyn
, &dyn
);
1099 if (dyn
.d_tag
== DT_NULL
)
1102 if (dyn
.d_tag
== DT_NEEDED
)
1105 struct bfd_link_needed_list
*l
;
1107 string
= bfd_elf_string_from_elf_section (abfd
, link
,
1112 l
= (struct bfd_link_needed_list
*) bfd_alloc (abfd
, sizeof *l
);
1133 /* Allocate an ELF string table--force the first byte to be zero. */
1135 struct bfd_strtab_hash
*
1136 _bfd_elf_stringtab_init ()
1138 struct bfd_strtab_hash
*ret
;
1140 ret
= _bfd_stringtab_init ();
1145 loc
= _bfd_stringtab_add (ret
, "", true, false);
1146 BFD_ASSERT (loc
== 0 || loc
== (bfd_size_type
) -1);
1147 if (loc
== (bfd_size_type
) -1)
1149 _bfd_stringtab_free (ret
);
1156 /* ELF .o/exec file reading */
1158 /* Create a new bfd section from an ELF section header. */
1161 bfd_section_from_shdr (abfd
, shindex
)
1163 unsigned int shindex
;
1165 Elf_Internal_Shdr
*hdr
= elf_elfsections (abfd
)[shindex
];
1166 Elf_Internal_Ehdr
*ehdr
= elf_elfheader (abfd
);
1167 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
1170 name
= elf_string_from_elf_strtab (abfd
, hdr
->sh_name
);
1172 switch (hdr
->sh_type
)
1175 /* Inactive section. Throw it away. */
1178 case SHT_PROGBITS
: /* Normal section with contents. */
1179 case SHT_DYNAMIC
: /* Dynamic linking information. */
1180 case SHT_NOBITS
: /* .bss section. */
1181 case SHT_HASH
: /* .hash section. */
1182 case SHT_NOTE
: /* .note section. */
1183 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1185 case SHT_SYMTAB
: /* A symbol table */
1186 if (elf_onesymtab (abfd
) == shindex
)
1189 BFD_ASSERT (hdr
->sh_entsize
== bed
->s
->sizeof_sym
);
1190 BFD_ASSERT (elf_onesymtab (abfd
) == 0);
1191 elf_onesymtab (abfd
) = shindex
;
1192 elf_tdata (abfd
)->symtab_hdr
= *hdr
;
1193 elf_elfsections (abfd
)[shindex
] = hdr
= &elf_tdata (abfd
)->symtab_hdr
;
1194 abfd
->flags
|= HAS_SYMS
;
1196 /* Sometimes a shared object will map in the symbol table. If
1197 SHF_ALLOC is set, and this is a shared object, then we also
1198 treat this section as a BFD section. We can not base the
1199 decision purely on SHF_ALLOC, because that flag is sometimes
1200 set in a relocateable object file, which would confuse the
1202 if ((hdr
->sh_flags
& SHF_ALLOC
) != 0
1203 && (abfd
->flags
& DYNAMIC
) != 0
1204 && ! _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
))
1209 case SHT_DYNSYM
: /* A dynamic symbol table */
1210 if (elf_dynsymtab (abfd
) == shindex
)
1213 BFD_ASSERT (hdr
->sh_entsize
== bed
->s
->sizeof_sym
);
1214 BFD_ASSERT (elf_dynsymtab (abfd
) == 0);
1215 elf_dynsymtab (abfd
) = shindex
;
1216 elf_tdata (abfd
)->dynsymtab_hdr
= *hdr
;
1217 elf_elfsections (abfd
)[shindex
] = hdr
= &elf_tdata (abfd
)->dynsymtab_hdr
;
1218 abfd
->flags
|= HAS_SYMS
;
1220 /* Besides being a symbol table, we also treat this as a regular
1221 section, so that objcopy can handle it. */
1222 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1224 case SHT_STRTAB
: /* A string table */
1225 if (hdr
->bfd_section
!= NULL
)
1227 if (ehdr
->e_shstrndx
== shindex
)
1229 elf_tdata (abfd
)->shstrtab_hdr
= *hdr
;
1230 elf_elfsections (abfd
)[shindex
] = &elf_tdata (abfd
)->shstrtab_hdr
;
1236 for (i
= 1; i
< ehdr
->e_shnum
; i
++)
1238 Elf_Internal_Shdr
*hdr2
= elf_elfsections (abfd
)[i
];
1239 if (hdr2
->sh_link
== shindex
)
1241 if (! bfd_section_from_shdr (abfd
, i
))
1243 if (elf_onesymtab (abfd
) == i
)
1245 elf_tdata (abfd
)->strtab_hdr
= *hdr
;
1246 elf_elfsections (abfd
)[shindex
] =
1247 &elf_tdata (abfd
)->strtab_hdr
;
1250 if (elf_dynsymtab (abfd
) == i
)
1252 elf_tdata (abfd
)->dynstrtab_hdr
= *hdr
;
1253 elf_elfsections (abfd
)[shindex
] = hdr
=
1254 &elf_tdata (abfd
)->dynstrtab_hdr
;
1255 /* We also treat this as a regular section, so
1256 that objcopy can handle it. */
1259 #if 0 /* Not handling other string tables specially right now. */
1260 hdr2
= elf_elfsections (abfd
)[i
]; /* in case it moved */
1261 /* We have a strtab for some random other section. */
1262 newsect
= (asection
*) hdr2
->bfd_section
;
1265 hdr
->bfd_section
= newsect
;
1266 hdr2
= &elf_section_data (newsect
)->str_hdr
;
1268 elf_elfsections (abfd
)[shindex
] = hdr2
;
1274 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1278 /* *These* do a lot of work -- but build no sections! */
1280 asection
*target_sect
;
1281 Elf_Internal_Shdr
*hdr2
;
1283 /* Check for a bogus link to avoid crashing. */
1284 if (hdr
->sh_link
>= ehdr
->e_shnum
)
1286 ((*_bfd_error_handler
)
1287 (_("%s: invalid link %lu for reloc section %s (index %u)"),
1288 bfd_get_filename (abfd
), hdr
->sh_link
, name
, shindex
));
1289 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1292 /* For some incomprehensible reason Oracle distributes
1293 libraries for Solaris in which some of the objects have
1294 bogus sh_link fields. It would be nice if we could just
1295 reject them, but, unfortunately, some people need to use
1296 them. We scan through the section headers; if we find only
1297 one suitable symbol table, we clobber the sh_link to point
1298 to it. I hope this doesn't break anything. */
1299 if (elf_elfsections (abfd
)[hdr
->sh_link
]->sh_type
!= SHT_SYMTAB
1300 && elf_elfsections (abfd
)[hdr
->sh_link
]->sh_type
!= SHT_DYNSYM
)
1306 for (scan
= 1; scan
< ehdr
->e_shnum
; scan
++)
1308 if (elf_elfsections (abfd
)[scan
]->sh_type
== SHT_SYMTAB
1309 || elf_elfsections (abfd
)[scan
]->sh_type
== SHT_DYNSYM
)
1320 hdr
->sh_link
= found
;
1323 /* Get the symbol table. */
1324 if (elf_elfsections (abfd
)[hdr
->sh_link
]->sh_type
== SHT_SYMTAB
1325 && ! bfd_section_from_shdr (abfd
, hdr
->sh_link
))
1328 /* If this reloc section does not use the main symbol table we
1329 don't treat it as a reloc section. BFD can't adequately
1330 represent such a section, so at least for now, we don't
1331 try. We just present it as a normal section. */
1332 if (hdr
->sh_link
!= elf_onesymtab (abfd
))
1333 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1335 if (! bfd_section_from_shdr (abfd
, hdr
->sh_info
))
1337 target_sect
= bfd_section_from_elf_index (abfd
, hdr
->sh_info
);
1338 if (target_sect
== NULL
)
1341 if ((target_sect
->flags
& SEC_RELOC
) == 0
1342 || target_sect
->reloc_count
== 0)
1343 hdr2
= &elf_section_data (target_sect
)->rel_hdr
;
1346 BFD_ASSERT (elf_section_data (target_sect
)->rel_hdr2
== NULL
);
1347 hdr2
= (Elf_Internal_Shdr
*) bfd_alloc (abfd
, sizeof (*hdr2
));
1348 elf_section_data (target_sect
)->rel_hdr2
= hdr2
;
1351 elf_elfsections (abfd
)[shindex
] = hdr2
;
1352 target_sect
->reloc_count
+= hdr
->sh_size
/ hdr
->sh_entsize
;
1353 target_sect
->flags
|= SEC_RELOC
;
1354 target_sect
->relocation
= NULL
;
1355 target_sect
->rel_filepos
= hdr
->sh_offset
;
1356 /* In the section to which the relocations apply, mark whether
1357 its relocations are of the REL or RELA variety. */
1358 if (hdr
->sh_size
!= 0)
1359 elf_section_data (target_sect
)->use_rela_p
1360 = (hdr
->sh_type
== SHT_RELA
);
1361 abfd
->flags
|= HAS_RELOC
;
1366 case SHT_GNU_verdef
:
1367 elf_dynverdef (abfd
) = shindex
;
1368 elf_tdata (abfd
)->dynverdef_hdr
= *hdr
;
1369 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1372 case SHT_GNU_versym
:
1373 elf_dynversym (abfd
) = shindex
;
1374 elf_tdata (abfd
)->dynversym_hdr
= *hdr
;
1375 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1378 case SHT_GNU_verneed
:
1379 elf_dynverref (abfd
) = shindex
;
1380 elf_tdata (abfd
)->dynverref_hdr
= *hdr
;
1381 return _bfd_elf_make_section_from_shdr (abfd
, hdr
, name
);
1388 /* Check for any processor-specific section types. */
1390 if (bed
->elf_backend_section_from_shdr
)
1391 (*bed
->elf_backend_section_from_shdr
) (abfd
, hdr
, name
);
1399 /* Given an ELF section number, retrieve the corresponding BFD
1403 bfd_section_from_elf_index (abfd
, index
)
1407 BFD_ASSERT (index
> 0 && index
< SHN_LORESERVE
);
1408 if (index
>= elf_elfheader (abfd
)->e_shnum
)
1410 return elf_elfsections (abfd
)[index
]->bfd_section
;
1414 _bfd_elf_new_section_hook (abfd
, sec
)
1418 struct bfd_elf_section_data
*sdata
;
1420 sdata
= (struct bfd_elf_section_data
*) bfd_zalloc (abfd
, sizeof (*sdata
));
1423 sec
->used_by_bfd
= (PTR
) sdata
;
1425 /* Indicate whether or not this section should use RELA relocations. */
1427 = get_elf_backend_data (abfd
)->default_use_rela_p
;
1432 /* Create a new bfd section from an ELF program header.
1434 Since program segments have no names, we generate a synthetic name
1435 of the form segment<NUM>, where NUM is generally the index in the
1436 program header table. For segments that are split (see below) we
1437 generate the names segment<NUM>a and segment<NUM>b.
1439 Note that some program segments may have a file size that is different than
1440 (less than) the memory size. All this means is that at execution the
1441 system must allocate the amount of memory specified by the memory size,
1442 but only initialize it with the first "file size" bytes read from the
1443 file. This would occur for example, with program segments consisting
1444 of combined data+bss.
1446 To handle the above situation, this routine generates TWO bfd sections
1447 for the single program segment. The first has the length specified by
1448 the file size of the segment, and the second has the length specified
1449 by the difference between the two sizes. In effect, the segment is split
1450 into it's initialized and uninitialized parts.
1455 _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, typename
)
1457 Elf_Internal_Phdr
*hdr
;
1459 const char *typename
;
1466 split
= ((hdr
->p_memsz
> 0)
1467 && (hdr
->p_filesz
> 0)
1468 && (hdr
->p_memsz
> hdr
->p_filesz
));
1469 sprintf (namebuf
, "%s%d%s", typename
, index
, split
? "a" : "");
1470 name
= bfd_alloc (abfd
, strlen (namebuf
) + 1);
1473 strcpy (name
, namebuf
);
1474 newsect
= bfd_make_section (abfd
, name
);
1475 if (newsect
== NULL
)
1477 newsect
->vma
= hdr
->p_vaddr
;
1478 newsect
->lma
= hdr
->p_paddr
;
1479 newsect
->_raw_size
= hdr
->p_filesz
;
1480 newsect
->filepos
= hdr
->p_offset
;
1481 newsect
->flags
|= SEC_HAS_CONTENTS
;
1482 if (hdr
->p_type
== PT_LOAD
)
1484 newsect
->flags
|= SEC_ALLOC
;
1485 newsect
->flags
|= SEC_LOAD
;
1486 if (hdr
->p_flags
& PF_X
)
1488 /* FIXME: all we known is that it has execute PERMISSION,
1490 newsect
->flags
|= SEC_CODE
;
1493 if (!(hdr
->p_flags
& PF_W
))
1495 newsect
->flags
|= SEC_READONLY
;
1500 sprintf (namebuf
, "%s%db", typename
, index
);
1501 name
= bfd_alloc (abfd
, strlen (namebuf
) + 1);
1504 strcpy (name
, namebuf
);
1505 newsect
= bfd_make_section (abfd
, name
);
1506 if (newsect
== NULL
)
1508 newsect
->vma
= hdr
->p_vaddr
+ hdr
->p_filesz
;
1509 newsect
->lma
= hdr
->p_paddr
+ hdr
->p_filesz
;
1510 newsect
->_raw_size
= hdr
->p_memsz
- hdr
->p_filesz
;
1511 if (hdr
->p_type
== PT_LOAD
)
1513 newsect
->flags
|= SEC_ALLOC
;
1514 if (hdr
->p_flags
& PF_X
)
1515 newsect
->flags
|= SEC_CODE
;
1517 if (!(hdr
->p_flags
& PF_W
))
1518 newsect
->flags
|= SEC_READONLY
;
1525 bfd_section_from_phdr (abfd
, hdr
, index
)
1527 Elf_Internal_Phdr
*hdr
;
1530 struct elf_backend_data
*bed
;
1532 switch (hdr
->p_type
)
1535 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "null");
1538 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "load");
1541 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "dynamic");
1544 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "interp");
1547 if (! _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "note"))
1549 if (! elfcore_read_notes (abfd
, hdr
->p_offset
, hdr
->p_filesz
))
1554 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "shlib");
1557 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "phdr");
1560 /* Check for any processor-specific program segment types.
1561 If no handler for them, default to making "segment" sections. */
1562 bed
= get_elf_backend_data (abfd
);
1563 if (bed
->elf_backend_section_from_phdr
)
1564 return (*bed
->elf_backend_section_from_phdr
) (abfd
, hdr
, index
);
1566 return _bfd_elf_make_section_from_phdr (abfd
, hdr
, index
, "segment");
1570 /* Initialize REL_HDR, the section-header for new section, containing
1571 relocations against ASECT. If USE_RELA_P is true, we use RELA
1572 relocations; otherwise, we use REL relocations. */
1575 _bfd_elf_init_reloc_shdr (abfd
, rel_hdr
, asect
, use_rela_p
)
1577 Elf_Internal_Shdr
*rel_hdr
;
1582 struct elf_backend_data
*bed
;
1584 bed
= get_elf_backend_data (abfd
);
1585 name
= bfd_alloc (abfd
, sizeof ".rela" + strlen (asect
->name
));
1588 sprintf (name
, "%s%s", use_rela_p
? ".rela" : ".rel", asect
->name
);
1590 (unsigned int) _bfd_stringtab_add (elf_shstrtab (abfd
), name
,
1592 if (rel_hdr
->sh_name
== (unsigned int) -1)
1594 rel_hdr
->sh_type
= use_rela_p
? SHT_RELA
: SHT_REL
;
1595 rel_hdr
->sh_entsize
= (use_rela_p
1596 ? bed
->s
->sizeof_rela
1597 : bed
->s
->sizeof_rel
);
1598 rel_hdr
->sh_addralign
= bed
->s
->file_align
;
1599 rel_hdr
->sh_flags
= 0;
1600 rel_hdr
->sh_addr
= 0;
1601 rel_hdr
->sh_size
= 0;
1602 rel_hdr
->sh_offset
= 0;
1607 /* Set up an ELF internal section header for a section. */
1611 elf_fake_sections (abfd
, asect
, failedptrarg
)
1616 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
1617 boolean
*failedptr
= (boolean
*) failedptrarg
;
1618 Elf_Internal_Shdr
*this_hdr
;
1622 /* We already failed; just get out of the bfd_map_over_sections
1627 this_hdr
= &elf_section_data (asect
)->this_hdr
;
1629 this_hdr
->sh_name
= (unsigned long) _bfd_stringtab_add (elf_shstrtab (abfd
),
1632 if (this_hdr
->sh_name
== (unsigned long) -1)
1638 this_hdr
->sh_flags
= 0;
1640 if ((asect
->flags
& SEC_ALLOC
) != 0
1641 || asect
->user_set_vma
)
1642 this_hdr
->sh_addr
= asect
->vma
;
1644 this_hdr
->sh_addr
= 0;
1646 this_hdr
->sh_offset
= 0;
1647 this_hdr
->sh_size
= asect
->_raw_size
;
1648 this_hdr
->sh_link
= 0;
1649 this_hdr
->sh_addralign
= 1 << asect
->alignment_power
;
1650 /* The sh_entsize and sh_info fields may have been set already by
1651 copy_private_section_data. */
1653 this_hdr
->bfd_section
= asect
;
1654 this_hdr
->contents
= NULL
;
1656 /* FIXME: This should not be based on section names. */
1657 if (strcmp (asect
->name
, ".dynstr") == 0)
1658 this_hdr
->sh_type
= SHT_STRTAB
;
1659 else if (strcmp (asect
->name
, ".hash") == 0)
1661 this_hdr
->sh_type
= SHT_HASH
;
1662 this_hdr
->sh_entsize
= bed
->s
->sizeof_hash_entry
;
1664 else if (strcmp (asect
->name
, ".dynsym") == 0)
1666 this_hdr
->sh_type
= SHT_DYNSYM
;
1667 this_hdr
->sh_entsize
= bed
->s
->sizeof_sym
;
1669 else if (strcmp (asect
->name
, ".dynamic") == 0)
1671 this_hdr
->sh_type
= SHT_DYNAMIC
;
1672 this_hdr
->sh_entsize
= bed
->s
->sizeof_dyn
;
1674 else if (strncmp (asect
->name
, ".rela", 5) == 0
1675 && get_elf_backend_data (abfd
)->may_use_rela_p
)
1677 this_hdr
->sh_type
= SHT_RELA
;
1678 this_hdr
->sh_entsize
= bed
->s
->sizeof_rela
;
1680 else if (strncmp (asect
->name
, ".rel", 4) == 0
1681 && get_elf_backend_data (abfd
)->may_use_rel_p
)
1683 this_hdr
->sh_type
= SHT_REL
;
1684 this_hdr
->sh_entsize
= bed
->s
->sizeof_rel
;
1686 else if (strncmp (asect
->name
, ".note", 5) == 0)
1687 this_hdr
->sh_type
= SHT_NOTE
;
1688 else if (strncmp (asect
->name
, ".stab", 5) == 0
1689 && strcmp (asect
->name
+ strlen (asect
->name
) - 3, "str") == 0)
1690 this_hdr
->sh_type
= SHT_STRTAB
;
1691 else if (strcmp (asect
->name
, ".gnu.version") == 0)
1693 this_hdr
->sh_type
= SHT_GNU_versym
;
1694 this_hdr
->sh_entsize
= sizeof (Elf_External_Versym
);
1696 else if (strcmp (asect
->name
, ".gnu.version_d") == 0)
1698 this_hdr
->sh_type
= SHT_GNU_verdef
;
1699 this_hdr
->sh_entsize
= 0;
1700 /* objcopy or strip will copy over sh_info, but may not set
1701 cverdefs. The linker will set cverdefs, but sh_info will be
1703 if (this_hdr
->sh_info
== 0)
1704 this_hdr
->sh_info
= elf_tdata (abfd
)->cverdefs
;
1706 BFD_ASSERT (elf_tdata (abfd
)->cverdefs
== 0
1707 || this_hdr
->sh_info
== elf_tdata (abfd
)->cverdefs
);
1709 else if (strcmp (asect
->name
, ".gnu.version_r") == 0)
1711 this_hdr
->sh_type
= SHT_GNU_verneed
;
1712 this_hdr
->sh_entsize
= 0;
1713 /* objcopy or strip will copy over sh_info, but may not set
1714 cverrefs. The linker will set cverrefs, but sh_info will be
1716 if (this_hdr
->sh_info
== 0)
1717 this_hdr
->sh_info
= elf_tdata (abfd
)->cverrefs
;
1719 BFD_ASSERT (elf_tdata (abfd
)->cverrefs
== 0
1720 || this_hdr
->sh_info
== elf_tdata (abfd
)->cverrefs
);
1722 else if ((asect
->flags
& SEC_ALLOC
) != 0
1723 && (asect
->flags
& SEC_LOAD
) != 0)
1724 this_hdr
->sh_type
= SHT_PROGBITS
;
1725 else if ((asect
->flags
& SEC_ALLOC
) != 0
1726 && ((asect
->flags
& SEC_LOAD
) == 0))
1727 this_hdr
->sh_type
= SHT_NOBITS
;
1731 this_hdr
->sh_type
= SHT_PROGBITS
;
1734 if ((asect
->flags
& SEC_ALLOC
) != 0)
1735 this_hdr
->sh_flags
|= SHF_ALLOC
;
1736 if ((asect
->flags
& SEC_READONLY
) == 0)
1737 this_hdr
->sh_flags
|= SHF_WRITE
;
1738 if ((asect
->flags
& SEC_CODE
) != 0)
1739 this_hdr
->sh_flags
|= SHF_EXECINSTR
;
1741 /* Check for processor-specific section types. */
1742 if (bed
->elf_backend_fake_sections
)
1743 (*bed
->elf_backend_fake_sections
) (abfd
, this_hdr
, asect
);
1745 /* If the section has relocs, set up a section header for the
1746 SHT_REL[A] section. If two relocation sections are required for
1747 this section, it is up to the processor-specific back-end to
1748 create the other. */
1749 if ((asect
->flags
& SEC_RELOC
) != 0
1750 && !_bfd_elf_init_reloc_shdr (abfd
,
1751 &elf_section_data (asect
)->rel_hdr
,
1753 elf_section_data (asect
)->use_rela_p
))
1757 /* Get elf arch size (32 / 64).
1758 Returns -1 if not elf. */
1761 bfd_elf_get_arch_size (abfd
)
1764 if (abfd
->xvec
->flavour
!= bfd_target_elf_flavour
)
1766 bfd_set_error (bfd_error_wrong_format
);
1770 return (get_elf_backend_data (abfd
))->s
->arch_size
;
1773 /* Assign all ELF section numbers. The dummy first section is handled here
1774 too. The link/info pointers for the standard section types are filled
1775 in here too, while we're at it. */
1778 assign_section_numbers (abfd
)
1781 struct elf_obj_tdata
*t
= elf_tdata (abfd
);
1783 unsigned int section_number
;
1784 Elf_Internal_Shdr
**i_shdrp
;
1788 for (sec
= abfd
->sections
; sec
; sec
= sec
->next
)
1790 struct bfd_elf_section_data
*d
= elf_section_data (sec
);
1792 d
->this_idx
= section_number
++;
1793 if ((sec
->flags
& SEC_RELOC
) == 0)
1796 d
->rel_idx
= section_number
++;
1799 d
->rel_idx2
= section_number
++;
1804 t
->shstrtab_section
= section_number
++;
1805 elf_elfheader (abfd
)->e_shstrndx
= t
->shstrtab_section
;
1806 t
->shstrtab_hdr
.sh_size
= _bfd_stringtab_size (elf_shstrtab (abfd
));
1808 if (bfd_get_symcount (abfd
) > 0)
1810 t
->symtab_section
= section_number
++;
1811 t
->strtab_section
= section_number
++;
1814 elf_elfheader (abfd
)->e_shnum
= section_number
;
1816 /* Set up the list of section header pointers, in agreement with the
1818 i_shdrp
= ((Elf_Internal_Shdr
**)
1819 bfd_alloc (abfd
, section_number
* sizeof (Elf_Internal_Shdr
*)));
1820 if (i_shdrp
== NULL
)
1823 i_shdrp
[0] = ((Elf_Internal_Shdr
*)
1824 bfd_alloc (abfd
, sizeof (Elf_Internal_Shdr
)));
1825 if (i_shdrp
[0] == NULL
)
1827 bfd_release (abfd
, i_shdrp
);
1830 memset (i_shdrp
[0], 0, sizeof (Elf_Internal_Shdr
));
1832 elf_elfsections (abfd
) = i_shdrp
;
1834 i_shdrp
[t
->shstrtab_section
] = &t
->shstrtab_hdr
;
1835 if (bfd_get_symcount (abfd
) > 0)
1837 i_shdrp
[t
->symtab_section
] = &t
->symtab_hdr
;
1838 i_shdrp
[t
->strtab_section
] = &t
->strtab_hdr
;
1839 t
->symtab_hdr
.sh_link
= t
->strtab_section
;
1841 for (sec
= abfd
->sections
; sec
; sec
= sec
->next
)
1843 struct bfd_elf_section_data
*d
= elf_section_data (sec
);
1847 i_shdrp
[d
->this_idx
] = &d
->this_hdr
;
1848 if (d
->rel_idx
!= 0)
1849 i_shdrp
[d
->rel_idx
] = &d
->rel_hdr
;
1850 if (d
->rel_idx2
!= 0)
1851 i_shdrp
[d
->rel_idx2
] = d
->rel_hdr2
;
1853 /* Fill in the sh_link and sh_info fields while we're at it. */
1855 /* sh_link of a reloc section is the section index of the symbol
1856 table. sh_info is the section index of the section to which
1857 the relocation entries apply. */
1858 if (d
->rel_idx
!= 0)
1860 d
->rel_hdr
.sh_link
= t
->symtab_section
;
1861 d
->rel_hdr
.sh_info
= d
->this_idx
;
1863 if (d
->rel_idx2
!= 0)
1865 d
->rel_hdr2
->sh_link
= t
->symtab_section
;
1866 d
->rel_hdr2
->sh_info
= d
->this_idx
;
1869 switch (d
->this_hdr
.sh_type
)
1873 /* A reloc section which we are treating as a normal BFD
1874 section. sh_link is the section index of the symbol
1875 table. sh_info is the section index of the section to
1876 which the relocation entries apply. We assume that an
1877 allocated reloc section uses the dynamic symbol table.
1878 FIXME: How can we be sure? */
1879 s
= bfd_get_section_by_name (abfd
, ".dynsym");
1881 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
1883 /* We look up the section the relocs apply to by name. */
1885 if (d
->this_hdr
.sh_type
== SHT_REL
)
1889 s
= bfd_get_section_by_name (abfd
, name
);
1891 d
->this_hdr
.sh_info
= elf_section_data (s
)->this_idx
;
1895 /* We assume that a section named .stab*str is a stabs
1896 string section. We look for a section with the same name
1897 but without the trailing ``str'', and set its sh_link
1898 field to point to this section. */
1899 if (strncmp (sec
->name
, ".stab", sizeof ".stab" - 1) == 0
1900 && strcmp (sec
->name
+ strlen (sec
->name
) - 3, "str") == 0)
1905 len
= strlen (sec
->name
);
1906 alc
= (char *) bfd_malloc (len
- 2);
1909 strncpy (alc
, sec
->name
, len
- 3);
1910 alc
[len
- 3] = '\0';
1911 s
= bfd_get_section_by_name (abfd
, alc
);
1915 elf_section_data (s
)->this_hdr
.sh_link
= d
->this_idx
;
1917 /* This is a .stab section. */
1918 elf_section_data (s
)->this_hdr
.sh_entsize
=
1919 4 + 2 * bfd_elf_get_arch_size (abfd
) / 8;
1926 case SHT_GNU_verneed
:
1927 case SHT_GNU_verdef
:
1928 /* sh_link is the section header index of the string table
1929 used for the dynamic entries, or the symbol table, or the
1931 s
= bfd_get_section_by_name (abfd
, ".dynstr");
1933 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
1937 case SHT_GNU_versym
:
1938 /* sh_link is the section header index of the symbol table
1939 this hash table or version table is for. */
1940 s
= bfd_get_section_by_name (abfd
, ".dynsym");
1942 d
->this_hdr
.sh_link
= elf_section_data (s
)->this_idx
;
1950 /* Map symbol from it's internal number to the external number, moving
1951 all local symbols to be at the head of the list. */
1954 sym_is_global (abfd
, sym
)
1958 /* If the backend has a special mapping, use it. */
1959 if (get_elf_backend_data (abfd
)->elf_backend_sym_is_global
)
1960 return ((*get_elf_backend_data (abfd
)->elf_backend_sym_is_global
)
1963 return ((sym
->flags
& (BSF_GLOBAL
| BSF_WEAK
)) != 0
1964 || bfd_is_und_section (bfd_get_section (sym
))
1965 || bfd_is_com_section (bfd_get_section (sym
)));
1969 elf_map_symbols (abfd
)
1972 int symcount
= bfd_get_symcount (abfd
);
1973 asymbol
**syms
= bfd_get_outsymbols (abfd
);
1974 asymbol
**sect_syms
;
1976 int num_globals
= 0;
1977 int num_locals2
= 0;
1978 int num_globals2
= 0;
1980 int num_sections
= 0;
1987 fprintf (stderr
, "elf_map_symbols\n");
1991 /* Add a section symbol for each BFD section. FIXME: Is this really
1993 for (asect
= abfd
->sections
; asect
; asect
= asect
->next
)
1995 if (max_index
< asect
->index
)
1996 max_index
= asect
->index
;
2000 sect_syms
= (asymbol
**) bfd_zalloc (abfd
, max_index
* sizeof (asymbol
*));
2001 if (sect_syms
== NULL
)
2003 elf_section_syms (abfd
) = sect_syms
;
2005 for (idx
= 0; idx
< symcount
; idx
++)
2009 if ((sym
->flags
& BSF_SECTION_SYM
) != 0
2016 if (sec
->owner
!= NULL
)
2018 if (sec
->owner
!= abfd
)
2020 if (sec
->output_offset
!= 0)
2023 sec
= sec
->output_section
;
2025 /* Empty sections in the input files may have had a section
2026 symbol created for them. (See the comment near the end of
2027 _bfd_generic_link_output_symbols in linker.c). If the linker
2028 script discards such sections then we will reach this point.
2029 Since we know that we cannot avoid this case, we detect it
2030 and skip the abort and the assignment to the sect_syms array.
2031 To reproduce this particular case try running the linker
2032 testsuite test ld-scripts/weak.exp for an ELF port that uses
2033 the generic linker. */
2034 if (sec
->owner
== NULL
)
2037 BFD_ASSERT (sec
->owner
== abfd
);
2039 sect_syms
[sec
->index
] = syms
[idx
];
2044 for (asect
= abfd
->sections
; asect
; asect
= asect
->next
)
2046 if (sect_syms
[asect
->index
] != NULL
)
2049 sym
= bfd_make_empty_symbol (abfd
);
2052 sym
->the_bfd
= abfd
;
2053 sym
->name
= asect
->name
;
2055 /* Set the flags to 0 to indicate that this one was newly added. */
2057 sym
->section
= asect
;
2058 sect_syms
[asect
->index
] = sym
;
2062 _("creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n"),
2063 asect
->name
, (long) asect
->vma
, asect
->index
, (long) asect
);
2067 /* Classify all of the symbols. */
2068 for (idx
= 0; idx
< symcount
; idx
++)
2070 if (!sym_is_global (abfd
, syms
[idx
]))
2075 for (asect
= abfd
->sections
; asect
; asect
= asect
->next
)
2077 if (sect_syms
[asect
->index
] != NULL
2078 && sect_syms
[asect
->index
]->flags
== 0)
2080 sect_syms
[asect
->index
]->flags
= BSF_SECTION_SYM
;
2081 if (!sym_is_global (abfd
, sect_syms
[asect
->index
]))
2085 sect_syms
[asect
->index
]->flags
= 0;
2089 /* Now sort the symbols so the local symbols are first. */
2090 new_syms
= ((asymbol
**)
2092 (num_locals
+ num_globals
) * sizeof (asymbol
*)));
2093 if (new_syms
== NULL
)
2096 for (idx
= 0; idx
< symcount
; idx
++)
2098 asymbol
*sym
= syms
[idx
];
2101 if (!sym_is_global (abfd
, sym
))
2104 i
= num_locals
+ num_globals2
++;
2106 sym
->udata
.i
= i
+ 1;
2108 for (asect
= abfd
->sections
; asect
; asect
= asect
->next
)
2110 if (sect_syms
[asect
->index
] != NULL
2111 && sect_syms
[asect
->index
]->flags
== 0)
2113 asymbol
*sym
= sect_syms
[asect
->index
];
2116 sym
->flags
= BSF_SECTION_SYM
;
2117 if (!sym_is_global (abfd
, sym
))
2120 i
= num_locals
+ num_globals2
++;
2122 sym
->udata
.i
= i
+ 1;
2126 bfd_set_symtab (abfd
, new_syms
, num_locals
+ num_globals
);
2128 elf_num_locals (abfd
) = num_locals
;
2129 elf_num_globals (abfd
) = num_globals
;
2133 /* Align to the maximum file alignment that could be required for any
2134 ELF data structure. */
2136 static INLINE file_ptr align_file_position
PARAMS ((file_ptr
, int));
2137 static INLINE file_ptr
2138 align_file_position (off
, align
)
2142 return (off
+ align
- 1) & ~(align
- 1);
2145 /* Assign a file position to a section, optionally aligning to the
2146 required section alignment. */
2149 _bfd_elf_assign_file_position_for_section (i_shdrp
, offset
, align
)
2150 Elf_Internal_Shdr
*i_shdrp
;
2158 al
= i_shdrp
->sh_addralign
;
2160 offset
= BFD_ALIGN (offset
, al
);
2162 i_shdrp
->sh_offset
= offset
;
2163 if (i_shdrp
->bfd_section
!= NULL
)
2164 i_shdrp
->bfd_section
->filepos
= offset
;
2165 if (i_shdrp
->sh_type
!= SHT_NOBITS
)
2166 offset
+= i_shdrp
->sh_size
;
2170 /* Compute the file positions we are going to put the sections at, and
2171 otherwise prepare to begin writing out the ELF file. If LINK_INFO
2172 is not NULL, this is being called by the ELF backend linker. */
2175 _bfd_elf_compute_section_file_positions (abfd
, link_info
)
2177 struct bfd_link_info
*link_info
;
2179 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
2181 struct bfd_strtab_hash
*strtab
;
2182 Elf_Internal_Shdr
*shstrtab_hdr
;
2184 if (abfd
->output_has_begun
)
2187 /* Do any elf backend specific processing first. */
2188 if (bed
->elf_backend_begin_write_processing
)
2189 (*bed
->elf_backend_begin_write_processing
) (abfd
, link_info
);
2191 if (! prep_headers (abfd
))
2194 /* Post process the headers if necessary. */
2195 if (bed
->elf_backend_post_process_headers
)
2196 (*bed
->elf_backend_post_process_headers
) (abfd
, link_info
);
2199 bfd_map_over_sections (abfd
, elf_fake_sections
, &failed
);
2203 if (!assign_section_numbers (abfd
))
2206 /* The backend linker builds symbol table information itself. */
2207 if (link_info
== NULL
&& bfd_get_symcount (abfd
) > 0)
2209 /* Non-zero if doing a relocatable link. */
2210 int relocatable_p
= ! (abfd
->flags
& (EXEC_P
| DYNAMIC
));
2212 if (! swap_out_syms (abfd
, &strtab
, relocatable_p
))
2216 shstrtab_hdr
= &elf_tdata (abfd
)->shstrtab_hdr
;
2217 /* sh_name was set in prep_headers. */
2218 shstrtab_hdr
->sh_type
= SHT_STRTAB
;
2219 shstrtab_hdr
->sh_flags
= 0;
2220 shstrtab_hdr
->sh_addr
= 0;
2221 shstrtab_hdr
->sh_size
= _bfd_stringtab_size (elf_shstrtab (abfd
));
2222 shstrtab_hdr
->sh_entsize
= 0;
2223 shstrtab_hdr
->sh_link
= 0;
2224 shstrtab_hdr
->sh_info
= 0;
2225 /* sh_offset is set in assign_file_positions_except_relocs. */
2226 shstrtab_hdr
->sh_addralign
= 1;
2228 if (!assign_file_positions_except_relocs (abfd
))
2231 if (link_info
== NULL
&& bfd_get_symcount (abfd
) > 0)
2234 Elf_Internal_Shdr
*hdr
;
2236 off
= elf_tdata (abfd
)->next_file_pos
;
2238 hdr
= &elf_tdata (abfd
)->symtab_hdr
;
2239 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, true);
2241 hdr
= &elf_tdata (abfd
)->strtab_hdr
;
2242 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, true);
2244 elf_tdata (abfd
)->next_file_pos
= off
;
2246 /* Now that we know where the .strtab section goes, write it
2248 if (bfd_seek (abfd
, hdr
->sh_offset
, SEEK_SET
) != 0
2249 || ! _bfd_stringtab_emit (abfd
, strtab
))
2251 _bfd_stringtab_free (strtab
);
2254 abfd
->output_has_begun
= true;
2259 /* Create a mapping from a set of sections to a program segment. */
2261 static INLINE
struct elf_segment_map
*
2262 make_mapping (abfd
, sections
, from
, to
, phdr
)
2264 asection
**sections
;
2269 struct elf_segment_map
*m
;
2273 m
= ((struct elf_segment_map
*)
2275 (sizeof (struct elf_segment_map
)
2276 + (to
- from
- 1) * sizeof (asection
*))));
2280 m
->p_type
= PT_LOAD
;
2281 for (i
= from
, hdrpp
= sections
+ from
; i
< to
; i
++, hdrpp
++)
2282 m
->sections
[i
- from
] = *hdrpp
;
2283 m
->count
= to
- from
;
2285 if (from
== 0 && phdr
)
2287 /* Include the headers in the first PT_LOAD segment. */
2288 m
->includes_filehdr
= 1;
2289 m
->includes_phdrs
= 1;
2295 /* Set up a mapping from BFD sections to program segments. */
2298 map_sections_to_segments (abfd
)
2301 asection
**sections
= NULL
;
2305 struct elf_segment_map
*mfirst
;
2306 struct elf_segment_map
**pm
;
2307 struct elf_segment_map
*m
;
2309 unsigned int phdr_index
;
2310 bfd_vma maxpagesize
;
2312 boolean phdr_in_segment
= true;
2316 if (elf_tdata (abfd
)->segment_map
!= NULL
)
2319 if (bfd_count_sections (abfd
) == 0)
2322 /* Select the allocated sections, and sort them. */
2324 sections
= (asection
**) bfd_malloc (bfd_count_sections (abfd
)
2325 * sizeof (asection
*));
2326 if (sections
== NULL
)
2330 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
2332 if ((s
->flags
& SEC_ALLOC
) != 0)
2338 BFD_ASSERT (i
<= bfd_count_sections (abfd
));
2341 qsort (sections
, (size_t) count
, sizeof (asection
*), elf_sort_sections
);
2343 /* Build the mapping. */
2348 /* If we have a .interp section, then create a PT_PHDR segment for
2349 the program headers and a PT_INTERP segment for the .interp
2351 s
= bfd_get_section_by_name (abfd
, ".interp");
2352 if (s
!= NULL
&& (s
->flags
& SEC_LOAD
) != 0)
2354 m
= ((struct elf_segment_map
*)
2355 bfd_zalloc (abfd
, sizeof (struct elf_segment_map
)));
2359 m
->p_type
= PT_PHDR
;
2360 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
2361 m
->p_flags
= PF_R
| PF_X
;
2362 m
->p_flags_valid
= 1;
2363 m
->includes_phdrs
= 1;
2368 m
= ((struct elf_segment_map
*)
2369 bfd_zalloc (abfd
, sizeof (struct elf_segment_map
)));
2373 m
->p_type
= PT_INTERP
;
2381 /* Look through the sections. We put sections in the same program
2382 segment when the start of the second section can be placed within
2383 a few bytes of the end of the first section. */
2386 maxpagesize
= get_elf_backend_data (abfd
)->maxpagesize
;
2388 dynsec
= bfd_get_section_by_name (abfd
, ".dynamic");
2390 && (dynsec
->flags
& SEC_LOAD
) == 0)
2393 /* Deal with -Ttext or something similar such that the first section
2394 is not adjacent to the program headers. This is an
2395 approximation, since at this point we don't know exactly how many
2396 program headers we will need. */
2399 bfd_size_type phdr_size
;
2401 phdr_size
= elf_tdata (abfd
)->program_header_size
;
2403 phdr_size
= get_elf_backend_data (abfd
)->s
->sizeof_phdr
;
2404 if ((abfd
->flags
& D_PAGED
) == 0
2405 || sections
[0]->lma
< phdr_size
2406 || sections
[0]->lma
% maxpagesize
< phdr_size
% maxpagesize
)
2407 phdr_in_segment
= false;
2410 for (i
= 0, hdrpp
= sections
; i
< count
; i
++, hdrpp
++)
2413 boolean new_segment
;
2417 /* See if this section and the last one will fit in the same
2420 if (last_hdr
== NULL
)
2422 /* If we don't have a segment yet, then we don't need a new
2423 one (we build the last one after this loop). */
2424 new_segment
= false;
2426 else if (last_hdr
->lma
- last_hdr
->vma
!= hdr
->lma
- hdr
->vma
)
2428 /* If this section has a different relation between the
2429 virtual address and the load address, then we need a new
2433 else if (BFD_ALIGN (last_hdr
->lma
+ last_hdr
->_raw_size
, maxpagesize
)
2434 < BFD_ALIGN (hdr
->lma
, maxpagesize
))
2436 /* If putting this section in this segment would force us to
2437 skip a page in the segment, then we need a new segment. */
2440 else if ((last_hdr
->flags
& SEC_LOAD
) == 0
2441 && (hdr
->flags
& SEC_LOAD
) != 0)
2443 /* We don't want to put a loadable section after a
2444 nonloadable section in the same segment. */
2447 else if ((abfd
->flags
& D_PAGED
) == 0)
2449 /* If the file is not demand paged, which means that we
2450 don't require the sections to be correctly aligned in the
2451 file, then there is no other reason for a new segment. */
2452 new_segment
= false;
2455 && (hdr
->flags
& SEC_READONLY
) == 0
2456 && (BFD_ALIGN (last_hdr
->lma
+ last_hdr
->_raw_size
, maxpagesize
)
2459 /* We don't want to put a writable section in a read only
2460 segment, unless they are on the same page in memory
2461 anyhow. We already know that the last section does not
2462 bring us past the current section on the page, so the
2463 only case in which the new section is not on the same
2464 page as the previous section is when the previous section
2465 ends precisely on a page boundary. */
2470 /* Otherwise, we can use the same segment. */
2471 new_segment
= false;
2476 if ((hdr
->flags
& SEC_READONLY
) == 0)
2482 /* We need a new program segment. We must create a new program
2483 header holding all the sections from phdr_index until hdr. */
2485 m
= make_mapping (abfd
, sections
, phdr_index
, i
, phdr_in_segment
);
2492 if ((hdr
->flags
& SEC_READONLY
) == 0)
2499 phdr_in_segment
= false;
2502 /* Create a final PT_LOAD program segment. */
2503 if (last_hdr
!= NULL
)
2505 m
= make_mapping (abfd
, sections
, phdr_index
, i
, phdr_in_segment
);
2513 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
2516 m
= ((struct elf_segment_map
*)
2517 bfd_zalloc (abfd
, sizeof (struct elf_segment_map
)));
2521 m
->p_type
= PT_DYNAMIC
;
2523 m
->sections
[0] = dynsec
;
2529 /* For each loadable .note section, add a PT_NOTE segment. We don't
2530 use bfd_get_section_by_name, because if we link together
2531 nonloadable .note sections and loadable .note sections, we will
2532 generate two .note sections in the output file. FIXME: Using
2533 names for section types is bogus anyhow. */
2534 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
2536 if ((s
->flags
& SEC_LOAD
) != 0
2537 && strncmp (s
->name
, ".note", 5) == 0)
2539 m
= ((struct elf_segment_map
*)
2540 bfd_zalloc (abfd
, sizeof (struct elf_segment_map
)));
2544 m
->p_type
= PT_NOTE
;
2556 elf_tdata (abfd
)->segment_map
= mfirst
;
2560 if (sections
!= NULL
)
2565 /* Sort sections by address. */
2568 elf_sort_sections (arg1
, arg2
)
2572 const asection
*sec1
= *(const asection
**) arg1
;
2573 const asection
*sec2
= *(const asection
**) arg2
;
2575 /* Sort by LMA first, since this is the address used to
2576 place the section into a segment. */
2577 if (sec1
->lma
< sec2
->lma
)
2579 else if (sec1
->lma
> sec2
->lma
)
2582 /* Then sort by VMA. Normally the LMA and the VMA will be
2583 the same, and this will do nothing. */
2584 if (sec1
->vma
< sec2
->vma
)
2586 else if (sec1
->vma
> sec2
->vma
)
2589 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
2591 #define TOEND(x) (((x)->flags & SEC_LOAD) == 0)
2596 return sec1
->target_index
- sec2
->target_index
;
2606 /* Sort by size, to put zero sized sections before others at the
2609 if (sec1
->_raw_size
< sec2
->_raw_size
)
2611 if (sec1
->_raw_size
> sec2
->_raw_size
)
2614 return sec1
->target_index
- sec2
->target_index
;
2617 /* Assign file positions to the sections based on the mapping from
2618 sections to segments. This function also sets up some fields in
2619 the file header, and writes out the program headers. */
2622 assign_file_positions_for_segments (abfd
)
2625 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
2627 struct elf_segment_map
*m
;
2629 Elf_Internal_Phdr
*phdrs
;
2631 bfd_vma filehdr_vaddr
, filehdr_paddr
;
2632 bfd_vma phdrs_vaddr
, phdrs_paddr
;
2633 Elf_Internal_Phdr
*p
;
2635 if (elf_tdata (abfd
)->segment_map
== NULL
)
2637 if (! map_sections_to_segments (abfd
))
2641 if (bed
->elf_backend_modify_segment_map
)
2643 if (! (*bed
->elf_backend_modify_segment_map
) (abfd
))
2648 for (m
= elf_tdata (abfd
)->segment_map
; m
!= NULL
; m
= m
->next
)
2651 elf_elfheader (abfd
)->e_phoff
= bed
->s
->sizeof_ehdr
;
2652 elf_elfheader (abfd
)->e_phentsize
= bed
->s
->sizeof_phdr
;
2653 elf_elfheader (abfd
)->e_phnum
= count
;
2658 /* If we already counted the number of program segments, make sure
2659 that we allocated enough space. This happens when SIZEOF_HEADERS
2660 is used in a linker script. */
2661 alloc
= elf_tdata (abfd
)->program_header_size
/ bed
->s
->sizeof_phdr
;
2662 if (alloc
!= 0 && count
> alloc
)
2664 ((*_bfd_error_handler
)
2665 (_("%s: Not enough room for program headers (allocated %u, need %u)"),
2666 bfd_get_filename (abfd
), alloc
, count
));
2667 bfd_set_error (bfd_error_bad_value
);
2674 phdrs
= ((Elf_Internal_Phdr
*)
2675 bfd_alloc (abfd
, alloc
* sizeof (Elf_Internal_Phdr
)));
2679 off
= bed
->s
->sizeof_ehdr
;
2680 off
+= alloc
* bed
->s
->sizeof_phdr
;
2687 for (m
= elf_tdata (abfd
)->segment_map
, p
= phdrs
;
2694 /* If elf_segment_map is not from map_sections_to_segments, the
2695 sections may not be correctly ordered. */
2697 qsort (m
->sections
, (size_t) m
->count
, sizeof (asection
*),
2700 p
->p_type
= m
->p_type
;
2701 p
->p_flags
= m
->p_flags
;
2703 if (p
->p_type
== PT_LOAD
2705 && (m
->sections
[0]->flags
& SEC_ALLOC
) != 0)
2707 if ((abfd
->flags
& D_PAGED
) != 0)
2708 off
+= (m
->sections
[0]->vma
- off
) % bed
->maxpagesize
;
2711 bfd_size_type align
;
2714 for (i
= 0, secpp
= m
->sections
; i
< m
->count
; i
++, secpp
++)
2716 bfd_size_type secalign
;
2718 secalign
= bfd_get_section_alignment (abfd
, *secpp
);
2719 if (secalign
> align
)
2723 off
+= (m
->sections
[0]->vma
- off
) % (1 << align
);
2730 p
->p_vaddr
= m
->sections
[0]->vma
;
2732 if (m
->p_paddr_valid
)
2733 p
->p_paddr
= m
->p_paddr
;
2734 else if (m
->count
== 0)
2737 p
->p_paddr
= m
->sections
[0]->lma
;
2739 if (p
->p_type
== PT_LOAD
2740 && (abfd
->flags
& D_PAGED
) != 0)
2741 p
->p_align
= bed
->maxpagesize
;
2742 else if (m
->count
== 0)
2743 p
->p_align
= bed
->s
->file_align
;
2751 if (m
->includes_filehdr
)
2753 if (! m
->p_flags_valid
)
2756 p
->p_filesz
= bed
->s
->sizeof_ehdr
;
2757 p
->p_memsz
= bed
->s
->sizeof_ehdr
;
2760 BFD_ASSERT (p
->p_type
== PT_LOAD
);
2762 if (p
->p_vaddr
< (bfd_vma
) off
)
2764 _bfd_error_handler (_("%s: Not enough room for program headers, try linking with -N"),
2765 bfd_get_filename (abfd
));
2766 bfd_set_error (bfd_error_bad_value
);
2771 if (! m
->p_paddr_valid
)
2774 if (p
->p_type
== PT_LOAD
)
2776 filehdr_vaddr
= p
->p_vaddr
;
2777 filehdr_paddr
= p
->p_paddr
;
2781 if (m
->includes_phdrs
)
2783 if (! m
->p_flags_valid
)
2786 if (m
->includes_filehdr
)
2788 if (p
->p_type
== PT_LOAD
)
2790 phdrs_vaddr
= p
->p_vaddr
+ bed
->s
->sizeof_ehdr
;
2791 phdrs_paddr
= p
->p_paddr
+ bed
->s
->sizeof_ehdr
;
2796 p
->p_offset
= bed
->s
->sizeof_ehdr
;
2800 BFD_ASSERT (p
->p_type
== PT_LOAD
);
2801 p
->p_vaddr
-= off
- p
->p_offset
;
2802 if (! m
->p_paddr_valid
)
2803 p
->p_paddr
-= off
- p
->p_offset
;
2806 if (p
->p_type
== PT_LOAD
)
2808 phdrs_vaddr
= p
->p_vaddr
;
2809 phdrs_paddr
= p
->p_paddr
;
2812 phdrs_vaddr
= bed
->maxpagesize
+ bed
->s
->sizeof_ehdr
;
2815 p
->p_filesz
+= alloc
* bed
->s
->sizeof_phdr
;
2816 p
->p_memsz
+= alloc
* bed
->s
->sizeof_phdr
;
2819 if (p
->p_type
== PT_LOAD
2820 || (p
->p_type
== PT_NOTE
&& bfd_get_format (abfd
) == bfd_core
))
2822 if (! m
->includes_filehdr
&& ! m
->includes_phdrs
)
2828 adjust
= off
- (p
->p_offset
+ p
->p_filesz
);
2829 p
->p_filesz
+= adjust
;
2830 p
->p_memsz
+= adjust
;
2836 for (i
= 0, secpp
= m
->sections
; i
< m
->count
; i
++, secpp
++)
2840 bfd_size_type align
;
2844 align
= 1 << bfd_get_section_alignment (abfd
, sec
);
2846 /* The section may have artificial alignment forced by a
2847 link script. Notice this case by the gap between the
2848 cumulative phdr vma and the section's vma. */
2849 if (p
->p_vaddr
+ p
->p_memsz
< sec
->vma
)
2851 bfd_vma adjust
= sec
->vma
- (p
->p_vaddr
+ p
->p_memsz
);
2853 p
->p_memsz
+= adjust
;
2856 if ((flags
& SEC_LOAD
) != 0)
2857 p
->p_filesz
+= adjust
;
2860 if (p
->p_type
== PT_LOAD
)
2862 bfd_signed_vma adjust
;
2864 if ((flags
& SEC_LOAD
) != 0)
2866 adjust
= sec
->lma
- (p
->p_paddr
+ p
->p_memsz
);
2870 else if ((flags
& SEC_ALLOC
) != 0)
2872 /* The section VMA must equal the file position
2873 modulo the page size. FIXME: I'm not sure if
2874 this adjustment is really necessary. We used to
2875 not have the SEC_LOAD case just above, and then
2876 this was necessary, but now I'm not sure. */
2877 if ((abfd
->flags
& D_PAGED
) != 0)
2878 adjust
= (sec
->vma
- voff
) % bed
->maxpagesize
;
2880 adjust
= (sec
->vma
- voff
) % align
;
2889 (* _bfd_error_handler
)
2890 (_("Error: First section in segment (%s) starts at 0x%x"),
2891 bfd_section_name (abfd
, sec
), sec
->lma
);
2892 (* _bfd_error_handler
)
2893 (_(" whereas segment starts at 0x%x"),
2898 p
->p_memsz
+= adjust
;
2901 if ((flags
& SEC_LOAD
) != 0)
2902 p
->p_filesz
+= adjust
;
2907 /* We check SEC_HAS_CONTENTS here because if NOLOAD is
2908 used in a linker script we may have a section with
2909 SEC_LOAD clear but which is supposed to have
2911 if ((flags
& SEC_LOAD
) != 0
2912 || (flags
& SEC_HAS_CONTENTS
) != 0)
2913 off
+= sec
->_raw_size
;
2915 if ((flags
& SEC_ALLOC
) != 0)
2916 voff
+= sec
->_raw_size
;
2919 if (p
->p_type
== PT_NOTE
&& bfd_get_format (abfd
) == bfd_core
)
2921 if (i
== 0) /* the actual "note" segment */
2922 { /* this one actually contains everything. */
2924 p
->p_filesz
= sec
->_raw_size
;
2925 off
+= sec
->_raw_size
;
2928 else /* fake sections -- don't need to be written */
2932 flags
= sec
->flags
= 0; /* no contents */
2939 p
->p_memsz
+= sec
->_raw_size
;
2941 if ((flags
& SEC_LOAD
) != 0)
2942 p
->p_filesz
+= sec
->_raw_size
;
2944 if (align
> p
->p_align
2945 && (p
->p_type
!= PT_LOAD
|| (abfd
->flags
& D_PAGED
) == 0))
2949 if (! m
->p_flags_valid
)
2952 if ((flags
& SEC_CODE
) != 0)
2954 if ((flags
& SEC_READONLY
) == 0)
2960 /* Now that we have set the section file positions, we can set up
2961 the file positions for the non PT_LOAD segments. */
2962 for (m
= elf_tdata (abfd
)->segment_map
, p
= phdrs
;
2966 if (p
->p_type
!= PT_LOAD
&& m
->count
> 0)
2968 BFD_ASSERT (! m
->includes_filehdr
&& ! m
->includes_phdrs
);
2969 p
->p_offset
= m
->sections
[0]->filepos
;
2973 if (m
->includes_filehdr
)
2975 p
->p_vaddr
= filehdr_vaddr
;
2976 if (! m
->p_paddr_valid
)
2977 p
->p_paddr
= filehdr_paddr
;
2979 else if (m
->includes_phdrs
)
2981 p
->p_vaddr
= phdrs_vaddr
;
2982 if (! m
->p_paddr_valid
)
2983 p
->p_paddr
= phdrs_paddr
;
2988 /* Clear out any program headers we allocated but did not use. */
2989 for (; count
< alloc
; count
++, p
++)
2991 memset (p
, 0, sizeof *p
);
2992 p
->p_type
= PT_NULL
;
2995 elf_tdata (abfd
)->phdr
= phdrs
;
2997 elf_tdata (abfd
)->next_file_pos
= off
;
2999 /* Write out the program headers. */
3000 if (bfd_seek (abfd
, bed
->s
->sizeof_ehdr
, SEEK_SET
) != 0
3001 || bed
->s
->write_out_phdrs (abfd
, phdrs
, alloc
) != 0)
3007 /* Get the size of the program header.
3009 If this is called by the linker before any of the section VMA's are set, it
3010 can't calculate the correct value for a strange memory layout. This only
3011 happens when SIZEOF_HEADERS is used in a linker script. In this case,
3012 SORTED_HDRS is NULL and we assume the normal scenario of one text and one
3013 data segment (exclusive of .interp and .dynamic).
3015 ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
3016 will be two segments. */
3018 static bfd_size_type
3019 get_program_header_size (abfd
)
3024 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
3026 /* We can't return a different result each time we're called. */
3027 if (elf_tdata (abfd
)->program_header_size
!= 0)
3028 return elf_tdata (abfd
)->program_header_size
;
3030 if (elf_tdata (abfd
)->segment_map
!= NULL
)
3032 struct elf_segment_map
*m
;
3035 for (m
= elf_tdata (abfd
)->segment_map
; m
!= NULL
; m
= m
->next
)
3037 elf_tdata (abfd
)->program_header_size
= segs
* bed
->s
->sizeof_phdr
;
3038 return elf_tdata (abfd
)->program_header_size
;
3041 /* Assume we will need exactly two PT_LOAD segments: one for text
3042 and one for data. */
3045 s
= bfd_get_section_by_name (abfd
, ".interp");
3046 if (s
!= NULL
&& (s
->flags
& SEC_LOAD
) != 0)
3048 /* If we have a loadable interpreter section, we need a
3049 PT_INTERP segment. In this case, assume we also need a
3050 PT_PHDR segment, although that may not be true for all
3055 if (bfd_get_section_by_name (abfd
, ".dynamic") != NULL
)
3057 /* We need a PT_DYNAMIC segment. */
3061 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
3063 if ((s
->flags
& SEC_LOAD
) != 0
3064 && strncmp (s
->name
, ".note", 5) == 0)
3066 /* We need a PT_NOTE segment. */
3071 /* Let the backend count up any program headers it might need. */
3072 if (bed
->elf_backend_additional_program_headers
)
3076 a
= (*bed
->elf_backend_additional_program_headers
) (abfd
);
3082 elf_tdata (abfd
)->program_header_size
= segs
* bed
->s
->sizeof_phdr
;
3083 return elf_tdata (abfd
)->program_header_size
;
3086 /* Work out the file positions of all the sections. This is called by
3087 _bfd_elf_compute_section_file_positions. All the section sizes and
3088 VMAs must be known before this is called.
3090 We do not consider reloc sections at this point, unless they form
3091 part of the loadable image. Reloc sections are assigned file
3092 positions in assign_file_positions_for_relocs, which is called by
3093 write_object_contents and final_link.
3095 We also don't set the positions of the .symtab and .strtab here. */
3098 assign_file_positions_except_relocs (abfd
)
3101 struct elf_obj_tdata
* const tdata
= elf_tdata (abfd
);
3102 Elf_Internal_Ehdr
* const i_ehdrp
= elf_elfheader (abfd
);
3103 Elf_Internal_Shdr
** const i_shdrpp
= elf_elfsections (abfd
);
3105 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
3107 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0
3108 && bfd_get_format (abfd
) != bfd_core
)
3110 Elf_Internal_Shdr
**hdrpp
;
3113 /* Start after the ELF header. */
3114 off
= i_ehdrp
->e_ehsize
;
3116 /* We are not creating an executable, which means that we are
3117 not creating a program header, and that the actual order of
3118 the sections in the file is unimportant. */
3119 for (i
= 1, hdrpp
= i_shdrpp
+ 1; i
< i_ehdrp
->e_shnum
; i
++, hdrpp
++)
3121 Elf_Internal_Shdr
*hdr
;
3124 if (hdr
->sh_type
== SHT_REL
|| hdr
->sh_type
== SHT_RELA
)
3126 hdr
->sh_offset
= -1;
3129 if (i
== tdata
->symtab_section
3130 || i
== tdata
->strtab_section
)
3132 hdr
->sh_offset
= -1;
3136 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, true);
3142 Elf_Internal_Shdr
**hdrpp
;
3144 /* Assign file positions for the loaded sections based on the
3145 assignment of sections to segments. */
3146 if (! assign_file_positions_for_segments (abfd
))
3149 /* Assign file positions for the other sections. */
3151 off
= elf_tdata (abfd
)->next_file_pos
;
3152 for (i
= 1, hdrpp
= i_shdrpp
+ 1; i
< i_ehdrp
->e_shnum
; i
++, hdrpp
++)
3154 Elf_Internal_Shdr
*hdr
;
3157 if (hdr
->bfd_section
!= NULL
3158 && hdr
->bfd_section
->filepos
!= 0)
3159 hdr
->sh_offset
= hdr
->bfd_section
->filepos
;
3160 else if ((hdr
->sh_flags
& SHF_ALLOC
) != 0)
3162 ((*_bfd_error_handler
)
3163 (_("%s: warning: allocated section `%s' not in segment"),
3164 bfd_get_filename (abfd
),
3165 (hdr
->bfd_section
== NULL
3167 : hdr
->bfd_section
->name
)));
3168 if ((abfd
->flags
& D_PAGED
) != 0)
3169 off
+= (hdr
->sh_addr
- off
) % bed
->maxpagesize
;
3171 off
+= (hdr
->sh_addr
- off
) % hdr
->sh_addralign
;
3172 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
,
3175 else if (hdr
->sh_type
== SHT_REL
3176 || hdr
->sh_type
== SHT_RELA
3177 || hdr
== i_shdrpp
[tdata
->symtab_section
]
3178 || hdr
== i_shdrpp
[tdata
->strtab_section
])
3179 hdr
->sh_offset
= -1;
3181 off
= _bfd_elf_assign_file_position_for_section (hdr
, off
, true);
3185 /* Place the section headers. */
3186 off
= align_file_position (off
, bed
->s
->file_align
);
3187 i_ehdrp
->e_shoff
= off
;
3188 off
+= i_ehdrp
->e_shnum
* i_ehdrp
->e_shentsize
;
3190 elf_tdata (abfd
)->next_file_pos
= off
;
3199 Elf_Internal_Ehdr
*i_ehdrp
; /* Elf file header, internal form */
3200 Elf_Internal_Phdr
*i_phdrp
= 0; /* Program header table, internal form */
3201 Elf_Internal_Shdr
**i_shdrp
; /* Section header table, internal form */
3203 struct bfd_strtab_hash
*shstrtab
;
3204 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
3206 i_ehdrp
= elf_elfheader (abfd
);
3207 i_shdrp
= elf_elfsections (abfd
);
3209 shstrtab
= _bfd_elf_stringtab_init ();
3210 if (shstrtab
== NULL
)
3213 elf_shstrtab (abfd
) = shstrtab
;
3215 i_ehdrp
->e_ident
[EI_MAG0
] = ELFMAG0
;
3216 i_ehdrp
->e_ident
[EI_MAG1
] = ELFMAG1
;
3217 i_ehdrp
->e_ident
[EI_MAG2
] = ELFMAG2
;
3218 i_ehdrp
->e_ident
[EI_MAG3
] = ELFMAG3
;
3220 i_ehdrp
->e_ident
[EI_CLASS
] = bed
->s
->elfclass
;
3221 i_ehdrp
->e_ident
[EI_DATA
] =
3222 bfd_big_endian (abfd
) ? ELFDATA2MSB
: ELFDATA2LSB
;
3223 i_ehdrp
->e_ident
[EI_VERSION
] = bed
->s
->ev_current
;
3225 i_ehdrp
->e_ident
[EI_OSABI
] = ELFOSABI_NONE
;
3226 i_ehdrp
->e_ident
[EI_ABIVERSION
] = 0;
3228 for (count
= EI_PAD
; count
< EI_NIDENT
; count
++)
3229 i_ehdrp
->e_ident
[count
] = 0;
3231 if ((abfd
->flags
& DYNAMIC
) != 0)
3232 i_ehdrp
->e_type
= ET_DYN
;
3233 else if ((abfd
->flags
& EXEC_P
) != 0)
3234 i_ehdrp
->e_type
= ET_EXEC
;
3235 else if (bfd_get_format (abfd
) == bfd_core
)
3236 i_ehdrp
->e_type
= ET_CORE
;
3238 i_ehdrp
->e_type
= ET_REL
;
3240 switch (bfd_get_arch (abfd
))
3242 case bfd_arch_unknown
:
3243 i_ehdrp
->e_machine
= EM_NONE
;
3245 case bfd_arch_sparc
:
3246 if (bfd_elf_get_arch_size (abfd
) == 64)
3247 i_ehdrp
->e_machine
= EM_SPARCV9
;
3249 i_ehdrp
->e_machine
= EM_SPARC
;
3252 i_ehdrp
->e_machine
= EM_S370
;
3255 i_ehdrp
->e_machine
= EM_386
;
3258 i_ehdrp
->e_machine
= EM_IA_64
;
3261 i_ehdrp
->e_machine
= EM_68K
;
3264 i_ehdrp
->e_machine
= EM_88K
;
3267 i_ehdrp
->e_machine
= EM_860
;
3270 i_ehdrp
->e_machine
= EM_960
;
3272 case bfd_arch_mips
: /* MIPS Rxxxx */
3273 i_ehdrp
->e_machine
= EM_MIPS
; /* only MIPS R3000 */
3276 i_ehdrp
->e_machine
= EM_PARISC
;
3278 case bfd_arch_powerpc
:
3279 i_ehdrp
->e_machine
= EM_PPC
;
3281 case bfd_arch_alpha
:
3282 i_ehdrp
->e_machine
= EM_ALPHA
;
3285 i_ehdrp
->e_machine
= EM_SH
;
3288 i_ehdrp
->e_machine
= EM_CYGNUS_D10V
;
3291 i_ehdrp
->e_machine
= EM_CYGNUS_D30V
;
3294 i_ehdrp
->e_machine
= EM_CYGNUS_FR30
;
3296 case bfd_arch_mcore
:
3297 i_ehdrp
->e_machine
= EM_MCORE
;
3300 i_ehdrp
->e_machine
= EM_AVR
;
3303 switch (bfd_get_mach (abfd
))
3306 case 0: i_ehdrp
->e_machine
= EM_CYGNUS_V850
; break;
3310 i_ehdrp
->e_machine
= EM_CYGNUS_ARC
;
3313 i_ehdrp
->e_machine
= EM_ARM
;
3316 i_ehdrp
->e_machine
= EM_CYGNUS_M32R
;
3318 case bfd_arch_mn10200
:
3319 i_ehdrp
->e_machine
= EM_CYGNUS_MN10200
;
3321 case bfd_arch_mn10300
:
3322 i_ehdrp
->e_machine
= EM_CYGNUS_MN10300
;
3325 i_ehdrp
->e_machine
= EM_PJ
;
3327 /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
3329 i_ehdrp
->e_machine
= EM_NONE
;
3331 i_ehdrp
->e_version
= bed
->s
->ev_current
;
3332 i_ehdrp
->e_ehsize
= bed
->s
->sizeof_ehdr
;
3334 /* no program header, for now. */
3335 i_ehdrp
->e_phoff
= 0;
3336 i_ehdrp
->e_phentsize
= 0;
3337 i_ehdrp
->e_phnum
= 0;
3339 /* each bfd section is section header entry */
3340 i_ehdrp
->e_entry
= bfd_get_start_address (abfd
);
3341 i_ehdrp
->e_shentsize
= bed
->s
->sizeof_shdr
;
3343 /* if we're building an executable, we'll need a program header table */
3344 if (abfd
->flags
& EXEC_P
)
3346 /* it all happens later */
3348 i_ehdrp
->e_phentsize
= sizeof (Elf_External_Phdr
);
3350 /* elf_build_phdrs() returns a (NULL-terminated) array of
3351 Elf_Internal_Phdrs */
3352 i_phdrp
= elf_build_phdrs (abfd
, i_ehdrp
, i_shdrp
, &i_ehdrp
->e_phnum
);
3353 i_ehdrp
->e_phoff
= outbase
;
3354 outbase
+= i_ehdrp
->e_phentsize
* i_ehdrp
->e_phnum
;
3359 i_ehdrp
->e_phentsize
= 0;
3361 i_ehdrp
->e_phoff
= 0;
3364 elf_tdata (abfd
)->symtab_hdr
.sh_name
=
3365 (unsigned int) _bfd_stringtab_add (shstrtab
, ".symtab", true, false);
3366 elf_tdata (abfd
)->strtab_hdr
.sh_name
=
3367 (unsigned int) _bfd_stringtab_add (shstrtab
, ".strtab", true, false);
3368 elf_tdata (abfd
)->shstrtab_hdr
.sh_name
=
3369 (unsigned int) _bfd_stringtab_add (shstrtab
, ".shstrtab", true, false);
3370 if (elf_tdata (abfd
)->symtab_hdr
.sh_name
== (unsigned int) -1
3371 || elf_tdata (abfd
)->symtab_hdr
.sh_name
== (unsigned int) -1
3372 || elf_tdata (abfd
)->shstrtab_hdr
.sh_name
== (unsigned int) -1)
3378 /* Assign file positions for all the reloc sections which are not part
3379 of the loadable file image. */
3382 _bfd_elf_assign_file_positions_for_relocs (abfd
)
3387 Elf_Internal_Shdr
**shdrpp
;
3389 off
= elf_tdata (abfd
)->next_file_pos
;
3391 for (i
= 1, shdrpp
= elf_elfsections (abfd
) + 1;
3392 i
< elf_elfheader (abfd
)->e_shnum
;
3395 Elf_Internal_Shdr
*shdrp
;
3398 if ((shdrp
->sh_type
== SHT_REL
|| shdrp
->sh_type
== SHT_RELA
)
3399 && shdrp
->sh_offset
== -1)
3400 off
= _bfd_elf_assign_file_position_for_section (shdrp
, off
, true);
3403 elf_tdata (abfd
)->next_file_pos
= off
;
3407 _bfd_elf_write_object_contents (abfd
)
3410 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
3411 Elf_Internal_Ehdr
*i_ehdrp
;
3412 Elf_Internal_Shdr
**i_shdrp
;
3416 if (! abfd
->output_has_begun
3417 && ! _bfd_elf_compute_section_file_positions
3418 (abfd
, (struct bfd_link_info
*) NULL
))
3421 i_shdrp
= elf_elfsections (abfd
);
3422 i_ehdrp
= elf_elfheader (abfd
);
3425 bfd_map_over_sections (abfd
, bed
->s
->write_relocs
, &failed
);
3429 _bfd_elf_assign_file_positions_for_relocs (abfd
);
3431 /* After writing the headers, we need to write the sections too... */
3432 for (count
= 1; count
< i_ehdrp
->e_shnum
; count
++)
3434 if (bed
->elf_backend_section_processing
)
3435 (*bed
->elf_backend_section_processing
) (abfd
, i_shdrp
[count
]);
3436 if (i_shdrp
[count
]->contents
)
3438 if (bfd_seek (abfd
, i_shdrp
[count
]->sh_offset
, SEEK_SET
) != 0
3439 || (bfd_write (i_shdrp
[count
]->contents
, i_shdrp
[count
]->sh_size
,
3441 != i_shdrp
[count
]->sh_size
))
3446 /* Write out the section header names. */
3447 if (bfd_seek (abfd
, elf_tdata (abfd
)->shstrtab_hdr
.sh_offset
, SEEK_SET
) != 0
3448 || ! _bfd_stringtab_emit (abfd
, elf_shstrtab (abfd
)))
3451 if (bed
->elf_backend_final_write_processing
)
3452 (*bed
->elf_backend_final_write_processing
) (abfd
,
3453 elf_tdata (abfd
)->linker
);
3455 return bed
->s
->write_shdrs_and_ehdr (abfd
);
3459 _bfd_elf_write_corefile_contents (abfd
)
3462 /* Hopefully this can be done just like an object file. */
3463 return _bfd_elf_write_object_contents (abfd
);
3465 /* given a section, search the header to find them... */
3467 _bfd_elf_section_from_bfd_section (abfd
, asect
)
3471 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
3472 Elf_Internal_Shdr
**i_shdrp
= elf_elfsections (abfd
);
3474 Elf_Internal_Shdr
*hdr
;
3475 int maxindex
= elf_elfheader (abfd
)->e_shnum
;
3477 for (index
= 0; index
< maxindex
; index
++)
3479 hdr
= i_shdrp
[index
];
3480 if (hdr
->bfd_section
== asect
)
3484 if (bed
->elf_backend_section_from_bfd_section
)
3486 for (index
= 0; index
< maxindex
; index
++)
3490 hdr
= i_shdrp
[index
];
3492 if ((*bed
->elf_backend_section_from_bfd_section
)
3493 (abfd
, hdr
, asect
, &retval
))
3498 if (bfd_is_abs_section (asect
))
3500 if (bfd_is_com_section (asect
))
3502 if (bfd_is_und_section (asect
))
3505 bfd_set_error (bfd_error_nonrepresentable_section
);
3510 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
3514 _bfd_elf_symbol_from_bfd_symbol (abfd
, asym_ptr_ptr
)
3516 asymbol
**asym_ptr_ptr
;
3518 asymbol
*asym_ptr
= *asym_ptr_ptr
;
3520 flagword flags
= asym_ptr
->flags
;
3522 /* When gas creates relocations against local labels, it creates its
3523 own symbol for the section, but does put the symbol into the
3524 symbol chain, so udata is 0. When the linker is generating
3525 relocatable output, this section symbol may be for one of the
3526 input sections rather than the output section. */
3527 if (asym_ptr
->udata
.i
== 0
3528 && (flags
& BSF_SECTION_SYM
)
3529 && asym_ptr
->section
)
3533 if (asym_ptr
->section
->output_section
!= NULL
)
3534 indx
= asym_ptr
->section
->output_section
->index
;
3536 indx
= asym_ptr
->section
->index
;
3537 if (elf_section_syms (abfd
)[indx
])
3538 asym_ptr
->udata
.i
= elf_section_syms (abfd
)[indx
]->udata
.i
;
3541 idx
= asym_ptr
->udata
.i
;
3545 /* This case can occur when using --strip-symbol on a symbol
3546 which is used in a relocation entry. */
3547 (*_bfd_error_handler
)
3548 (_("%s: symbol `%s' required but not present"),
3549 bfd_get_filename (abfd
), bfd_asymbol_name (asym_ptr
));
3550 bfd_set_error (bfd_error_no_symbols
);
3557 _("elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n"),
3558 (long) asym_ptr
, asym_ptr
->name
, idx
, flags
,
3559 elf_symbol_flags (flags
));
3567 /* Copy private BFD data. This copies any program header information. */
3570 copy_private_bfd_data (ibfd
, obfd
)
3574 Elf_Internal_Ehdr
*iehdr
;
3575 struct elf_segment_map
*mfirst
;
3576 struct elf_segment_map
**pm
;
3577 struct elf_segment_map
*m
;
3578 Elf_Internal_Phdr
*p
;
3580 unsigned int num_segments
;
3581 boolean phdr_included
= false;
3583 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
3584 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
3587 if (elf_tdata (ibfd
)->phdr
== NULL
)
3590 iehdr
= elf_elfheader (ibfd
);
3595 num_segments
= elf_elfheader (ibfd
)->e_phnum
;
3597 #define IS_CONTAINED_BY(addr, len, bottom, phdr) \
3598 ((addr) >= (bottom) \
3599 && ( ((addr) + (len)) <= ((bottom) + (phdr)->p_memsz) \
3600 || ((addr) + (len)) <= ((bottom) + (phdr)->p_filesz)))
3602 /* Special case: corefile "NOTE" section containing regs, prpsinfo etc. */
3604 #define IS_COREFILE_NOTE(p, s) \
3605 (p->p_type == PT_NOTE \
3606 && bfd_get_format (ibfd) == bfd_core \
3607 && s->vma == 0 && s->lma == 0 \
3608 && (bfd_vma) s->filepos >= p->p_offset \
3609 && (bfd_vma) s->filepos + s->_raw_size \
3610 <= p->p_offset + p->p_filesz)
3612 /* The complicated case when p_vaddr is 0 is to handle the Solaris
3613 linker, which generates a PT_INTERP section with p_vaddr and
3614 p_memsz set to 0. */
3616 #define IS_SOLARIS_PT_INTERP(p, s) \
3618 && p->p_filesz > 0 \
3619 && (s->flags & SEC_HAS_CONTENTS) != 0 \
3620 && s->_raw_size > 0 \
3621 && (bfd_vma) s->filepos >= p->p_offset \
3622 && ((bfd_vma) s->filepos + s->_raw_size \
3623 <= p->p_offset + p->p_filesz))
3625 /* Scan through the segments specified in the program header
3626 of the input BFD. */
3627 for (i
= 0, p
= elf_tdata (ibfd
)->phdr
; i
< num_segments
; i
++, p
++)
3631 asection
**sections
;
3634 bfd_vma matching_lma
;
3635 bfd_vma suggested_lma
;
3638 /* For each section in the input BFD, decide if it should be
3639 included in the current segment. A section will be included
3640 if it is within the address space of the segment, and it is
3641 an allocated segment, and there is an output section
3642 associated with it. */
3644 for (s
= ibfd
->sections
; s
!= NULL
; s
= s
->next
)
3645 if (s
->output_section
!= NULL
)
3647 if ((IS_CONTAINED_BY (s
->vma
, s
->_raw_size
, p
->p_vaddr
, p
)
3648 || IS_SOLARIS_PT_INTERP (p
, s
))
3649 && (s
->flags
& SEC_ALLOC
) != 0)
3651 else if (IS_COREFILE_NOTE (p
, s
))
3655 /* Allocate a segment map big enough to contain all of the
3656 sections we have selected. */
3657 m
= ((struct elf_segment_map
*)
3659 (sizeof (struct elf_segment_map
)
3660 + ((size_t) csecs
- 1) * sizeof (asection
*))));
3664 /* Initialise the fields of the segment map. Default to
3665 using the physical address of the segment in the input BFD. */
3667 m
->p_type
= p
->p_type
;
3668 m
->p_flags
= p
->p_flags
;
3669 m
->p_flags_valid
= 1;
3670 m
->p_paddr
= p
->p_paddr
;
3671 m
->p_paddr_valid
= 1;
3673 /* Determine if this segment contains the ELF file header
3674 and if it contains the program headers themselves. */
3675 m
->includes_filehdr
= (p
->p_offset
== 0
3676 && p
->p_filesz
>= iehdr
->e_ehsize
);
3678 m
->includes_phdrs
= 0;
3680 if (! phdr_included
|| p
->p_type
!= PT_LOAD
)
3683 (p
->p_offset
<= (bfd_vma
) iehdr
->e_phoff
3684 && (p
->p_offset
+ p
->p_filesz
3685 >= ((bfd_vma
) iehdr
->e_phoff
3686 + iehdr
->e_phnum
* iehdr
->e_phentsize
)));
3687 if (p
->p_type
== PT_LOAD
&& m
->includes_phdrs
)
3688 phdr_included
= true;
3693 /* Special segments, such as the PT_PHDR segment, may contain
3694 no sections, but ordinary, loadable segments should contain
3697 if (p
->p_type
== PT_LOAD
)
3699 (_("%s: warning: Empty loadable segment detected\n"),
3700 bfd_get_filename (ibfd
));
3709 /* Now scan the sections in the input BFD again and attempt
3710 to add their corresponding output sections to the segment map.
3711 The problem here is how to handle an output section which has
3712 been moved (ie had its LMA changed). There are four possibilities:
3714 1. None of the sections have been moved.
3715 In this case we can continue to use the segment LMA from the
3718 2. All of the sections have been moved by the same amount.
3719 In this case we can change the segment's LMA to match the LMA
3720 of the first section.
3722 3. Some of the sections have been moved, others have not.
3723 In this case those sections which have not been moved can be
3724 placed in the current segment which will have to have its size,
3725 and possibly its LMA changed, and a new segment or segments will
3726 have to be created to contain the other sections.
3728 4. The sections have been moved, but not be the same amount.
3729 In this case we can change the segment's LMA to match the LMA
3730 of the first section and we will have to create a new segment
3731 or segments to contain the other sections.
3733 In order to save time, we allocate an array to hold the section
3734 pointers that we are interested in. As these sections get assigned
3735 to a segment, they are removed from this array. */
3737 sections
= (asection
**) bfd_malloc (sizeof (asection
*) * csecs
);
3738 if (sections
== NULL
)
3741 /* Step One: Scan for segment vs section LMA conflicts.
3742 Also add the sections to the section array allocated above.
3743 Also add the sections to the current segment. In the common
3744 case, where the sections have not been moved, this means that
3745 we have completely filled the segment, and there is nothing
3752 for (j
= 0, s
= ibfd
->sections
; s
!= NULL
; s
= s
->next
)
3754 os
= s
->output_section
;
3756 if ((((IS_CONTAINED_BY (s
->vma
, s
->_raw_size
, p
->p_vaddr
, p
)
3757 || IS_SOLARIS_PT_INTERP (p
, s
))
3758 && (s
->flags
& SEC_ALLOC
) != 0)
3759 || IS_COREFILE_NOTE (p
, s
))
3764 /* The Solaris native linker always sets p_paddr to 0.
3765 We try to catch that case here, and set it to the
3771 && (os
->vma
== (p
->p_vaddr
3772 + (m
->includes_filehdr
3775 + (m
->includes_phdrs
3776 ? iehdr
->e_phnum
* iehdr
->e_phentsize
3778 m
->p_paddr
= p
->p_vaddr
;
3780 /* Match up the physical address of the segment with the
3781 LMA address of the output section. */
3782 if (IS_CONTAINED_BY (os
->lma
, os
->_raw_size
, m
->p_paddr
, p
)
3783 || IS_COREFILE_NOTE (p
, s
))
3785 if (matching_lma
== 0)
3786 matching_lma
= os
->lma
;
3788 /* We assume that if the section fits within the segment
3789 that it does not overlap any other section within that
3791 m
->sections
[isec
++] = os
;
3793 else if (suggested_lma
== 0)
3794 suggested_lma
= os
->lma
;
3798 BFD_ASSERT (j
== csecs
);
3800 /* Step Two: Adjust the physical address of the current segment,
3804 /* All of the sections fitted within the segment as currently
3805 specified. This is the default case. Add the segment to
3806 the list of built segments and carry on to process the next
3807 program header in the input BFD. */
3817 if (matching_lma
!= 0)
3819 /* At least one section fits inside the current segment.
3820 Keep it, but modify its physical address to match the
3821 LMA of the first section that fitted. */
3823 m
->p_paddr
= matching_lma
;
3827 /* None of the sections fitted inside the current segment.
3828 Change the current segment's physical address to match
3829 the LMA of the first section. */
3831 m
->p_paddr
= suggested_lma
;
3834 /* Offset the segment physical address from the lma to allow
3835 for space taken up by elf headers. */
3836 if (m
->includes_filehdr
)
3837 m
->p_paddr
-= iehdr
->e_ehsize
;
3839 if (m
->includes_phdrs
)
3840 m
->p_paddr
-= iehdr
->e_phnum
* iehdr
->e_phentsize
;
3843 /* Step Three: Loop over the sections again, this time assigning
3844 those that fit to the current segment and remvoing them from the
3845 sections array; but making sure not to leave large gaps. Once all
3846 possible sections have been assigned to the current segment it is
3847 added to the list of built segments and if sections still remain
3848 to be assigned, a new segment is constructed before repeating
3856 /* Fill the current segment with sections that fit. */
3857 for (j
= 0; j
< csecs
; j
++)
3864 os
= s
->output_section
;
3866 if (IS_CONTAINED_BY (os
->lma
, os
->_raw_size
, m
->p_paddr
, p
)
3867 || IS_COREFILE_NOTE (p
, s
))
3871 /* If the first section in a segment does not start at
3872 the beginning of the segment, then something is wrong. */
3873 if (os
->lma
!= (m
->p_paddr
3874 + (m
->includes_filehdr
3875 ? iehdr
->e_ehsize
: 0)
3876 + (m
->includes_phdrs
3877 ? iehdr
->e_phnum
* iehdr
->e_phentsize
3883 asection
* prev_sec
;
3884 bfd_vma maxpagesize
;
3886 prev_sec
= m
->sections
[m
->count
- 1];
3887 maxpagesize
= get_elf_backend_data (obfd
)->maxpagesize
;
3889 /* If the gap between the end of the previous section
3890 and the start of this section is more than maxpagesize
3891 then we need to start a new segment. */
3892 if (BFD_ALIGN (prev_sec
->lma
+ prev_sec
->_raw_size
, maxpagesize
)
3893 < BFD_ALIGN (os
->lma
, maxpagesize
))
3895 if (suggested_lma
== 0)
3896 suggested_lma
= os
->lma
;
3902 m
->sections
[m
->count
++] = os
;
3906 else if (suggested_lma
== 0)
3907 suggested_lma
= os
->lma
;
3910 BFD_ASSERT (m
->count
> 0);
3912 /* Add the current segment to the list of built segments. */
3918 /* We still have not allocated all of the sections to
3919 segments. Create a new segment here, initialise it
3920 and carry on looping. */
3922 m
= ((struct elf_segment_map
*)
3924 (sizeof (struct elf_segment_map
)
3925 + ((size_t) csecs
- 1) * sizeof (asection
*))));
3929 /* Initialise the fields of the segment map. Set the physical
3930 physical address to the LMA of the first section that has
3931 not yet been assigned. */
3934 m
->p_type
= p
->p_type
;
3935 m
->p_flags
= p
->p_flags
;
3936 m
->p_flags_valid
= 1;
3937 m
->p_paddr
= suggested_lma
;
3938 m
->p_paddr_valid
= 1;
3939 m
->includes_filehdr
= 0;
3940 m
->includes_phdrs
= 0;
3943 while (isec
< csecs
);
3948 /* The Solaris linker creates program headers in which all the
3949 p_paddr fields are zero. When we try to objcopy or strip such a
3950 file, we get confused. Check for this case, and if we find it
3951 reset the p_paddr_valid fields. */
3952 for (m
= mfirst
; m
!= NULL
; m
= m
->next
)
3953 if (m
->p_paddr
!= 0)
3957 for (m
= mfirst
; m
!= NULL
; m
= m
->next
)
3958 m
->p_paddr_valid
= 0;
3961 elf_tdata (obfd
)->segment_map
= mfirst
;
3964 /* Final Step: Sort the segments into ascending order of physical address. */
3967 struct elf_segment_map
* prev
;
3970 for (m
= mfirst
->next
; m
!= NULL
; prev
= m
, m
= m
->next
)
3972 /* Yes I know - its a bubble sort....*/
3973 if (m
->next
!= NULL
&& (m
->next
->p_paddr
< m
->p_paddr
))
3975 /* swap m and m->next */
3976 prev
->next
= m
->next
;
3977 m
->next
= m
->next
->next
;
3978 prev
->next
->next
= m
;
3987 #undef IS_CONTAINED_BY
3988 #undef IS_SOLARIS_PT_INTERP
3989 #undef IS_COREFILE_NOTE
3993 /* Copy private section information. This copies over the entsize
3994 field, and sometimes the info field. */
3997 _bfd_elf_copy_private_section_data (ibfd
, isec
, obfd
, osec
)
4003 Elf_Internal_Shdr
*ihdr
, *ohdr
;
4005 if (ibfd
->xvec
->flavour
!= bfd_target_elf_flavour
4006 || obfd
->xvec
->flavour
!= bfd_target_elf_flavour
)
4009 /* Copy over private BFD data if it has not already been copied.
4010 This must be done here, rather than in the copy_private_bfd_data
4011 entry point, because the latter is called after the section
4012 contents have been set, which means that the program headers have
4013 already been worked out. */
4014 if (elf_tdata (obfd
)->segment_map
== NULL
4015 && elf_tdata (ibfd
)->phdr
!= NULL
)
4019 /* Only set up the segments if there are no more SEC_ALLOC
4020 sections. FIXME: This won't do the right thing if objcopy is
4021 used to remove the last SEC_ALLOC section, since objcopy
4022 won't call this routine in that case. */
4023 for (s
= isec
->next
; s
!= NULL
; s
= s
->next
)
4024 if ((s
->flags
& SEC_ALLOC
) != 0)
4028 if (! copy_private_bfd_data (ibfd
, obfd
))
4033 ihdr
= &elf_section_data (isec
)->this_hdr
;
4034 ohdr
= &elf_section_data (osec
)->this_hdr
;
4036 ohdr
->sh_entsize
= ihdr
->sh_entsize
;
4038 if (ihdr
->sh_type
== SHT_SYMTAB
4039 || ihdr
->sh_type
== SHT_DYNSYM
4040 || ihdr
->sh_type
== SHT_GNU_verneed
4041 || ihdr
->sh_type
== SHT_GNU_verdef
)
4042 ohdr
->sh_info
= ihdr
->sh_info
;
4044 elf_section_data (osec
)->use_rela_p
4045 = elf_section_data (isec
)->use_rela_p
;
4050 /* Copy private symbol information. If this symbol is in a section
4051 which we did not map into a BFD section, try to map the section
4052 index correctly. We use special macro definitions for the mapped
4053 section indices; these definitions are interpreted by the
4054 swap_out_syms function. */
4056 #define MAP_ONESYMTAB (SHN_LORESERVE - 1)
4057 #define MAP_DYNSYMTAB (SHN_LORESERVE - 2)
4058 #define MAP_STRTAB (SHN_LORESERVE - 3)
4059 #define MAP_SHSTRTAB (SHN_LORESERVE - 4)
4062 _bfd_elf_copy_private_symbol_data (ibfd
, isymarg
, obfd
, osymarg
)
4068 elf_symbol_type
*isym
, *osym
;
4070 if (bfd_get_flavour (ibfd
) != bfd_target_elf_flavour
4071 || bfd_get_flavour (obfd
) != bfd_target_elf_flavour
)
4074 isym
= elf_symbol_from (ibfd
, isymarg
);
4075 osym
= elf_symbol_from (obfd
, osymarg
);
4079 && bfd_is_abs_section (isym
->symbol
.section
))
4083 shndx
= isym
->internal_elf_sym
.st_shndx
;
4084 if (shndx
== elf_onesymtab (ibfd
))
4085 shndx
= MAP_ONESYMTAB
;
4086 else if (shndx
== elf_dynsymtab (ibfd
))
4087 shndx
= MAP_DYNSYMTAB
;
4088 else if (shndx
== elf_tdata (ibfd
)->strtab_section
)
4090 else if (shndx
== elf_tdata (ibfd
)->shstrtab_section
)
4091 shndx
= MAP_SHSTRTAB
;
4092 osym
->internal_elf_sym
.st_shndx
= shndx
;
4098 /* Swap out the symbols. */
4101 swap_out_syms (abfd
, sttp
, relocatable_p
)
4103 struct bfd_strtab_hash
**sttp
;
4106 struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
4108 if (!elf_map_symbols (abfd
))
4111 /* Dump out the symtabs. */
4113 int symcount
= bfd_get_symcount (abfd
);
4114 asymbol
**syms
= bfd_get_outsymbols (abfd
);
4115 struct bfd_strtab_hash
*stt
;
4116 Elf_Internal_Shdr
*symtab_hdr
;
4117 Elf_Internal_Shdr
*symstrtab_hdr
;
4118 char *outbound_syms
;
4121 stt
= _bfd_elf_stringtab_init ();
4125 symtab_hdr
= &elf_tdata (abfd
)->symtab_hdr
;
4126 symtab_hdr
->sh_type
= SHT_SYMTAB
;
4127 symtab_hdr
->sh_entsize
= bed
->s
->sizeof_sym
;
4128 symtab_hdr
->sh_size
= symtab_hdr
->sh_entsize
* (symcount
+ 1);
4129 symtab_hdr
->sh_info
= elf_num_locals (abfd
) + 1;
4130 symtab_hdr
->sh_addralign
= bed
->s
->file_align
;
4132 symstrtab_hdr
= &elf_tdata (abfd
)->strtab_hdr
;
4133 symstrtab_hdr
->sh_type
= SHT_STRTAB
;
4135 outbound_syms
= bfd_alloc (abfd
,
4136 (1 + symcount
) * bed
->s
->sizeof_sym
);
4137 if (outbound_syms
== NULL
)
4139 symtab_hdr
->contents
= (PTR
) outbound_syms
;
4141 /* now generate the data (for "contents") */
4143 /* Fill in zeroth symbol and swap it out. */
4144 Elf_Internal_Sym sym
;
4150 sym
.st_shndx
= SHN_UNDEF
;
4151 bed
->s
->swap_symbol_out (abfd
, &sym
, (PTR
) outbound_syms
);
4152 outbound_syms
+= bed
->s
->sizeof_sym
;
4154 for (idx
= 0; idx
< symcount
; idx
++)
4156 Elf_Internal_Sym sym
;
4157 bfd_vma value
= syms
[idx
]->value
;
4158 elf_symbol_type
*type_ptr
;
4159 flagword flags
= syms
[idx
]->flags
;
4162 if (flags
& BSF_SECTION_SYM
)
4163 /* Section symbols have no names. */
4167 sym
.st_name
= (unsigned long) _bfd_stringtab_add (stt
,
4170 if (sym
.st_name
== (unsigned long) -1)
4174 type_ptr
= elf_symbol_from (abfd
, syms
[idx
]);
4176 if ((flags
& BSF_SECTION_SYM
) == 0
4177 && bfd_is_com_section (syms
[idx
]->section
))
4179 /* ELF common symbols put the alignment into the `value' field,
4180 and the size into the `size' field. This is backwards from
4181 how BFD handles it, so reverse it here. */
4182 sym
.st_size
= value
;
4183 if (type_ptr
== NULL
4184 || type_ptr
->internal_elf_sym
.st_value
== 0)
4185 sym
.st_value
= value
>= 16 ? 16 : (1 << bfd_log2 (value
));
4187 sym
.st_value
= type_ptr
->internal_elf_sym
.st_value
;
4188 sym
.st_shndx
= _bfd_elf_section_from_bfd_section
4189 (abfd
, syms
[idx
]->section
);
4193 asection
*sec
= syms
[idx
]->section
;
4196 if (sec
->output_section
)
4198 value
+= sec
->output_offset
;
4199 sec
= sec
->output_section
;
4201 /* Don't add in the section vma for relocatable output. */
4202 if (! relocatable_p
)
4204 sym
.st_value
= value
;
4205 sym
.st_size
= type_ptr
? type_ptr
->internal_elf_sym
.st_size
: 0;
4207 if (bfd_is_abs_section (sec
)
4209 && type_ptr
->internal_elf_sym
.st_shndx
!= 0)
4211 /* This symbol is in a real ELF section which we did
4212 not create as a BFD section. Undo the mapping done
4213 by copy_private_symbol_data. */
4214 shndx
= type_ptr
->internal_elf_sym
.st_shndx
;
4218 shndx
= elf_onesymtab (abfd
);
4221 shndx
= elf_dynsymtab (abfd
);
4224 shndx
= elf_tdata (abfd
)->strtab_section
;
4227 shndx
= elf_tdata (abfd
)->shstrtab_section
;
4235 shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec
);
4241 /* Writing this would be a hell of a lot easier if
4242 we had some decent documentation on bfd, and
4243 knew what to expect of the library, and what to
4244 demand of applications. For example, it
4245 appears that `objcopy' might not set the
4246 section of a symbol to be a section that is
4247 actually in the output file. */
4248 sec2
= bfd_get_section_by_name (abfd
, sec
->name
);
4249 BFD_ASSERT (sec2
!= 0);
4250 shndx
= _bfd_elf_section_from_bfd_section (abfd
, sec2
);
4251 BFD_ASSERT (shndx
!= -1);
4255 sym
.st_shndx
= shndx
;
4258 if ((flags
& BSF_FUNCTION
) != 0)
4260 else if ((flags
& BSF_OBJECT
) != 0)
4265 /* Processor-specific types */
4266 if (type_ptr
!= NULL
4267 && bed
->elf_backend_get_symbol_type
)
4268 type
= (*bed
->elf_backend_get_symbol_type
) (&type_ptr
->internal_elf_sym
, type
);
4270 if (flags
& BSF_SECTION_SYM
)
4271 sym
.st_info
= ELF_ST_INFO (STB_LOCAL
, STT_SECTION
);
4272 else if (bfd_is_com_section (syms
[idx
]->section
))
4273 sym
.st_info
= ELF_ST_INFO (STB_GLOBAL
, type
);
4274 else if (bfd_is_und_section (syms
[idx
]->section
))
4275 sym
.st_info
= ELF_ST_INFO (((flags
& BSF_WEAK
)
4279 else if (flags
& BSF_FILE
)
4280 sym
.st_info
= ELF_ST_INFO (STB_LOCAL
, STT_FILE
);
4283 int bind
= STB_LOCAL
;
4285 if (flags
& BSF_LOCAL
)
4287 else if (flags
& BSF_WEAK
)
4289 else if (flags
& BSF_GLOBAL
)
4292 sym
.st_info
= ELF_ST_INFO (bind
, type
);
4295 if (type_ptr
!= NULL
)
4296 sym
.st_other
= type_ptr
->internal_elf_sym
.st_other
;
4300 bed
->s
->swap_symbol_out (abfd
, &sym
, (PTR
) outbound_syms
);
4301 outbound_syms
+= bed
->s
->sizeof_sym
;
4305 symstrtab_hdr
->sh_size
= _bfd_stringtab_size (stt
);
4306 symstrtab_hdr
->sh_type
= SHT_STRTAB
;
4308 symstrtab_hdr
->sh_flags
= 0;
4309 symstrtab_hdr
->sh_addr
= 0;
4310 symstrtab_hdr
->sh_entsize
= 0;
4311 symstrtab_hdr
->sh_link
= 0;
4312 symstrtab_hdr
->sh_info
= 0;
4313 symstrtab_hdr
->sh_addralign
= 1;
4319 /* Return the number of bytes required to hold the symtab vector.
4321 Note that we base it on the count plus 1, since we will null terminate
4322 the vector allocated based on this size. However, the ELF symbol table
4323 always has a dummy entry as symbol #0, so it ends up even. */
4326 _bfd_elf_get_symtab_upper_bound (abfd
)
4331 Elf_Internal_Shdr
*hdr
= &elf_tdata (abfd
)->symtab_hdr
;
4333 symcount
= hdr
->sh_size
/ get_elf_backend_data (abfd
)->s
->sizeof_sym
;
4334 symtab_size
= (symcount
- 1 + 1) * (sizeof (asymbol
*));
4340 _bfd_elf_get_dynamic_symtab_upper_bound (abfd
)
4345 Elf_Internal_Shdr
*hdr
= &elf_tdata (abfd
)->dynsymtab_hdr
;
4347 if (elf_dynsymtab (abfd
) == 0)
4349 bfd_set_error (bfd_error_invalid_operation
);
4353 symcount
= hdr
->sh_size
/ get_elf_backend_data (abfd
)->s
->sizeof_sym
;
4354 symtab_size
= (symcount
- 1 + 1) * (sizeof (asymbol
*));
4360 _bfd_elf_get_reloc_upper_bound (abfd
, asect
)
4361 bfd
*abfd ATTRIBUTE_UNUSED
;
4364 return (asect
->reloc_count
+ 1) * sizeof (arelent
*);
4367 /* Canonicalize the relocs. */
4370 _bfd_elf_canonicalize_reloc (abfd
, section
, relptr
, symbols
)
4379 if (! get_elf_backend_data (abfd
)->s
->slurp_reloc_table (abfd
,
4385 tblptr
= section
->relocation
;
4386 for (i
= 0; i
< section
->reloc_count
; i
++)
4387 *relptr
++ = tblptr
++;
4391 return section
->reloc_count
;
4395 _bfd_elf_get_symtab (abfd
, alocation
)
4397 asymbol
**alocation
;
4399 long symcount
= get_elf_backend_data (abfd
)->s
->slurp_symbol_table
4400 (abfd
, alocation
, false);
4403 bfd_get_symcount (abfd
) = symcount
;
4408 _bfd_elf_canonicalize_dynamic_symtab (abfd
, alocation
)
4410 asymbol
**alocation
;
4412 return get_elf_backend_data (abfd
)->s
->slurp_symbol_table
4413 (abfd
, alocation
, true);
4416 /* Return the size required for the dynamic reloc entries. Any
4417 section that was actually installed in the BFD, and has type
4418 SHT_REL or SHT_RELA, and uses the dynamic symbol table, is
4419 considered to be a dynamic reloc section. */
4422 _bfd_elf_get_dynamic_reloc_upper_bound (abfd
)
4428 if (elf_dynsymtab (abfd
) == 0)
4430 bfd_set_error (bfd_error_invalid_operation
);
4434 ret
= sizeof (arelent
*);
4435 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
4436 if (elf_section_data (s
)->this_hdr
.sh_link
== elf_dynsymtab (abfd
)
4437 && (elf_section_data (s
)->this_hdr
.sh_type
== SHT_REL
4438 || elf_section_data (s
)->this_hdr
.sh_type
== SHT_RELA
))
4439 ret
+= ((s
->_raw_size
/ elf_section_data (s
)->this_hdr
.sh_entsize
)
4440 * sizeof (arelent
*));
4445 /* Canonicalize the dynamic relocation entries. Note that we return
4446 the dynamic relocations as a single block, although they are
4447 actually associated with particular sections; the interface, which
4448 was designed for SunOS style shared libraries, expects that there
4449 is only one set of dynamic relocs. Any section that was actually
4450 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses
4451 the dynamic symbol table, is considered to be a dynamic reloc
4455 _bfd_elf_canonicalize_dynamic_reloc (abfd
, storage
, syms
)
4460 boolean (*slurp_relocs
) PARAMS ((bfd
*, asection
*, asymbol
**, boolean
));
4464 if (elf_dynsymtab (abfd
) == 0)
4466 bfd_set_error (bfd_error_invalid_operation
);
4470 slurp_relocs
= get_elf_backend_data (abfd
)->s
->slurp_reloc_table
;
4472 for (s
= abfd
->sections
; s
!= NULL
; s
= s
->next
)
4474 if (elf_section_data (s
)->this_hdr
.sh_link
== elf_dynsymtab (abfd
)
4475 && (elf_section_data (s
)->this_hdr
.sh_type
== SHT_REL
4476 || elf_section_data (s
)->this_hdr
.sh_type
== SHT_RELA
))
4481 if (! (*slurp_relocs
) (abfd
, s
, syms
, true))
4483 count
= s
->_raw_size
/ elf_section_data (s
)->this_hdr
.sh_entsize
;
4485 for (i
= 0; i
< count
; i
++)
4496 /* Read in the version information. */
4499 _bfd_elf_slurp_version_tables (abfd
)
4502 bfd_byte
*contents
= NULL
;
4504 if (elf_dynverdef (abfd
) != 0)
4506 Elf_Internal_Shdr
*hdr
;
4507 Elf_External_Verdef
*everdef
;
4508 Elf_Internal_Verdef
*iverdef
;
4511 hdr
= &elf_tdata (abfd
)->dynverdef_hdr
;
4513 elf_tdata (abfd
)->verdef
=
4514 ((Elf_Internal_Verdef
*)
4515 bfd_zalloc (abfd
, hdr
->sh_info
* sizeof (Elf_Internal_Verdef
)));
4516 if (elf_tdata (abfd
)->verdef
== NULL
)
4519 elf_tdata (abfd
)->cverdefs
= hdr
->sh_info
;
4521 contents
= (bfd_byte
*) bfd_malloc (hdr
->sh_size
);
4522 if (contents
== NULL
)
4524 if (bfd_seek (abfd
, hdr
->sh_offset
, SEEK_SET
) != 0
4525 || bfd_read ((PTR
) contents
, 1, hdr
->sh_size
, abfd
) != hdr
->sh_size
)
4528 everdef
= (Elf_External_Verdef
*) contents
;
4529 iverdef
= elf_tdata (abfd
)->verdef
;
4530 for (i
= 0; i
< hdr
->sh_info
; i
++, iverdef
++)
4532 Elf_External_Verdaux
*everdaux
;
4533 Elf_Internal_Verdaux
*iverdaux
;
4536 _bfd_elf_swap_verdef_in (abfd
, everdef
, iverdef
);
4538 iverdef
->vd_bfd
= abfd
;
4540 iverdef
->vd_auxptr
= ((Elf_Internal_Verdaux
*)
4543 * sizeof (Elf_Internal_Verdaux
))));
4544 if (iverdef
->vd_auxptr
== NULL
)
4547 everdaux
= ((Elf_External_Verdaux
*)
4548 ((bfd_byte
*) everdef
+ iverdef
->vd_aux
));
4549 iverdaux
= iverdef
->vd_auxptr
;
4550 for (j
= 0; j
< iverdef
->vd_cnt
; j
++, iverdaux
++)
4552 _bfd_elf_swap_verdaux_in (abfd
, everdaux
, iverdaux
);
4554 iverdaux
->vda_nodename
=
4555 bfd_elf_string_from_elf_section (abfd
, hdr
->sh_link
,
4556 iverdaux
->vda_name
);
4557 if (iverdaux
->vda_nodename
== NULL
)
4560 if (j
+ 1 < iverdef
->vd_cnt
)
4561 iverdaux
->vda_nextptr
= iverdaux
+ 1;
4563 iverdaux
->vda_nextptr
= NULL
;
4565 everdaux
= ((Elf_External_Verdaux
*)
4566 ((bfd_byte
*) everdaux
+ iverdaux
->vda_next
));
4569 iverdef
->vd_nodename
= iverdef
->vd_auxptr
->vda_nodename
;
4571 if (i
+ 1 < hdr
->sh_info
)
4572 iverdef
->vd_nextdef
= iverdef
+ 1;
4574 iverdef
->vd_nextdef
= NULL
;
4576 everdef
= ((Elf_External_Verdef
*)
4577 ((bfd_byte
*) everdef
+ iverdef
->vd_next
));
4584 if (elf_dynverref (abfd
) != 0)
4586 Elf_Internal_Shdr
*hdr
;
4587 Elf_External_Verneed
*everneed
;
4588 Elf_Internal_Verneed
*iverneed
;
4591 hdr
= &elf_tdata (abfd
)->dynverref_hdr
;
4593 elf_tdata (abfd
)->verref
=
4594 ((Elf_Internal_Verneed
*)
4595 bfd_zalloc (abfd
, hdr
->sh_info
* sizeof (Elf_Internal_Verneed
)));
4596 if (elf_tdata (abfd
)->verref
== NULL
)
4599 elf_tdata (abfd
)->cverrefs
= hdr
->sh_info
;
4601 contents
= (bfd_byte
*) bfd_malloc (hdr
->sh_size
);
4602 if (contents
== NULL
)
4604 if (bfd_seek (abfd
, hdr
->sh_offset
, SEEK_SET
) != 0
4605 || bfd_read ((PTR
) contents
, 1, hdr
->sh_size
, abfd
) != hdr
->sh_size
)
4608 everneed
= (Elf_External_Verneed
*) contents
;
4609 iverneed
= elf_tdata (abfd
)->verref
;
4610 for (i
= 0; i
< hdr
->sh_info
; i
++, iverneed
++)
4612 Elf_External_Vernaux
*evernaux
;
4613 Elf_Internal_Vernaux
*ivernaux
;
4616 _bfd_elf_swap_verneed_in (abfd
, everneed
, iverneed
);
4618 iverneed
->vn_bfd
= abfd
;
4620 iverneed
->vn_filename
=
4621 bfd_elf_string_from_elf_section (abfd
, hdr
->sh_link
,
4623 if (iverneed
->vn_filename
== NULL
)
4626 iverneed
->vn_auxptr
=
4627 ((Elf_Internal_Vernaux
*)
4629 iverneed
->vn_cnt
* sizeof (Elf_Internal_Vernaux
)));
4631 evernaux
= ((Elf_External_Vernaux
*)
4632 ((bfd_byte
*) everneed
+ iverneed
->vn_aux
));
4633 ivernaux
= iverneed
->vn_auxptr
;
4634 for (j
= 0; j
< iverneed
->vn_cnt
; j
++, ivernaux
++)
4636 _bfd_elf_swap_vernaux_in (abfd
, evernaux
, ivernaux
);
4638 ivernaux
->vna_nodename
=
4639 bfd_elf_string_from_elf_section (abfd
, hdr
->sh_link
,
4640 ivernaux
->vna_name
);
4641 if (ivernaux
->vna_nodename
== NULL
)
4644 if (j
+ 1 < iverneed
->vn_cnt
)
4645 ivernaux
->vna_nextptr
= ivernaux
+ 1;
4647 ivernaux
->vna_nextptr
= NULL
;
4649 evernaux
= ((Elf_External_Vernaux
*)
4650 ((bfd_byte
*) evernaux
+ ivernaux
->vna_next
));
4653 if (i
+ 1 < hdr
->sh_info
)
4654 iverneed
->vn_nextref
= iverneed
+ 1;
4656 iverneed
->vn_nextref
= NULL
;
4658 everneed
= ((Elf_External_Verneed
*)
4659 ((bfd_byte
*) everneed
+ iverneed
->vn_next
));
4669 if (contents
== NULL
)
4675 _bfd_elf_make_empty_symbol (abfd
)
4678 elf_symbol_type
*newsym
;
4680 newsym
= (elf_symbol_type
*) bfd_zalloc (abfd
, sizeof (elf_symbol_type
));
4685 newsym
->symbol
.the_bfd
= abfd
;
4686 return &newsym
->symbol
;
4691 _bfd_elf_get_symbol_info (ignore_abfd
, symbol
, ret
)
4692 bfd
*ignore_abfd ATTRIBUTE_UNUSED
;
4696 bfd_symbol_info (symbol
, ret
);
4699 /* Return whether a symbol name implies a local symbol. Most targets
4700 use this function for the is_local_label_name entry point, but some
4704 _bfd_elf_is_local_label_name (abfd
, name
)
4705 bfd
*abfd ATTRIBUTE_UNUSED
;
4708 /* Normal local symbols start with ``.L''. */
4709 if (name
[0] == '.' && name
[1] == 'L')
4712 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
4713 DWARF debugging symbols starting with ``..''. */
4714 if (name
[0] == '.' && name
[1] == '.')
4717 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
4718 emitting DWARF debugging output. I suspect this is actually a
4719 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
4720 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
4721 underscore to be emitted on some ELF targets). For ease of use,
4722 we treat such symbols as local. */
4723 if (name
[0] == '_' && name
[1] == '.' && name
[2] == 'L' && name
[3] == '_')
4730 _bfd_elf_get_lineno (ignore_abfd
, symbol
)
4731 bfd
*ignore_abfd ATTRIBUTE_UNUSED
;
4732 asymbol
*symbol ATTRIBUTE_UNUSED
;
4739 _bfd_elf_set_arch_mach (abfd
, arch
, machine
)
4741 enum bfd_architecture arch
;
4742 unsigned long machine
;
4744 /* If this isn't the right architecture for this backend, and this
4745 isn't the generic backend, fail. */
4746 if (arch
!= get_elf_backend_data (abfd
)->arch
4747 && arch
!= bfd_arch_unknown
4748 && get_elf_backend_data (abfd
)->arch
!= bfd_arch_unknown
)
4751 return bfd_default_set_arch_mach (abfd
, arch
, machine
);
4754 /* Find the nearest line to a particular section and offset, for error
4758 _bfd_elf_find_nearest_line (abfd
,
4769 CONST
char **filename_ptr
;
4770 CONST
char **functionname_ptr
;
4771 unsigned int *line_ptr
;
4774 const char *filename
;
4779 if (_bfd_dwarf1_find_nearest_line (abfd
, section
, symbols
, offset
,
4780 filename_ptr
, functionname_ptr
,
4784 if (_bfd_dwarf2_find_nearest_line (abfd
, section
, symbols
, offset
,
4785 filename_ptr
, functionname_ptr
,
4789 if (! _bfd_stab_section_find_nearest_line (abfd
, symbols
, section
, offset
,
4790 &found
, filename_ptr
,
4791 functionname_ptr
, line_ptr
,
4792 &elf_tdata (abfd
)->line_info
))
4797 if (symbols
== NULL
)
4804 for (p
= symbols
; *p
!= NULL
; p
++)
4808 q
= (elf_symbol_type
*) *p
;
4810 if (bfd_get_section (&q
->symbol
) != section
)
4813 switch (ELF_ST_TYPE (q
->internal_elf_sym
.st_info
))
4818 filename
= bfd_asymbol_name (&q
->symbol
);
4822 if (q
->symbol
.section
== section
4823 && q
->symbol
.value
>= low_func
4824 && q
->symbol
.value
<= offset
)
4826 func
= (asymbol
*) q
;
4827 low_func
= q
->symbol
.value
;
4836 *filename_ptr
= filename
;
4837 *functionname_ptr
= bfd_asymbol_name (func
);
4843 _bfd_elf_sizeof_headers (abfd
, reloc
)
4849 ret
= get_elf_backend_data (abfd
)->s
->sizeof_ehdr
;
4851 ret
+= get_program_header_size (abfd
);
4856 _bfd_elf_set_section_contents (abfd
, section
, location
, offset
, count
)
4861 bfd_size_type count
;
4863 Elf_Internal_Shdr
*hdr
;
4865 if (! abfd
->output_has_begun
4866 && ! _bfd_elf_compute_section_file_positions
4867 (abfd
, (struct bfd_link_info
*) NULL
))
4870 hdr
= &elf_section_data (section
)->this_hdr
;
4872 if (bfd_seek (abfd
, hdr
->sh_offset
+ offset
, SEEK_SET
) == -1)
4874 if (bfd_write (location
, 1, count
, abfd
) != count
)
4881 _bfd_elf_no_info_to_howto (abfd
, cache_ptr
, dst
)
4882 bfd
*abfd ATTRIBUTE_UNUSED
;
4883 arelent
*cache_ptr ATTRIBUTE_UNUSED
;
4884 Elf_Internal_Rela
*dst ATTRIBUTE_UNUSED
;
4891 _bfd_elf_no_info_to_howto_rel (abfd
, cache_ptr
, dst
)
4894 Elf_Internal_Rel
*dst
;
4900 /* Try to convert a non-ELF reloc into an ELF one. */
4903 _bfd_elf_validate_reloc (abfd
, areloc
)
4907 /* Check whether we really have an ELF howto. */
4909 if ((*areloc
->sym_ptr_ptr
)->the_bfd
->xvec
!= abfd
->xvec
)
4911 bfd_reloc_code_real_type code
;
4912 reloc_howto_type
*howto
;
4914 /* Alien reloc: Try to determine its type to replace it with an
4915 equivalent ELF reloc. */
4917 if (areloc
->howto
->pc_relative
)
4919 switch (areloc
->howto
->bitsize
)
4922 code
= BFD_RELOC_8_PCREL
;
4925 code
= BFD_RELOC_12_PCREL
;
4928 code
= BFD_RELOC_16_PCREL
;
4931 code
= BFD_RELOC_24_PCREL
;
4934 code
= BFD_RELOC_32_PCREL
;
4937 code
= BFD_RELOC_64_PCREL
;
4943 howto
= bfd_reloc_type_lookup (abfd
, code
);
4945 if (areloc
->howto
->pcrel_offset
!= howto
->pcrel_offset
)
4947 if (howto
->pcrel_offset
)
4948 areloc
->addend
+= areloc
->address
;
4950 areloc
->addend
-= areloc
->address
; /* addend is unsigned!! */
4955 switch (areloc
->howto
->bitsize
)
4961 code
= BFD_RELOC_14
;
4964 code
= BFD_RELOC_16
;
4967 code
= BFD_RELOC_26
;
4970 code
= BFD_RELOC_32
;
4973 code
= BFD_RELOC_64
;
4979 howto
= bfd_reloc_type_lookup (abfd
, code
);
4983 areloc
->howto
= howto
;
4991 (*_bfd_error_handler
)
4992 (_("%s: unsupported relocation type %s"),
4993 bfd_get_filename (abfd
), areloc
->howto
->name
);
4994 bfd_set_error (bfd_error_bad_value
);
4999 _bfd_elf_close_and_cleanup (abfd
)
5002 if (bfd_get_format (abfd
) == bfd_object
)
5004 if (elf_shstrtab (abfd
) != NULL
)
5005 _bfd_stringtab_free (elf_shstrtab (abfd
));
5008 return _bfd_generic_close_and_cleanup (abfd
);
5011 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
5012 in the relocation's offset. Thus we cannot allow any sort of sanity
5013 range-checking to interfere. There is nothing else to do in processing
5016 bfd_reloc_status_type
5017 _bfd_elf_rel_vtable_reloc_fn (abfd
, re
, symbol
, data
, is
, obfd
, errmsg
)
5018 bfd
*abfd ATTRIBUTE_UNUSED
;
5019 arelent
*re ATTRIBUTE_UNUSED
;
5020 struct symbol_cache_entry
*symbol ATTRIBUTE_UNUSED
;
5021 PTR data ATTRIBUTE_UNUSED
;
5022 asection
*is ATTRIBUTE_UNUSED
;
5023 bfd
*obfd ATTRIBUTE_UNUSED
;
5024 char **errmsg ATTRIBUTE_UNUSED
;
5026 return bfd_reloc_ok
;
5030 /* Elf core file support. Much of this only works on native
5031 toolchains, since we rely on knowing the
5032 machine-dependent procfs structure in order to pick
5033 out details about the corefile. */
5035 #ifdef HAVE_SYS_PROCFS_H
5036 # include <sys/procfs.h>
5040 /* Define offsetof for those systems which lack it. */
5043 # define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
5047 /* FIXME: this is kinda wrong, but it's what gdb wants. */
5050 elfcore_make_pid (abfd
)
5053 return ((elf_tdata (abfd
)->core_lwpid
<< 16)
5054 + (elf_tdata (abfd
)->core_pid
));
5058 /* If there isn't a section called NAME, make one, using
5059 data from SECT. Note, this function will generate a
5060 reference to NAME, so you shouldn't deallocate or
5064 elfcore_maybe_make_sect (abfd
, name
, sect
)
5071 if (bfd_get_section_by_name (abfd
, name
) != NULL
)
5074 sect2
= bfd_make_section (abfd
, name
);
5078 sect2
->_raw_size
= sect
->_raw_size
;
5079 sect2
->filepos
= sect
->filepos
;
5080 sect2
->flags
= sect
->flags
;
5081 sect2
->alignment_power
= sect
->alignment_power
;
5086 /* prstatus_t exists on:
5088 linux 2.[01] + glibc
5092 #if defined (HAVE_PRSTATUS_T)
5094 elfcore_grok_prstatus (abfd
, note
)
5096 Elf_Internal_Note
* note
;
5103 if (note
->descsz
!= sizeof (prstat
))
5106 memcpy (&prstat
, note
->descdata
, sizeof (prstat
));
5108 elf_tdata (abfd
)->core_signal
= prstat
.pr_cursig
;
5109 elf_tdata (abfd
)->core_pid
= prstat
.pr_pid
;
5111 /* pr_who exists on:
5114 pr_who doesn't exist on:
5117 #if defined (HAVE_PRSTATUS_T_PR_WHO)
5118 elf_tdata (abfd
)->core_lwpid
= prstat
.pr_who
;
5121 /* Make a ".reg/999" section. */
5123 sprintf (buf
, ".reg/%d", elfcore_make_pid (abfd
));
5124 name
= bfd_alloc (abfd
, strlen (buf
) + 1);
5129 sect
= bfd_make_section (abfd
, name
);
5132 sect
->_raw_size
= sizeof (prstat
.pr_reg
);
5133 sect
->filepos
= note
->descpos
+ offsetof (prstatus_t
, pr_reg
);
5134 sect
->flags
= SEC_HAS_CONTENTS
;
5135 sect
->alignment_power
= 2;
5137 if (! elfcore_maybe_make_sect (abfd
, ".reg", sect
))
5142 #endif /* defined (HAVE_PRSTATUS_T) */
5145 /* Create a pseudosection containing the exact contents of NOTE. This
5146 actually creates up to two pseudosections:
5147 - For the single-threaded case, a section named NAME, unless
5148 such a section already exists.
5149 - For the multi-threaded case, a section named "NAME/PID", where
5150 PID is elfcore_make_pid (abfd).
5151 Both pseudosections have identical contents: the contents of NOTE. */
5154 elfcore_make_note_pseudosection (abfd
, name
, note
)
5157 Elf_Internal_Note
* note
;
5160 char *threaded_name
;
5163 /* Build the section name. */
5165 sprintf (buf
, "%s/%d", name
, elfcore_make_pid (abfd
));
5166 threaded_name
= bfd_alloc (abfd
, strlen (buf
) + 1);
5167 if (threaded_name
== NULL
)
5169 strcpy (threaded_name
, buf
);
5171 sect
= bfd_make_section (abfd
, threaded_name
);
5174 sect
->_raw_size
= note
->descsz
;
5175 sect
->filepos
= note
->descpos
;
5176 sect
->flags
= SEC_HAS_CONTENTS
;
5177 sect
->alignment_power
= 2;
5179 if (! elfcore_maybe_make_sect (abfd
, name
, sect
))
5186 /* There isn't a consistent prfpregset_t across platforms,
5187 but it doesn't matter, because we don't have to pick this
5188 data structure apart. */
5190 elfcore_grok_prfpreg (abfd
, note
)
5192 Elf_Internal_Note
* note
;
5194 return elfcore_make_note_pseudosection (abfd
, ".reg2", note
);
5198 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
5199 type of 5 (NT_PRXFPREG). Just include the whole note's contents
5202 elfcore_grok_prxfpreg (abfd
, note
)
5204 Elf_Internal_Note
* note
;
5206 return elfcore_make_note_pseudosection (abfd
, ".reg-xfp", note
);
5210 #if defined (HAVE_PRPSINFO_T)
5211 # define elfcore_psinfo_t prpsinfo_t
5214 #if defined (HAVE_PSINFO_T)
5215 # define elfcore_psinfo_t psinfo_t
5219 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
5221 /* return a malloc'ed copy of a string at START which is at
5222 most MAX bytes long, possibly without a terminating '\0'.
5223 the copy will always have a terminating '\0'. */
5226 elfcore_strndup (abfd
, start
, max
)
5232 char* end
= memchr (start
, '\0', max
);
5240 dup
= bfd_alloc (abfd
, len
+ 1);
5244 memcpy (dup
, start
, len
);
5251 elfcore_grok_psinfo (abfd
, note
)
5253 Elf_Internal_Note
* note
;
5255 elfcore_psinfo_t psinfo
;
5257 if (note
->descsz
!= sizeof (elfcore_psinfo_t
))
5260 memcpy (&psinfo
, note
->descdata
, note
->descsz
);
5262 elf_tdata (abfd
)->core_program
5263 = elfcore_strndup (abfd
, psinfo
.pr_fname
, sizeof (psinfo
.pr_fname
));
5265 elf_tdata (abfd
)->core_command
5266 = elfcore_strndup (abfd
, psinfo
.pr_psargs
, sizeof (psinfo
.pr_psargs
));
5268 /* Note that for some reason, a spurious space is tacked
5269 onto the end of the args in some (at least one anyway)
5270 implementations, so strip it off if it exists. */
5273 char* command
= elf_tdata (abfd
)->core_command
;
5274 int n
= strlen (command
);
5276 if (0 < n
&& command
[n
- 1] == ' ')
5277 command
[n
- 1] = '\0';
5282 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
5285 #if defined (HAVE_PSTATUS_T)
5287 elfcore_grok_pstatus (abfd
, note
)
5289 Elf_Internal_Note
* note
;
5293 if (note
->descsz
!= sizeof (pstat
))
5296 memcpy (&pstat
, note
->descdata
, sizeof (pstat
));
5298 elf_tdata (abfd
)->core_pid
= pstat
.pr_pid
;
5300 /* Could grab some more details from the "representative"
5301 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
5302 NT_LWPSTATUS note, presumably. */
5306 #endif /* defined (HAVE_PSTATUS_T) */
5309 #if defined (HAVE_LWPSTATUS_T)
5311 elfcore_grok_lwpstatus (abfd
, note
)
5313 Elf_Internal_Note
* note
;
5315 lwpstatus_t lwpstat
;
5320 if (note
->descsz
!= sizeof (lwpstat
))
5323 memcpy (&lwpstat
, note
->descdata
, sizeof (lwpstat
));
5325 elf_tdata (abfd
)->core_lwpid
= lwpstat
.pr_lwpid
;
5326 elf_tdata (abfd
)->core_signal
= lwpstat
.pr_cursig
;
5328 /* Make a ".reg/999" section. */
5330 sprintf (buf
, ".reg/%d", elfcore_make_pid (abfd
));
5331 name
= bfd_alloc (abfd
, strlen (buf
) + 1);
5336 sect
= bfd_make_section (abfd
, name
);
5340 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
5341 sect
->_raw_size
= sizeof (lwpstat
.pr_context
.uc_mcontext
.gregs
);
5342 sect
->filepos
= note
->descpos
5343 + offsetof (lwpstatus_t
, pr_context
.uc_mcontext
.gregs
);
5346 #if defined (HAVE_LWPSTATUS_T_PR_REG)
5347 sect
->_raw_size
= sizeof (lwpstat
.pr_reg
);
5348 sect
->filepos
= note
->descpos
+ offsetof (lwpstatus_t
, pr_reg
);
5351 sect
->flags
= SEC_HAS_CONTENTS
;
5352 sect
->alignment_power
= 2;
5354 if (!elfcore_maybe_make_sect (abfd
, ".reg", sect
))
5357 /* Make a ".reg2/999" section */
5359 sprintf (buf
, ".reg2/%d", elfcore_make_pid (abfd
));
5360 name
= bfd_alloc (abfd
, strlen (buf
) + 1);
5365 sect
= bfd_make_section (abfd
, name
);
5369 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
5370 sect
->_raw_size
= sizeof (lwpstat
.pr_context
.uc_mcontext
.fpregs
);
5371 sect
->filepos
= note
->descpos
5372 + offsetof (lwpstatus_t
, pr_context
.uc_mcontext
.fpregs
);
5375 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
5376 sect
->_raw_size
= sizeof (lwpstat
.pr_fpreg
);
5377 sect
->filepos
= note
->descpos
+ offsetof (lwpstatus_t
, pr_fpreg
);
5380 sect
->flags
= SEC_HAS_CONTENTS
;
5381 sect
->alignment_power
= 2;
5383 if (!elfcore_maybe_make_sect (abfd
, ".reg2", sect
))
5388 #endif /* defined (HAVE_LWPSTATUS_T) */
5390 #if defined (HAVE_WIN32_PSTATUS_T)
5392 elfcore_grok_win32pstatus (abfd
, note
)
5394 Elf_Internal_Note
* note
;
5399 win32_pstatus_t pstatus
;
5401 if (note
->descsz
< sizeof (pstatus
))
5404 memcpy (& pstatus
, note
->descdata
, note
->descsz
);
5406 switch (pstatus
.data_type
)
5408 case NOTE_INFO_PROCESS
:
5409 /* FIXME: need to add ->core_command. */
5410 elf_tdata (abfd
)->core_signal
= pstatus
.data
.process_info
.signal
;
5411 elf_tdata (abfd
)->core_pid
= pstatus
.data
.process_info
.pid
;
5414 case NOTE_INFO_THREAD
:
5415 /* Make a ".reg/999" section. */
5416 sprintf (buf
, ".reg/%d", pstatus
.data
.thread_info
.tid
);
5418 name
= bfd_alloc (abfd
, strlen (buf
) + 1);
5424 sect
= bfd_make_section (abfd
, name
);
5428 sect
->_raw_size
= sizeof (pstatus
.data
.thread_info
.thread_context
);
5429 sect
->filepos
= note
->descpos
+ offsetof (struct win32_pstatus
,
5430 data
.thread_info
.thread_context
);
5431 sect
->flags
= SEC_HAS_CONTENTS
;
5432 sect
->alignment_power
= 2;
5434 if (pstatus
.data
.thread_info
.is_active_thread
)
5435 if (! elfcore_maybe_make_sect (abfd
, ".reg", sect
))
5439 case NOTE_INFO_MODULE
:
5440 /* Make a ".module/xxxxxxxx" section. */
5441 sprintf (buf
, ".module/%08x" , pstatus
.data
.module_info
.base_address
);
5443 name
= bfd_alloc (abfd
, strlen (buf
) + 1);
5449 sect
= bfd_make_section (abfd
, name
);
5454 sect
->_raw_size
= note
->descsz
;
5455 sect
->filepos
= note
->descpos
;
5456 sect
->flags
= SEC_HAS_CONTENTS
;
5457 sect
->alignment_power
= 2;
5466 #endif /* HAVE_WIN32_PSTATUS_T */
5469 elfcore_grok_note (abfd
, note
)
5471 Elf_Internal_Note
* note
;
5478 #if defined (HAVE_PRSTATUS_T)
5480 return elfcore_grok_prstatus (abfd
, note
);
5483 #if defined (HAVE_PSTATUS_T)
5485 return elfcore_grok_pstatus (abfd
, note
);
5488 #if defined (HAVE_LWPSTATUS_T)
5490 return elfcore_grok_lwpstatus (abfd
, note
);
5493 case NT_FPREGSET
: /* FIXME: rename to NT_PRFPREG */
5494 return elfcore_grok_prfpreg (abfd
, note
);
5496 #if defined (HAVE_WIN32_PSTATUS_T)
5497 case NT_WIN32PSTATUS
:
5498 return elfcore_grok_win32pstatus (abfd
, note
);
5501 case NT_PRXFPREG
: /* Linux SSE extension */
5502 if (note
->namesz
== 5
5503 && ! strcmp (note
->namedata
, "LINUX"))
5504 return elfcore_grok_prxfpreg (abfd
, note
);
5508 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
5511 return elfcore_grok_psinfo (abfd
, note
);
5518 elfcore_read_notes (abfd
, offset
, size
)
5529 if (bfd_seek (abfd
, offset
, SEEK_SET
) == -1)
5532 buf
= bfd_malloc ((size_t) size
);
5536 if (bfd_read (buf
, size
, 1, abfd
) != size
)
5544 while (p
< buf
+ size
)
5546 /* FIXME: bad alignment assumption. */
5547 Elf_External_Note
* xnp
= (Elf_External_Note
*) p
;
5548 Elf_Internal_Note in
;
5550 in
.type
= bfd_h_get_32 (abfd
, (bfd_byte
*) xnp
->type
);
5552 in
.namesz
= bfd_h_get_32 (abfd
, (bfd_byte
*) xnp
->namesz
);
5553 in
.namedata
= xnp
->name
;
5555 in
.descsz
= bfd_h_get_32 (abfd
, (bfd_byte
*) xnp
->descsz
);
5556 in
.descdata
= in
.namedata
+ BFD_ALIGN (in
.namesz
, 4);
5557 in
.descpos
= offset
+ (in
.descdata
- buf
);
5559 if (! elfcore_grok_note (abfd
, &in
))
5562 p
= in
.descdata
+ BFD_ALIGN (in
.descsz
, 4);
5570 /* FIXME: This function is now unnecessary. Callers can just call
5571 bfd_section_from_phdr directly. */
5574 _bfd_elfcore_section_from_phdr (abfd
, phdr
, sec_num
)
5576 Elf_Internal_Phdr
* phdr
;
5579 if (! bfd_section_from_phdr (abfd
, phdr
, sec_num
))
5587 /* Providing external access to the ELF program header table. */
5589 /* Return an upper bound on the number of bytes required to store a
5590 copy of ABFD's program header table entries. Return -1 if an error
5591 occurs; bfd_get_error will return an appropriate code. */
5593 bfd_get_elf_phdr_upper_bound (abfd
)
5596 if (abfd
->xvec
->flavour
!= bfd_target_elf_flavour
)
5598 bfd_set_error (bfd_error_wrong_format
);
5602 return (elf_elfheader (abfd
)->e_phnum
5603 * sizeof (Elf_Internal_Phdr
));
5607 /* Copy ABFD's program header table entries to *PHDRS. The entries
5608 will be stored as an array of Elf_Internal_Phdr structures, as
5609 defined in include/elf/internal.h. To find out how large the
5610 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
5612 Return the number of program header table entries read, or -1 if an
5613 error occurs; bfd_get_error will return an appropriate code. */
5615 bfd_get_elf_phdrs (abfd
, phdrs
)
5621 if (abfd
->xvec
->flavour
!= bfd_target_elf_flavour
)
5623 bfd_set_error (bfd_error_wrong_format
);
5627 num_phdrs
= elf_elfheader (abfd
)->e_phnum
;
5628 memcpy (phdrs
, elf_tdata (abfd
)->phdr
,
5629 num_phdrs
* sizeof (Elf_Internal_Phdr
));