diff --git a/ghc/compiler/main/Constants.lhs b/ghc/compiler/main/Constants.lhs
index 660b99fdded10d5b9bf2985f4f0b947c9b7829e1..f0766dc7c4f88959546c1153280db3f58576b5df 100644
--- a/ghc/compiler/main/Constants.lhs
+++ b/ghc/compiler/main/Constants.lhs
@@ -24,6 +24,7 @@ module Constants (
 	aRR_WORDS_HDR_SIZE,
 	aRR_PTRS_HDR_SIZE,
         rESERVED_C_STACK_BYTES,
+        rESERVED_STACK_WORDS,
 
 	sTD_ITBL_SIZE,
 	pROF_ITBL_SIZE,
@@ -231,6 +232,13 @@ area is has available.
 rESERVED_C_STACK_BYTES = (RESERVED_C_STACK_BYTES :: Int)
 \end{code}
 
+The amount of (Haskell) stack to leave free for saving registers when
+returning to the scheduler.
+
+\begin{code}
+rESERVED_STACK_WORDS = (RESERVED_STACK_WORDS :: Int)
+\end{code}
+
 Size of a word, in bytes
 
 \begin{code}
diff --git a/ghc/compiler/nativeGen/StixPrim.lhs b/ghc/compiler/nativeGen/StixPrim.lhs
index a78c4d6822077824a920492223c38376cf016d25..6f5e37c2abb6417ff2b8999ee827fb479dd75fce 100644
--- a/ghc/compiler/nativeGen/StixPrim.lhs
+++ b/ghc/compiler/nativeGen/StixPrim.lhs
@@ -18,7 +18,8 @@ import Literal		( Literal(..), word2IntLit )
 import PrimOp		( PrimOp(..), CCall(..), CCallTarget(..) )
 import PrimRep		( PrimRep(..), isFloatingRep )
 import UniqSupply	( returnUs, thenUs, getUniqueUs, UniqSM )
-import Constants	( mIN_INTLIKE, mIN_CHARLIKE, uF_UPDATEE, bLOCK_SIZE )
+import Constants	( mIN_INTLIKE, mIN_CHARLIKE, uF_UPDATEE, bLOCK_SIZE,
+			  rESERVED_STACK_WORDS )
 import CLabel		( mkIntlikeClosureLabel, mkCharlikeClosureLabel,
 			  mkMAP_FROZEN_infoLabel, mkForeignLabel )
 import Outputable
@@ -570,10 +571,6 @@ save_thread_state
 	   (StInd PtrRep (StPrim IntAddOp 
 		[tso, StInt (toInteger (TSO_SU*BYTES_PER_WORD))]))
 	   stgSu :
-	StAssign PtrRep 
-	   (StInd PtrRep (StPrim IntAddOp 
-		[tso, StInt (toInteger (TSO_SPLIM*BYTES_PER_WORD))]))
-	   stgSpLim :
 	StAssign PtrRep
 	   (StInd PtrRep (StPrim IntAddOp
 		[stgCurrentNursery, 
@@ -594,8 +591,9 @@ load_thread_state
 	   (StInd PtrRep (StPrim IntAddOp 
 		[tso, StInt (toInteger (TSO_SU*BYTES_PER_WORD))])) :
 	StAssign PtrRep stgSpLim
-	   (StInd PtrRep (StPrim IntAddOp 
-		[tso, StInt (toInteger (TSO_SPLIM*BYTES_PER_WORD))])) :
+	   (StPrim IntAddOp [tso, 
+			     StInt (toInteger ((TSO_STACK + rESERVED_STACK_WORDS)
+					       *BYTES_PER_WORD))]) :
 	StAssign PtrRep stgHp
 	   (StPrim IntSubOp [
 	      StInd PtrRep (StPrim IntAddOp
diff --git a/ghc/includes/mkNativeHdr.c b/ghc/includes/mkNativeHdr.c
index f89a22dadd45f1ec195a8da6ba83ae14920d0644..282864dddad1877f58b5ec0647bfb28bdddb8f1b 100644
--- a/ghc/includes/mkNativeHdr.c
+++ b/ghc/includes/mkNativeHdr.c
@@ -1,5 +1,5 @@
 /* --------------------------------------------------------------------------
- * $Id: mkNativeHdr.c,v 1.4 2000/05/15 14:44:42 simonmar Exp $
+ * $Id: mkNativeHdr.c,v 1.5 2000/08/17 14:30:26 simonmar Exp $
  *
  * (c) The GHC Team, 1992-1998
  *
@@ -37,8 +37,8 @@
 #define OFFSET_CurrentNursery OFFSET(RegTable, RegTable.rCurrentNursery)
 
 #define TSO_SP       OFFSET(tso, tso.sp)
-#define TSO_SPLIM    OFFSET(tso, tso.splim)
 #define TSO_SU       OFFSET(tso, tso.su)
+#define TSO_STACK    OFFSET(tso, tso.stack)
 
 #define BDESCR_START OFFSET(bd, bd.start)
 #define BDESCR_FREE  OFFSET(bd, bd.free)
@@ -87,7 +87,7 @@ main()
 
     printf("#define TSO_SP %d\n", TSO_SP);
     printf("#define TSO_SU %d\n", TSO_SU);
-    printf("#define TSO_SPLIM %d\n", TSO_SPLIM);
+    printf("#define TSO_STACK %d\n", TSO_STACK);
 
     printf("\n-- Block descriptor offsets for the Native Code Generator\n");