Windows console I/O overhaul
[sbcl.git] / src / runtime / runtime.h
index 186f296..e3ff2d7 100644 (file)
 #ifndef _SBCL_RUNTIME_H_
 #define _SBCL_RUNTIME_H_
 
+#if defined(LISP_FEATURE_WIN32) && defined(LISP_FEATURE_SB_THREAD)
+# include "pthreads_win32.h"
+#else
+# include <signal.h>
+# ifdef LISP_FEATURE_SB_THREAD
+#  include <pthread.h>
+# endif
+#endif
+
+#include <stdint.h>
+
 #if defined(LISP_FEATURE_SB_THREAD)
 #define thread_self() pthread_self()
 #define thread_kill pthread_kill
 #define thread_mutex_unlock(l) 0
 #endif
 
+#if defined(LISP_FEATURE_WIN32) && defined(LISP_FEATURE_SB_THREAD)
+void os_preinit();
+#endif
+
 #if defined(LISP_FEATURE_SB_SAFEPOINT)
 void map_gc_page();
 void unmap_gc_page();
@@ -115,6 +130,7 @@ extern struct dyndebug_config {
     int dyndebug_pagefaults;
     int dyndebug_backtrace_when_lost;
     int dyndebug_sleep_when_lost;
+    int dyndebug_io;
 } dyndebug_config;
 
 #ifdef LISP_FEATURE_GENCGC
@@ -125,7 +141,6 @@ void dyndebug_init(void);
 
 #if QSHOW_SIGNAL_SAFE == 1 && !defined(LISP_FEATURE_WIN32)
 
-#include <signal.h>
 extern sigset_t blockable_sigset;
 
 #define QSHOW_BLOCK                                             \
@@ -178,7 +193,6 @@ typedef unsigned long pointer_sized_uint_t ;
 #include <sys/types.h>
 
 #if defined(LISP_FEATURE_SB_THREAD)
-#include <pthread.h>
 typedef pthread_t os_thread_t;
 #else
 typedef pid_t os_thread_t;
@@ -331,4 +345,18 @@ extern char *copied_string (char *string);
 # define THREADS_USING_GCSIGNAL 1
 #endif
 
+/* Now that SPARC has precise GENCGC, several places that used to be
+ * #ifdef PCC need adjustment.  Clearly, "PPC or SPARC" is as unhelpful
+ * a test as its reverse, "x86 or x86-64".  However, the feature
+ * commonly used to differentiate between those two worlds is
+ * C_STACK_IS_CONTROL_STACK, and clearly (or at least in my humble
+ * opinion), at some point we'd like to have precise GC on x86 while
+ * still sharing the C stack, so stack usage ought not imply GC
+ * conservativeness.  So let's have a helper feature that makes the code
+ * a bit more future-proof, even if it is itself currently defined in
+ * the naive way: */
+#if defined(LISP_FEATURE_GENCGC) && !defined(LISP_FEATURE_C_STACK_IS_CONTROL_STACK)
+# define GENCGC_IS_PRECISE 1
+#endif
+
 #endif /* _SBCL_RUNTIME_H_ */