From 1b71de8ea4e2230ca1bfe0451ce18800b7769173 Mon Sep 17 00:00:00 2001 From: Peter Schauer Date: Tue, 25 May 1993 06:52:54 +0000 Subject: [PATCH] * sparc-nat.c (store_inferior_registers): Fill in all members of inferior_fp_registers by reading them from the inferior before modifying and writing them back. Fixes unexplainable inferior FP exceptions after calls to the inferior or setting of floating point registers. * mips-tdep.c (mips_skip_prologue): Skip move of argument register to register which is generated by gcc-2.4. --- gdb/ChangeLog | 10 ++++++++++ gdb/mips-tdep.c | 4 ++++ gdb/sparc-nat.c | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1a24949141..1c1da473d6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +Mon May 24 23:50:05 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) + + * sparc-nat.c (store_inferior_registers): Fill in all members of + inferior_fp_registers by reading them from the inferior before + modifying and writing them back. + Fixes unexplainable inferior FP exceptions after calls to the inferior + or setting of floating point registers. + * mips-tdep.c (mips_skip_prologue): Skip move of argument register + to register which is generated by gcc-2.4. + Tue May 25 00:42:39 1993 Ken Raeburn (raeburn@cygnus.com) * hppa-pinsn.c: Define OLD_TABLE before including opcode/hppa.h. diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index aa6cd30d16..a853cd6f7c 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -95,9 +95,11 @@ read_next_frame_reg(fi, regno) immediately below the frame and we get the saved registers from there. If the stack layout for sigtramp changes we might have to change these constants and the companion fixup_sigtramp in mipsread.c */ +#ifndef SIGFRAME_BASE #define SIGFRAME_BASE 0x12c /* sizeof(sigcontext) */ #define SIGFRAME_PC_OFF (-SIGFRAME_BASE + 2 * 4) #define SIGFRAME_REGSAVE_OFF (-SIGFRAME_BASE + 3 * 4) +#endif for (; fi; fi = fi->next) if (in_sigtramp(fi->pc, 0)) { int offset; @@ -771,6 +773,8 @@ mips_skip_prologue(pc) continue; /* reg != $zero */ else if (inst == 0x03A0F021) /* move $s8,$sp */ continue; + else if ((inst & 0xFF9F07FF) == 0x00800021) /* move reg,$a0-$a3 */ + continue; else break; } diff --git a/gdb/sparc-nat.c b/gdb/sparc-nat.c index f622b13539..0147055e4f 100644 --- a/gdb/sparc-nat.c +++ b/gdb/sparc-nat.c @@ -222,6 +222,12 @@ 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. */ + if (0 != + ptrace (PTRACE_GETFPREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0)) + perror("ptrace_getfpregs"); memcpy (&inferior_fp_registers, ®isters[REGISTER_BYTE (FP0_REGNUM)], sizeof inferior_fp_registers.fpu_fr);