summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/mips-tdep.c4
-rw-r--r--gdb/sparc-nat.c6
3 files changed, 20 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1a249491410..1c1da473d61 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 aa6cd30d16c..a853cd6f7cc 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 f622b135394..0147055e4f8 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, &registers[REGISTER_BYTE (FP0_REGNUM)],
sizeof inferior_fp_registers.fpu_fr);