X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fglobals.c;h=63d53edce5327155cee59c128b8630c63e3faad6;hb=ed1910efb36f71b5ebe33b5ffffd7195e15644de;hp=b4774db1aa0110bbf2f5eaf3fd48e7f2f92fa1ee;hpb=d7f6139a91d7d9b0667a597584ae306d958bb2f4;p=sbcl.git diff --git a/src/runtime/globals.c b/src/runtime/globals.c index b4774db..63d53ed 100644 --- a/src/runtime/globals.c +++ b/src/runtime/globals.c @@ -14,65 +14,75 @@ */ #include +#include +#include -#include "runtime.h" #include "sbcl.h" +#include "runtime.h" #include "globals.h" #include "validate.h" +#ifndef LISP_FEATURE_SB_THREAD int foreign_function_call_active; +#endif +#if !defined(LISP_FEATURE_SB_THREAD) lispobj *current_control_stack_pointer; +#endif +#if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64) || !defined(LISP_FEATURE_SB_THREAD) lispobj *current_control_frame_pointer; -#ifndef BINDING_STACK_POINTER +#endif +#if !defined(BINDING_STACK_POINTER) && !defined(LISP_FEATURE_SB_THREAD) lispobj *current_binding_stack_pointer; #endif -/* ALLOCATION_POINTER is more or less synonymous with RT, it seems. - * Anyone want to do an RT port of sbcl? - */ +/* ALLOCATION_POINTER is x86 or RT. Anyone want to do an RT port? */ -#ifndef ALLOCATION_POINTER +# if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) /* The Object Formerly Known As current_dynamic_space_free_pointer */ lispobj *dynamic_space_free_pointer; #endif -#ifndef INTERNAL_GC_TRIGGER +#ifndef LISP_FEATURE_GENCGC /* GENCGC has its own way to record trigger */ lispobj *current_auto_gc_trigger; #endif /* For copying GCs, this points to the start of the dynamic space * currently in use (that will become the from_space when the next GC * is done). For the GENCGC, it always points to DYNAMIC_SPACE_START. */ -lispobj *current_dynamic_space = -#ifndef GENCGC - DYNAMIC_0_SPACE_START; -#else - DYNAMIC_SPACE_START; +lispobj *current_dynamic_space; + +#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_GCC_TLS) +pthread_key_t specials=0; #endif void globals_init(void) { /* Space, stack, and free pointer vars are initialized by * validate() and coreparse(). */ +#if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64) || !defined(LISP_FEATURE_SB_THREAD) + current_control_frame_pointer = (lispobj *)0; +#endif -#ifndef INTERNAL_GC_TRIGGER +#ifndef LISP_FEATURE_GENCGC /* no GC trigger yet */ current_auto_gc_trigger = NULL; #endif - /* Set foreign function call active. */ - foreign_function_call_active = 1; - - /* Initialize the current Lisp state. */ -#ifndef __i386__ /* if stack grows upward */ - current_control_stack_pointer = (lispobj *)CONTROL_STACK_START; +#ifndef LISP_FEATURE_SB_THREAD +#if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64) + /* KLUDGE: x86oids always think they're in lisp code. See the + * comment at the bottom of + * interrupt.c/fake_foreign_function_call() and the lack of any + * access to foreign_function_call_active or the corresponding + * thread slot in x86{,-64}-assem.S. */ + foreign_function_call_active = 0; #else - current_control_stack_pointer = (lispobj *)CONTROL_STACK_END; + foreign_function_call_active = 1; +#endif #endif - current_control_frame_pointer = (lispobj *)0; -#ifndef BINDING_STACK_POINTER - current_binding_stack_pointer = BINDING_STACK_START; +#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_GCC_TLS) + pthread_key_create(&specials,0); #endif }