This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[RFA] mips_pop_frame
- From: Michael Snyder <msnyder at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Cc: cagney at redhat dot com
- Date: Tue, 13 Aug 2002 14:03:06 -0700
- Subject: [RFA] mips_pop_frame
- Organization: Red Hat, Inc.
Sign extension is bad for FP registers, esp. if their saved size is
4 bytes but their raw size is 8 bytes.
2002-08-13 Michael Snyder <msnyder@redhat.com>
* mips-tdep.c (mips_pop_frame): Read saved values of floating
point registers without sign extension.
Index: mips-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mips-tdep.c,v
retrieving revision 1.99
diff -p -r1.99 mips-tdep.c
*** mips-tdep.c 10 Aug 2002 01:09:10 -0000 1.99
--- mips-tdep.c 13 Aug 2002 21:18:06 -0000
*************** mips_pop_frame (void)
*** 3134,3146 ****
if (frame->saved_regs == NULL)
FRAME_INIT_SAVED_REGS (frame);
for (regnum = 0; regnum < NUM_REGS; regnum++)
! {
! if (regnum != SP_REGNUM && regnum != PC_REGNUM
! && frame->saved_regs[regnum])
! write_register (regnum,
! read_memory_integer (frame->saved_regs[regnum],
! MIPS_SAVED_REGSIZE));
! }
write_register (SP_REGNUM, new_sp);
flush_cached_frames ();
--- 3136,3157 ----
if (frame->saved_regs == NULL)
FRAME_INIT_SAVED_REGS (frame);
for (regnum = 0; regnum < NUM_REGS; regnum++)
! if (regnum != SP_REGNUM && regnum != PC_REGNUM
! && frame->saved_regs[regnum])
! {
! /* Floating point registers must not be sign extended,
! in case MIPS_SAVED_REGSIZE = 4 but sizeof (FP0_REGNUM) == 8. */
!
! if (FP0_REGNUM <= regnum && regnum < FP0_REGNUM + 32)
! write_register (regnum,
! read_memory_unsigned_integer (frame->saved_regs[regnum],
! MIPS_SAVED_REGSIZE));
! else
! write_register (regnum,
! read_memory_integer (frame->saved_regs[regnum],
! MIPS_SAVED_REGSIZE));
! }
!
write_register (SP_REGNUM, new_sp);
flush_cached_frames ();