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