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]

[3.1 PATCH] Serious regression on s390


[Re-sent from different address due to mail blocklist problems ...]

Hello Mark,

this patch fixes a serious regression introduced by a recent patch
to correctly handle global register variables:  if a fixed register
(e.g. the stack pointer) is defined as global register, it must be
restored in the epilog code anyway, otherwise we will crash.

I'm aware that it is questionable whether using a fixed register as
global register variable is allowed in the first place, but 
unfortunately existing code, in particular the libpthread library,
uses this trick to read the current value of the stack pointer.
To avoid breaking this, I'd like to add the following fix to 3.1.
(Otherwise all programs linked against a libpthread compiled with
3.1 will immediately crash.)

Mark, is this OK at this point?

Bye,
Ulrich

ChangeLog:

	* config/s390/s390.c (s390_emit_epilogue): Always restore fixed
	registers, even if they are used as global regs.


Index: gcc/config/s390/s390.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.c,v
retrieving revision 1.27.2.6
diff -c -p -r1.27.2.6 s390.c
*** gcc/config/s390/s390.c	17 Apr 2002 15:59:45 -0000	1.27.2.6
--- gcc/config/s390/s390.c	25 Apr 2002 14:35:05 -0000
*************** s390_emit_epilogue ()
*** 3255,3261 ****
  	   i <= frame.last_save_gpr;
  	   i++)
  	{
! 	  if (global_regs[i])
  	    {
  	      addr = plus_constant (frame_pointer, 
  		     offset + i * UNITS_PER_WORD);
--- 3255,3261 ----
  	   i <= frame.last_save_gpr;
  	   i++)
  	{
! 	  if (global_regs[i] && !fixed_regs[i])
  	    {
  	      addr = plus_constant (frame_pointer, 
  		     offset + i * UNITS_PER_WORD);
-- 
  Dr. Ulrich Weigand
  weigand@informatik.uni-erlangen.de


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