diff options
author | Nick Clifton <nickc@redhat.com> | 2005-02-14 16:17:04 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2005-02-14 16:17:04 +0000 |
commit | 359c9f376c6a65abe10d32c652f4cc1de51a6bef (patch) | |
tree | eb602de34a3c8ce067116f0bf0ee2b01e9ce9fa0 | |
parent | c1b1e3103ff04c3694902bf348c41c92a92f115c (diff) | |
download | gdb-359c9f376c6a65abe10d32c652f4cc1de51a6bef.tar.gz |
(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.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elfcore.h | 23 |
2 files changed, 18 insertions, 11 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5cf3e346b28..38920f681ba 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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 diff --git a/bfd/elfcore.h b/bfd/elfcore.h index 81c4cff1139..198c4c63c11 100644 --- a/bfd/elfcore.h +++ b/bfd/elfcore.h @@ -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; |