Fix SyncSigPctl invocation.
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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
@@ -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,
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user