From d559450d690c52ea83447097f1ea759e63896779 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Wed, 16 Apr 2025 15:22:56 +0200 Subject: [PATCH] Use abort() rather than unreachable! when exit fails. --- redox-rt/src/arch/aarch64.rs | 1 + redox-rt/src/lib.rs | 1 + redox-rt/src/proc.rs | 4 +++- redox-rt/src/sys.rs | 3 ++- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/redox-rt/src/arch/aarch64.rs b/redox-rt/src/arch/aarch64.rs index 093d1c91be..ddc795883b 100644 --- a/redox-rt/src/arch/aarch64.rs +++ b/redox-rt/src/arch/aarch64.rs @@ -104,6 +104,7 @@ unsafe extern "C" fn fork_impl(args: &ForkArgs, initial_rsp: *mut usize) -> usiz } unsafe extern "C" fn child_hook(cur_filetable_fd: usize, new_proc_fd: usize, new_thr_fd: usize) { + //let _ = syscall::write(1, alloc::format!("A{cur_filetable_fd}B{new_proc_fd}C{new_thr_fd}\n").as_bytes()); let _ = syscall::close(cur_filetable_fd); crate::child_hook_common(crate::ChildHookCommonArgs { new_thr_fd: FdGuard::new(new_thr_fd), diff --git a/redox-rt/src/lib.rs b/redox-rt/src/lib.rs index 3b63c5543d..28c427fb72 100644 --- a/redox-rt/src/lib.rs +++ b/redox-rt/src/lib.rs @@ -2,6 +2,7 @@ #![feature( asm_const, array_chunks, + core_intrinsics, int_roundings, let_chains, slice_ptr_get, diff --git a/redox-rt/src/proc.rs b/redox-rt/src/proc.rs index 031b2a02cb..eaad61c383 100644 --- a/redox-rt/src/proc.rs +++ b/redox-rt/src/proc.rs @@ -754,10 +754,12 @@ pub fn fork_inner(initial_rsp: *mut usize, args: &ForkArgs) -> Result { // This must be done before the address space is copied. unsafe { + let proc_fd = new_proc_fd.as_ref().map_or(usize::MAX, |p| **p); + //let _ = syscall::write(1, alloc::format!("P{}Q{}R{}\n", *cur_filetable_fd, proc_fd, *new_thr_fd).as_bytes()); initial_rsp.write(*cur_filetable_fd); initial_rsp .add(1) - .write(new_proc_fd.as_ref().map_or(usize::MAX, |p| **p)); + .write(proc_fd); initial_rsp.add(2).write(*new_thr_fd); } } diff --git a/redox-rt/src/sys.rs b/redox-rt/src/sys.rs index 2fcc30c969..9ae42a51f2 100644 --- a/redox-rt/src/sys.rs +++ b/redox-rt/src/sys.rs @@ -300,7 +300,8 @@ pub fn posix_exit(status: i32) -> ! { &[ProcCall::Exit as u64, status as u64], ) .expect("failed to call proc mgr with Exit"); - unreachable!() + let _ = syscall::write(1, b"redox-rt: ProcCall::Exit FAILED, abort()ing!\n"); + core::intrinsics::abort(); } pub fn setrens(rns: usize, ens: usize) -> Result<()> { this_proc_call(