diff a/Userland/Libraries/LibC/serenity.h b/Userland/Libraries/LibC/serenity.h (rejected hunks) @@ -55,10 +55,47 @@ int profiling_disable(pid_t); int set_thread_boost(pid_t tid, int amount); int set_process_boost(pid_t, int amount); +#define _FUTEX_OP_SHIFT_OP 28 +#define _FUTEX_OP_MASK_OP 0xf +#define _FUTEX_OP_SHIFT_CMP 24 +#define _FUTEX_OP_MASK_CMP 0xf +#define _FUTEX_OP_SHIFT_OP_ARG 12 +#define _FUTEX_OP_MASK_OP_ARG 0xfff +#define _FUTEX_OP_SHIFT_CMP_ARG 0 +#define _FUTEX_OP_MASK_CMP_ARG 0xfff + +#define FUTEX_OP(op, op_arg, cmp, cmp_arg) \ + ((((op)&_FUTEX_OP_MASK_OP) << _FUTEX_OP_SHIFT_OP) | (((cmp)&_FUTEX_OP_MASK_CMP) << _FUTEX_OP_SHIFT_CMP) | (((op_arg)&_FUTEX_OP_MASK_OP_ARG) << _FUTEX_OP_SHIFT_OP_ARG) | (((cmp_arg)&_FUTEX_OP_MASK_CMP_ARG) << _FUTEX_OP_SHIFT_CMP_ARG)) + +#define FUTEX_OP_SET 0 +#define FUTEX_OP_ADD 1 +#define FUTEX_OP_OR 2 +#define FUTEX_OP_ANDN 3 +#define FUTEX_OP_XOR 4 +#define FUTEX_OP_ARG_SHIFT 8 + +#define FUTEX_OP_CMP_EQ 0 +#define FUTEX_OP_CMP_NE 1 +#define FUTEX_OP_CMP_LT 2 +#define FUTEX_OP_CMP_LE 3 +#define FUTEX_OP_CMP_GT 4 +#define FUTEX_OP_CMP_GE 5 + #define FUTEX_WAIT 1 #define FUTEX_WAKE 2 +#define FUTEX_REQUEUE 3 +#define FUTEX_CMP_REQUEUE 4 +#define FUTEX_WAKE_OP 5 +#define FUTEX_WAIT_BITSET 9 +#define FUTEX_WAKE_BITSET 10 + +#define FUTEX_PRIVATE_FLAG (1 << 7) +#define FUTEX_CLOCK_REALTIME (1 << 8) +#define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME) + +#define FUTEX_BITSET_MATCH_ANY 0xffffffff -int futex(int32_t* userspace_address, int futex_op, int32_t value, const struct timespec* timeout); +int futex(uint32_t* userspace_address, int futex_op, uint32_t value, const struct timespec* timeout, uint32_t* userspace_address2, uint32_t value3); #define PURGE_ALL_VOLATILE 0x1 #define PURGE_ALL_CLEAN_INODE 0x2