X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.h;h=fec8c7789500652633d1625a54a38e552ad4db9d;hb=f0cb0cf9c0fe1b6fce5d10dbd34a0b7b249c4ae8;hp=408254101b97cac8b6bd7924055ff0f24801e08b;hpb=1d06300e09f767a38bbe6d5b38232ca334ab1913;p=sbcl.git diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h index 4082541..fec8c77 100644 --- a/src/runtime/runtime.h +++ b/src/runtime/runtime.h @@ -15,6 +15,17 @@ #ifndef _SBCL_RUNTIME_H_ #define _SBCL_RUNTIME_H_ +#if defined(LISP_FEATURE_WIN32) && defined(LISP_FEATURE_SB_THREAD) +# include "pthreads_win32.h" +#else +# include +# ifdef LISP_FEATURE_SB_THREAD +# include +# endif +#endif + +#include + #if defined(LISP_FEATURE_SB_THREAD) #define thread_self() pthread_self() #define thread_kill pthread_kill @@ -29,10 +40,30 @@ #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) + +typedef enum { + GC_NONE=0, + GC_FLIGHT, + GC_MESSAGE, + GC_INVOKED, + GC_QUIET, + GC_SETTLED, + GC_COLLECT, + GC_NPHASES +} gc_phase_t; + void map_gc_page(); void unmap_gc_page(); int check_pending_interrupts(); +void gc_state_lock(); +void gc_state_wait(gc_phase_t); +void gc_state_unlock(); + #endif /* @@ -115,6 +146,8 @@ extern struct dyndebug_config { int dyndebug_pagefaults; int dyndebug_backtrace_when_lost; int dyndebug_sleep_when_lost; + int dyndebug_io; + int dyndebug_runtime_link; } dyndebug_config; #ifdef LISP_FEATURE_GENCGC @@ -125,7 +158,6 @@ void dyndebug_init(void); #if QSHOW_SIGNAL_SAFE == 1 && !defined(LISP_FEATURE_WIN32) -#include extern sigset_t blockable_sigset; #define QSHOW_BLOCK \ @@ -167,29 +199,42 @@ extern sigset_t blockable_sigset; /* even on alpha, int happens to be 4 bytes. long is longer. */ /* FIXME: these names really shouldn't reflect their length and this is not quite right for some of the FFI stuff */ +#if defined(LISP_FEATURE_WIN32)&&defined(LISP_FEATURE_X86_64) +typedef unsigned long long u64; +typedef signed long long s64; +#else typedef unsigned long u64; typedef signed long s64; +#endif typedef unsigned int u32; typedef signed int s32; /* this is an integral type the same length as a machine pointer */ -typedef unsigned long pointer_sized_uint_t ; +typedef uintptr_t pointer_sized_uint_t; + +#ifdef _WIN64 +#define AMD64_SYSV_ABI __attribute__((sysv_abi)) +#else +#define AMD64_SYSV_ABI +#endif #include #if defined(LISP_FEATURE_SB_THREAD) -#include typedef pthread_t os_thread_t; #else typedef pid_t os_thread_t; #endif +typedef uintptr_t uword_t; +typedef intptr_t sword_t; + /* FIXME: we do things this way because of the alpha32 port. once alpha64 has arrived, all this nastiness can go away */ #if 64 == N_WORD_BITS #define LOW_WORD(c) ((pointer_sized_uint_t)c) #define OBJ_FMTX "lx" -typedef unsigned long lispobj; +typedef uintptr_t lispobj; #else #define OBJ_FMTX "x" #define LOW_WORD(c) ((long)(c) & 0xFFFFFFFFL) @@ -209,7 +254,7 @@ widetag_of(lispobj obj) return obj & WIDETAG_MASK; } -static inline unsigned long +static inline uword_t HeaderValue(lispobj obj) { return obj >> N_WIDETAG_BITS; @@ -278,12 +323,12 @@ make_lispobj(void *o, int low_tag) #define MAKE_FIXNUM(n) (n << N_FIXNUM_TAG_BITS) static inline lispobj -make_fixnum(long n) +make_fixnum(sword_t n) { return MAKE_FIXNUM(n); } -static inline long +static inline sword_t fixnum_value(lispobj n) { return n >> N_FIXNUM_TAG_BITS; @@ -345,4 +390,6 @@ extern char *copied_string (char *string); # define GENCGC_IS_PRECISE 1 #endif +void *os_dlsym_default(char *name); + #endif /* _SBCL_RUNTIME_H_ */