pub use crate::arch::{MContext, SignalStackFlags, UContext, UStack};
use num_enum::TryFromPrimitive;
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, TryFromPrimitive)]
pub enum SignalNum {
HUP = 1,
INT,
QUIT,
ILL,
TRAP,
ABRT,
BUS,
FPE,
KILL,
USR1,
SEGV,
USR2,
PIPE,
ALRM,
TERM,
STKFLT,
CHLD,
CONT,
STOP,
TSTP,
TTIN,
TTOU,
URG,
XCPU,
XFSZ,
VTALRM,
PROF,
WINCH,
IO,
PWR,
SYS,
TIMER,
CANCEL,
SYNCCALL,
RT3,
RT4,
RT5,
RT6,
RT7,
RT8,
RT9,
RT10,
RT11,
RT12,
RT13,
RT14,
RT15,
RT16,
RT17,
RT18,
RT19,
RT20,
RT21,
RT22,
RT23,
RT24,
RT25,
RT26,
RT27,
RT28,
RT29,
RT30,
RT31,
RTMAX,
}
pub const REAL_TIME_SIGNAL_NUM: usize = 33;
impl SignalNum {
#[inline]
pub fn from_num(num: usize) -> Option<SignalNum> {
SignalNum::try_from(num as u8).ok()
}
pub const fn num(&self) -> usize {
*self as usize
}
pub const fn is_rt(&self) -> bool {
*self as usize >= REAL_TIME_SIGNAL_NUM
}
#[inline]
pub fn real_time_index(&self) -> Option<usize> {
self.is_rt().then(|| self.num() - 32)
}
pub const fn mask(&self) -> u64 {
bit!(self.num() - 1)
}
}