This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [CRIS] Reading core file selects "wrong" mach


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]