Line 92... |
Line 92... |
if (stub_file->the_bfd == NULL
|
if (stub_file->the_bfd == NULL
|
|| !bfd_set_arch_mach (stub_file->the_bfd,
|
|| !bfd_set_arch_mach (stub_file->the_bfd,
|
bfd_get_arch (link_info.output_bfd),
|
bfd_get_arch (link_info.output_bfd),
|
bfd_get_mach (link_info.output_bfd)))
|
bfd_get_mach (link_info.output_bfd)))
|
{
|
{
|
einfo ("%F%P: can not create BFD %E\n");
|
einfo ("%F%P: can not create BFD: %E\n");
|
return;
|
return;
|
}
|
}
|
|
|
stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
|
stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
|
ldlang_add_file (stub_file);
|
ldlang_add_file (stub_file);
|
Line 247... |
Line 247... |
{
|
{
|
if (stub_file != NULL)
|
if (stub_file != NULL)
|
{
|
{
|
if (!no_opd_opt
|
if (!no_opd_opt
|
&& !ppc64_elf_edit_opd (&link_info, non_overlapping_opd))
|
&& !ppc64_elf_edit_opd (&link_info, non_overlapping_opd))
|
einfo ("%X%P: can not edit %s %E\n", "opd");
|
einfo ("%X%P: can not edit %s: %E\n", "opd");
|
|
|
if (ppc64_elf_tls_setup (&link_info, no_tls_get_addr_opt, &no_multi_toc)
|
if (ppc64_elf_tls_setup (&link_info, no_tls_get_addr_opt, &no_multi_toc)
|
&& !no_tls_opt)
|
&& !no_tls_opt)
|
{
|
{
|
/* Size the sections. This is premature, but we want to know the
|
/* Size the sections. This is premature, but we want to know the
|
Line 266... |
Line 266... |
&& !link_info.relocatable)
|
&& !link_info.relocatable)
|
{
|
{
|
prelim_size_sections ();
|
prelim_size_sections ();
|
|
|
if (!ppc64_elf_edit_toc (&link_info))
|
if (!ppc64_elf_edit_toc (&link_info))
|
einfo ("%X%P: can not edit %s %E\n", "toc");
|
einfo ("%X%P: can not edit %s: %E\n", "toc");
|
}
|
}
|
|
|
if (!no_toc_sort)
|
if (!no_toc_sort)
|
{
|
{
|
lang_output_section_statement_type *toc_os;
|
lang_output_section_statement_type *toc_os;
|
Line 376... |
Line 376... |
|
|
flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
|
flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
|
| SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_KEEP);
|
| SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_KEEP);
|
stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
|
stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
|
stub_sec_name, flags);
|
stub_sec_name, flags);
|
if (stub_sec == NULL)
|
if (stub_sec == NULL
|
|
|| !bfd_set_section_alignment (stub_file->the_bfd, stub_sec, 5))
|
goto err_ret;
|
goto err_ret;
|
|
|
output_section = input_section->output_section;
|
output_section = input_section->output_section;
|
secname = bfd_get_section_name (output_section->owner, output_section);
|
secname = bfd_get_section_name (output_section->owner, output_section);
|
os = lang_output_section_find (secname);
|
os = lang_output_section_find (secname);
|
Line 527... |
Line 528... |
/* e_entry on PowerPC64 points to the function descriptor for
|
/* e_entry on PowerPC64 points to the function descriptor for
|
_start. If _start is missing, default to the first function
|
_start. If _start is missing, default to the first function
|
descriptor in the .opd section. */
|
descriptor in the .opd section. */
|
entry_section = ".opd";
|
entry_section = ".opd";
|
|
|
if (link_info.relocatable)
|
|
{
|
|
asection *toc = bfd_get_section_by_name (link_info.output_bfd, ".toc");
|
|
if (toc != NULL
|
|
&& bfd_section_size (link_info.output_bfd, toc) > 0x10000)
|
|
einfo ("%X%P: TOC section size exceeds 64k\n");
|
|
}
|
|
|
|
if (stub_added)
|
if (stub_added)
|
{
|
{
|
char *msg = NULL;
|
char *msg = NULL;
|
char *line, *endline;
|
char *line, *endline;
|
|
|