diff --git a/src/new/glibc/mod.rs b/src/new/glibc/mod.rs index 3697b7a07496f..15441a20852e7 100644 --- a/src/new/glibc/mod.rs +++ b/src/new/glibc/mod.rs @@ -48,6 +48,7 @@ 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::pthread; #[cfg(target_os = "linux")] -pub(crate) use sysdeps::unix::linux::*; +pub(crate) use sysdeps::unix::linux::net; diff --git a/src/new/glibc/signal.rs b/src/new/glibc/signal.rs index 023b49ed0c91a..f91997f45acbd 100644 --- a/src/new/glibc/signal.rs +++ b/src/new/glibc/signal.rs @@ -2,6 +2,7 @@ pub use super::bits::signum_generic::*; pub use super::sysdeps::unix::linux::bits::sigaction::*; +pub use super::sysdeps::unix::linux::bits::types::siginfo_t::*; use crate::prelude::*; extern "C" { 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..834a5cfede828 --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/bits/types/mod.rs @@ -0,0 +1,5 @@ +//! Source directory: `sysdeps/unix/sysv/linux/bits/types` +//! +//! + +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..c2d2da2cd5f4e --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/bits/types/siginfo_t.rs @@ -0,0 +1,265 @@ +//! Source header: `sysdeps/unix/sysv/linux/bits/types/siginfo_t.h` +//! +//! Note this module corresponds with multiple header files upstream. The above +//! header file contains the generic definition, while other +//! architecture-specific definitions live upstream at +//! `sysdeps/unix/sysv/linux//bits/siginfo-arch.h`. Currently, the +//! following set of header files are contained in this one Rust module: +//! +//! - `sysdeps/unix/sysv/linux/bits/types/siginfo_t.h` +//! - `sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h` +//! - `sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h` +//! - `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 +}; + +cfg_if! { + if #[cfg(target_arch = "sparc64")] { + type __SI_BAND_TYPE = c_int; + } else { + type __SI_BAND_TYPE = c_long; + } +} + +#[repr(C)] +#[cfg_attr( + all(target_arch = "x86_64", target_pointer_width = "32"), + repr(align(4)) +)] +#[derive(Clone, Copy, Debug)] +struct __SI_CLOCK_T(crate::clock_t); + +s_no_extra_traits! { + #[cfg_attr( + all(target_arch = "x86_64", target_pointer_width = "32"), + repr(align(8)) + )] + pub struct siginfo_t { + pub si_signo: c_int, + + #[cfg(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6" + ))] + pub si_code: c_int, + + pub si_errno: c_int, + + #[cfg(not(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6" + )))] + 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: __SI_CLOCK_T, + si_stime: __SI_CLOCK_T, + } + + struct __c_anonymous__si_fields__sigfault { + si_addr: *mut c_void, + #[cfg(any(target_arch = "sparc", target_arch = "sparc64"))] + _si_trapno: c_int, + si_addr_lsb: c_short, + _bounds: __c_anonymous__sigfault__bounds, + } + + struct __c_anonymous__si_fields__sigpoll { + si_band: __SI_BAND_TYPE, + 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 const unsafe fn si_pid(&self) -> crate::pid_t { + unsafe { self._sifields._kill.si_pid } + } + + #[inline] + pub const unsafe fn si_uid(&self) -> crate::uid_t { + unsafe { self._sifields._kill.si_uid } + } + + #[inline] + pub const unsafe fn si_timerid(&self) -> c_int { + unsafe { self._sifields._timer.si_tid } + } + + #[inline] + pub const unsafe fn si_overrun(&self) -> c_int { + unsafe { self._sifields._timer.si_overrun } + } + + #[inline] + pub const unsafe fn si_status(&self) -> c_int { + unsafe { self._sifields._sigchld.si_status } + } + + #[inline] + pub const unsafe fn si_utime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_utime.0 } + } + + #[inline] + pub const unsafe fn si_stime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_stime.0 } + } + + #[inline] + pub const unsafe fn si_value(&self) -> crate::sigval { + unsafe { self._sifields._rt.si_sigval } + } + + #[inline] + pub const unsafe fn si_int(&self) -> c_int { + unsafe { self._sifields._rt.si_sigval.sival_int } + } + + #[inline] + pub const unsafe fn si_ptr(&self) -> *mut c_void { + unsafe { self._sifields._rt.si_sigval.sival_ptr } + } + + #[inline] + pub const unsafe fn si_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigfault.si_addr } + } + + #[cfg(any(target_arch = "sparc", target_arch = "sparc64"))] + #[inline] + pub const unsafe fn si_trapno(&self) -> c_int { + unsafe { self._sifields._sigfault._si_trapno } + } + + #[inline] + pub const unsafe fn si_addr_lsb(&self) -> c_short { + unsafe { self._sifields._sigfault.si_addr_lsb } + } + + #[inline] + pub const unsafe fn si_lower(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._lower } + } + + #[inline] + pub const unsafe fn si_upper(&self) -> *mut c_void { + unsafe { self._sifields._sigfault._bounds._addr_bnd._upper } + } + + #[inline] + pub const unsafe fn si_pkey(&self) -> u32 { + unsafe { self._sifields._sigfault._bounds._pkey } + } + + #[inline] + pub const unsafe fn si_band(&self) -> __SI_BAND_TYPE { + unsafe { self._sifields._sigpoll.si_band } + } + + #[inline] + pub const unsafe fn si_fd(&self) -> c_int { + unsafe { self._sifields._sigpoll.si_fd } + } + + #[inline] + pub const unsafe fn si_call_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigsys._call_addr } + } + + #[inline] + pub const unsafe fn si_syscall(&self) -> c_int { + unsafe { self._sifields._sigsys._syscall } + } + + #[inline] + pub const 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/mod.rs b/src/new/glibc/sysdeps/unix/linux/mod.rs index c4220ae87a885..f3d704d63e55d 100644 --- a/src/new/glibc/sysdeps/unix/linux/mod.rs +++ b/src/new/glibc/sysdeps/unix/linux/mod.rs @@ -19,6 +19,7 @@ pub(crate) mod bits { path = "../sparc/bits/sigaction.rs" )] pub(crate) mod sigaction; + #[cfg_attr( any( target_arch = "mips", @@ -33,7 +34,10 @@ pub(crate) mod bits { path = "../sparc/bits/signum_arch.rs" )] pub(crate) mod signum_arch; + pub(crate) mod statvfs; + + pub(crate) mod types; } /// Directory: `net/` diff --git a/src/new/mod.rs b/src/new/mod.rs index d910dccbfdb89..8f12b20afa993 100644 --- a/src/new/mod.rs +++ b/src/new/mod.rs @@ -197,12 +197,15 @@ 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::*; - #[cfg(target_env = "gnu")] - pub use signal::*; - #[cfg(target_env = "gnu")] - pub use sys::statvfs::*; + pub use self::{ + net::route::*, + signal::*, + sys::statvfs::*, + }; } else if #[cfg(target_vendor = "apple")] { #[cfg(target_os = "macos")] pub use net::bpf::*; @@ -261,6 +264,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..9fd0eaef48c4e --- /dev/null +++ b/src/new/musl/signal.rs @@ -0,0 +1,224 @@ +//! 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 + // ) + pub struct siginfo_t { + pub si_signo: c_int, + + #[cfg(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6" + ))] + pub si_code: c_int, + + pub si_errno: c_int, + + #[cfg(not(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6" + )))] + pub si_code: 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 const unsafe fn si_pid(&self) -> crate::pid_t { + unsafe { self.__si_fields.__si_common.__first.__piduid.si_pid } + } + + #[inline] + pub const unsafe fn si_uid(&self) -> crate::uid_t { + unsafe { self.__si_fields.__si_common.__first.__piduid.si_uid } + } + + #[inline] + pub const unsafe fn si_status(&self) -> c_int { + unsafe { self.__si_fields.__si_common.__second.__sigchld.si_status } + } + + #[inline] + pub const unsafe fn si_utime(&self) -> crate::clock_t { + unsafe { self.__si_fields.__si_common.__second.__sigchld.si_utime } + } + + #[inline] + pub const unsafe fn si_stime(&self) -> crate::clock_t { + unsafe { self.__si_fields.__si_common.__second.__sigchld.si_stime } + } + + #[inline] + pub const unsafe fn si_value(&self) -> crate::sigval { + unsafe { self.__si_fields.__si_common.__second.si_value } + } + + #[inline] + pub const unsafe fn si_addr(&self) -> *mut c_void { + unsafe { self.__si_fields.__sigfault.si_addr } + } + + #[inline] + pub const unsafe fn si_addr_lsb(&self) -> c_short { + unsafe { self.__si_fields.__sigfault.si_addr_lsb } + } + + #[inline] + pub const unsafe fn si_lower(&self) -> *mut c_void { + unsafe { self.__si_fields.__sigfault.__first.__addr_band.si_lower } + } + + #[inline] + pub const unsafe fn si_upper(&self) -> *mut c_void { + unsafe { self.__si_fields.__sigfault.__first.__addr_band.si_upper } + } + + #[inline] + pub const unsafe fn si_pkey(&self) -> c_uint { + unsafe { self.__si_fields.__sigfault.__first.si_pkey } + } + + #[inline] + pub const unsafe fn si_band(&self) -> c_long { + unsafe { self.__si_fields.__sigpoll.si_band } + } + + #[inline] + pub const unsafe fn si_fd(&self) -> c_int { + unsafe { self.__si_fields.__sigpoll.si_fd } + } + + #[inline] + pub const unsafe fn si_timerid(&self) -> c_int { + unsafe { self.__si_fields.__si_common.__first.__timer.si_timerid } + } + + #[inline] + pub const unsafe fn si_overrun(&self) -> c_int { + unsafe { self.__si_fields.__si_common.__first.__timer.si_overrun } + } + + #[inline] + pub const unsafe fn si_ptr(&self) -> *mut c_void { + unsafe { self.__si_fields.__si_common.__second.si_value.sival_ptr } + } + + #[inline] + pub const unsafe fn si_int(&self) -> c_int { + unsafe { self.__si_fields.__si_common.__second.si_value.sival_int } + } + + #[inline] + pub const unsafe fn si_call_addr(&self) -> *mut c_void { + unsafe { self.__si_fields.__sigsys.si_call_addr } + } + + #[inline] + pub const unsafe fn si_syscall(&self) -> c_int { + unsafe { self.__si_fields.__sigsys.si_syscall } + } + + #[inline] + pub const unsafe fn si_arch(&self) -> c_uint { + unsafe { 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..bdb8c91ddc9c2 --- /dev/null +++ b/src/new/uclibc/sysdeps/linux/common/bits/mod.rs @@ -0,0 +1,6 @@ +//! Directory source: `libc/sysdeps/linux/common/bits` +//! +//! * Headers: (official) +//! * Headers: (mirror) + +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..4e0641e49940f --- /dev/null +++ b/src/new/uclibc/sysdeps/linux/common/bits/siginfo.rs @@ -0,0 +1,227 @@ +//! Header source: `libc/sysdeps/linux/common/bits/siginfo.h` +//! +//! Note this header file unifies all header files in upstream uClibc-ng for +//! both the generic definition and the architecture-specific definitions. +//! Currently, this Rust module has the definitions for the following set of +//! header files: +//! +//! - `libc/sysdeps/linux/common/bits/siginfo.h` +//! - `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, + + #[cfg(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6", + ))] + pub si_code: c_int, + + pub si_errno: c_int, + + #[cfg(not(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6", + )))] + pub si_code: c_int, + + #[cfg(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6", + ))] + __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, + #[cfg(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6", + ))] + 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 const unsafe fn si_pid(&self) -> crate::pid_t { + unsafe { self._sifields._kill.si_pid } + } + + #[inline] + pub const unsafe fn si_uid(&self) -> crate::uid_t { + unsafe { self._sifields._kill.si_uid } + } + + #[inline] + pub const unsafe fn si_timerid(&self) -> c_int { + unsafe { self._sifields._timer.si_tid } + } + + #[inline] + pub const unsafe fn si_overrun(&self) -> c_int { + unsafe { self._sifields._timer.si_overrun } + } + + #[inline] + pub const unsafe fn si_status(&self) -> c_int { + unsafe { self._sifields._sigchld.si_status } + } + + #[inline] + pub const unsafe fn si_utime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_utime } + } + + #[inline] + pub const unsafe fn si_stime(&self) -> crate::clock_t { + unsafe { self._sifields._sigchld.si_stime } + } + + #[inline] + pub const unsafe fn si_value(&self) -> crate::sigval { + unsafe { self._sifields._rt.si_sigval } + } + + #[inline] + pub const unsafe fn si_int(&self) -> c_int { + unsafe { self._sifields._rt.si_sigval.sival_int } + } + + #[inline] + pub const unsafe fn si_ptr(&self) -> *mut c_void { + unsafe { self._sifields._rt.si_sigval.sival_ptr } + } + + #[inline] + pub const unsafe fn si_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigfault.si_addr } + } + + #[cfg(any( + target_arch = "mips", + target_arch = "mips64", + target_arch = "mips32r6", + target_arch = "mips64r6", + ))] + #[inline] + pub const unsafe fn si_addr_lsb(&self) -> c_short { + unsafe { self._sifields._sigfault.si_addr_lsb } + } + + #[inline] + pub const unsafe fn si_band(&self) -> c_long { + unsafe { self._sifields._sigpoll.si_band } + } + + #[inline] + pub const unsafe fn si_fd(&self) -> c_int { + unsafe { self._sifields._sigpoll.si_fd } + } + + #[inline] + pub const unsafe fn si_call_addr(&self) -> *mut c_void { + unsafe { self._sifields._sigsys._call_addr } + } + + #[inline] + pub const unsafe fn si_syscall(&self) -> c_int { + unsafe { self._sifields._sigsys._syscall } + } + + #[inline] + pub const 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_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/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 41099ef56a77d..bec3d1083093e 100644 --- a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs @@ -142,14 +142,6 @@ s! { __glibc_reserved5: Padding, } - 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 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 66d192eb3c874..c754ec000ea4c 100644 --- a/src/unix/linux_like/linux/gnu/b32/csky/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/csky/mod.rs @@ -123,14 +123,6 @@ s! { __glibc_reserved5: Padding, } - 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 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 b7b439d58fbfc..ec5a057cddf55 100644 --- a/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs @@ -123,14 +123,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 546b60a994d74..a4cc330710db7 100644 --- a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs @@ -156,13 +156,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 9f0eeaa8b672a..30f85c9fb6885 100644 --- a/src/unix/linux_like/linux/gnu/b32/powerpc.rs +++ b/src/unix/linux_like/linux/gnu/b32/powerpc.rs @@ -176,14 +176,6 @@ s! { __glibc_reserved5: Padding, } - 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 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 5b97eafe540e1..610fa4065ba6e 100644 --- a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs @@ -75,14 +75,6 @@ s! { pub f_spare: [c_long; 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: [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 3ee2562dbbda4..95ad74af2e4c4 100644 --- a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs @@ -26,14 +26,6 @@ s! { f_spare: Padding<[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 30d1d52ef7f76..cbfae20a68a97 100644 --- a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs @@ -216,14 +216,6 @@ s! { __glibc_reserved5: Padding, } - 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 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 2852c265f9632..714e609b88b6d 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs @@ -140,14 +140,6 @@ s! { __unused5: Padding, } - 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 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 dc01776efe127..7cea157c63d16 100644 --- a/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs @@ -111,14 +111,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, - _pad: Padding<[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 05ffdbb72dddd..07fe19471b76d 100644 --- a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs @@ -113,14 +113,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 b88e865cab9cd..ecccfdb48cd44 100644 --- a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs @@ -133,14 +133,6 @@ s! { __unused5: Padding, } - 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 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 ac3918be4dec8..d58948c951df9 100644 --- a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs @@ -93,14 +93,6 @@ s! { pub f_spare: [c_long; 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: [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 787415833ad85..8988e96acff3b 100644 --- a/src/unix/linux_like/linux/gnu/b64/s390x.rs +++ b/src/unix/linux_like/linux/gnu/b64/s390x.rs @@ -44,14 +44,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 7a00da9f9ecf3..80c5528892b3c 100644 --- a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs @@ -28,14 +28,6 @@ s! { f_spare: Padding<[crate::__fsword_t; 5]>, } - 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/b64/x86_64/mod.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs index 4da4a17a6d008..1f3209f529f5f 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 @@ -45,14 +45,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<[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 eee5a9fd3072a..95e27193e241b 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 957ef103b4014..92e2d6a6c0e84 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -3584,10 +3584,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 0a55be16c428a..61364bf459c0c 100644 --- a/src/unix/linux_like/linux/musl/mod.rs +++ b/src/unix/linux_like/linux/musl/mod.rs @@ -57,83 +57,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 { @@ -155,21 +78,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, - _pad: Padding<[c_int; 29]>, - _align: [usize; 0], - } - // musl's uint64_t is an unsigned long instead of an unsigned long long on // 64-bit targets, so it's not a __u64 (which is c_ulonglong), but rather a // real u64. This is also how we handle musl's uint64_t elsewhere. diff --git a/src/unix/linux_like/linux/uclibc/arm/mod.rs b/src/unix/linux_like/linux/uclibc/arm/mod.rs index c133e22f9fb60..493acf40da090 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 d623328d60d62..cc85abc132385 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 b4f101de4206e..4a80ff1cc9267 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 29d5392810b31..0075bddee94ec 100644 --- a/src/unix/linux_like/linux/uclibc/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mod.rs @@ -146,83 +146,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 8d1effde61901..dff8c915287c5 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