浏览代码

* saveregisters no longer supported by compiler, for now save all registers in stackcheck

armin 21 年之前
父节点
当前提交
ad45adbb6e
共有 2 个文件被更改,包括 26 次插入6 次删除
  1. 13 3
      rtl/netware/system.pp
  2. 13 3
      rtl/netwlibc/system.pp

+ 13 - 3
rtl/netware/system.pp

@@ -202,7 +202,7 @@ end;
 
 
 const StackErr : boolean = false;
 const StackErr : boolean = false;
 
 
-procedure int_stackcheck(stack_size:Cardinal);[saveregisters,public,alias:'FPC_STACKCHECK'];
+procedure int_stackcheck(stack_size:Cardinal);[public,alias:'FPC_STACKCHECK'];
 {
 {
   called when trying to get local stack if the compiler directive $S
   called when trying to get local stack if the compiler directive $S
   is set this function must preserve all registers
   is set this function must preserve all registers
@@ -212,7 +212,14 @@ procedure int_stackcheck(stack_size:Cardinal);[saveregisters,public,alias:'FPC_S
 }
 }
 begin
 begin
   if StackErr then exit;  // avoid recursive calls
   if StackErr then exit;  // avoid recursive calls
-  if _stackavail > stack_size + 2048 THEN EXIT;
+  asm
+    pusha
+  end;
+  stackerr := ( _stackavail < stack_size + 2048); 
+  asm
+    popa
+  end;
+  if not StackErr then exit;
   StackErr := true;
   StackErr := true;
   HandleError (202);
   HandleError (202);
 end;
 end;
@@ -967,7 +974,10 @@ Begin
 End.
 End.
 {
 {
   $Log$
   $Log$
-  Revision 1.28  2004-10-25 15:38:59  peter
+  Revision 1.29  2004-10-25 18:11:49  armin
+  * saveregisters no longer supported by compiler, for now save all registers in stackcheck
+
+  Revision 1.28  2004/10/25 15:38:59  peter
     * compiler defined HEAP and HEAPSIZE removed
     * compiler defined HEAP and HEAPSIZE removed
 
 
   Revision 1.27  2004/09/26 19:25:49  armin
   Revision 1.27  2004/09/26 19:25:49  armin

+ 13 - 3
rtl/netwlibc/system.pp

@@ -193,7 +193,7 @@ end;
 
 
 const StackErr : boolean = false;
 const StackErr : boolean = false;
 
 
-procedure int_stackcheck(stack_size:Cardinal);[saveregisters,public,alias:'FPC_STACKCHECK'];
+procedure int_stackcheck(stack_size:Cardinal);[public,alias:'FPC_STACKCHECK'];
 {
 {
   called when trying to get local stack if the compiler directive $S
   called when trying to get local stack if the compiler directive $S
   is set this function must preserve all registers
   is set this function must preserve all registers
@@ -203,7 +203,14 @@ procedure int_stackcheck(stack_size:Cardinal);[saveregisters,public,alias:'FPC_S
 }
 }
 begin
 begin
   if StackErr then exit;  // avoid recursive calls
   if StackErr then exit;  // avoid recursive calls
-  if stackavail > stack_size + 5120 then exit;  // we really need that much, at least on nw6.5
+  asm
+    pusha
+  end;
+  stackerr := (stackavail < stack_size + 5120);   // we really need that much, at least on nw6.5
+  asm
+    popa
+  end;
+  if not StackErr then exit;
   StackErr := true;
   StackErr := true;
   HandleError (202);
   HandleError (202);
 end;
 end;
@@ -1178,7 +1185,10 @@ Begin
 End.
 End.
 {
 {
   $Log$
   $Log$
-  Revision 1.5  2004-10-25 15:38:59  peter
+  Revision 1.6  2004-10-25 18:11:49  armin
+  * saveregisters no longer supported by compiler, for now save all registers in stackcheck
+
+  Revision 1.5  2004/10/25 15:38:59  peter
     * compiler defined HEAP and HEAPSIZE removed
     * compiler defined HEAP and HEAPSIZE removed
 
 
   Revision 1.4  2004/09/26 19:23:34  armin
   Revision 1.4  2004/09/26 19:23:34  armin