[Revise prev change -- this is how it's been running at Adobe, and it works

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).
This commit is contained in:
John Gilmore
1994-01-11 09:13:25 +00:00
parent c369b6a32f
commit c6d8db406c
2 changed files with 7 additions and 13 deletions

View 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))