This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [CRIS] Reading core file selects "wrong" mach
- From: Orjan Friberg <orjan dot friberg at axis dot com>
- To: gdb-patches at sources dot redhat dot com
- Cc: Mark Kettenis <kettenis at gnu dot org>, hans-peter dot nilsson at axis dot com
- Date: Fri, 14 Jan 2005 18:10:33 +0100
- Subject: Re: [CRIS] Reading core file selects "wrong" mach
- Organization: Axis Communications
- References: <41ADCE5B.5010001@axis.com> <200412021718.iB2HIK1Q004810@elgar.sibelius.xs4all.nl>
Mark Kettenis wrote:
I guess the correct way to do this would be adding
elf_set_mach_from_flags() to `struct elf_backend_data', and use that
in elf_core_file_p() to set the machine after the architecture has
been set.
Maybe there's an easier way to do it - simply call the elf backend before
processing the program headers, and have the backend set the correct machine
like they all seem to do already. Since the decision of whether to act on the
e_flags value is pushed to the elf backend I don't see how this could break
anything (which I assume could happen if it was done in elf_core_file_p).
(Of course, for this to have any effect in my particular case, e_flags must be
set in the core file.)
I understand this will have to be sent to the binutils mailing list for
approval, but I'd appreciate if someone on this list could tell me if it's a
sane solution.
Oh, and no regressions on i386 and CRIS.
2005-01-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.
Index: elfcore.h
===================================================================
RCS file: /cvs/src/src/bfd/elfcore.h,v
retrieving revision 1.20
diff -u -p -r1.20 elfcore.h
--- elfcore.h 7 Aug 2003 08:38:09 -0000 1.20
+++ elfcore.h 14 Jan 2005 17:03:02 -0000
@@ -214,6 +214,15 @@ elf_core_file_p (bfd *abfd)
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
+ && (! (*ebd->elf_backend_object_p) (abfd)))
+ goto wrong;
+
/* Process each program header. */
for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
if (! bfd_section_from_phdr (abfd, i_phdrp + phindex, (int) phindex))
@@ -222,12 +231,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;
--
Orjan Friberg
Axis Communications