DEADSOFTWARE

disable stack trace after user interrupt
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Mon, 22 Jul 2019 15:24:00 +0000 (18:24 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Mon, 22 Jul 2019 15:24:00 +0000 (18:24 +0300)
src/cpfront/posix/generic/System/Mod/Kernel.cp
src/generic/Dsw/Mod/Compiler486Main.cp
src/generic/Dsw/Mod/CompilerCPfrontMain.cp
src/generic/Dsw/Mod/Linker486Main.cp
src/native/linux/486/System/Mod/Kernel.cp
src/native/posix/generic/System/Mod/Kernel.cp

index 8d4c334f2896df1262b8371a0fef66ecfbfcb3c2..622e0b10cc31ffb511333206090233333c0fd193 100644 (file)
@@ -238,7 +238,9 @@ MODULE Kernel;
 
     wouldFinalize: BOOLEAN;
 
-    watcher*: PROCEDURE (event: INTEGER); (* for debugging *)   
+    watcher*: PROCEDURE (event: INTEGER); (* for debugging *)
+
+    intTrap*: BOOLEAN;
 
   PROCEDURE Erase (adr, words: INTEGER);
   BEGIN
@@ -1559,7 +1561,7 @@ MODULE Kernel;
       SetDLink(tryDLink);
       setjmp._longjmp(tryEnv, 1)
     END;
-    IF err = 128 THEN (* do nothing *)
+    IF (err = 128) OR (err = 200) & ~intTrap THEN (* do nothing *)
     ELSIF (trapViewer # NIL) & (restart # NIL) & ~trapped & ~guarded THEN
       trapped := TRUE; trapViewer()
     ELSE DefaultTrapViewer
@@ -1622,7 +1624,7 @@ MODULE Kernel;
       SetDLink(tryDLink);
       setjmp._longjmp(tryEnv, 1)
     END;
-    IF err = 128 THEN (* do nothing *)
+    IF (err = 128) OR (err = 200) & ~intTrap THEN (* do nothing *)
     ELSIF (trapViewer # NIL) & (restart # NIL) & ~trapped & ~guarded THEN
       trapped := TRUE; trapViewer()
     ELSE DefaultTrapViewer
@@ -1662,6 +1664,7 @@ MODULE Kernel;
   PROCEDURE Init;
     VAR i: INTEGER;
   BEGIN
+    intTrap := TRUE;
     baseStack := S.ADR(i); (* XXX *)
     pagesize := unistd.sysconf(unistd._SC_PAGESIZE);
 
index 77ded19d6927edae6e61c4b5b22a0e9d35efd9e2..5d1a68f85758850af00f8a5423956419fb3fc9db 100644 (file)
@@ -136,6 +136,7 @@ MODULE DswCompiler486Main;
         ELSIF p = "-no-hints" THEN
           EXCL(opts, hint)
         ELSIF p = "-trap" THEN
+          Kernel.intTrap := TRUE;
           INCL(opts, errorTrap)
         ELSIF p = "-no-trap" THEN
           EXCL(opts, errorTrap)
@@ -315,6 +316,7 @@ MODULE DswCompiler486Main;
   END Init;
 
 BEGIN
+  Kernel.intTrap := FALSE;
   Kernel.Start(Init)
 END DswCompiler486Main.
 
index 672ca76000539e89f455d36274e56d4db660599b..b5d4ec95769d797b5321f8efd3230b811f15b4c1 100644 (file)
@@ -137,6 +137,7 @@ MODULE DswCompilerCPfrontMain;
         ELSIF p = "-no-hints" THEN
           EXCL(opts, hint)
         ELSIF p = "-trap" THEN
+          Kernel.intTrap := TRUE;
           INCL(opts, errorTrap)
         ELSIF p = "-no-trap" THEN
           EXCL(opts, errorTrap)
@@ -334,5 +335,6 @@ MODULE DswCompilerCPfrontMain;
   END Init;
 
 BEGIN
+  Kernel.intTrap := FALSE;
   Kernel.Start(Init)
 END DswCompilerCPfrontMain.
index 27997e2c3bf946219122604f9b2451a481fc2acc..677681f61bf92aef3b403317581584d8cede96f0 100644 (file)
@@ -103,7 +103,8 @@ MODULE DswLinker486Main;
           inobj.next := obj;
           INC(i)
         ELSIF p = "-trap" THEN
-          LB.trap := TRUE
+          LB.trap := TRUE;
+          Kernel.intTrap := TRUE
         ELSE
           Console.WriteStr("unknown option ");
           Console.WriteStr(p); Console.WriteLn;
@@ -255,5 +256,6 @@ MODULE DswLinker486Main;
   END Init;
 
 BEGIN
+  Kernel.intTrap := FALSE;
   Kernel.Start(Init)
 END DswLinker486Main.
index 115a773f82860be78230ca4b089622ee056e17aa..4c8688e00fa7f81f9050eeaa96a876549e7c1eb8 100644 (file)
@@ -237,7 +237,9 @@ MODULE Kernel;
 
     wouldFinalize: BOOLEAN;
 
-    watcher*: PROCEDURE (event: INTEGER); (* for debugging *)   
+    watcher*: PROCEDURE (event: INTEGER); (* for debugging *)
+
+    intTrap*: BOOLEAN;
 
   PROCEDURE Erase (adr, words: INTEGER);
   BEGIN
@@ -1563,7 +1565,7 @@ MODULE Kernel;
     IF isTry THEN
       setjmp._longjmp(tryEnv, 1)
     END;
-    IF err = 128 THEN (* do nothing *)
+    IF (err = 128) OR (err = 200) & ~intTrap THEN (* do nothing *)
     ELSIF (trapViewer # NIL) & (restart # NIL) & ~trapped & ~guarded THEN
       trapped := TRUE; trapViewer()
     ELSE DefaultTrapViewer
@@ -1637,7 +1639,7 @@ MODULE Kernel;
     IF isTry THEN
       setjmp._longjmp(tryEnv, 1)
     END;
-    IF err = 128 THEN (* do nothing *)
+    IF (err = 128) OR (err = 200) & ~intTrap THEN (* do nothing *)
     ELSIF (trapViewer # NIL) & (restart # NIL) & ~trapped & ~guarded THEN
       trapped := TRUE; trapViewer()
     ELSE DefaultTrapViewer
@@ -1676,6 +1678,7 @@ MODULE Kernel;
   PROCEDURE Init;
     VAR i: INTEGER;
   BEGIN
+    intTrap := TRUE;
     pagesize := unistd.sysconf(unistd._SC_PAGESIZE);
 
     (* init heap *)
index 5773b4ebcdedcbc3fe3124c6bb9fe428d8043569..2039e1766ff3b0595b81a696846cc72f4dc58c3a 100644 (file)
@@ -237,7 +237,9 @@ MODULE Kernel;
 
     wouldFinalize: BOOLEAN;
 
-    watcher*: PROCEDURE (event: INTEGER); (* for debugging *)   
+    watcher*: PROCEDURE (event: INTEGER); (* for debugging *)
+
+    intTrap*: BOOLEAN;
 
   PROCEDURE Erase (adr, words: INTEGER);
   BEGIN
@@ -1566,7 +1568,7 @@ MODULE Kernel;
     IF isTry THEN
       setjmp._longjmp(tryEnv, 1)
     END;
-    IF err = 128 THEN (* do nothing *)
+    IF (err = 128) OR (err = 200) & ~intTrap THEN (* do nothing *)
     ELSIF (trapViewer # NIL) & (restart # NIL) & ~trapped & ~guarded THEN
       trapped := TRUE; trapViewer()
     ELSE DefaultTrapViewer
@@ -1625,7 +1627,7 @@ MODULE Kernel;
     IF isTry THEN
       setjmp._longjmp(tryEnv, 1)
     END;
-    IF err = 128 THEN (* do nothing *)
+    IF (err = 128) OR (err = 200) & ~intTrap THEN (* do nothing *)
     ELSIF (trapViewer # NIL) & (restart # NIL) & ~trapped & ~guarded THEN
       trapped := TRUE; trapViewer()
     ELSE DefaultTrapViewer
@@ -1664,6 +1666,7 @@ MODULE Kernel;
   PROCEDURE Init;
     VAR i: INTEGER;
   BEGIN
+    intTrap := TRUE;
     pagesize := unistd.sysconf(unistd._SC_PAGESIZE);
 
     (* init heap *)