X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.h;h=fec8c7789500652633d1625a54a38e552ad4db9d;hb=c8617f57d0413beb2890e94dabe227cef9c5ddad;hp=c46726139f60d0d6d51076315ee4f00c37506084;hpb=7aef55b130d95c384b63422807f1848faa9aba5a;p=sbcl.git diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h index c467261..fec8c77 100644 --- a/src/runtime/runtime.h +++ b/src/runtime/runtime.h @@ -45,9 +45,25 @@ 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 /* @@ -130,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 @@ -181,13 +199,24 @@ 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 @@ -197,12 +226,15 @@ typedef pthread_t os_thread_t; 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) @@ -222,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; @@ -291,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; @@ -358,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_ */