瀏覽代碼

* PS1: clamp the stack size, so it doesn't exceed the maximum memory available (minus 1k for heap)

Nikolay Nikolov 10 月之前
父節點
當前提交
94e399faf7
共有 1 個文件被更改,包括 9 次插入1 次删除
  1. 9 1
      rtl/ps1/system.pp

+ 9 - 1
rtl/ps1/system.pp

@@ -109,8 +109,16 @@ begin
 end;
 end;
 
 
 function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt;
 function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt;
+const
+  MinHeap = 1024;  // always leave at least 1k heap
+var
+  MaxStack: SizeInt;
 begin
 begin
-  result:= stklen;
+  MaxStack:=SizeInt(PtrUInt($80200000)-PtrUInt(@bss_end))-MinHeap;
+  if stklen<MaxStack then
+    result:= stklen
+  else
+    result:=MaxStack;
 end;
 end;
 
 
 procedure system_exit;
 procedure system_exit;