diff --git a/ldb/alloc.c b/ldb/alloc.c index 902c88db4b34194cf3bd4177c36457d18b64225d..32eab57741a5d659d3a7b5890e003f2d72102e6d 100644 --- a/ldb/alloc.c +++ b/ldb/alloc.c @@ -1,4 +1,4 @@ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/alloc.c,v 1.6 1991/02/16 00:59:03 wlott Exp $ */ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/alloc.c,v 1.7 1991/10/22 18:36:50 wlott Exp $ */ #include "lisp.h" #include "ldb.h" #include "alloc.h" @@ -8,10 +8,16 @@ #define GET_FREE_POINTER() ((lispobj *)SymbolValue(ALLOCATION_POINTER)) #define SET_FREE_POINTER(new_value) \ (SetSymbolValue(ALLOCATION_POINTER,(lispobj)(new_value))) +#define GET_GC_TRIGGER() ((lispobj *)SymbolValue(INTERNAL_GC_TRIGGER)) +#define SET_GC_TRIGGER(new_value) \ + (SetSymbolValue(INTERNAL_GC_TRIGGER,(lispobj)(new_value))) #else #define GET_FREE_POINTER() current_dynamic_space_free_pointer #define SET_FREE_POINTER(new_value) \ (current_dynamic_space_free_pointer = (new_value)) +#define GET_GC_TRIGGER() current_auto_gc_trigger +#define SET_GC_TRIGGER(new_value) \ + clear_auto_gc_trigger(); set_auto_gc_trigger(new_value); #endif @@ -31,12 +37,9 @@ int bytes; result = GET_FREE_POINTER(); SET_FREE_POINTER(result + (bytes / sizeof(lispobj))); - if (current_auto_gc_trigger && - GET_FREE_POINTER() > current_auto_gc_trigger) { - /* We can't GC while in C land, so just dink the trigger. */ - clear_auto_gc_trigger(); - set_auto_gc_trigger((char *)GET_FREE_POINTER() - - (char *)current_dynamic_space); + if (GET_GC_TRIGGER() && GET_FREE_POINTER() > GET_GC_TRIGGER()) { + SET_GC_TRIGGER((char *)GET_FREE_POINTER() + - (char *)current_dynamic_space); } return result; diff --git a/ldb/gc.c b/ldb/gc.c index acdc136863a9acd9f6ecb6c61814dd00b5d4d89d..046851a139a6c2b11c76d9f0c1a54767e2eacf2c 100644 --- a/ldb/gc.c +++ b/ldb/gc.c @@ -1,7 +1,7 @@ /* * Stop and Copy GC based on Cheney's algorithm. * - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/gc.c,v 1.29 1991/09/27 10:45:45 wlott Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/gc.c,v 1.30 1991/10/22 18:37:56 wlott Exp $ * * Written by Christopher Hoover. */ @@ -1893,6 +1893,8 @@ gc_init() /* Noise to manipulate the gc trigger stuff. */ +#ifndef ibmrt + void set_auto_gc_trigger(dynamic_usage) unsigned long dynamic_usage; { @@ -1900,17 +1902,12 @@ void set_auto_gc_trigger(dynamic_usage) os_vm_size_t length= DYNAMIC_SPACE_SIZE + (os_vm_address_t)current_dynamic_space - addr; -#ifdef ibmrt -#define CURDYNFREEPTR (os_vm_address_t)SymbolValue(ALLOCATION_POINTER) -#else -#define CURDYNFREEPTR (os_vm_address_t)current_dynamic_space_free_pointer -#endif - - if(addr < CURDYNFREEPTR) { + if(addr < (os_vm_address_t)current_dynamic_space_free_pointer) { fprintf(stderr, - "set_auto_gc_trigger: tried to set gc trigger too low! (%d < %d)\n", + "set_auto_gc_trigger: tried to set gc trigger too low! (%d < %d)\n", dynamic_usage, - CURDYNFREEPTR - (os_vm_address_t)current_dynamic_space); + (os_vm_address_t)current_dynamic_space_free_pointer + - (os_vm_address_t)current_dynamic_space); return; } else if (length < 0) { @@ -1950,3 +1947,5 @@ void clear_auto_gc_trigger() current_auto_gc_trigger = NULL; } } + +#endif diff --git a/ldb/globals.c b/ldb/globals.c index 9ab826fecd40d12af6d4224264c9be82bd613118..49bd66dc02e19ef3caa0f55384ca0a341c6275eb 100644 --- a/ldb/globals.c +++ b/ldb/globals.c @@ -1,4 +1,4 @@ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/globals.c,v 1.7 1991/02/16 01:00:19 wlott Exp $ */ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/globals.c,v 1.8 1991/10/22 18:38:02 wlott Exp $ */ /* Variables everybody needs to look at or frob on. */ @@ -33,8 +33,8 @@ lispobj *binding_stack; lispobj *current_dynamic_space; #ifndef ibmrt lispobj *current_dynamic_space_free_pointer; -#endif lispobj *current_auto_gc_trigger; +#endif globals_init() { diff --git a/ldb/globals.h b/ldb/globals.h index 0ee667af3c49d795c18a46f4cd62c0510bf86f1a..fc11198a5d5fdad31215117e973fd07f3cde23d0 100644 --- a/ldb/globals.h +++ b/ldb/globals.h @@ -1,4 +1,4 @@ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/globals.h,v 1.7 1991/02/16 01:00:22 wlott Exp $ */ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/globals.h,v 1.8 1991/10/22 18:38:04 wlott Exp $ */ #if !defined(_INCLUDE_GLOBALS_H_) #define _INCLUDED_GLOBALS_H_ @@ -32,8 +32,8 @@ extern lispobj *binding_stack; extern lispobj *current_dynamic_space; #ifndef ibmrt extern lispobj *current_dynamic_space_free_pointer; -#endif extern lispobj *current_auto_gc_trigger; +#endif #else LANGUAGE_ASSEMBLY diff --git a/ldb/interrupt.c b/ldb/interrupt.c index c7e2d8c322a72b47e6145ada857218d19856e258..3d973ba2a48e5328ba34cbf13d5c790c5062c745 100644 --- a/ldb/interrupt.c +++ b/ldb/interrupt.c @@ -1,4 +1,4 @@ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/interrupt.c,v 1.29 1991/09/27 10:31:55 wlott Exp $ */ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/interrupt.c,v 1.30 1991/10/22 18:38:06 wlott Exp $ */ /* Interrupt handing magic. */ @@ -278,6 +278,8 @@ struct sigcontext *context; * Stuff to detect and handle hitting the gc trigger. * \****************************************************************/ +#ifndef ibmrt + static boolean gc_trigger_hit(context) struct sigcontext *context; { @@ -330,6 +332,8 @@ struct sigcontext *context; return FALSE; } +#endif + /****************************************************************\ * Noise to install handlers. * \****************************************************************/ diff --git a/ldb/ldb.c b/ldb/ldb.c index 538986fcfd2ac97cc467234cd8aeabe3b85743c0..ce3ee058b85c24ca9c548791fdf7129054397e07 100644 --- a/ldb/ldb.c +++ b/ldb/ldb.c @@ -1,4 +1,4 @@ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/ldb.c,v 1.14 1991/09/04 15:35:16 wlott Exp $ */ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/ldb.c,v 1.15 1991/10/22 18:38:09 wlott Exp $ */ /* Lisp kernel core debugger */ #include <stdio.h> @@ -118,8 +118,10 @@ char *envp[]; restore_state = load_core_file(core); #ifdef ibmrt - if (!restore_state) + if (!restore_state) { SetSymbolValue(BINDING_STACK_POINTER, (lispobj)binding_stack); + SetSymbolValue(INTERNAL_GC_TRIGGER, fixnum(-1)); + } #endif interrupt_init(); diff --git a/ldb/mach-os.c b/ldb/mach-os.c index 9f6444044e60c2f3fc197baf73d927495cd5b409..90d306eeecbdb53b907ac2b015f6e72d84092fbd 100644 --- a/ldb/mach-os.c +++ b/ldb/mach-os.c @@ -1,5 +1,5 @@ /* - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/mach-os.c,v 1.2 1991/05/24 19:27:45 wlott Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/mach-os.c,v 1.3 1991/10/22 18:38:11 wlott Exp $ * * OS-dependent routines. This file (along with os.h) exports an * OS-independent interface to the operating system VM facilities. @@ -153,6 +153,7 @@ vm_address_t test; return FALSE; } +#ifndef ibmrt static void sigbus_handler(signal, code, context) int signal, code; struct sigcontext *context; @@ -160,10 +161,13 @@ struct sigcontext *context; if(!interrupt_maybe_gc(context)) interrupt_handle_now(signal, code, context); } +#endif void os_install_interrupt_handlers() { +#ifndef ibmrt interrupt_install_low_level_handler(SIGBUS,sigbus_handler); +#endif #ifdef mips interrupt_install_low_level_handler(SIGSEGV,sigbus_handler); #endif diff --git a/ldb/monitor.c b/ldb/monitor.c index c74538a64ba26360d4191b58c65a523c014ca22f..fb967758f86694899501e3af87346bc0298156af 100644 --- a/ldb/monitor.c +++ b/ldb/monitor.c @@ -1,4 +1,4 @@ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/monitor.c,v 1.15 1991/04/13 13:58:46 chiles Exp $ */ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/monitor.c,v 1.16 1991/10/22 18:38:12 wlott Exp $ */ #include <stdio.h> #include <setjmp.h> @@ -127,10 +127,13 @@ char **ptr; #endif printf("DYNAMIC\t=\t0x%08x\n", current_dynamic_space); -#ifndef ibmrt +#ifdef ibmrt + printf("ALLOC\t=\t0x08x\n", SymbolValue(ALLOCATION_POINTER)); + printf("TRIGGER\t=\t0x08x\n", SymbolValue(INTERNAL_GC_TRIGGER)); +#else printf("ALLOC\t=\t0x%08x\n", current_dynamic_space_free_pointer); -#endif printf("TRIGGER\t=\t0x%08x\n", current_auto_gc_trigger); +#endif printf("STATIC\t=\t0x%08x\n", SymbolValue(STATIC_SPACE_FREE_POINTER)); printf("RDONLY\t=\t0x%08x\n", SymbolValue(READ_ONLY_SPACE_FREE_POINTER)); diff --git a/ldb/rt-arch.c b/ldb/rt-arch.c index 756221dadc97d43130fe7e99a9c2ef992c763442..8f78cc8c4c2b3a1c382efdd5397124158135f651 100644 --- a/ldb/rt-arch.c +++ b/ldb/rt-arch.c @@ -14,17 +14,7 @@ void arch_init() os_vm_address_t arch_get_bad_addr(context) struct sigcontext *context; { - if (!SymbolValue(PSEUDO_ATOMIC_ATOMIC)) - /* If we are not pseudo-atomic, then we could only have hit the */ - /* trigger if the allocation pointer points beyond the trigger. */ - return (os_vm_address_t)SymbolValue(ALLOCATION_POINTER); - else - /* Otherwise, we might be inside an allocator. The best we can do */ - /* is to try turning off the trigger and seeing if the problem goes */ - /* away. If it does, then we guessed right. If it doesn't, we will */ - /* end up back here, except current_auto_gc_trigger will be NULL, */ - /* so we will take the sigbus at that time. */ - return (os_vm_address_t)current_auto_gc_trigger; + return 0; } void arch_skip_instruction(context)