瀏覽代碼

Fixed traversal of stack frames

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6415 8c9fc860-2736-0410-a75d-ab315db34111
eth.negelef 10 年之前
父節點
當前提交
ebb3abff00
共有 2 個文件被更改,包括 2 次插入2 次删除
  1. 1 1
      source/Activities.Mod
  2. 1 1
      source/Trace.Mod

+ 1 - 1
source/Activities.Mod

@@ -62,7 +62,7 @@ TYPE Activity* = OBJECT {DISPOSABLE} (Queues.Item)
 		stackRecord.next := NIL;
 		stackRecord.prev := NIL;
 		stackLimit := ADDRESS OF stack[SafeStackSize+3* SIZE OF ADDRESS]; SELF.priority := priority;
-		framePointer := ADDRESS OF stack[InitialStackSize - 3 * SIZE OF ADDRESS - CPU.StackDisplacement];
+		framePointer := ADDRESS OF stack[InitialStackSize - 4 * SIZE OF ADDRESS - CPU.StackDisplacement];
 		framePointer.caller := Start;
 		framePointer.previous := NIL;
 		framePointer.descriptor := ADDRESS OF StackFrameDescriptor;

+ 1 - 1
source/Trace.Mod

@@ -176,8 +176,8 @@ BEGIN {UNCOOPERATIVE, UNCHECKED}
 		DEC (skip);
 	END;
 	WHILE count # 0 DO
-		Address (frame.caller); Char (':'); Ln;
 		IF frame.previous = NIL THEN RETURN END;
+		Address (frame.caller); Char (':'); Ln;
 		IF frame.previous - ADDRESS OF frame.descriptor <= size THEN
 			Memory (ADDRESS OF frame.parameters, frame.previous - ADDRESS OF frame.descriptor);
 		ELSIF size # 0 THEN