DEADSOFTWARE

disable stack trace after user interrupt
[cpc.git] / src / cpfront / posix / generic / System / Mod / Kernel.cp
index a3f6d712bf86c35e95adf33de2d7de72e3e7957a..622e0b10cc31ffb511333206090233333c0fd193 100644 (file)
@@ -1,9 +1,9 @@
 MODULE Kernel;
 
-  IMPORT S := SYSTEM, stdlib := C99stdlib, stdio := C99stdio,
-    time := C99time, wctype := C99wctype, sysmman := C99sys_mman,
-    dlfcn := C99dlfcn, fcntl := C99fcntl, types := C99types,
-    unistd := C99unistd, signal := C99signal, setjmp := C99setjmp;
+  IMPORT S := SYSTEM, stdlib := PosixCstdlib, stdio := PosixCstdio,
+    time := PosixCtime, wctype := PosixCwctype, sysmman := PosixCsys_mman,
+    dlfcn := PosixCdlfcn, fcntl := PosixCfcntl, types := PosixCtypes,
+    unistd := PosixCunistd, signal := PosixCsignal, setjmp := PosixCsetjmp;
 
   (* init fpu? *)
   (* add signal blocking to avoid race conditions in Try/Trap/TrapHandler *)
@@ -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
@@ -460,12 +462,18 @@ MODULE Kernel;
 
   PROCEDURE AllocHeapMem (size: INTEGER; VAR c: Cluster);
     CONST N = 65536;  (* cluster size for dll *)
-    VAR adr, allocated: INTEGER;
+    VAR adr, allocated, newsize: INTEGER;
   BEGIN
     INC(size, 16);
     ASSERT(size > 0, 100); adr := 0;
-    IF size < N THEN adr := stdlib.malloc(N) END;
-    IF adr = 0 THEN adr := stdlib.malloc(size); allocated := size ELSE allocated := N END;
+    IF size < N THEN
+      adr := AllocMem(N, newsize);
+      allocated := newsize
+    END;
+    IF adr = 0 THEN
+      adr := AllocMem(size, newsize);
+      allocated := newsize
+    END;
     IF adr = 0 THEN c := NIL
     ELSE
       c := S.VAL(Cluster, (adr + 15) DIV 16 * 16); c.max := adr;
@@ -479,7 +487,7 @@ MODULE Kernel;
   PROCEDURE FreeHeapMem (c: Cluster);
   BEGIN
     DEC(used, c.size); DEC(total, c.size);
-    stdlib.free(S.VAL(ADDRESS, c.max))
+    FreeMem(S.VAL(ADDRESS, c.max), c.size)
   END FreeHeapMem;
 
   PROCEDURE HeapFull (size: INTEGER): BOOLEAN;
@@ -1553,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
@@ -1616,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
@@ -1656,6 +1664,7 @@ MODULE Kernel;
   PROCEDURE Init;
     VAR i: INTEGER;
   BEGIN
+    intTrap := TRUE;
     baseStack := S.ADR(i); (* XXX *)
     pagesize := unistd.sysconf(unistd._SC_PAGESIZE);