Fix SyncSigPctl invocation.

This commit is contained in:
4lDO2
2025-03-31 16:48:54 +02:00
parent 98c8beae3d
commit ac7e0755f1
4 changed files with 27 additions and 14 deletions
+1 -4
View File
@@ -12,10 +12,7 @@ use syscall::{
use crate::{
proc::{fork_inner, FdGuard, ForkArgs},
signal::{
get_sigaltstack, inner_c, PosixStackt, RtSigarea, SigStack,
PROC_CONTROL_STRUCT,
},
signal::{get_sigaltstack, inner_c, PosixStackt, RtSigarea, SigStack, PROC_CONTROL_STRUCT},
Tcb,
};
+8 -8
View File
@@ -6,7 +6,9 @@ use syscall::{
SIGCHLD, SIGKILL, SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU, SIGURG, SIGWINCH,
};
use crate::{arch::*, proc::FdGuard, protocol::{ProcCall, ThreadCall}, sync::Mutex, sys::{proc_call, thread_call}, RtTcb, Tcb};
use crate::{
arch::*, proc::FdGuard, protocol::ThreadCall, sync::Mutex, sys::thread_call, RtTcb, Tcb,
};
#[cfg(target_arch = "x86_64")]
static CPUID_EAX1_ECX: core::sync::atomic::AtomicU32 = core::sync::atomic::AtomicU32::new(0);
@@ -576,13 +578,11 @@ pub fn setup_sighandler(tcb: &RtTcb) {
syscall::dup(**tcb.thread_fd(), b"sighandler").expect("failed to open sighandler fd"),
);
let _ = syscall::write(*fd, &data).expect("failed to write to sighandler fd");
thread_call(&mut [], CallFlags::empty(), &[
ThreadCall::SyncSigTctl as usize,
]);
// TODO: Only run for first thread
proc_call(&mut [], CallFlags::empty(), &[
ProcCall::SyncSigPctl as usize,
]);
thread_call(
&mut [],
CallFlags::empty(),
&[ThreadCall::SyncSigTctl as usize],
);
// TODO: Inherited set of ignored signals
set_sigmask(Some(0), None);
+11 -2
View File
@@ -10,7 +10,11 @@ use syscall::{
};
use crate::{
arch::manually_enter_trampoline, proc::FdGuard, protocol::{ProcCall, ProcKillTarget, WaitFlags}, signal::tmp_disable_signals, DynamicProcInfo, RtTcb, Tcb, DYNAMIC_PROC_INFO
arch::manually_enter_trampoline,
proc::FdGuard,
protocol::{ProcCall, ProcKillTarget, WaitFlags},
signal::tmp_disable_signals,
DynamicProcInfo, RtTcb, Tcb, DYNAMIC_PROC_INFO,
};
#[inline]
@@ -112,7 +116,12 @@ pub unsafe fn sys_futex_wake(addr: *mut u32, num: u32) -> Result<u32> {
)
.map(|awoken| awoken as u32)
}
pub fn sys_call(fd: usize, payload: &mut [u8], flags: CallFlags, metadata: &[usize]) -> Result<usize> {
pub fn sys_call(
fd: usize,
payload: &mut [u8],
flags: CallFlags,
metadata: &[usize],
) -> Result<usize> {
unsafe {
syscall::syscall5(
syscall::SYS_CALL,
+7
View File
@@ -335,6 +335,13 @@ pub unsafe fn init(auxvs: Box<[[usize; 2]]>) {
};
redox_rt::initialize(FdGuard::new(proc_fd));
// TODO: Is it safe to assume setup_sighandler has been called at this point?
redox_rt::sys::proc_call(
&mut [],
syscall::CallFlags::empty(),
&[redox_rt::protocol::ProcCall::SyncSigPctl as usize],
);
if let (Some(cwd_ptr), Some(cwd_len)) = (
get_auxv(&auxvs, AT_REDOX_INITIAL_CWD_PTR),
get_auxv(&auxvs, AT_REDOX_INITIAL_CWD_LEN),