瀏覽代碼

remove variable from NOPAF code (forbidden!)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8448 8c9fc860-2736-0410-a75d-ab315db34111
felixf 6 年之前
父節點
當前提交
af5264d035
共有 1 個文件被更改,包括 13 次插入3 次删除
  1. 13 3
      source/Unix.Glue.Mod

+ 13 - 3
source/Unix.Glue.Mod

@@ -73,9 +73,19 @@ VAR
 		SYSTEM.PUT( adr, val );	
 	END Dlsym;
 	
-	
+	(* Return current frame pointer *)
+	PROCEDURE  -CurrentBP (): ADDRESS;
+	CODE
+	#IF I386 THEN
+		MOV EAX, EBP
+	#ELSIF AMD64 THEN
+		MOV RAX, RBP
+	#ELSE
+		unimplemented
+	#END
+	END CurrentBP;
+
 	PROCEDURE {INITIAL, NOPAF} Init0;
-	VAR localvar: ADDRESS;
 	CONST CR = 0DX; NL = 0AX;
 	BEGIN
 		baseAdr := ADDRESSOF( Header );
@@ -84,7 +94,7 @@ VAR
 		Trace.Init;
 		Trace.Char := Char;
 		
-		stackBottom := ADDRESSOF( localvar ) + 2*SIZEOF( ADDRESS );
+		stackBottom := CurrentBP()+SIZEOF(ADDRESS);
 	END Init0;
 
 END Glue.