Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add umtx_op to FreeBSD. #2770

Merged
merged 2 commits into from Apr 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions libc-test/build.rs
Expand Up @@ -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",
Expand Down
24 changes: 24 additions & 0 deletions libc-test/semver/freebsd.txt
Expand Up @@ -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
Expand Down Expand Up @@ -1414,6 +1437,7 @@ __c_anonymous_cr_pid
__error
__xuname
_sem
_umtx_op
abs
accept4
accept_filter_arg
Expand Down
41 changes: 41 additions & 0 deletions src/unix/bsd/freebsdlike/freebsd/mod.rs
Expand Up @@ -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! {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -4221,6 +4254,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")]
Expand Down