Use weak __thread declarations in parlib-compat (XCC)
[akaros.git] / tools / compilers / gcc-glibc / glibc-2.19-akaros / sysdeps / akaros / lowlevellock.h
1 #ifndef _LOWLEVELLOCK_H
2 #define _LOWLEVELLOCK_H
3
4 #include <atomic.h>
5 #include <sys/param.h>
6 #include <parlib/spinlock.h>
7
8 /* Akaros doesn't support private vs shared locks.  That's probably a problem */
9 #define LLL_PRIVATE 0
10 #define LLL_SHARED 1
11
12 /* Glibc's locking is a nightmare, and in lieu of rewriting that mess (see
13  * libc-lock.h) to support something other than an integer for the LLL lock
14  * (and thus the libc lock, and the libc recursive lock, etc), we'll just use
15  * an int for storage and cast that to a struct spin_pdr_lock, which happens to
16  * also be 32 bits.  FFS. */
17 #define LLL_LOCK_INITIALIZER SPINPDR_UNLOCKED
18
19 #define lll_lock(l, p) spin_pdr_lock((struct spin_pdr_lock*)&(l))
20 #define lll_unlock(l, p) spin_pdr_unlock((struct spin_pdr_lock*)&(l))
21 /* lll_trylock returns 0 on success.  spin_pdr_trylock returns TRUE on
22  * success. */
23 #define lll_trylock(l) !spin_pdr_trylock((struct spin_pdr_lock*)&l)
24
25 #define lll_futex_wait(m,v,p) do { assert("NO FUTEX_WAIT FOR YOU!" == 0); } while(0)
26 #define lll_futex_wake(m,n,p) do { assert("NO FUTEX_WAKE FOR YOU!" == 0); } while(0)
27
28 #endif