浏览代码

One address too many on stack ?

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6735 8c9fc860-2736-0410-a75d-ab315db34111
felixf 9 年之前
父节点
当前提交
2dbd0e7594
共有 2 个文件被更改,包括 2 次插入1 次删除
  1. 二进制
      WinAos/A2.exe
  2. 2 1
      source/Win32.Objects.Mod

二进制
WinAos/A2.exe


+ 2 - 1
source/Win32.Objects.Mod

@@ -190,12 +190,13 @@ TYPE
 					Heaps.RegisterCandidates( sp, stackBottom - sp );
 				END;
 			ELSIF Heaps.GCType = Heaps.MetaDataForStackGC THEN
-				WHILE (bp # Heaps.NilVal) & (sp <= bp) & (bp <= stackBottom)  DO
+				WHILE (bp # Heaps.NilVal) & (sp <= bp) & (bp < stackBottom)  DO
 					SYSTEM.GET(bp, n);
 					IF ODD(n) THEN (* procedure descriptor at bp *)
 						DEC(n);
 						desc := SYSTEM.VAL(Modules.ProcedureDescPointer, n);
 						IF desc # NIL THEN
+							(*TRACE(desc.pcFrom, desc.pcLimit, desc.offsets);*)
 							FOR i := 0 TO LEN(desc.offsets)-1 DO
 								adr := bp + desc.offsets[i]; (* pointer at offset *)
 								SYSTEM.GET(adr, p); (* load pointer *)