This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

ARM interrupt epilogue generation


Hi Guys,

  I am applying the patch below to fix a small bug in the ARM port's
  epilogue generation for interrupt handlers with stack frames.  The
  saved IP register was being popped off the stack, but the stack
  pointer was not been incremented.

Cheers
        Nick

2003-01-30  Nick Clifton  <nickc@redhat.com>

	* config/arm/arm.c (arm_output_epilogue): Update stack pointer
	when popping saved IP register off the stack.

Index: gcc/config/arm/arm.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/arm.c,v
retrieving revision 1.252
diff -c -3 -p -w -r1.252 arm.c
*** gcc/config/arm/arm.c	29 Jan 2003 16:50:34 -0000	1.252
--- gcc/config/arm/arm.c	30 Jan 2003 14:06:06 -0000
*************** arm_output_epilogue (really_return)
*** 8209,8215 ****
        if (IS_INTERRUPT (func_type))
  	/* Interrupt handlers will have pushed the
  	   IP onto the stack, so restore it now.  */
! 	print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, 1 << IP_REGNUM);
      }
    else
      {
--- 8209,8215 ----
        if (IS_INTERRUPT (func_type))
  	/* Interrupt handlers will have pushed the
  	   IP onto the stack, so restore it now.  */
! 	print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, 1 << IP_REGNUM);
      }
    else
      {


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