(elf_core_file_p): Move the call to elf_backend_object_p to allow the correct
authorNick Clifton <nickc@redhat.com>
Mon, 14 Feb 2005 16:17:04 +0000 (16:17 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 14 Feb 2005 16:17:04 +0000 (16:17 +0000)
machine to be set before processing the program headers.

bfd/ChangeLog
bfd/elfcore.h

index 5cf3e346b28dd77e75d45bcc13a2b3cb51afb5c4..38920f681ba19e92e7c4e9a0e9ef2ff73358ec00 100644 (file)
@@ -1,3 +1,9 @@
+2005-02-14 Orjan Friberg <orjanf@axis.com>
+
+       * elfcore.h (elf_core_file_p): Move the call to
+       elf_backend_object_p to allow the correct machine to be set before
+       processing the program headers.
+
 2005-02-14  Nick Clifton  <nickc@redhat.com>
 
        PR binutils/716
index 81c4cff11393682e422117191edcf442af47e40a..198c4c63c11feb19083cacb002b46f30f8846267 100644 (file)
@@ -207,12 +207,19 @@ elf_core_file_p (bfd *abfd)
   /* Set the machine architecture.  Do this before processing the
      program headers since we need to know the architecture type
      when processing the notes of some systems' core files.  */
-  if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
-    {
+  if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0)
       /* It's OK if this fails for the generic target.  */
-      if (ebd->elf_machine_code != EM_NONE)
-       goto fail;
-    }
+      && ebd->elf_machine_code != EM_NONE)
+    goto fail;
+
+  /* Let the backend double check the format and override global
+     information.  We do this before processing the program headers
+     to allow the correct machine (as opposed to just the default
+     machine) to be set, making it possible for grok_prstatus and
+     grok_psinfo to rely on the mach setting.  */
+  if (ebd->elf_backend_object_p != NULL
+      && ! ebd->elf_backend_object_p (abfd))
+    goto wrong;
 
   /* Process each program header.  */
   for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
@@ -222,12 +229,6 @@ elf_core_file_p (bfd *abfd)
   /* Save the entry point from the ELF header.  */
   bfd_get_start_address (abfd) = i_ehdrp->e_entry;
 
-  /* Let the backend double check the format and override global
-     information.  */
-  if (ebd->elf_backend_object_p
-      && (! (*ebd->elf_backend_object_p) (abfd)))
-    goto wrong;
-
   bfd_preserve_finish (abfd, &preserve);
   return abfd->xvec;