diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 9aff0f9aee7..5bbce0e8dcd 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,8 @@
 2002-04-26  Alan Modra  <amodra@bigpond.net.au>
 
+	* elflink.h (elf_bfd_final_link): Ensure input bfd class is the
+	same as the output before calling elf_link_input_bfd.
+
 	* coffcode.h (coff_compute_section_file_positions): Set
 	section_tail after shuffling section list.
 
diff --git a/bfd/elflink.h b/bfd/elflink.h
index d43d8612d15..06035b31bee 100644
--- a/bfd/elflink.h
+++ b/bfd/elflink.h
@@ -5347,21 +5347,11 @@ elf_bfd_final_link (abfd, info)
     {
       for (p = o->link_order_head; p != NULL; p = p->next)
 	{
-	  Elf_Internal_Shdr *rhdr;
-
 	  if (p->type == bfd_indirect_link_order
-	      && (bfd_get_flavour (p->u.indirect.section->owner)
+	      && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
 		  == bfd_target_elf_flavour)
-	      && (((rhdr = &elf_section_data (p->u.indirect.section)->rel_hdr)
-		   ->sh_entsize == 0)
-		  || rhdr->sh_entsize == sizeof (Elf_External_Rel)
-		  || rhdr->sh_entsize == sizeof (Elf_External_Rela))
-	      && (((rhdr = elf_section_data (p->u.indirect.section)->rel_hdr2)
-		   == NULL)
-		  || rhdr->sh_entsize == sizeof (Elf_External_Rel)
-		  || rhdr->sh_entsize == sizeof (Elf_External_Rela)))
+	      && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
 	    {
-	      sub = p->u.indirect.section->owner;
 	      if (! sub->output_has_begun)
 		{
 		  if (! elf_link_input_bfd (&finfo, sub))