X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fthread.h;h=21521116bc0bd6b1174e971c0da2014a6473b2b1;hb=ebc0f0ebf9efd39519ab86ba28c33abdb25443e0;hp=78367d4163d1bc2343b1d35d03e0d147d2a31566;hpb=d724066ca963f974b47f1a51af13ff9d680392db;p=sbcl.git diff --git a/src/runtime/thread.h b/src/runtime/thread.h index 78367d4..2152111 100644 --- a/src/runtime/thread.h +++ b/src/runtime/thread.h @@ -113,9 +113,18 @@ static inline struct thread *arch_os_get_current_thread() { #if defined(LISP_FEATURE_SB_THREAD) #if defined(LISP_FEATURE_X86) register struct thread *me=0; - if(all_threads) + if(all_threads) { +#if defined(LISP_FEATURE_DARWIN) && defined(LISP_FEATURE_RESTORE_FS_SEGMENT_REGISTER_FROM_TLS) + sel_t sel; + struct thread *th = pthread_getspecific(specials); + sel.index = th->tls_cookie; + sel.rpl = USER_PRIV; + sel.ti = SEL_LDT; + __asm__ __volatile__ ("movw %w0, %%fs" : : "r"(sel)); +#endif __asm__ __volatile__ ("movl %%fs:%c1,%0" : "=r" (me) : "i" (offsetof (struct thread,this))); + } return me; #else return pthread_getspecific(specials); @@ -135,8 +144,8 @@ static inline struct thread *arch_os_get_current_thread() { #define thread_self getpid #define thread_kill kill #define thread_sigmask sigprocmask -#define thread_mutex_lock(l) -#define thread_mutex_unlock(l) +#define thread_mutex_lock(l) 0 +#define thread_mutex_unlock(l) 0 #endif extern void create_initial_thread(lispobj);