Browse Source

Added basic support for external trap handling

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8382 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 years ago
parent
commit
f3d14e51b8
1 changed files with 9 additions and 0 deletions
  1. 9 0
      source/Unix.Environment.Mod

+ 9 - 0
source/Unix.Environment.Mod

@@ -115,11 +115,20 @@ BEGIN {UNCOOPERATIVE, UNCHECKED}
 	SYSTEM.SetActivity(SYSTEM.VAL(Activities.Activity,Unix.ReadKey (activity)));
 END RestoreActivity;
 
+PROCEDURE TrapHandler ( sig: LONGINT; mc: Unix.Mcontext );
+PROCEDURE Trap EXTERN "Runtime.Trap" (number: SIZE);
+BEGIN
+	RestoreActivity;
+	Trap (sig);
+END TrapHandler;
+
 PROCEDURE Initialize-;
 BEGIN {UNCOOPERATIVE, UNCHECKED}
 	clock := Timer.GetCounter ();
 	milliseconds := Timer.GetFrequency () DIV 1000;
 	activity := Unix.NewKey ();
+	Unix.HandleSignal(Unix.SIGSEGV);
+	Unix.InstallTrap (TrapHandler);
 END Initialize;
 
 PROCEDURE Terminate-;