From fe54b47e59f3838bbae75f846149067838083e0b Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Sat, 20 Feb 1988 19:51:38 +0000 Subject: [PATCH] 1) Patch compiler code interface problem: 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 | 4 +++- v7/src/microcode/boot.c | 10 +++++++++- v7/src/microcode/memmag.c | 4 +++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/v7/src/microcode/bchmmg.c b/v7/src/microcode/bchmmg.c index cf1ded675..5bab22f82 100644 --- a/v7/src/microcode/bchmmg.c +++ b/v7/src/microcode/bchmmg.c @@ -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); diff --git a/v7/src/microcode/boot.c b/v7/src/microcode/boot.c index 3c38086cb..442e0aa2b 100644 --- a/v7/src/microcode/boot.c +++ b/v7/src/microcode/boot.c @@ -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*/ } +/* 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]; diff --git a/v7/src/microcode/memmag.c b/v7/src/microcode/memmag.c index c52bbb312..1ab24f8ca 100644 --- a/v7/src/microcode/memmag.c +++ b/v7/src/microcode/memmag.c @@ -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(); -- 2.25.1