diff --git a/src/new/glibc/mod.rs b/src/new/glibc/mod.rs index 86dec42d6a784..d28fb14654c6f 100644 --- a/src/new/glibc/mod.rs +++ b/src/new/glibc/mod.rs @@ -29,6 +29,10 @@ mod sysdeps { pub(crate) use posix::*; // FIXME(pthread): eventually all platforms should use this module #[cfg(target_os = "linux")] -pub(crate) use sysdeps::nptl::*; +#[allow(unused)] +pub(crate) use sysdeps::nptl::{ + bits as nptl_bits, + pthread, +}; #[cfg(target_os = "linux")] pub(crate) use sysdeps::unix::linux::*; diff --git a/src/new/glibc/sysdeps/unix/linux/bits/types/mod.rs b/src/new/glibc/sysdeps/unix/linux/bits/types/mod.rs new file mode 100644 index 0000000000000..9bd0dae5fd7da --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/bits/types/mod.rs @@ -0,0 +1,14 @@ +//! Source directory: `sysdeps/unix/sysv/linux/bits/types` +//! +//! + +#[cfg_attr( + any(target_arch = "mips", target_arch = "mips64"), + path = "../../mips/bits/siginfo_arch.rs" +)] +#[cfg_attr( + any(target_arch = "sparc", target_arch = "sparc64"), + path = "../../sparc/bits/siginfo_arch.rs" +)] +#[cfg_attr(target_arch = "x86", path = "../../x86/bits/siginfo_arch.rs")] +pub(crate) mod siginfo_t; diff --git a/src/new/glibc/sysdeps/unix/linux/bits/types/siginfo_t.rs b/src/new/glibc/sysdeps/unix/linux/bits/types/siginfo_t.rs new file mode 100644 index 0000000000000..7df4514eae623 --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/bits/types/siginfo_t.rs @@ -0,0 +1,214 @@ +//! Source header: `sysdeps/unix/sysv/linux/bits/types/siginfo_t.h` +//! +//! This mirrors one-to-one the generic definition. See the `#[path]` redirects +//! in the `super` module for the architecture-specific definitions. Unlike +//! upstream, they override this entire module, and not just specific fields of +//! `siginfo_t`. +//! +//! + +use crate::prelude::*; + +const __SI_MAX_SIZE: usize = 128; +const __SI_PAD_SIZE: usize = if cfg!(target_pointer_width = "64") { + __SI_MAX_SIZE / size_of::() - 4 +} else { + __SI_MAX_SIZE / size_of::() - 3 +}; + +s_no_extra_traits! { + pub struct siginfo_t { + pub si_signo: c_int, + pub si_errno: c_int, + pub si_code: c_int, + #[cfg(target_pointer_width = "64")] + __pad0: Padding, + _sifields: __c_anonymous_siginfo_t__si_fields, + } + + union __c_anonymous_siginfo_t__si_fields { + _pad: [c_int; __SI_PAD_SIZE], + _kill: __c_anonymous__si_fields__kill, + _timer: __c_anonymous__si_fields__timer, + _rt: __c_anonymous__si_fields__rt, + _sigchld: __c_anonymous__si_fields__sigchld, + _sigfault: __c_anonymous__si_fields__sigfault, + _sigpoll: __c_anonymous__si_fields__sigpoll, + _sigsys: __c_anonymous__si_fields__sigsys, + } + + struct __c_anonymous__si_fields__kill { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + } + + struct __c_anonymous__si_fields__timer { + si_tid: c_int, + si_overrun: c_int, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__rt { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__sigchld { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_status: c_int, + si_utime: crate::clock_t, + si_stime: crate::clock_t, + } + + struct __c_anonymous__si_fields__sigfault { + si_addr: *mut c_void, + si_addr_lsb: c_short, + _bounds: __c_anonymous__sigfault__bounds, + } + + struct __c_anonymous__si_fields__sigpoll { + si_band: c_long, + si_fd: c_int, + } + + struct __c_anonymous__si_fields__sigsys { + _call_addr: *mut c_void, + _syscall: c_int, + _arch: c_uint, + } + + union __c_anonymous__sigfault__bounds { + _addr_bnd: __c_anonymous__bounds__addr_bnd, + _pkey: u32, + } + + struct __c_anonymous__bounds__addr_bnd { + _lower: *mut c_void, + _upper: *mut c_void, + } +} + +impl siginfo_t { + #[inline] + pub unsafe fn si_pid(&self) -> crate::pid_t { + unsafe { self._sifields._kill.si_pid } + } + + #[inline] + pub unsafe fn si_uid(&self) -> crate::uid_t { + unsafe { self._sifields._kill.si_uid } + } + + #[inline] + pub unsafe fn si_timerid(&self) -> c_int { + unsafe { self._sifields._timer.si_tid } + } + + #[inline] + pub unsafe fn si_overrun(&self) -> c_int { + unsafe { self._sifields._timer.si_overrun } + } + + #[inline] + pub unsafe fn si_status(&self) -> c_int { + unsafe { self._sifields._sigchld.si_status } + } + + #[inline] + pub unsafe fn si_utime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_utime } + } + + #[inline] + pub unsafe fn si_stime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_stime } + } + + #[inline] + pub unsafe fn si_value(&self) -> crate::sigval { + unsafe { self._sifields._rt.si_sigval } + } + + #[inline] + pub unsafe fn si_int(&self) -> c_int { + unsafe { self._sifields._rt.si_sigval.sival_int } + } + + #[inline] + pub unsafe fn si_ptr(&self) -> *mut c_void { + unsafe { self._sifields._rt.si_sigval.sival_ptr } + } + + #[inline] + pub unsafe fn si_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigfault.si_addr } + } + + #[inline] + pub unsafe fn si_addr_lsb(&self) -> c_short { + unsafe { self._sifields._sigfault.si_addr_lsb } + } + + #[inline] + pub unsafe fn si_lower(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._lower } + } + + #[inline] + pub unsafe fn si_upper(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._upper } + } + + #[inline] + pub unsafe fn si_pkey(&self) -> u32 { + unsafe { self._sifields._sigfault._bounds._pkey } + } + + #[inline] + pub unsafe fn si_band(&self) -> c_long { + unsafe { self._sifields._sigpoll.si_band } + } + + #[inline] + pub unsafe fn si_fd(&self) -> c_int { + unsafe { self._sifields._sigpoll.si_fd } + } + + #[inline] + pub unsafe fn si_call_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigsys._call_addr } + } + + #[inline] + pub unsafe fn si_syscall(&self) -> c_int { + unsafe { self._sifields._sigsys._syscall } + } + + #[inline] + pub unsafe fn si_arch(&self) -> c_uint { + unsafe { self._sifields._sigsys._arch } + } +} + +cfg_if! { + if #[cfg(feature = "extra_traits")] { + impl PartialEq for siginfo_t { + fn eq(&self, other: &Self) -> bool { + (self.si_signo, self.si_errno, self.si_code) + == (other.si_signo, other.si_errno, other.si_code) + } + } + + impl Eq for siginfo_t {} + + impl core::hash::Hash for siginfo_t { + fn hash(&self, state: &mut H) { + self.si_signo.hash(state); + self.si_errno.hash(state); + self.si_code.hash(state); + } + } + } +} diff --git a/src/new/glibc/sysdeps/unix/linux/mips/bits/siginfo_arch.rs b/src/new/glibc/sysdeps/unix/linux/mips/bits/siginfo_arch.rs new file mode 100644 index 0000000000000..f853735a6cd05 --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/mips/bits/siginfo_arch.rs @@ -0,0 +1,209 @@ +//! Header source: `sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h` +//! +//! + +use crate::prelude::*; + +const __SI_MAX_SIZE: usize = 128; +const __SI_PAD_SIZE: usize = if cfg!(target_pointer_width = "64") { + __SI_MAX_SIZE / size_of::() - 4 +} else { + __SI_MAX_SIZE / size_of::() - 3 +}; + +s_no_extra_traits! { + pub struct siginfo_t { + pub si_signo: c_int, + pub si_code: c_int, + pub si_errno: c_int, + #[cfg(target_pointer_width = "64")] + __pad0: Padding, + _sifields: __c_anonymous_siginfo_t__si_fields, + } + + union __c_anonymous_siginfo_t__si_fields { + _pad: [c_int; __SI_PAD_SIZE], + _kill: __c_anonymous__si_fields__kill, + _timer: __c_anonymous__si_fields__timer, + _rt: __c_anonymous__si_fields__rt, + _sigchld: __c_anonymous__si_fields__sigchld, + _sigfault: __c_anonymous__si_fields__sigfault, + _sigpoll: __c_anonymous__si_fields__sigpoll, + _sigsys: __c_anonymous__si_fields__sigsys, + } + + struct __c_anonymous__si_fields__kill { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + } + + struct __c_anonymous__si_fields__timer { + si_tid: c_int, + si_overrun: c_int, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__rt { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__sigchld { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_status: c_int, + si_utime: crate::clock_t, + si_stime: crate::clock_t, + } + + struct __c_anonymous__si_fields__sigfault { + si_addr: *mut c_void, + si_addr_lsb: c_short, + _bounds: __c_anonymous__sigfault__bounds, + } + + struct __c_anonymous__si_fields__sigpoll { + si_band: c_long, + si_fd: c_int, + } + + struct __c_anonymous__si_fields__sigsys { + _call_addr: *mut c_void, + _syscall: c_int, + _arch: c_uint, + } + + union __c_anonymous__sigfault__bounds { + _addr_bnd: __c_anonymous__bounds__addr_bnd, + _pkey: u32, + } + + struct __c_anonymous__bounds__addr_bnd { + _lower: *mut c_void, + _upper: *mut c_void, + } +} + +cfg_if! { + if #[cfg(feature = "extra_traits")] { + impl PartialEq for siginfo_t { + fn eq(&self, other: &Self) -> bool { + (self.si_signo, self.si_errno, self.si_code) + == (other.si_signo, other.si_errno, other.si_code) + } + } + + impl Eq for siginfo_t {} + + impl core::hash::Hash for siginfo_t { + fn hash(&self, state: &mut H) { + self.si_signo.hash(state); + self.si_errno.hash(state); + self.si_code.hash(state); + } + } + } +} + +impl siginfo_t { + #[inline] + pub unsafe fn si_pid(&self) -> crate::pid_t { + unsafe { self._sifields._kill.si_pid } + } + + #[inline] + pub unsafe fn si_uid(&self) -> crate::uid_t { + unsafe { self._sifields._kill.si_uid } + } + + #[inline] + pub unsafe fn si_timerid(&self) -> c_int { + unsafe { self._sifields._timer.si_tid } + } + + #[inline] + pub unsafe fn si_overrun(&self) -> c_int { + unsafe { self._sifields._timer.si_overrun } + } + + #[inline] + pub unsafe fn si_status(&self) -> c_int { + unsafe { self._sifields._sigchld.si_status } + } + + #[inline] + pub unsafe fn si_utime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_utime } + } + + #[inline] + pub unsafe fn si_stime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_stime } + } + + #[inline] + pub unsafe fn si_value(&self) -> crate::sigval { + unsafe { self._sifields._rt.si_sigval } + } + + #[inline] + pub unsafe fn si_int(&self) -> c_int { + unsafe { self._sifields._rt.si_sigval.sival_int } + } + + #[inline] + pub unsafe fn si_ptr(&self) -> *mut c_void { + unsafe { self._sifields._rt.si_sigval.sival_ptr } + } + + #[inline] + pub unsafe fn si_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigfault.si_addr } + } + + #[inline] + pub unsafe fn si_addr_lsb(&self) -> c_short { + unsafe { self._sifields._sigfault.si_addr_lsb } + } + + #[inline] + pub unsafe fn si_lower(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._lower } + } + + #[inline] + pub unsafe fn si_upper(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._upper } + } + + #[inline] + pub unsafe fn si_pkey(&self) -> u32 { + unsafe { self._sifields._sigfault._bounds._pkey } + } + + #[inline] + pub unsafe fn si_band(&self) -> c_long { + unsafe { self._sifields._sigpoll.si_band } + } + + #[inline] + pub unsafe fn si_fd(&self) -> c_int { + unsafe { self._sifields._sigpoll.si_fd } + } + + #[inline] + pub unsafe fn si_call_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigsys._call_addr } + } + + #[inline] + pub unsafe fn si_syscall(&self) -> c_int { + unsafe { self._sifields._sigsys._syscall } + } + + #[inline] + pub unsafe fn si_arch(&self) -> c_uint { + unsafe { self._sifields._sigsys._arch } + } +} diff --git a/src/new/glibc/sysdeps/unix/linux/mips/mod.rs b/src/new/glibc/sysdeps/unix/linux/mips/mod.rs new file mode 100644 index 0000000000000..a96d840f6e223 --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/mips/mod.rs @@ -0,0 +1,10 @@ +//! Directory source: `sysdeps/unix/sysv/linux/mips` +//! +//! + +/// Directory source: `sysdeps/unix/sysv/linux/mips/bits` +/// +/// +pub(crate) mod bits { + pub(crate) mod siginfo_arch; +} diff --git a/src/new/glibc/sysdeps/unix/linux/mod.rs b/src/new/glibc/sysdeps/unix/linux/mod.rs index 21dac17fc0b27..e857c3fb601d2 100644 --- a/src/new/glibc/sysdeps/unix/linux/mod.rs +++ b/src/new/glibc/sysdeps/unix/linux/mod.rs @@ -8,3 +8,10 @@ pub(crate) mod net { pub(crate) mod route; } + +/// Source directory: `sysdeps/unix/sysv/linux/bits` +/// +/// +pub(crate) mod bits { + pub(crate) mod types; +} diff --git a/src/new/glibc/sysdeps/unix/linux/sparc/bits/siginfo_arch.rs b/src/new/glibc/sysdeps/unix/linux/sparc/bits/siginfo_arch.rs new file mode 100644 index 0000000000000..f8dbeed20cd03 --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/sparc/bits/siginfo_arch.rs @@ -0,0 +1,225 @@ +//! Header source: `sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h` +//! +//! + +use crate::prelude::*; + +const __SI_MAX_SIZE: usize = 128; +const __SI_PAD_SIZE: usize = if cfg!(target_pointer_width = "64") { + __SI_MAX_SIZE / size_of::() - 4 +} else { + __SI_MAX_SIZE / size_of::() - 3 +}; + +s_no_extra_traits! { + pub struct siginfo_t { + pub si_signo: c_int, + pub si_errno: c_int, + pub si_code: c_int, + #[cfg(target_pointer_width = "64")] + __pad0: Padding, + _sifields: __c_anonymous_siginfo_t__si_fields, + } + + union __c_anonymous_siginfo_t__si_fields { + _pad: [c_int; __SI_PAD_SIZE], + _kill: __c_anonymous__si_fields__kill, + _timer: __c_anonymous__si_fields__timer, + _rt: __c_anonymous__si_fields__rt, + _sigchld: __c_anonymous__si_fields__sigchld, + _sigfault: __c_anonymous__si_fields__sigfault, + _sigpoll: __c_anonymous__si_fields__sigpoll, + _sigsys: __c_anonymous__si_fields__sigsys, + } + + struct __c_anonymous__si_fields__kill { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + } + + struct __c_anonymous__si_fields__timer { + si_tid: c_int, + si_overrun: c_int, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__rt { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__sigchld { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_status: c_int, + si_utime: crate::clock_t, + si_stime: crate::clock_t, + } + + struct __c_anonymous__si_fields__sigfault { + si_addr: *mut c_void, + _si_trapno: c_int, + si_addr_lsb: c_short, + _bounds: __c_anonymous__sigfault__bounds, + } + + struct __c_anonymous__si_fields__sigpoll { + #[cfg(target_pointer_width = "64")] + si_band: c_int, + #[cfg(not(target_pointer_width = "64"))] + si_band: c_long, + si_fd: c_int, + } + + struct __c_anonymous__si_fields__sigsys { + _call_addr: *mut c_void, + _syscall: c_int, + _arch: c_uint, + } + + union __c_anonymous__sigfault__bounds { + _addr_bnd: __c_anonymous__bounds__addr_bnd, + _pkey: u32, + } + + struct __c_anonymous__bounds__addr_bnd { + _lower: *mut c_void, + _upper: *mut c_void, + } +} + +cfg_if! { + if #[cfg(feature = "extra_traits")] { + impl PartialEq for siginfo_t { + fn eq(&self, other: &Self) -> bool { + (self.si_signo, self.si_errno, self.si_code) + == (other.si_signo, other.si_errno, other.si_code) + } + } + + impl Eq for siginfo_t {} + + impl core::hash::Hash for siginfo_t { + fn hash(&self, state: &mut H) { + self.si_signo.hash(state); + self.si_errno.hash(state); + self.si_code.hash(state); + } + } + } +} + +impl siginfo_t { + #[inline] + pub unsafe fn si_pid(&self) -> crate::pid_t { + unsafe { self._sifields._kill.si_pid } + } + + #[inline] + pub unsafe fn si_uid(&self) -> crate::uid_t { + unsafe { self._sifields._kill.si_uid } + } + + #[inline] + pub unsafe fn si_timerid(&self) -> c_int { + unsafe { self._sifields._timer.si_tid } + } + + #[inline] + pub unsafe fn si_overrun(&self) -> c_int { + unsafe { self._sifields._timer.si_overrun } + } + + #[inline] + pub unsafe fn si_status(&self) -> c_int { + unsafe { self._sifields._sigchld.si_status } + } + + #[inline] + pub unsafe fn si_utime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_utime } + } + + #[inline] + pub unsafe fn si_stime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_stime } + } + + #[inline] + pub unsafe fn si_value(&self) -> crate::sigval { + unsafe { self._sifields._rt.si_sigval } + } + + #[inline] + pub unsafe fn si_int(&self) -> c_int { + unsafe { self._sifields._rt.si_sigval.sival_int } + } + + #[inline] + pub unsafe fn si_ptr(&self) -> *mut c_void { + unsafe { self._sifields._rt.si_sigval.sival_ptr } + } + + #[inline] + pub unsafe fn si_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigfault.si_addr } + } + + #[inline] + pub unsafe fn si_trapno(&self) -> c_int { + unsafe { self._sifields._sigfault._si_trapno } + } + + #[inline] + pub unsafe fn si_addr_lsb(&self) -> c_short { + unsafe { self._sifields._sigfault.si_addr_lsb } + } + + #[inline] + pub unsafe fn si_lower(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._lower } + } + + #[inline] + pub unsafe fn si_upper(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._upper } + } + + #[inline] + pub unsafe fn si_pkey(&self) -> u32 { + unsafe { self._sifields._sigfault._bounds._pkey } + } + + #[cfg(target_pointer_width = "64")] + #[inline] + pub unsafe fn si_band(&self) -> c_int { + unsafe { self._sifields._sigpoll.si_band } + } + + #[cfg(not(target_pointer_width = "64"))] + #[inline] + pub unsafe fn si_band(&self) -> c_long { + unsafe { self._sifields._sigpoll.si_band } + } + + #[inline] + pub unsafe fn si_fd(&self) -> c_int { + unsafe { self._sifields._sigpoll.si_fd } + } + + #[inline] + pub unsafe fn si_call_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigsys._call_addr } + } + + #[inline] + pub unsafe fn si_syscall(&self) -> c_int { + unsafe { self._sifields._sigsys._syscall } + } + + #[inline] + pub unsafe fn si_arch(&self) -> c_uint { + unsafe { self._sifields._sigsys._arch } + } +} diff --git a/src/new/glibc/sysdeps/unix/linux/sparc/mod.rs b/src/new/glibc/sysdeps/unix/linux/sparc/mod.rs new file mode 100644 index 0000000000000..d3ea74d80ecbd --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/sparc/mod.rs @@ -0,0 +1,10 @@ +//! Directory source: `sysdeps/unix/sysv/linux/sparc` +//! +//! + +/// Directory source: `sysdeps/unix/sysv/linux/sparc/bits` +/// +/// +pub(crate) mod bits { + pub(crate) mod siginfo_arch; +} diff --git a/src/new/glibc/sysdeps/unix/linux/x86/bits/siginfo_arch.rs b/src/new/glibc/sysdeps/unix/linux/x86/bits/siginfo_arch.rs new file mode 100644 index 0000000000000..ec9e04e050ea8 --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/x86/bits/siginfo_arch.rs @@ -0,0 +1,209 @@ +//! Header source: `sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h` +//! +//! + +use crate::prelude::*; + +const __SI_MAX_SIZE: usize = 128; +const __SI_PAD_SIZE: usize = if cfg!(target_pointer_width = "64") { + __SI_MAX_SIZE / size_of::() - 4 +} else { + __SI_MAX_SIZE / size_of::() - 3 +}; + +s_no_extra_traits! { + pub struct siginfo_t { + pub si_signo: c_int, + pub si_errno: c_int, + pub si_code: c_int, + #[cfg(target_pointer_width = "64")] + __pad0: Padding, + _sifields: __c_anonymous_siginfo_t__si_fields, + } + + union __c_anonymous_siginfo_t__si_fields { + _pad: [c_int; __SI_PAD_SIZE], + _kill: __c_anonymous__si_fields__kill, + _timer: __c_anonymous__si_fields__timer, + _rt: __c_anonymous__si_fields__rt, + _sigchld: __c_anonymous__si_fields__sigchld, + _sigfault: __c_anonymous__si_fields__sigfault, + _sigpoll: __c_anonymous__si_fields__sigpoll, + _sigsys: __c_anonymous__si_fields__sigsys, + } + + struct __c_anonymous__si_fields__kill { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + } + + struct __c_anonymous__si_fields__timer { + si_tid: c_int, + si_overrun: c_int, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__rt { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__sigchld { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_status: c_int, + si_utime: crate::clock_t, + si_stime: crate::clock_t, + } + + struct __c_anonymous__si_fields__sigfault { + si_addr: *mut c_void, + si_addr_lsb: c_short, + _bounds: __c_anonymous__sigfault__bounds, + } + + struct __c_anonymous__si_fields__sigpoll { + si_band: c_long, + si_fd: c_int, + } + + struct __c_anonymous__si_fields__sigsys { + _call_addr: *mut c_void, + _syscall: c_int, + _arch: c_uint, + } + + union __c_anonymous__sigfault__bounds { + _addr_bnd: __c_anonymous__bounds__addr_bnd, + _pkey: u32, + } + + struct __c_anonymous__bounds__addr_bnd { + _lower: *mut c_void, + _upper: *mut c_void, + } +} + +cfg_if! { + if #[cfg(feature = "extra_traits")] { + impl PartialEq for siginfo_t { + fn eq(&self, other: &Self) -> bool { + (self.si_signo, self.si_errno, self.si_code) + == (other.si_signo, other.si_errno, other.si_code) + } + } + + impl Eq for siginfo_t {} + + impl core::hash::Hash for siginfo_t { + fn hash(&self, state: &mut H) { + self.si_signo.hash(state); + self.si_errno.hash(state); + self.si_code.hash(state); + } + } + } +} + +impl siginfo_t { + #[inline] + pub unsafe fn si_pid(&self) -> crate::pid_t { + unsafe { self._sifields._kill.si_pid } + } + + #[inline] + pub unsafe fn si_uid(&self) -> crate::uid_t { + unsafe { self._sifields._kill.si_uid } + } + + #[inline] + pub unsafe fn si_timerid(&self) -> c_int { + unsafe { self._sifields._timer.si_tid } + } + + #[inline] + pub unsafe fn si_overrun(&self) -> c_int { + unsafe { self._sifields._timer.si_overrun } + } + + #[inline] + pub unsafe fn si_status(&self) -> c_int { + unsafe { self._sifields._sigchld.si_status } + } + + #[inline] + pub unsafe fn si_utime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_utime } + } + + #[inline] + pub unsafe fn si_stime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_stime } + } + + #[inline] + pub unsafe fn si_value(&self) -> crate::sigval { + unsafe { self._sifields._rt.si_sigval } + } + + #[inline] + pub unsafe fn si_int(&self) -> c_int { + unsafe { self._sifields._rt.si_sigval.sival_int } + } + + #[inline] + pub unsafe fn si_ptr(&self) -> *mut c_void { + unsafe { self._sifields._rt.si_sigval.sival_ptr } + } + + #[inline] + pub unsafe fn si_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigfault.si_addr } + } + + #[inline] + pub unsafe fn si_addr_lsb(&self) -> c_short { + unsafe { self._sifields._sigfault.si_addr_lsb } + } + + #[inline] + pub unsafe fn si_lower(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._lower } + } + + #[inline] + pub unsafe fn si_upper(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._upper } + } + + #[inline] + pub unsafe fn si_pkey(&self) -> u32 { + unsafe { self._sifields._sigfault._bounds._pkey } + } + + #[inline] + pub unsafe fn si_band(&self) -> c_long { + unsafe { self._sifields._sigpoll.si_band } + } + + #[inline] + pub unsafe fn si_fd(&self) -> c_int { + unsafe { self._sifields._sigpoll.si_fd } + } + + #[inline] + pub unsafe fn si_call_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigsys._call_addr } + } + + #[inline] + pub unsafe fn si_syscall(&self) -> c_int { + unsafe { self._sifields._sigsys._syscall } + } + + #[inline] + pub unsafe fn si_arch(&self) -> c_uint { + unsafe { self._sifields._sigsys._arch } + } +} diff --git a/src/new/glibc/sysdeps/unix/linux/x86/mod.rs b/src/new/glibc/sysdeps/unix/linux/x86/mod.rs new file mode 100644 index 0000000000000..2c6b85932077f --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/x86/mod.rs @@ -0,0 +1,10 @@ +//! Directory source: `sysdeps/unix/sysv/linux/x86` +//! +//! + +/// Directory source: `sysdeps/unix/sysv/linux/x86/bits` +/// +/// +pub(crate) mod bits { + pub(crate) mod siginfo_arch; +} diff --git a/src/new/mod.rs b/src/new/mod.rs index 13479209d23c9..988d8c5506d0c 100644 --- a/src/new/mod.rs +++ b/src/new/mod.rs @@ -194,8 +194,14 @@ cfg_if! { pub use linux::sctp::*; pub use linux::tls::*; pub use linux::types::*; + #[cfg(target_env = "uclibc")] + pub use sysdeps::linux::common::bits::siginfo::*; + #[cfg(target_env = "gnu")] - pub use net::route::*; + pub use self::{ + bits::types::siginfo_t::*, + net::route::*, + }; } else if #[cfg(target_vendor = "apple")] { pub use net::bpf::*; pub use netinet::tcp::*; @@ -241,6 +247,7 @@ cfg_if! { // Per-env headers we export cfg_if! { if #[cfg(any(target_env = "musl", target_env = "ohos"))] { + pub use signal::*; pub use sys::socket::*; } } diff --git a/src/new/musl/mod.rs b/src/new/musl/mod.rs index 9edb38255422b..e85523b3f88ef 100644 --- a/src/new/musl/mod.rs +++ b/src/new/musl/mod.rs @@ -31,4 +31,5 @@ pub(crate) mod sys { } pub(crate) mod sched; +pub(crate) mod signal; pub(crate) mod unistd; diff --git a/src/new/musl/signal.rs b/src/new/musl/signal.rs new file mode 100644 index 0000000000000..d941f1dd6aa4e --- /dev/null +++ b/src/new/musl/signal.rs @@ -0,0 +1,209 @@ +//! Header source: `include/signal.h` +//! +//! * Headers: (official) +//! * Headers: (mirror) + +use crate::prelude::*; + +s_no_extra_traits! { + // `mips*` targets swap the `s_errno` and `s_code` fields otherwise this struct is + // target-agnostic (see https://www.openwall.com/lists/musl/2016/01/27/1/2) + pub struct siginfo_t { + pub si_signo: c_int, + #[cfg(not(any(target_arch = "mips", target_arch = "mips64")))] + pub si_errno: c_int, + pub si_code: c_int, + #[cfg(any(target_arch = "mips", target_arch = "mips64"))] + pub si_errno: c_int, + __si_fields: __c_anonymous_siginfo_t___si_fields, + } + + union __c_anonymous_siginfo_t___si_fields { + __pad: [c_char; 128 - 2 * size_of::() - size_of::()], + __si_common: __c_anonymous___si_fields___si_common, + __sigfault: __c_anonymous___si_fields___sigfault, + __sigpoll: __c_anonymous___si_fields___sigpoll, + __sigsys: __c_anonymous___si_fields___sigsys, + } + + struct __c_anonymous___si_fields___si_common { + __first: __c_anonymous___si_common___first, + __second: __c_anonymous___si_common___second, + } + + struct __c_anonymous___si_fields___sigfault { + si_addr: *mut c_void, + si_addr_lsb: c_short, + __first: __c_anonymous___sigfault___first, + } + + struct __c_anonymous___si_fields___sigpoll { + si_band: c_long, + si_fd: c_int, + } + + struct __c_anonymous___si_fields___sigsys { + si_call_addr: *mut c_void, + si_syscall: c_int, + si_arch: c_uint, + } + + struct __c_anonymous___si_common___first { + __piduid: __c_anonymous___first___piduid, + __timer: __c_anonymous___first___timer, + } + + struct __c_anonymous___si_common___second { + si_value: crate::sigval, + __sigchld: __c_anonymous___second___sigchld, + } + + struct __c_anonymous___sigfault___first { + __addr_band: __c_anonymous___first___addr_band, + si_pkey: c_uint, + } + + struct __c_anonymous___first___piduid { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + } + + struct __c_anonymous___first___timer { + si_timerid: c_int, + si_overrun: c_int, + } + + struct __c_anonymous___second___sigchld { + si_status: c_int, + si_utime: crate::clock_t, + si_stime: crate::clock_t, + } + + struct __c_anonymous___first___addr_band { + si_lower: *mut c_void, + si_upper: *mut c_void, + } +} + +impl siginfo_t { + #[inline] + pub unsafe fn si_pid(&self) -> crate::pid_t { + self.__si_fields.__si_common.__first.__piduid.si_pid + } + + #[inline] + pub unsafe fn si_uid(&self) -> crate::uid_t { + self.__si_fields.__si_common.__first.__piduid.si_uid + } + + #[inline] + pub unsafe fn si_status(&self) -> c_int { + self.__si_fields.__si_common.__second.__sigchld.si_status + } + + #[inline] + pub unsafe fn si_utime(&self) -> crate::clock_t { + self.__si_fields.__si_common.__second.__sigchld.si_utime + } + + #[inline] + pub unsafe fn si_stime(&self) -> crate::clock_t { + self.__si_fields.__si_common.__second.__sigchld.si_stime + } + + #[inline] + pub unsafe fn si_value(&self) -> crate::sigval { + self.__si_fields.__si_common.__second.si_value + } + + #[inline] + pub unsafe fn si_addr(&self) -> *mut c_void { + self.__si_fields.__sigfault.si_addr + } + + #[inline] + pub unsafe fn si_addr_lsb(&self) -> c_short { + self.__si_fields.__sigfault.si_addr_lsb + } + + #[inline] + pub unsafe fn si_lower(&self) -> *mut c_void { + self.__si_fields.__sigfault.__first.__addr_band.si_lower + } + + #[inline] + pub unsafe fn si_upper(&self) -> *mut c_void { + self.__si_fields.__sigfault.__first.__addr_band.si_upper + } + + #[inline] + pub unsafe fn si_pkey(&self) -> c_uint { + self.__si_fields.__sigfault.__first.si_pkey + } + + #[inline] + pub unsafe fn si_band(&self) -> c_long { + self.__si_fields.__sigpoll.si_band + } + + #[inline] + pub unsafe fn si_fd(&self) -> c_int { + self.__si_fields.__sigpoll.si_fd + } + + #[inline] + pub unsafe fn si_timerid(&self) -> c_int { + self.__si_fields.__si_common.__first.__timer.si_timerid + } + + #[inline] + pub unsafe fn si_overrun(&self) -> c_int { + self.__si_fields.__si_common.__first.__timer.si_overrun + } + + #[inline] + pub unsafe fn si_ptr(&self) -> *mut c_void { + self.__si_fields.__si_common.__second.si_value.sival_ptr + } + + #[inline] + pub unsafe fn si_int(&self) -> c_int { + self.__si_fields.__si_common.__second.si_value.sival_int + } + + #[inline] + pub unsafe fn si_call_addr(&self) -> *mut c_void { + self.__si_fields.__sigsys.si_call_addr + } + + #[inline] + pub unsafe fn si_syscall(&self) -> c_int { + self.__si_fields.__sigsys.si_syscall + } + + #[inline] + pub unsafe fn si_arch(&self) -> c_uint { + self.__si_fields.__sigsys.si_arch + } +} + +cfg_if! { + if #[cfg(feature = "extra_traits")] { + impl PartialEq for siginfo_t { + fn eq(&self, other: &Self) -> bool { + (self.si_signo, self.si_errno, self.si_code) + == (other.si_signo, other.si_errno, other.si_code) + } + } + + impl Eq for siginfo_t {} + + impl core::hash::Hash for siginfo_t { + fn hash(&self, state: &mut H) { + self.si_signo.hash(state); + self.si_errno.hash(state); + self.si_code.hash(state); + } + } + } +} diff --git a/src/new/uclibc/mod.rs b/src/new/uclibc/mod.rs index 6bf83ef2e1d38..6f99b4e95c0cb 100644 --- a/src/new/uclibc/mod.rs +++ b/src/new/uclibc/mod.rs @@ -4,4 +4,14 @@ //! * Headers: (mirror) pub(crate) mod pthread; + +/// Directory source: `libc/sysdeps` +/// +/// * Headers: (official) +/// * Headers: (mirror) +pub(crate) mod sysdeps { + #[cfg(target_os = "linux")] + pub(crate) mod linux; +} + pub(crate) mod unistd; diff --git a/src/new/uclibc/sysdeps/linux/common/bits/mod.rs b/src/new/uclibc/sysdeps/linux/common/bits/mod.rs new file mode 100644 index 0000000000000..97cc8ce878be3 --- /dev/null +++ b/src/new/uclibc/sysdeps/linux/common/bits/mod.rs @@ -0,0 +1,10 @@ +//! Directory source: `libc/sysdeps/linux/common/bits` +//! +//! * Headers: (official) +//! * Headers: (mirror) + +#[cfg_attr( + any(target_arch = "mips", target_arch = "mips64"), + path = "../../mips/bits/siginfo.rs" +)] +pub(crate) mod siginfo; diff --git a/src/new/uclibc/sysdeps/linux/common/bits/siginfo.rs b/src/new/uclibc/sysdeps/linux/common/bits/siginfo.rs new file mode 100644 index 0000000000000..5039f651237f6 --- /dev/null +++ b/src/new/uclibc/sysdeps/linux/common/bits/siginfo.rs @@ -0,0 +1,176 @@ +//! Header source: `libc/sysdeps/linux/common/bits/siginfo.h` +//! +//! * Headers: (official) +//! * Headers: (mirror) + +use crate::prelude::*; + +const __SI_MAX_SIZE: usize = 128; +const __SI_PAD_SIZE: usize = if cfg!(target_pointer_width = "64") { + __SI_MAX_SIZE / size_of::() - 4 +} else { + __SI_MAX_SIZE / size_of::() - 3 +}; + +s_no_extra_traits! { + pub struct siginfo_t { + pub si_signo: c_int, + pub si_errno: c_int, + pub si_code: c_int, + _sifields: __c_anonymous_siginfo_t__si_fields, + } + + union __c_anonymous_siginfo_t__si_fields { + _pad: Padding<[c_int; __SI_PAD_SIZE]>, + _kill: __c_anonymous__si_fields__kill, + _timer: __c_anonymous__si_fields__timer, + _rt: __c_anonymous__si_fields__rt, + _sigchld: __c_anonymous__si_fields__sigchld, + _sigfault: __c_anonymous__si_fields__sigfault, + _sigpoll: __c_anonymous__si_fields__sigpoll, + _sigsys: __c_anonymous__si_fields__sigsys, + } + + struct __c_anonymous__si_fields__kill { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + } + + struct __c_anonymous__si_fields__timer { + si_tid: c_int, + si_overrun: c_int, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__rt { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__sigchld { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_status: c_int, + si_utime: crate::clock_t, + si_stime: crate::clock_t, + } + + struct __c_anonymous__si_fields__sigfault { + si_addr: *mut c_void, + } + + struct __c_anonymous__si_fields__sigpoll { + si_band: c_long, + si_fd: c_int, + } + + struct __c_anonymous__si_fields__sigsys { + _call_addr: *mut c_void, + _syscall: c_int, + _arch: c_uint, + } +} + +impl siginfo_t { + #[inline] + pub unsafe fn si_pid(&self) -> crate::pid_t { + self._sifields._kill.si_pid + } + + #[inline] + pub unsafe fn si_uid(&self) -> crate::uid_t { + self._sifields._kill.si_uid + } + + #[inline] + pub unsafe fn si_timerid(&self) -> c_int { + self._sifields._timer.si_tid + } + + #[inline] + pub unsafe fn si_overrun(&self) -> c_int { + self._sifields._timer.si_overrun + } + + #[inline] + pub unsafe fn si_status(&self) -> c_int { + self._sifields._sigchld.si_status + } + + #[inline] + pub unsafe fn si_utime(&self) -> crate::clock_t { + self._sifields._sigchld.si_utime + } + + #[inline] + pub unsafe fn si_stime(&self) -> crate::clock_t { + self._sifields._sigchld.si_stime + } + + #[inline] + pub unsafe fn si_value(&self) -> crate::sigval { + self._sifields._rt.si_sigval + } + + #[inline] + pub unsafe fn si_int(&self) -> c_int { + self._sifields._rt.si_sigval.sival_int + } + + #[inline] + pub unsafe fn si_ptr(&self) -> *mut c_void { + self._sifields._rt.si_sigval.sival_ptr + } + + #[inline] + pub unsafe fn si_addr(&self) -> *mut c_void { + self._sifields._sigfault.si_addr + } + + #[inline] + pub unsafe fn si_band(&self) -> c_long { + self._sifields._sigpoll.si_band + } + + #[inline] + pub unsafe fn si_fd(&self) -> c_int { + self._sifields._sigpoll.si_fd + } + + #[inline] + pub unsafe fn si_call_addr(&self) -> *mut c_void { + self._sifields._sigsys._call_addr + } + + #[inline] + pub unsafe fn si_syscall(&self) -> c_int { + self._sifields._sigsys._syscall + } + + #[inline] + pub unsafe fn si_arch(&self) -> c_uint { + self._sifields._sigsys._arch + } +} + +cfg_if! { + if #[cfg(feature = "extra_traits")] { + impl PartialEq for siginfo_t { + fn eq(&self, other: &Self) -> bool { + (self.si_signo, self.si_code, self.si_errno) + == (other.si_signo, other.si_code, other.si_errno) + } + } + + impl Eq for siginfo_t {} + + impl core::hash::Hash for siginfo_t { + fn hash(&self, state: &mut H) { + self.si_signo.hash(state); + self.si_code.hash(state); + self.si_errno.hash(state); + } + } + } +} diff --git a/src/new/uclibc/sysdeps/linux/mips/bits/siginfo.rs b/src/new/uclibc/sysdeps/linux/mips/bits/siginfo.rs new file mode 100644 index 0000000000000..cbdb29457c7c0 --- /dev/null +++ b/src/new/uclibc/sysdeps/linux/mips/bits/siginfo.rs @@ -0,0 +1,178 @@ +//! Header source: `libc/sysdeps/linux/mips/bits/siginfo.h` +//! +//! * Headers: (official) +//! * Headers: (mirror) + +use crate::prelude::*; + +const __SI_MAX_SIZE: usize = 128; +const __SI_PAD_SIZE: usize = if cfg!(target_pointer_width = "64") { + __SI_MAX_SIZE / size_of::() - 4 +} else { + __SI_MAX_SIZE / size_of::() - 3 +}; + +s_no_extra_traits! { + pub struct siginfo_t { + pub si_signo: c_int, + pub si_code: c_int, + pub si_errno: c_int, + __pad0: Padding<[c_int; __SI_MAX_SIZE / size_of::() - __SI_PAD_SIZE - 3]>, + _sifields: __c_anonymous_siginfo_t__si_fields, + } + + union __c_anonymous_siginfo_t__si_fields { + _pad: Padding<[c_int; __SI_PAD_SIZE]>, + _kill: __c_anonymous__si_fields__kill, + _timer: __c_anonymous__si_fields__timer, + _rt: __c_anonymous__si_fields__rt, + _sigchld: __c_anonymous__si_fields__sigchld, + _sigfault: __c_anonymous__si_fields__sigfault, + _sigpoll: __c_anonymous__si_fields__sigpoll, + _sigsys: __c_anonymous__si_fields__sigsys, + } + + struct __c_anonymous__si_fields__kill { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + } + + struct __c_anonymous__si_fields__timer { + si_tid: c_int, + si_overrun: c_int, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__rt { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_sigval: crate::sigval, + } + + struct __c_anonymous__si_fields__sigchld { + si_pid: crate::pid_t, + si_uid: crate::uid_t, + si_status: c_int, + si_utime: crate::clock_t, + si_stime: crate::clock_t, + } + + struct __c_anonymous__si_fields__sigfault { + si_addr: *mut c_void, + si_addr_lsb: c_short, + } + + struct __c_anonymous__si_fields__sigpoll { + si_band: c_long, + si_fd: c_int, + } + + struct __c_anonymous__si_fields__sigsys { + _call_addr: *mut c_void, + _syscall: c_int, + _arch: c_uint, + } +} + +impl siginfo_t { + #[inline] + pub unsafe fn si_pid(&self) -> crate::pid_t { + self._sifields._kill.si_pid + } + + #[inline] + pub unsafe fn si_uid(&self) -> crate::uid_t { + self._sifields._kill.si_uid + } + + #[inline] + pub unsafe fn si_timerid(&self) -> c_int { + self._sifields._timer.si_tid + } + + #[inline] + pub unsafe fn si_overrun(&self) -> c_int { + self._sifields._timer.si_overrun + } + + #[inline] + pub unsafe fn si_status(&self) -> c_int { + self._sifields._sigchld.si_status + } + + #[inline] + pub unsafe fn si_utime(&self) -> crate::clock_t { + self._sifields._sigchld.si_utime + } + + #[inline] + pub unsafe fn si_stime(&self) -> crate::clock_t { + self._sifields._sigchld.si_stime + } + + #[inline] + pub unsafe fn si_value(&self) -> crate::sigval { + self._sifields._rt.si_sigval + } + + #[inline] + pub unsafe fn si_int(&self) -> c_int { + self._sifields._rt.si_sigval.sival_int + } + + #[inline] + pub unsafe fn si_ptr(&self) -> *mut c_void { + self._sifields._rt.si_sigval.sival_ptr + } + + #[inline] + pub unsafe fn si_addr(&self) -> *mut c_void { + self._sifields._sigfault.si_addr + } + + #[inline] + pub unsafe fn si_band(&self) -> c_long { + self._sifields._sigpoll.si_band + } + + #[inline] + pub unsafe fn si_fd(&self) -> c_int { + self._sifields._sigpoll.si_fd + } + + #[inline] + pub unsafe fn si_call_addr(&self) -> *mut c_void { + self._sifields._sigsys._call_addr + } + + #[inline] + pub unsafe fn si_syscall(&self) -> c_int { + self._sifields._sigsys._syscall + } + + #[inline] + pub unsafe fn si_arch(&self) -> c_uint { + self._sifields._sigsys._arch + } +} + +cfg_if! { + if #[cfg(feature = "extra_traits")] { + impl PartialEq for siginfo_t { + fn eq(&self, other: &Self) -> bool { + (self.si_signo, self.si_code, self.si_errno) + == (other.si_signo, other.si_code, other.si_errno) + } + } + + impl Eq for siginfo_t {} + + impl core::hash::Hash for siginfo_t { + fn hash(&self, state: &mut H) { + self.si_signo.hash(state); + self.si_code.hash(state); + self.si_errno.hash(state); + } + } + } +} diff --git a/src/new/uclibc/sysdeps/linux/mips/mod.rs b/src/new/uclibc/sysdeps/linux/mips/mod.rs new file mode 100644 index 0000000000000..464e58e32abb8 --- /dev/null +++ b/src/new/uclibc/sysdeps/linux/mips/mod.rs @@ -0,0 +1,12 @@ +//! Directory source: `libc/sysdeps/linux/mips` +//! +//! * Headers: (official) +//! * Headers: (mirror) + +/// Directory source: `libc/sysdeps/linux/mips` +/// +/// * Headers: (official) +/// * Headers: (mirror) +pub(crate) mod bits { + pub(crate) mod siginfo; +} diff --git a/src/new/uclibc/sysdeps/linux/mod.rs b/src/new/uclibc/sysdeps/linux/mod.rs new file mode 100644 index 0000000000000..130b2f927d254 --- /dev/null +++ b/src/new/uclibc/sysdeps/linux/mod.rs @@ -0,0 +1,12 @@ +//! Directory source: `libc/sysdeps/linux` +//! +//! * Headers: (official) +//! * Headers: (mirror) + +/// Directory source: `libc/sysdeps/linux/common` +/// +/// * Headers: (official) +/// * Headers: (mirror) +pub(crate) mod common { + pub(crate) mod bits; +} diff --git a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs index d05bccf3811ac..67fcb0da5a2c3 100644 --- a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs @@ -167,21 +167,6 @@ s! { __glibc_reserved5: Padding, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [usize; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b32/csky/mod.rs b/src/unix/linux_like/linux/gnu/b32/csky/mod.rs index dc88c635f1168..9618d179206af 100644 --- a/src/unix/linux_like/linux/gnu/b32/csky/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/csky/mod.rs @@ -148,21 +148,6 @@ s! { __glibc_reserved5: Padding, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [usize; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs b/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs index 2d91f986b76a0..1836cec3b29fc 100644 --- a/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs @@ -148,14 +148,6 @@ s! { __glibc_reserved5: Padding, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_code: c_int, - pub si_errno: c_int, - _pad: Padding<[c_int; 29]>, - _align: [usize; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs index 18bb1933925f0..6f7fc0541db71 100644 --- a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs @@ -182,13 +182,6 @@ s! { pub ss_flags: c_int, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_code: c_int, - pub si_errno: c_int, - pub _pad: [c_int; 29], - } - pub struct ipc_perm { pub __key: crate::key_t, pub uid: crate::uid_t, diff --git a/src/unix/linux_like/linux/gnu/b32/powerpc.rs b/src/unix/linux_like/linux/gnu/b32/powerpc.rs index b5d3631a6fcf2..5b96d9c228919 100644 --- a/src/unix/linux_like/linux/gnu/b32/powerpc.rs +++ b/src/unix/linux_like/linux/gnu/b32/powerpc.rs @@ -201,21 +201,6 @@ s! { __glibc_reserved5: Padding, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [usize; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs index 5484a68bd1ec1..efa08cb1031fa 100644 --- a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs @@ -90,21 +90,6 @@ s! { pub __f_spare: [c_int; 6], } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [u64; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs index 76b899838beec..b9fad46e427b1 100644 --- a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs @@ -35,14 +35,6 @@ s! { f_spare: [crate::__fsword_t; 4], } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - _pad: Padding<[c_int; 29]>, - _align: [usize; 0], - } - pub struct flock { pub l_type: c_short, pub l_whence: c_short, diff --git a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs index 97429dad64285..d99f7a3174907 100644 --- a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs @@ -241,21 +241,6 @@ s! { __glibc_reserved5: Padding, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [usize; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs index a4fe3ba7e7e82..542a6c02bd727 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs @@ -181,21 +181,6 @@ s! { __unused5: Padding, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [usize; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs b/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs index 01044881f691a..67cd4cdb0081a 100644 --- a/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs @@ -150,21 +150,6 @@ s! { pub ss_size: size_t, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [u64; 0], - } - pub struct ipc_perm { pub __key: crate::key_t, pub uid: crate::uid_t, diff --git a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs index 7fed1e5383838..e074d46d10da2 100644 --- a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs @@ -152,14 +152,6 @@ s! { pub ss_flags: c_int, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_code: c_int, - pub si_errno: c_int, - _pad: Padding, - _pad2: Padding<[c_long; 14]>, - } - pub struct ipc_perm { pub __key: crate::key_t, pub uid: crate::uid_t, diff --git a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs index f304507243510..1c55b845d102f 100644 --- a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs @@ -174,21 +174,6 @@ s! { __unused5: Padding, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [usize; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs index 3371f0337e498..74defe92fda06 100644 --- a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs @@ -123,21 +123,6 @@ s! { pub __f_spare: [c_int; 6], } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [u64; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b64/s390x.rs b/src/unix/linux_like/linux/gnu/b64/s390x.rs index 06b99f210475b..eacf9448f7076 100644 --- a/src/unix/linux_like/linux/gnu/b64/s390x.rs +++ b/src/unix/linux_like/linux/gnu/b64/s390x.rs @@ -54,14 +54,6 @@ s! { pub l_pid: crate::pid_t, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - _pad: Padding, - _pad2: Padding<[c_long; 14]>, - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs index 6e3673e35d00a..937b5eac42109 100644 --- a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs @@ -39,21 +39,6 @@ s! { f_spare: [crate::__fsword_t; 5], } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [usize; 0], - } - pub struct flock { pub l_type: c_short, pub l_whence: c_short, diff --git a/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs index 9658aeb4a5367..b6059b167fd69 100644 --- a/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs @@ -56,21 +56,6 @@ s! { pub l_pid: crate::pid_t, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on \ - https://github.com/rust-lang/libc/pull/1316 if you're using \ - this field" - )] - pub _pad: [c_int; 29], - _align: [u64; 0], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index 1ef5624f44de2..f75be9feea979 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -408,32 +408,6 @@ s! { } } -impl siginfo_t { - pub unsafe fn si_addr(&self) -> *mut c_void { - #[repr(C)] - struct siginfo_sigfault { - _si_signo: c_int, - _si_errno: c_int, - _si_code: c_int, - si_addr: *mut c_void, - } - (*(self as *const siginfo_t).cast::()).si_addr - } - - pub unsafe fn si_value(&self) -> crate::sigval { - #[repr(C)] - struct siginfo_timer { - _si_signo: c_int, - _si_errno: c_int, - _si_code: c_int, - _si_tid: c_int, - _si_overrun: c_int, - si_sigval: crate::sigval, - } - (*(self as *const siginfo_t).cast::()).si_sigval - } -} - s_no_extra_traits! { pub struct aiocb { pub aio_fildes: c_int, @@ -466,55 +440,6 @@ s_no_extra_traits! { pub h_source: [c_uchar; crate::ETH_ALEN as usize], pub h_proto: crate::__be16, } - - // Internal, for casts to access union fields - struct sifields_sigchld { - si_pid: crate::pid_t, - si_uid: crate::uid_t, - si_status: c_int, - si_utime: c_long, - si_stime: c_long, - } - - // Internal, for casts to access union fields - union sifields { - _align_pointer: *mut c_void, - sigchld: sifields_sigchld, - } - - // Internal, for casts to access union fields. Note that some variants - // of sifields start with a pointer, which makes the alignment of - // sifields vary on 32-bit and 64-bit architectures. - struct siginfo_f { - _siginfo_base: [c_int; 3], - sifields: sifields, - } -} - -impl siginfo_t { - unsafe fn sifields(&self) -> &sifields { - &(*(self as *const siginfo_t).cast::()).sifields - } - - pub unsafe fn si_pid(&self) -> crate::pid_t { - self.sifields().sigchld.si_pid - } - - pub unsafe fn si_uid(&self) -> crate::uid_t { - self.sifields().sigchld.si_uid - } - - pub unsafe fn si_status(&self) -> c_int { - self.sifields().sigchld.si_status - } - - pub unsafe fn si_utime(&self) -> c_long { - self.sifields().sigchld.si_utime - } - - pub unsafe fn si_stime(&self) -> c_long { - self.sifields().sigchld.si_stime - } } s_no_extra_traits! { diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index 678c816ab924b..bdfe1b198fd5e 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -3571,10 +3571,10 @@ extern "C" { #[cfg_attr(musl_redir_time64, link_name = "__sigtimedwait_time64")] pub fn sigtimedwait( set: *const sigset_t, - info: *mut siginfo_t, + info: *mut crate::siginfo_t, timeout: *const crate::timespec, ) -> c_int; - pub fn sigwaitinfo(set: *const sigset_t, info: *mut siginfo_t) -> c_int; + pub fn sigwaitinfo(set: *const sigset_t, info: *mut crate::siginfo_t) -> c_int; pub fn accept4(fd: c_int, addr: *mut crate::sockaddr, len: *mut socklen_t, flg: c_int) -> c_int; pub fn reboot(how_to: c_int) -> c_int; diff --git a/src/unix/linux_like/linux/musl/mod.rs b/src/unix/linux_like/linux/musl/mod.rs index 130c5022a045c..557bb04b58b32 100644 --- a/src/unix/linux_like/linux/musl/mod.rs +++ b/src/unix/linux_like/linux/musl/mod.rs @@ -52,83 +52,6 @@ cfg_if! { } } -impl siginfo_t { - pub unsafe fn si_addr(&self) -> *mut c_void { - #[repr(C)] - struct siginfo_sigfault { - _si_signo: c_int, - _si_errno: c_int, - _si_code: c_int, - si_addr: *mut c_void, - } - (*(self as *const siginfo_t).cast::()).si_addr - } - - pub unsafe fn si_value(&self) -> crate::sigval { - #[repr(C)] - struct siginfo_si_value { - _si_signo: c_int, - _si_errno: c_int, - _si_code: c_int, - _si_timerid: c_int, - _si_overrun: c_int, - si_value: crate::sigval, - } - (*(self as *const siginfo_t).cast::()).si_value - } -} - -s_no_extra_traits! { - // Internal, for casts to access union fields - struct sifields_sigchld { - si_pid: crate::pid_t, - si_uid: crate::uid_t, - si_status: c_int, - si_utime: c_long, - si_stime: c_long, - } - - // Internal, for casts to access union fields - union sifields { - _align_pointer: *mut c_void, - sigchld: sifields_sigchld, - } - - // Internal, for casts to access union fields. Note that some variants - // of sifields start with a pointer, which makes the alignment of - // sifields vary on 32-bit and 64-bit architectures. - struct siginfo_f { - _siginfo_base: [c_int; 3], - sifields: sifields, - } -} - -impl siginfo_t { - unsafe fn sifields(&self) -> &sifields { - &(*(self as *const siginfo_t).cast::()).sifields - } - - pub unsafe fn si_pid(&self) -> crate::pid_t { - self.sifields().sigchld.si_pid - } - - pub unsafe fn si_uid(&self) -> crate::uid_t { - self.sifields().sigchld.si_uid - } - - pub unsafe fn si_status(&self) -> c_int { - self.sifields().sigchld.si_status - } - - pub unsafe fn si_utime(&self) -> c_long { - self.sifields().sigchld.si_utime - } - - pub unsafe fn si_stime(&self) -> c_long { - self.sifields().sigchld.si_stime - } -} - s! { #[repr(align(8))] pub struct fanotify_event_metadata { @@ -150,27 +73,6 @@ s! { pub sa_restorer: Option, } - // `mips*` targets swap the `s_errno` and `s_code` fields otherwise this struct is - // target-agnostic (see https://www.openwall.com/lists/musl/2016/01/27/1/2) - // - // FIXME(union): C implementation uses unions - pub struct siginfo_t { - pub si_signo: c_int, - #[cfg(not(any(target_arch = "mips", target_arch = "mips64")))] - pub si_errno: c_int, - pub si_code: c_int, - #[cfg(any(target_arch = "mips", target_arch = "mips64"))] - pub si_errno: c_int, - #[doc(hidden)] - #[deprecated( - since = "0.2.54", - note = "Please leave a comment on https://github.com/rust-lang/libc/pull/1316 \ - if you're using this field" - )] - pub _pad: [c_int; 29], - _align: [usize; 0], - } - pub struct statvfs { pub f_bsize: c_ulong, pub f_frsize: c_ulong, diff --git a/src/unix/linux_like/linux/uclibc/arm/mod.rs b/src/unix/linux_like/linux/uclibc/arm/mod.rs index 9d255b7388fcd..ddeb9cf2866eb 100644 --- a/src/unix/linux_like/linux/uclibc/arm/mod.rs +++ b/src/unix/linux_like/linux/uclibc/arm/mod.rs @@ -179,13 +179,6 @@ s! { pub c_ospeed: crate::speed_t, } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_errno: c_int, - pub si_code: c_int, - pub _pad: [c_int; 29], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_flags: c_int, diff --git a/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs b/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs index 2ecf9c7c5c986..04f0ed0e270e8 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs @@ -97,13 +97,6 @@ s! { __val: [c_ulong; 4], } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_code: c_int, - pub si_errno: c_int, - pub _pad: [c_int; 29], - } - pub struct glob64_t { pub gl_pathc: size_t, pub gl_pathv: *mut *mut c_char, diff --git a/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs b/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs index a6a63a33a93b3..8d65d62dd96db 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs @@ -79,14 +79,6 @@ s! { __size: [c_ulong; 16], } - pub struct siginfo_t { - pub si_signo: c_int, - pub si_code: c_int, - pub si_errno: c_int, - _pad: Padding, - _pad2: Padding<[c_long; 14]>, - } - pub struct ipc_perm { pub __key: crate::key_t, pub uid: crate::uid_t, diff --git a/src/unix/linux_like/linux/uclibc/mod.rs b/src/unix/linux_like/linux/uclibc/mod.rs index 6c3d8013f9173..3630df6909edb 100644 --- a/src/unix/linux_like/linux/uclibc/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mod.rs @@ -135,83 +135,6 @@ s! { } } -impl siginfo_t { - pub unsafe fn si_addr(&self) -> *mut c_void { - #[repr(C)] - struct siginfo_sigfault { - _si_signo: c_int, - _si_errno: c_int, - _si_code: c_int, - si_addr: *mut c_void, - } - (*(self as *const siginfo_t).cast::()).si_addr - } - - pub unsafe fn si_value(&self) -> crate::sigval { - #[repr(C)] - struct siginfo_si_value { - _si_signo: c_int, - _si_errno: c_int, - _si_code: c_int, - _si_timerid: c_int, - _si_overrun: c_int, - si_value: crate::sigval, - } - (*(self as *const siginfo_t).cast::()).si_value - } -} - -s_no_extra_traits! { - // Internal, for casts to access union fields - struct sifields_sigchld { - si_pid: crate::pid_t, - si_uid: crate::uid_t, - si_status: c_int, - si_utime: c_long, - si_stime: c_long, - } - - // Internal, for casts to access union fields - union sifields { - _align_pointer: *mut c_void, - sigchld: sifields_sigchld, - } - - // Internal, for casts to access union fields. Note that some variants - // of sifields start with a pointer, which makes the alignment of - // sifields vary on 32-bit and 64-bit architectures. - struct siginfo_f { - _siginfo_base: [c_int; 3], - sifields: sifields, - } -} - -impl siginfo_t { - unsafe fn sifields(&self) -> &sifields { - &(*(self as *const siginfo_t).cast::()).sifields - } - - pub unsafe fn si_pid(&self) -> crate::pid_t { - self.sifields().sigchld.si_pid - } - - pub unsafe fn si_uid(&self) -> crate::uid_t { - self.sifields().sigchld.si_uid - } - - pub unsafe fn si_status(&self) -> c_int { - self.sifields().sigchld.si_status - } - - pub unsafe fn si_utime(&self) -> c_long { - self.sifields().sigchld.si_utime - } - - pub unsafe fn si_stime(&self) -> c_long { - self.sifields().sigchld.si_stime - } -} - pub const MCL_CURRENT: c_int = 0x0001; pub const MCL_FUTURE: c_int = 0x0002; pub const MCL_ONFAULT: c_int = 0x0004; diff --git a/src/unix/linux_like/linux/uclibc/x86_64/mod.rs b/src/unix/linux_like/linux/uclibc/x86_64/mod.rs index af4bedbc082cc..76ff86e814222 100644 --- a/src/unix/linux_like/linux/uclibc/x86_64/mod.rs +++ b/src/unix/linux_like/linux/uclibc/x86_64/mod.rs @@ -51,14 +51,6 @@ s! { __sched_priority: c_int, } - pub struct siginfo_t { - si_signo: c_int, // signal number - si_errno: c_int, // if not zero: error value of signal, see errno.h - si_code: c_int, // signal code - pub _pad: [c_int; 28], // unported union - _align: [usize; 0], - } - pub struct shmid_ds { pub shm_perm: crate::ipc_perm, pub shm_segsz: size_t, // segment size in bytes