diff --git a/src/number.rs b/src/number.rs index 0f650aaad3..741b3380c8 100644 --- a/src/number.rs +++ b/src/number.rs @@ -77,6 +77,7 @@ pub const SYS_GETPPID: usize = 64; pub const SYS_GETUID: usize = 199; pub const SYS_IOPL: usize = 110; pub const SYS_KILL: usize = 37; +pub const SYS_SIGQUEUE: usize = 101; pub const SYS_MPROTECT: usize = 125; pub const SYS_MKNS: usize = 984; pub const SYS_NANOSLEEP: usize = 162; diff --git a/src/sigabi.rs b/src/sigabi.rs index 475a669760..5bc3c898b9 100644 --- a/src/sigabi.rs +++ b/src/sigabi.rs @@ -1,11 +1,20 @@ -use core::sync::atomic::{AtomicUsize, Ordering}; +use core::sync::atomic::{AtomicU8, AtomicUsize, Ordering}; /// Signal runtime struct for the entire process #[derive(Debug)] #[repr(C, align(4096))] pub struct SigProcControl { pub pending: AtomicU64, + pub qhead: AtomicU8, + pub _rsvd: [u8; 7], pub actions: [RawAction; 64], + pub queue: [RealtimeSig; 32], + pub qtail: AtomicU8, +} +#[derive(Debug)] +#[repr(transparent)] +pub struct RealtimeSig { + pub arg: NonatomicUsize, } #[derive(Debug)] #[repr(C, align(16))] @@ -86,6 +95,11 @@ impl SigatomicUsize { pub struct NonatomicUsize(AtomicUsize); impl NonatomicUsize { + #[inline] + pub const fn new(a: usize) -> Self { + Self(AtomicUsize::new(a)) + } + #[inline] pub fn get(&self) -> usize { self.0.load(Ordering::Relaxed)