Browse Source

Moved trace processes to Reflection module (import order!)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7218 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 years ago
parent
commit
48ed2a8fcf
4 changed files with 35 additions and 23 deletions
  1. 5 0
      source/Generic.Unix.Objects.Mod
  2. 5 0
      source/Objects.Mod
  3. 24 1
      source/Reflection.Mod
  4. 1 22
      source/Win32.Kernel.Mod

+ 5 - 0
source/Generic.Unix.Objects.Mod

@@ -976,7 +976,12 @@ TYPE
 		RETURN gcStatusExt
 	END GCStatusFactory;
 
+VAR
+	(* for compatibility and later extension *)
+	TraceProcessHook*: PROCEDURE (prcoess: Process; pc, bp: ADDRESS; stacklow, stackhigh: ADDRESS);
+	
 BEGIN
+	TraceProcessHook := NIL;
 	Init;
 END Objects.
 

+ 5 - 0
source/Objects.Mod

@@ -1781,7 +1781,12 @@ BEGIN
 	FOR i := 0 TO LEN(init.prioRequests) - 1 DO init.prioRequests[i] := 0 END;
 END InitPrioRequest;
 
+VAR
+	(* for compatibility and later extension *)
+	TraceProcessHook*: PROCEDURE (prcoess: Process; pc, bp: ADDRESS; stacklow, stackhigh: ADDRESS);
+	
 BEGIN
+	TraceProcessHook := NIL;
 	IF Stats THEN InitStats; END;
 	Init;
 	(* initialize memory management *)

+ 24 - 1
source/Reflection.Mod

@@ -1,6 +1,6 @@
 MODULE Reflection; (** AUTHOR "fof"; PURPOSE "tools for module, stack and process reflection"; *)
 
-IMPORT Modules,Streams,Machine,Heaps,Objects,SYSTEM;
+IMPORT Modules,Streams,Machine,Heaps,Objects,Kernel,Trace,SYSTEM;
 
 CONST
 	ShowAllProcs = TRUE;
@@ -639,7 +639,30 @@ VAR
 			w.Char(" "); w.Set(p.flags)
 		END
 	END WriteProcess;
+	
+	
+
+VAR trace: Streams.Writer;
+
+	PROCEDURE TraceH(process: Objects.Process; pc, bp: ADDRESS; stacklow, stackhigh: ADDRESS);
+	BEGIN
+		trace.String("----------- Process = "); 
+		trace.Address(process); 
+		trace.String(", Object = "); trace.Address(process.obj); 
+		trace.Ln;
+		StackTraceBack(trace, pc, bp, stacklow ,stackhigh, TRUE, FALSE);
+		trace.Update;
+	END TraceH;
+
+	(* tracing the stacks of all processes during GC phase (needs to identify and stop all processes) *)
+	PROCEDURE TraceProcesses*;
+	BEGIN
+		Objects.TraceProcessHook := TraceH;
+		Kernel.GC;
+		Objects.TraceProcessHook := NIL;
+	END TraceProcesses;
 
 BEGIN
+	NEW(trace, Trace.Send, 4096); 
 	modes := " rdy run awl awc awe rip";   (* 4 characters per mode from Objects.Ready to Objects.Terminated *)
 END Reflection.

+ 1 - 22
source/Win32.Kernel.Mod

@@ -4,7 +4,7 @@
 
 MODULE Kernel;   (** AUTHOR "pjm, ejz, fof, ug"; PURPOSE "Implementation-independent kernel interface"; *)
 
-IMPORT SYSTEM, Kernel32, Machine, Heaps, (* Modules, *) Objects, Reflection, Streams, Trace;
+IMPORT SYSTEM, Kernel32, Machine, Heaps, (* Modules, *) Objects;
 
 CONST
 
@@ -226,28 +226,7 @@ VAR
 	END Left;
 	
 
-VAR trace: Streams.Writer;
-
-	PROCEDURE TraceH(process: Objects.Process; pc, bp: ADDRESS; stacklow, stackhigh: ADDRESS);
-	BEGIN
-		trace.String("----------- Process = "); 
-		trace.Address(process); 
-		trace.String(", Object = "); trace.Address(process.obj); 
-		trace.Ln;
-		Reflection.StackTraceBack(trace, pc, bp, stacklow ,stackhigh, TRUE, FALSE);
-		trace.Update;
-	END TraceH;
-
-	(* tracing the stacks of all processes during GC phase (needs to identify and stop all processes) *)
-	PROCEDURE TraceProcesses*;
-	BEGIN
-		Objects.TraceProcessHook := TraceH;
-		GC;
-		Objects.TraceProcessHook := NIL;
-	END TraceProcesses;
-
 BEGIN
-	NEW(trace, Trace.Send, 4096); 
 	ASSERT (1000 MOD Machine.Second = 0);   (* for Elapsed *)
 	second := Machine.Second;
 	Heaps.GC := Heaps.InvokeGC; (* must be done after all processors have started *)