summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJérôme Dubois <jerome.dubois24@gmail.com>2023-02-07 21:36:58 +0100
committerJérôme Dubois <jerome.dubois24@gmail.com>2023-02-07 21:36:58 +0100
commit7f9965ce609fa0734100437cb3b447ecc8344d7c (patch)
tree412b291eea1aaccabee0917245f7755dde5e3814
parent7349741e84fd409930bd3498e636e5c094dd249f (diff)
downloadrust-libc-7f9965ce609fa0734100437cb3b447ecc8344d7c.tar.gz
linux: add more constants and FUTEX_OP for futex
Add FUTEX_BITSET_MATCH_ANY, FUTEX_OP_* constant and a const fonction, FUTEX_OP() to replace the macro in C.
-rw-r--r--libc-test/semver/linux.txt14
-rw-r--r--src/unix/linux_like/linux/mod.rs21
2 files changed, 35 insertions, 0 deletions
diff --git a/libc-test/semver/linux.txt b/libc-test/semver/linux.txt
index 2907fc09e2..284f8d36fc 100644
--- a/libc-test/semver/linux.txt
+++ b/libc-test/semver/linux.txt
@@ -724,6 +724,7 @@ FIONCLEX
FIONREAD
FLUSHO
FOPEN_MAX
+FUTEX_BITSET_MATCH_ANY
FUTEX_CLOCK_REALTIME
FUTEX_CMD_MASK
FUTEX_CMP_REQUEUE
@@ -731,6 +732,19 @@ FUTEX_CMP_REQUEUE_PI
FUTEX_FD
FUTEX_LOCK_PI
FUTEX_LOCK_PI2
+FUTEX_OP
+FUTEX_OP_ADD
+FUTEX_OP_ANDN
+FUTEX_OP_CMP_EQ
+FUTEX_OP_CMP_GE
+FUTEX_OP_CMP_GT
+FUTEX_OP_CMP_LE
+FUTEX_OP_CMP_LT
+FUTEX_OP_CMP_NE
+FUTEX_OP_OPARG_SHIFT
+FUTEX_OP_OR
+FUTEX_OP_SET
+FUTEX_OP_XOR
FUTEX_PRIVATE_FLAG
FUTEX_REQUEUE
FUTEX_TRYLOCK_PI
diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs
index 3481dcc044..aeef2e0af8 100644
--- a/src/unix/linux_like/linux/mod.rs
+++ b/src/unix/linux_like/linux/mod.rs
@@ -3456,6 +3456,27 @@ pub const FUTEX_PRIVATE_FLAG: ::c_int = 128;
pub const FUTEX_CLOCK_REALTIME: ::c_int = 256;
pub const FUTEX_CMD_MASK: ::c_int = !(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME);
+pub const FUTEX_BITSET_MATCH_ANY: ::c_int = 0xffffffff;
+
+pub const FUTEX_OP_SET: ::c_int = 0;
+pub const FUTEX_OP_ADD: ::c_int = 1;
+pub const FUTEX_OP_OR: ::c_int = 2;
+pub const FUTEX_OP_ANDN: ::c_int = 3;
+pub const FUTEX_OP_XOR: ::c_int = 4;
+
+pub const FUTEX_OP_OPARG_SHIFT: ::c_int = 8;
+
+pub const FUTEX_OP_CMP_EQ: ::c_int = 0;
+pub const FUTEX_OP_CMP_NE: ::c_int = 1;
+pub const FUTEX_OP_CMP_LT: ::c_int = 2;
+pub const FUTEX_OP_CMP_LE: ::c_int = 3;
+pub const FUTEX_OP_CMP_GT: ::c_int = 4;
+pub const FUTEX_OP_CMP_GE: ::c_int = 5;
+
+pub const fn FUTEX_OP(op: ::c_int, oparg: ::c_int, cmp: ::c_int, cmparg: ::c_int) -> ::c_int {
+ ((op & 0xf) << 28) | ((cmp & 0xf) << 24) | ((oparg & 0xfff) << 12) | (cmparg & 0xfff)
+}
+
// linux/reboot.h
pub const LINUX_REBOOT_MAGIC1: ::c_int = 0xfee1dead;
pub const LINUX_REBOOT_MAGIC2: ::c_int = 672274793;