| use crate::backend::c; |
| |
| /// A command for use with [`membarrier`] and [`membarrier_cpu`]. |
| /// |
| /// For `MEMBARRIER_CMD_QUERY`, see [`membarrier_query`]. |
| /// |
| /// [`membarrier`]: crate::process::membarrier |
| /// [`membarrier_cpu`]: crate::process::membarrier_cpu |
| /// [`membarrier_query`]: crate::process::membarrier_query |
| #[cfg(linux_kernel)] |
| #[derive(Copy, Clone, Eq, PartialEq, Debug)] |
| #[repr(u32)] |
| pub enum MembarrierCommand { |
| /// `MEMBARRIER_CMD_GLOBAL` |
| #[doc(alias = "Shared")] |
| #[doc(alias = "MEMBARRIER_CMD_SHARED")] |
| Global = c::MEMBARRIER_CMD_GLOBAL as u32, |
| /// `MEMBARRIER_CMD_GLOBAL_EXPEDITED` |
| GlobalExpedited = c::MEMBARRIER_CMD_GLOBAL_EXPEDITED as u32, |
| /// `MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED` |
| RegisterGlobalExpedited = c::MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED as u32, |
| /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED` |
| PrivateExpedited = c::MEMBARRIER_CMD_PRIVATE_EXPEDITED as u32, |
| /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED` |
| RegisterPrivateExpedited = c::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED as u32, |
| /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE` |
| PrivateExpeditedSyncCore = c::MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE as u32, |
| /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE` |
| RegisterPrivateExpeditedSyncCore = |
| c::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE as u32, |
| /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10) |
| PrivateExpeditedRseq = c::MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ as u32, |
| /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10) |
| RegisterPrivateExpeditedRseq = c::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ as u32, |
| } |
| |
| /// A resource value for use with [`getrlimit`], [`setrlimit`], and |
| /// [`prlimit`]. |
| /// |
| /// [`getrlimit`]: crate::process::getrlimit |
| /// [`setrlimit`]: crate::process::setrlimit |
| /// [`prlimit`]: crate::process::prlimit |
| #[cfg(not(any( |
| target_os = "espidf", |
| target_os = "fuchsia", |
| target_os = "redox", |
| target_os = "wasi" |
| )))] |
| #[derive(Copy, Clone, Debug, Eq, PartialEq)] |
| #[cfg_attr(not(target_os = "l4re"), repr(u32))] |
| #[cfg_attr(target_os = "l4re", repr(u64))] |
| pub enum Resource { |
| /// `RLIMIT_CPU` |
| Cpu = bitcast!(c::RLIMIT_CPU), |
| /// `RLIMIT_FSIZE` |
| Fsize = bitcast!(c::RLIMIT_FSIZE), |
| /// `RLIMIT_DATA` |
| Data = bitcast!(c::RLIMIT_DATA), |
| /// `RLIMIT_STACK` |
| Stack = bitcast!(c::RLIMIT_STACK), |
| /// `RLIMIT_CORE` |
| #[cfg(not(target_os = "haiku"))] |
| Core = bitcast!(c::RLIMIT_CORE), |
| /// `RLIMIT_RSS` |
| // "nto" has `RLIMIT_RSS`, but it has the same value as `RLIMIT_AS`. |
| #[cfg(not(any(apple, solarish, target_os = "nto", target_os = "haiku")))] |
| Rss = bitcast!(c::RLIMIT_RSS), |
| /// `RLIMIT_NPROC` |
| #[cfg(not(any(solarish, target_os = "haiku")))] |
| Nproc = bitcast!(c::RLIMIT_NPROC), |
| /// `RLIMIT_NOFILE` |
| Nofile = bitcast!(c::RLIMIT_NOFILE), |
| /// `RLIMIT_MEMLOCK` |
| #[cfg(not(any(solarish, target_os = "aix", target_os = "haiku")))] |
| Memlock = bitcast!(c::RLIMIT_MEMLOCK), |
| /// `RLIMIT_AS` |
| #[cfg(not(target_os = "openbsd"))] |
| As = bitcast!(c::RLIMIT_AS), |
| /// `RLIMIT_LOCKS` |
| #[cfg(not(any( |
| bsd, |
| solarish, |
| target_os = "aix", |
| target_os = "haiku", |
| target_os = "nto" |
| )))] |
| Locks = bitcast!(c::RLIMIT_LOCKS), |
| /// `RLIMIT_SIGPENDING` |
| #[cfg(not(any( |
| bsd, |
| solarish, |
| target_os = "aix", |
| target_os = "haiku", |
| target_os = "nto" |
| )))] |
| Sigpending = bitcast!(c::RLIMIT_SIGPENDING), |
| /// `RLIMIT_MSGQUEUE` |
| #[cfg(not(any( |
| bsd, |
| solarish, |
| target_os = "aix", |
| target_os = "haiku", |
| target_os = "nto" |
| )))] |
| Msgqueue = bitcast!(c::RLIMIT_MSGQUEUE), |
| /// `RLIMIT_NICE` |
| #[cfg(not(any( |
| bsd, |
| solarish, |
| target_os = "aix", |
| target_os = "haiku", |
| target_os = "nto" |
| )))] |
| Nice = bitcast!(c::RLIMIT_NICE), |
| /// `RLIMIT_RTPRIO` |
| #[cfg(not(any( |
| bsd, |
| solarish, |
| target_os = "aix", |
| target_os = "haiku", |
| target_os = "nto" |
| )))] |
| Rtprio = bitcast!(c::RLIMIT_RTPRIO), |
| /// `RLIMIT_RTTIME` |
| #[cfg(not(any( |
| bsd, |
| solarish, |
| target_os = "aix", |
| target_os = "android", |
| target_os = "emscripten", |
| target_os = "haiku", |
| target_os = "nto", |
| )))] |
| Rttime = bitcast!(c::RLIMIT_RTTIME), |
| } |
| |
| #[cfg(apple)] |
| #[allow(non_upper_case_globals)] |
| impl Resource { |
| /// `RLIMIT_RSS` |
| pub const Rss: Self = Self::As; |
| } |
| |
| pub const EXIT_SUCCESS: c::c_int = c::EXIT_SUCCESS; |
| pub const EXIT_FAILURE: c::c_int = c::EXIT_FAILURE; |
| #[cfg(not(any(target_os = "espidf", target_os = "wasi")))] |
| pub const EXIT_SIGNALED_SIGABRT: c::c_int = 128 + c::SIGABRT; |
| |
| /// A CPU identifier as a raw integer. |
| #[cfg(linux_kernel)] |
| pub type RawCpuid = u32; |
| #[cfg(freebsdlike)] |
| pub type RawId = c::id_t; |
| |
| #[cfg(any(linux_kernel, target_os = "dragonfly", target_os = "fuchsia"))] |
| pub(crate) type RawCpuSet = c::cpu_set_t; |
| |
| #[cfg(any(linux_kernel, target_os = "dragonfly", target_os = "fuchsia"))] |
| #[inline] |
| pub(crate) fn raw_cpu_set_new() -> RawCpuSet { |
| let mut set = unsafe { core::mem::zeroed() }; |
| super::cpu_set::CPU_ZERO(&mut set); |
| set |
| } |
| |
| #[cfg(any(linux_kernel, target_os = "fuchsia"))] |
| pub(crate) const CPU_SETSIZE: usize = c::CPU_SETSIZE as usize; |
| #[cfg(target_os = "dragonfly")] |
| pub(crate) const CPU_SETSIZE: usize = 256; |