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
     {