X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2Flinux-os.c;h=222f0affec3d6d694ae6e7ab15aa2a07ad7d881f;hb=70227794f1eefb567c13ec04f7bd6d3b6794aa29;hp=993c51c369e96d0fc0fc6ffea120ba53e3a6df7c;hpb=79cc569a97e444389350ea3f5b1017374fe16bec;p=sbcl.git diff --git a/src/runtime/linux-os.c b/src/runtime/linux-os.c index 993c51c..222f0af 100644 --- a/src/runtime/linux-os.c +++ b/src/runtime/linux-os.c @@ -47,10 +47,16 @@ #include "validate.h" #include "thread.h" +#include "gc.h" +#if defined LISP_FEATURE_GENCGC +#include "gencgc-internal.h" +#endif + size_t os_vm_page_size; #ifdef LISP_FEATURE_SB_THREAD -#include +#include +#include #include /* values taken from the kernel's linux/futex.h. This header file @@ -61,16 +67,26 @@ size_t os_vm_page_size; #define FUTEX_FD (2) #define FUTEX_REQUEUE (3) -#define __NR_sys_futex __NR_futex +#define sys_futex sbcl_sys_futex +static inline int sys_futex (void *futex, int op, int val, struct timespec *rel) +{ + return syscall (SYS_futex, futex, op, val, rel); +} + +int +futex_wait(int *lock_word, int oldval) +{ + int t= sys_futex(lock_word,FUTEX_WAIT,oldval, 0); + return t; +} -_syscall4(int,sys_futex, - int *, futex, - int, op, - int, val, - struct timespec *, rel); +int +futex_wake(int *lock_word, int n) +{ + return sys_futex(lock_word,FUTEX_WAKE,n,0); +} #endif -#include "gc.h" int linux_sparc_siginfo_bug = 0; int linux_no_threads_p = 0; @@ -125,13 +141,10 @@ os_vm_address_t os_validate(os_vm_address_t addr, os_vm_size_t len) { int flags = MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE; - os_vm_address_t actual ; + os_vm_address_t actual; - if (addr) - flags |= MAP_FIXED; #ifdef LISP_FEATURE_ALPHA - else { - flags |= MAP_FIXED; + if (!addr) { addr=under_2gb_free_pointer; } #endif @@ -275,18 +288,3 @@ os_install_interrupt_handlers(void) sig_stop_for_gc_handler); #endif } - -#ifdef LISP_FEATURE_SB_THREAD -int -futex_wait(int *lock_word, int oldval) -{ - int t= sys_futex(lock_word,FUTEX_WAIT,oldval, 0); - return t; -} - -int -futex_wake(int *lock_word, int n) -{ - return sys_futex(lock_word,FUTEX_WAKE,n,0); -} -#endif