1) Patch compiler code interface problem:
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Sat, 20 Feb 1988 19:51:38 +0000 (19:51 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Sat, 20 Feb 1988 19:51:38 +0000 (19:51 +0000)
Dynamic links were not saved when a procedure was interrupted.
The typical symptoms would be that the program would jump to
an unpredictable location after a garbage collection.  This could
cause it do die with almost any signal, typically illegal instruction
and segmentation violation.

2) Add a gc counter for debugging purposes.

v7/src/microcode/bchmmg.c
v7/src/microcode/boot.c
v7/src/microcode/memmag.c

index cf1ded6757df5bc5a99c9d8228fb55065ba1df0e..5bab22f8271adcb8388e7f2cb3b0cde62fdd341e 100644 (file)
@@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising,
 promotional, or sales literature without prior written consent from
 MIT in each case. */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchmmg.c,v 9.39 1987/12/04 22:13:39 jinx Rel $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchmmg.c,v 9.40 1988/02/20 19:50:27 jinx Exp $ */
 
 /* Memory management top level.  Garbage collection to disk.
 
@@ -706,6 +706,7 @@ GC(initial_weak_chain)
 
 DEFINE_PRIMITIVE ("GARBAGE-COLLECT", Prim_Garbage_Collect, 1)
 {
+  extern unsigned long gc_counter;
   Pointer GC_Daemon_Proc;
   Primitive_1_Arg();
 
@@ -715,6 +716,7 @@ DEFINE_PRIMITIVE ("GARBAGE-COLLECT", Prim_Garbage_Collect, 1)
     Microcode_Termination(TERM_GC_OUT_OF_SPACE);
     /*NOTREACHED*/
   }
+  gc_counter += 1;
   GC_Reserve = Get_Integer(Arg1);
   GC(NIL);
   CLEAR_INTERRUPT(INT_GC);
index 3c38086cbf3fdb6c0386f1ebd68101894c0e5b04..442e0aa2bf451187781022b253c5e74eacc42c09 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/boot.c,v 9.45 1988/02/20 06:16:41 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/boot.c,v 9.46 1988/02/20 19:50:46 jinx Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -649,10 +649,15 @@ Microcode_Termination(code)
   /*NOTREACHED*/
 }
 \f
+/* Garbage collection debugging utilities. */
+
 extern Pointer
   *deadly_free,
   *deadly_scan;
 
+extern unsigned long
+  gc_counter;
+
 extern void
   gc_death();
 
@@ -663,6 +668,9 @@ Pointer
   *deadly_free,
   *deadly_scan;
 
+unsigned long
+  gc_counter = 0;
+
 char
   gc_death_message_buffer[100];
 
index c52bbb312994044ab944b78193acf12013e00863..1ab24f8ca6a7f86a5f37667818962101037bee1e 100644 (file)
@@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising,
 promotional, or sales literature without prior written consent from
 MIT in each case. */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/memmag.c,v 9.33 1987/12/04 22:18:09 jinx Rel $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/memmag.c,v 9.34 1988/02/20 19:51:38 jinx Rel $ */
 
 /* Memory management top level.
 
@@ -379,6 +379,7 @@ void GC()
 
 DEFINE_PRIMITIVE("GARBAGE-COLLECT", Prim_Garbage_Collect, 1)
 {
+  extern unsigned long gc_counter;
   Pointer GC_Daemon_Proc;
   Primitive_1_Arg();
 
@@ -392,6 +393,7 @@ DEFINE_PRIMITIVE("GARBAGE-COLLECT", Prim_Garbage_Collect, 1)
            Free, MemTop, Heap_Top);
     Microcode_Termination(TERM_NO_SPACE);
   }
+  gc_counter += 1;
   GC_Reserve = Get_Integer(Arg1);
   GCFlip();
   GC();