[Revise prev change -- this is how it's been running at Adobe, and it works
authorJohn Gilmore <gnu@cygnus>
Tue, 11 Jan 1994 09:13:25 +0000 (09:13 +0000)
committerJohn Gilmore <gnu@cygnus>
Tue, 11 Jan 1994 09:13:25 +0000 (09:13 +0000)
 there.]

* sparc-tdep.c (sparc_pop_frame):  Pop the fsr and csr (float and
coprocessor status regs) when popping a frame.  This fixes
float exceptions that occur after calling inferior functions.

* sparc-nat.c (fetch_inferior_registers, store_inferior_registers):
Read and write the fsr (float status register) to/from the child
process along with the float regs.  Remove Peter Schauer's change
of May 24 '93, which has higher overhead and doesn't solve the
real problem (which was that FSR wasn't being set).

gdb/ChangeLog
gdb/sparc-nat.c

index 2303918173be973335b3b372f0ddaa59f462be10..cd947ff07228de35d7a61d87ee83b47b4b8d2f01 100644 (file)
@@ -1,10 +1,14 @@
 Tue Jan 11 00:53:46 1994  John Gilmore  (gnu@cygnus.com)
 
+       * sparc-tdep.c (sparc_pop_frame):  Pop the fsr and csr (float and
+       coprocessor status regs) when popping a frame.  This fixes 
+       float exceptions that occur after calling inferior functions.
+
        * sparc-nat.c (fetch_inferior_registers, store_inferior_registers):
        Read and write the fsr (float status register) to/from the child
-       process.  This avoids random float exceptions when running under
-       GDB, and probably obsoletes Peter Schauer's change of May 24 '93
-       (which remains for safety).
+       process along with the float regs.  Remove Peter Schauer's change
+       of May 24 '93, which has higher overhead and doesn't solve the
+       real problem (which was that FSR wasn't being set).
 
 Mon Jan 10 23:16:42 1994  John Gilmore  (gnu@cygnus.com)
 
index 5fcdb92aad27b564a51c6ae4f4f811267c57a3c4..735f3db8104f318043b6c7477a0e96078ec8e322 100644 (file)
@@ -222,20 +222,10 @@ store_inferior_registers (regno)
   if (wanna_store & FP_REGS)
     {
       if (!register_valid[FP0_REGNUM+9]) abort();
-      /* Initialize inferior_fp_registers members that gdb doesn't set
-        by reading them from the inferior.  This may not be needed
-        any more, now that we set Fpu_fsr.  */
-      if (0 !=
-        ptrace (PTRACE_GETFPREGS, inferior_pid,
-                (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0))
-        perror("ptrace_getfpregs");
-
       memcpy (&inferior_fp_registers, &registers[REGISTER_BYTE (FP0_REGNUM)],
              sizeof inferior_fp_registers.fpu_fr);
-
       memcpy (&inferior_fp_registers.Fpu_fsr, 
              &registers[REGISTER_BYTE (FPS_REGNUM)], sizeof (FPU_FSR_TYPE));
-
       if (0 !=
         ptrace (PTRACE_SETFPREGS, inferior_pid,
                 (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0))