diff options
author | bors <bors@rust-lang.org> | 2022-04-28 17:55:57 +0000 |
---|---|---|
committer | bors <bors@rust-lang.org> | 2022-04-28 17:55:57 +0000 |
commit | 3b5fcd60d1d461d98995a49c3f7542ad9c54bf88 (patch) | |
tree | cf740c9766e78c94b21e02483f442f70b1bd5d17 | |
parent | 27ad069636e8defba5d3a672b691248249ed8c2b (diff) | |
parent | 6700aff25cfc0bc6d5894c1d38ce2446e7fe809c (diff) | |
download | rust-libc-3b5fcd60d1d461d98995a49c3f7542ad9c54bf88.tar.gz |
Auto merge of #2770 - m-ou-se:freebsd-futex, r=Amanieu
Add umtx_op to FreeBSD.
See https://www.freebsd.org/cgi/man.cgi?query=_umtx_op&sektion=2&manpath=FreeBSD+11.0-RELEASE+and+Ports and https://github.com/FreeBSD/freebsd-src/blob/stable/11/sys/sys/umtx.h.
-rw-r--r-- | libc-test/build.rs | 1 | ||||
-rw-r--r-- | libc-test/semver/freebsd.txt | 24 | ||||
-rw-r--r-- | src/unix/bsd/freebsdlike/freebsd/mod.rs | 41 |
3 files changed, 66 insertions, 0 deletions
diff --git a/libc-test/build.rs b/libc-test/build.rs index 226757c6ad..deb3ca4e45 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -1939,6 +1939,7 @@ fn test_freebsd(target: &str) { "sys/ucontext.h", "sys/uio.h", "sys/ktrace.h", + "sys/umtx.h", "sys/un.h", "sys/user.h", "sys/utsname.h", diff --git a/libc-test/semver/freebsd.txt b/libc-test/semver/freebsd.txt index 49a7df2e71..f1ce1b571a 100644 --- a/libc-test/semver/freebsd.txt +++ b/libc-test/semver/freebsd.txt @@ -1240,6 +1240,29 @@ UF_REPARSE UF_SETTABLE UF_SPARSE UF_SYSTEM +UMTX_ABSTIME +UMTX_OP_WAIT +UMTX_OP_WAKE +UMTX_OP_MUTEX_TRYLOCK +UMTX_OP_MUTEX_LOCK +UMTX_OP_MUTEX_UNLOCK +UMTX_OP_SET_CEILING +UMTX_OP_CV_WAIT +UMTX_OP_CV_SIGNAL +UMTX_OP_CV_BROADCAST +UMTX_OP_WAIT_UINT +UMTX_OP_RW_RDLOCK +UMTX_OP_RW_WRLOCK +UMTX_OP_RW_UNLOCK +UMTX_OP_WAIT_UINT_PRIVATE +UMTX_OP_WAKE_PRIVATE +UMTX_OP_MUTEX_WAIT +UMTX_OP_NWAKE_PRIVATE +UMTX_OP_MUTEX_WAKE2 +UMTX_OP_SEM2_WAIT +UMTX_OP_SEM2_WAKE +UMTX_OP_SHM +UMTX_OP_ROBUST_LISTS USER_BC_BASE_MAX USER_BC_DIM_MAX USER_BC_SCALE_MAX @@ -1414,6 +1437,7 @@ __c_anonymous_cr_pid __error __xuname _sem +_umtx_op abs accept4 accept_filter_arg diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index 8d78c0cba5..6194ac4e7c 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -988,6 +988,12 @@ s! { pub function_set_name: [::c_char; ::TCP_FUNCTION_NAME_LEN_MAX as usize], pub pcbcnt: u32, } + + pub struct _umtx_time { + pub _timeout: ::timespec, + pub _flags: u32, + pub _clockid: u32, + } } s_no_extra_traits! { @@ -3657,6 +3663,33 @@ pub const SHM_LARGEPAGE_ALLOC_HARD: ::c_int = 2; pub const SHM_RENAME_NOREPLACE: ::c_int = 1 << 0; pub const SHM_RENAME_EXCHANGE: ::c_int = 1 << 1; +// sys/umtx.h + +pub const UMTX_OP_WAIT: ::c_int = 2; +pub const UMTX_OP_WAKE: ::c_int = 3; +pub const UMTX_OP_MUTEX_TRYLOCK: ::c_int = 4; +pub const UMTX_OP_MUTEX_LOCK: ::c_int = 5; +pub const UMTX_OP_MUTEX_UNLOCK: ::c_int = 6; +pub const UMTX_OP_SET_CEILING: ::c_int = 7; +pub const UMTX_OP_CV_WAIT: ::c_int = 8; +pub const UMTX_OP_CV_SIGNAL: ::c_int = 9; +pub const UMTX_OP_CV_BROADCAST: ::c_int = 10; +pub const UMTX_OP_WAIT_UINT: ::c_int = 11; +pub const UMTX_OP_RW_RDLOCK: ::c_int = 12; +pub const UMTX_OP_RW_WRLOCK: ::c_int = 13; +pub const UMTX_OP_RW_UNLOCK: ::c_int = 14; +pub const UMTX_OP_WAIT_UINT_PRIVATE: ::c_int = 15; +pub const UMTX_OP_WAKE_PRIVATE: ::c_int = 16; +pub const UMTX_OP_MUTEX_WAIT: ::c_int = 17; +pub const UMTX_OP_NWAKE_PRIVATE: ::c_int = 21; +pub const UMTX_OP_MUTEX_WAKE2: ::c_int = 22; +pub const UMTX_OP_SEM2_WAIT: ::c_int = 23; +pub const UMTX_OP_SEM2_WAKE: ::c_int = 24; +pub const UMTX_OP_SHM: ::c_int = 25; +pub const UMTX_OP_ROBUST_LISTS: ::c_int = 26; + +pub const UMTX_ABSTIME: u32 = 1; + const_fn! { {const} fn _ALIGN(p: usize) -> usize { (p + _ALIGNBYTES) & !_ALIGNBYTES @@ -4220,6 +4253,14 @@ extern "C" { ) -> ::c_int; pub fn memfd_create(name: *const ::c_char, flags: ::c_uint) -> ::c_int; pub fn setaudit(auditinfo: *const auditinfo_t) -> ::c_int; + + pub fn _umtx_op( + obj: *mut ::c_void, + op: ::c_int, + val: ::c_ulong, + uaddr: *mut ::c_void, + uaddr2: *mut ::c_void, + ) -> ::c_int; } #[link(name = "kvm")] |