1.0.41.21: runtime: Current stack and frame pointers are per-thread data.
[sbcl.git] / src / runtime / globals.h
index 9dca797..e807eee 100644 (file)
 
 #include "sbcl.h"
 
-/* Currently threads live only on x86oid platforms, but this thing
- * cannot ever work with threads, so... */
-#if !defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)
-#define FOREIGN_FUNCTION_CALL_FLAG
-#endif
-
 #ifndef LANGUAGE_ASSEMBLY
 
-#ifdef FOREIGN_FUNCTION_CALL_FLAG
+#ifdef LISP_FEATURE_SB_THREAD
+#define foreign_function_call_active_p(thread) \
+    (thread->foreign_function_call_active)
+#else
 extern int foreign_function_call_active;
+#define foreign_function_call_active_p(thread) \
+    foreign_function_call_active
 #endif
 
 extern size_t dynamic_space_size;
+extern size_t thread_control_stack_size;
+
+extern struct runtime_options *runtime_options;
 
 #ifdef LISP_FEATURE_WIN32
 #define ENVIRON _environ
@@ -45,11 +47,15 @@ extern char **ENVIRON;
 extern pthread_key_t specials;
 #endif
 
+#if !defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_C_STACK_IS_CONTROL_STACK)
 extern lispobj *current_control_stack_pointer;
+#endif
+#if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64) || !defined(LISP_FEATURE_SB_THREAD)
 extern lispobj *current_control_frame_pointer;
-# if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)
+#endif
+#if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) && !defined(LISP_FEATURE_SB_THREAD)
 extern lispobj *current_binding_stack_pointer;
-# endif
+#endif
 
 #if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)
 /* This is unused on X86 and X86_64, but is used as the global
@@ -96,7 +102,7 @@ extern void globals_init(void);
 /**/
 # ifdef LISP_FEATURE_PPC
 #  ifdef LISP_FEATURE_DARWIN
-#   define EXTERN(name,bytes) .globl _/**/name
+#   define EXTERN(name,bytes) .globl _ ## name
 #  else
 #   define EXTERN(name,bytes) .globl name
 #  endif
@@ -112,11 +118,13 @@ extern void globals_init(void);
 #  define POINTERSIZE 4
 # endif
 
-#ifdef FOREIGN_FUNCTION_CALL_FLAG
+#ifndef LISP_FEATURE_SB_THREAD
 EXTERN(foreign_function_call_active, 4)
 #endif
 
+#if !defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_C_STACK_IS_CONTROL_STACK)
 EXTERN(current_control_stack_pointer, POINTERSIZE)
+#endif
 EXTERN(current_control_frame_pointer, POINTERSIZE)
 # if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)
 EXTERN(current_binding_stack_pointer, POINTERSIZE)