#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();
int dyndebug_pagefaults;
int dyndebug_backtrace_when_lost;
int dyndebug_sleep_when_lost;
+ int dyndebug_io;
} dyndebug_config;
#ifdef LISP_FEATURE_GENCGC
#if QSHOW_SIGNAL_SAFE == 1 && !defined(LISP_FEATURE_WIN32)
-#include <signal.h>
extern sigset_t blockable_sigset;
#define QSHOW_BLOCK \
#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;
# 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_ */