This is the mail archive of the gdb-patches@sourceware.cygnus.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]

FRAME_INIT_SAVED_REGS for x86.


I made this change a while ago, back when Andrew was making similar
changes to other targets.  It's been in my sources for some time, I
found it again when I was checking the differences between my
repository and the last snapshot.

        --jtc

1999-08-13  J.T. Conklin  <jtc@redback.com>

	* config/i386/tm-i386.h (FRAME_INIT_SAVED_REGS): Replace
 	FRAME_FIND_SAVED_REGS.
	(i386_frame_init_saved_regs): Replace i386_frame_find_saved_regs.
  	* i386-tdep.c (i386_frame_init_saved_regs, i386_pop_frame):
 	Update.

Index: i386-tdep.c
===================================================================
RCS file: /home/jtc/CVSROOT/gdb/gdb/i386-tdep.c,v
retrieving revision 1.1.1.5
diff -c -r1.1.1.5 i386-tdep.c
*** i386-tdep.c	1999/08/11 04:07:02	1.1.1.5
--- i386-tdep.c	1999/08/12 22:17:37
***************
*** 447,455 ****
   */
  
  void
! i386_frame_find_saved_regs (fip, fsrp)
       struct frame_info *fip;
-      struct frame_saved_regs *fsrp;
  {
    long locals = -1;
    unsigned char op;
--- 447,454 ----
   */
  
  void
! i386_frame_init_saved_regs (fip)
       struct frame_info *fip;
  {
    long locals = -1;
    unsigned char op;
***************
*** 458,464 ****
    CORE_ADDR pc;
    int i;
  
!   memset (fsrp, 0, sizeof *fsrp);
  
    /* if frame is the end of a dummy, compute where the
     * beginning would be
--- 457,466 ----
    CORE_ADDR pc;
    int i;
  
!   if (fip->saved_regs)
!     return;
! 
!   frame_saved_regs_zalloc (fip);
  
    /* if frame is the end of a dummy, compute where the
     * beginning would be
***************
*** 473,479 ****
        for (i = 0; i < NUM_REGS; i++)
  	{
  	  adr -= REGISTER_RAW_SIZE (i);
! 	  fsrp->regs[i] = adr;
  	}
        return;
      }
--- 475,481 ----
        for (i = 0; i < NUM_REGS; i++)
  	{
  	  adr -= REGISTER_RAW_SIZE (i);
! 	  fip->saved_regs[i] = adr;
  	}
        return;
      }
***************
*** 492,507 ****
  	    break;
  #ifdef I386_REGNO_TO_SYMMETRY
  	  /* Dynix uses different internal numbering.  Ick.  */
! 	  fsrp->regs[I386_REGNO_TO_SYMMETRY (op - 0x50)] = adr;
  #else
! 	  fsrp->regs[op - 0x50] = adr;
  #endif
  	  adr -= 4;
  	}
      }
  
!   fsrp->regs[PC_REGNUM] = fip->frame + 4;
!   fsrp->regs[FP_REGNUM] = fip->frame;
  }
  
  /* return pc of first real instruction */
--- 494,509 ----
  	    break;
  #ifdef I386_REGNO_TO_SYMMETRY
  	  /* Dynix uses different internal numbering.  Ick.  */
! 	  fip->saved_regs[I386_REGNO_TO_SYMMETRY (op - 0x50)] = adr;
  #else
! 	  fip->saved_regs[op - 0x50] = adr;
  #endif
  	  adr -= 4;
  	}
      }
  
!   fip->saved_regs[PC_REGNUM] = fip->frame + 4;
!   fip->saved_regs[FP_REGNUM] = fip->frame;
  }
  
  /* return pc of first real instruction */
***************
*** 612,626 ****
    struct frame_info *frame = get_current_frame ();
    CORE_ADDR fp;
    int regnum;
-   struct frame_saved_regs fsr;
    char regbuf[MAX_REGISTER_RAW_SIZE];
  
    fp = FRAME_FP (frame);
!   get_frame_saved_regs (frame, &fsr);
    for (regnum = 0; regnum < NUM_REGS; regnum++)
      {
        CORE_ADDR adr;
!       adr = fsr.regs[regnum];
        if (adr)
  	{
  	  read_memory (adr, regbuf, REGISTER_RAW_SIZE (regnum));
--- 614,628 ----
    struct frame_info *frame = get_current_frame ();
    CORE_ADDR fp;
    int regnum;
    char regbuf[MAX_REGISTER_RAW_SIZE];
  
    fp = FRAME_FP (frame);
!   i386_frame_init_saved_regs (frame);
! 
    for (regnum = 0; regnum < NUM_REGS; regnum++)
      {
        CORE_ADDR adr;
!       adr = frame->saved_regs[regnum];
        if (adr)
  	{
  	  read_memory (adr, regbuf, REGISTER_RAW_SIZE (regnum));
Index: config/i386/tm-i386.h
===================================================================
RCS file: /home/jtc/CVSROOT/gdb/gdb/config/i386/tm-i386.h,v
retrieving revision 1.1.1.3
diff -c -r1.1.1.3 tm-i386.h
*** tm-i386.h	1999/07/08 23:35:33	1.1.1.3
--- tm-i386.h	1999/08/12 22:13:52
***************
*** 242,252 ****
     ways in the stack frame.  sp is even more special:
     the address we return for it IS the sp for the next frame.  */
  
! #define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
! { i386_frame_find_saved_regs ((frame_info), &(frame_saved_regs)); }
  
- extern void i386_frame_find_saved_regs PARAMS ((struct frame_info *,
- 						struct frame_saved_regs *));
  
  
  /* Things needed for making the inferior call functions.  */
--- 242,250 ----
     ways in the stack frame.  sp is even more special:
     the address we return for it IS the sp for the next frame.  */
  
! extern void i386_frame_init_saved_regs PARAMS ((struct frame_info *));
! #define FRAME_INIT_SAVED_REGS(FI) i386_frame_init_saved_regs (FI)
  
  
  
  /* Things needed for making the inferior call functions.  */

-- 
J.T. Conklin
RedBack Networks

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