From 47e07654cb4767ae25ae6a69c9ba09c7ddb16093 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Thu, 25 Jul 2024 19:44:43 +0200 Subject: [PATCH] WIP: use rt signal constants from sigabi --- redox-rt/src/signal.rs | 18 +++++++++++++----- redox-rt/src/sys.rs | 4 +++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/redox-rt/src/signal.rs b/redox-rt/src/signal.rs index 00bd3474c0..95443b01c4 100644 --- a/redox-rt/src/signal.rs +++ b/redox-rt/src/signal.rs @@ -1,14 +1,14 @@ use core::{ cell::{Cell, UnsafeCell}, ffi::c_int, - sync::atomic::{AtomicUsize, Ordering}, + sync::atomic::{AtomicU8, AtomicUsize, Ordering}, }; use syscall::{ - data::AtomicU64, Error, RawAction, Result, SetSighandlerData, SigProcControl, Sigcontrol, - SigcontrolFlags, EINVAL, ENOMEM, EPERM, SIGABRT, SIGBUS, SIGCHLD, SIGCONT, SIGFPE, SIGILL, - SIGKILL, SIGQUIT, SIGSEGV, SIGSTOP, SIGSYS, SIGTRAP, SIGTSTP, SIGTTIN, SIGTTOU, SIGURG, - SIGWINCH, SIGXCPU, SIGXFSZ, + data::AtomicU64, Error, NonatomicUsize, RawAction, RealtimeSig, Result, SetSighandlerData, + SigProcControl, Sigcontrol, SigcontrolFlags, EINVAL, ENOMEM, EPERM, SIGABRT, SIGBUS, SIGCHLD, + SIGCONT, SIGFPE, SIGILL, SIGKILL, SIGQUIT, SIGSEGV, SIGSTOP, SIGSYS, SIGTRAP, SIGTSTP, SIGTTIN, + SIGTTOU, SIGURG, SIGWINCH, SIGXCPU, SIGXFSZ, }; use crate::{arch::*, proc::FdGuard, sync::Mutex, RtTcb, Tcb}; @@ -443,6 +443,14 @@ pub(crate) static PROC_CONTROL_STRUCT: SigProcControl = SigProcControl { user_data: AtomicU64::new(0), } }; 64], + qhead: AtomicU8::new(0), + _rsvd: [0; 7], + queue: [const { + RealtimeSig { + arg: NonatomicUsize::new(0), + } + }; 32], + qtail: AtomicU8::new(0), }; fn combine_allowset([lo, hi]: [u64; 2]) -> u64 { diff --git a/redox-rt/src/sys.rs b/redox-rt/src/sys.rs index 7566f63f38..97e7ce7385 100644 --- a/redox-rt/src/sys.rs +++ b/redox-rt/src/sys.rs @@ -45,7 +45,9 @@ pub fn posix_kill(pid: usize, sig: usize) -> Result<()> { } #[inline] pub fn posix_sigqueue(pid: usize, sig: usize, val: usize) -> Result<()> { - match wrapper(false, || unsafe { syscall::syscall3(101, pid, sig, val) }) { + match wrapper(false, || unsafe { + syscall::syscall3(syscall::SYS_SIGQUEUE, pid, sig, val) + }) { Ok(_) | Err(Error { errno: EINTR }) => Ok(()), Err(error) => Err(error), }