* emultempl/elf32.em (after_open): Return immediately when
        non-ELF output.
This commit is contained in:
Alan Modra 2007-08-15 06:03:11 +00:00
parent e5908723e5
commit d10e7fcce7
2 changed files with 37 additions and 32 deletions

View File

@ -1,3 +1,9 @@
2007-08-15 Alan Modra <amodra@bigpond.net.au>
PR 4923
* emultempl/elf32.em (after_open): Return immediately when
non-ELF output.
2007-08-12 Daniel Jacobowitz <dan@codesourcery.com> 2007-08-12 Daniel Jacobowitz <dan@codesourcery.com>
* configure.in (ALL_LINGUAS): Add fi. * configure.in (ALL_LINGUAS): Add fi.

View File

@ -1032,6 +1032,11 @@ static void
gld${EMULATION_NAME}_after_open (void) gld${EMULATION_NAME}_after_open (void)
{ {
struct bfd_link_needed_list *needed, *l; struct bfd_link_needed_list *needed, *l;
struct elf_link_hash_table *htab;
htab = elf_hash_table (&link_info);
if (!is_elf_hash_table (htab))
return;
if (link_info.emit_note_gnu_build_id) if (link_info.emit_note_gnu_build_id)
{ {
@ -1076,46 +1081,38 @@ gld${EMULATION_NAME}_after_open (void)
} }
} }
if (link_info.relocatable)
return;
if (link_info.eh_frame_hdr if (link_info.eh_frame_hdr
&& ! link_info.traditional_format && !link_info.traditional_format)
&& ! link_info.relocatable)
{ {
struct elf_link_hash_table *htab; bfd *abfd;
asection *s;
htab = elf_hash_table (&link_info); for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
if (is_elf_hash_table (htab))
{ {
bfd *abfd; s = bfd_get_section_by_name (abfd, ".eh_frame");
asection *s; if (s && s->size > 8 && !bfd_is_abs_section (s->output_section))
break;
}
if (abfd)
{
const struct elf_backend_data *bed;
for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next) bed = get_elf_backend_data (abfd);
{ s = bfd_make_section_with_flags (abfd, ".eh_frame_hdr",
s = bfd_get_section_by_name (abfd, ".eh_frame"); bed->dynamic_sec_flags
if (s && s->size > 8 && !bfd_is_abs_section (s->output_section)) | SEC_READONLY);
break; if (s != NULL
} && bfd_set_section_alignment (abfd, s, 2))
if (abfd) htab->eh_info.hdr_sec = s;
{ else
const struct elf_backend_data *bed; einfo ("%P: warning: Cannot create .eh_frame_hdr section,"
" --eh-frame-hdr ignored.\n");
bed = get_elf_backend_data (abfd);
s = bfd_make_section_with_flags (abfd, ".eh_frame_hdr",
bed->dynamic_sec_flags
| SEC_READONLY);
if (s != NULL
&& bfd_set_section_alignment (abfd, s, 2))
htab->eh_info.hdr_sec = s;
else
einfo ("%P: warning: Cannot create .eh_frame_hdr section,"
" --eh-frame-hdr ignored.\n");
}
} }
} }
/* We only need to worry about this when doing a final link. */
if (link_info.relocatable || !link_info.executable)
return;
/* Get the list of files which appear in DT_NEEDED entries in /* Get the list of files which appear in DT_NEEDED entries in
dynamic objects included in the link (often there will be none). dynamic objects included in the link (often there will be none).
For each such file, we want to track down the corresponding For each such file, we want to track down the corresponding
@ -1125,6 +1122,8 @@ gld${EMULATION_NAME}_after_open (void)
special action by the person doing the link. Note that the special action by the person doing the link. Note that the
needed list can actually grow while we are stepping through this needed list can actually grow while we are stepping through this
loop. */ loop. */
if (!link_info.executable)
return;
needed = bfd_elf_get_needed_list (output_bfd, &link_info); needed = bfd_elf_get_needed_list (output_bfd, &link_info);
for (l = needed; l != NULL; l = l->next) for (l = needed; l != NULL; l = l->next)
{ {