浏览代码

Fixed range check of frame pointer

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7867 8c9fc860-2736-0410-a75d-ab315db34111
eth.negelef 7 年之前
父节点
当前提交
a332c6c097
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      source/Generic.Unix.Objects.Mod

+ 2 - 2
source/Generic.Unix.Objects.Mod

@@ -209,7 +209,7 @@ TYPE
 				sp := state.SP; bp := state.BP; 
 				sp := state.SP; bp := state.BP; 
 			
 			
 				IF Heaps.GCType = Heaps.HeuristicStackInspectionGC THEN	
 				IF Heaps.GCType = Heaps.HeuristicStackInspectionGC THEN	
-					IF  (stackBottom # 0) & (bp < stackBottom) & (bp >1024) THEN
+					IF  (stackBottom # 0) & (bp < stackBottom) & (bp >= sp - SIZE OF ADDRESS) THEN
 						S.GET( bp, n );
 						S.GET( bp, n );
 						IF ODD( n ) THEN (* procedure descriptor at bp *)
 						IF ODD( n ) THEN (* procedure descriptor at bp *)
 							IF n > 1024 THEN
 							IF n > 1024 THEN
@@ -222,7 +222,7 @@ TYPE
 					END;
 					END;
 				ELSIF Heaps.GCType = Heaps.MetaDataForStackGC THEN
 				ELSIF Heaps.GCType = Heaps.MetaDataForStackGC THEN
 					IF bp < stackBottom THEN
 					IF bp < stackBottom THEN
-						WHILE (bp # Heaps.NilVal) & (bp > 1024) & (bp < stackBottom) DO (* do not test for bp >= sp: could be wrong temporarily! *)
+						WHILE (bp # Heaps.NilVal) & (bp >= sp - SIZE OF ADDRESS) & (bp < stackBottom) DO (*  bp = sp - SIZE OF ADDRESS: happens temporarily upon leaving procedures *)
 							S.GET( bp, n );
 							S.GET( bp, n );
 							IF ODD( n ) THEN (* procedure descriptor at bp *)
 							IF ODD( n ) THEN (* procedure descriptor at bp *)
 								IF n > 1024 THEN
 								IF n > 1024 THEN