This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA] mips_pop_frame


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 ();
  

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]