1.0.41.14: ppc: Treat counter register as an interior pointer during GC.
[sbcl.git] / src / runtime / thread.c
index f594d56..862e9f8 100644 (file)
@@ -33,7 +33,6 @@
 
 #include "runtime.h"
 #include "validate.h"           /* for BINDING_STACK_SIZE etc */
-#include "alloc.h"
 #include "thread.h"
 #include "arch.h"
 #include "target-arch-os.h"
@@ -43,6 +42,7 @@
 #include "genesis/cons.h"
 #include "genesis/fdefn.h"
 #include "interr.h"             /* for lose() */
+#include "alloc.h"
 #include "gc-internal.h"
 
 #ifdef LISP_FEATURE_WIN32
@@ -396,10 +396,14 @@ create_thread_struct(lispobj initial_function) {
   make_fixnum(THREAD_SLOT_OFFSET_WORDS(field))
 
         STATIC_TLS_INIT(BINDING_STACK_START,binding_stack_start);
+#ifdef BINDING_STACK_POINTER
         STATIC_TLS_INIT(BINDING_STACK_POINTER,binding_stack_pointer);
+#endif
         STATIC_TLS_INIT(CONTROL_STACK_START,control_stack_start);
         STATIC_TLS_INIT(CONTROL_STACK_END,control_stack_end);
+#ifdef ALIEN_STACK
         STATIC_TLS_INIT(ALIEN_STACK,alien_stack_pointer);
+#endif
 #if defined(LISP_FEATURE_X86) || defined (LISP_FEATURE_X86_64)
         STATIC_TLS_INIT(PSEUDO_ATOMIC_BITS,pseudo_atomic_bits);
 #endif
@@ -413,6 +417,7 @@ create_thread_struct(lispobj initial_function) {
     th->binding_stack_start=
         (lispobj*)((void*)th->control_stack_start+thread_control_stack_size);
     th->control_stack_end = th->binding_stack_start;
+    th->control_stack_guard_page_protected = T;
     th->alien_stack_start=
         (lispobj*)((void*)th->binding_stack_start+BINDING_STACK_SIZE);
     th->binding_stack_pointer=th->binding_stack_start;