diff --git a/src/platform/redox/clone.rs b/src/platform/redox/clone.rs
index ee2c8c8cf90947d58c961f79d5b19589b6c712fe..45060f54da086c02dfba44925dbf153760048ac9 100644
--- a/src/platform/redox/clone.rs
+++ b/src/platform/redox/clone.rs
@@ -81,7 +81,7 @@ pub unsafe fn pte_clone_impl(stack: *mut usize) -> Result<usize> {
         let cur_addr_space_fd = FdGuard::new(syscall::dup(*cur_pid_fd, b"addrspace")?);
         let new_addr_space_sel_fd = FdGuard::new(syscall::dup(*new_pid_fd, b"current-addrspace")?);
 
-        let buf = create_set_addr_space_buf(*cur_addr_space_fd, pte_clone_ret as usize, stack as usize);
+        let buf = create_set_addr_space_buf(*cur_addr_space_fd, __relibc_internal_pte_clone_ret as usize, stack as usize);
         let _ = syscall::write(*new_addr_space_sel_fd, &buf)?;
     }
 
@@ -106,6 +106,7 @@ pub unsafe fn pte_clone_impl(stack: *mut usize) -> Result<usize> {
 
     // Unblock context. 
     syscall::kill(new_pid, SIGCONT)?;
+    let _ = syscall::waitpid(new_pid, &mut 0, syscall::WUNTRACED | syscall::WCONTINUED);
 
     Ok(0)
 }
@@ -114,7 +115,7 @@ pub unsafe fn pte_clone_impl(stack: *mut usize) -> Result<usize> {
 /// descriptors are reobtained through `fmap`. Other mappings are kept but duplicated using CoW.
 pub fn fork_impl() -> Result<usize> {
     unsafe {
-        Error::demux(fork_wrapper())
+        Error::demux(__relibc_internal_fork_wrapper())
     }
 }
 
@@ -209,7 +210,7 @@ fn fork_inner(initial_rsp: *mut usize) -> Result<usize> {
             }
             let new_addr_space_sel_fd = FdGuard::new(syscall::dup(*new_pid_fd, b"current-addrspace")?);
 
-            let buf = create_set_addr_space_buf(*new_addr_space_fd, fork_ret as usize, initial_rsp as usize);
+            let buf = create_set_addr_space_buf(*new_addr_space_fd, __relibc_internal_fork_ret as usize, initial_rsp as usize);
             let _ = syscall::write(*new_addr_space_sel_fd, &buf)?;
         }
         copy_env_regs(*cur_pid_fd, *new_pid_fd)?;
@@ -249,9 +250,9 @@ unsafe extern "sysv64" fn __relibc_internal_fork_hook(cur_filetable_fd: usize, n
 #[no_mangle]
 core::arch::global_asm!("
     .p2align 6
-    .globl fork_wrapper
-    .type fork_wrapper, @function
-fork_wrapper:
+    .globl __relibc_internal_fork_wrapper
+    .type __relibc_internal_fork_wrapper, @function
+__relibc_internal_fork_wrapper:
     push rbp
     mov rbp, rsp
 
@@ -271,7 +272,11 @@ fork_wrapper:
     call __relibc_internal_fork_impl
     jmp 2f
 
-fork_ret:
+    .size __relibc_internal_fork_wrapper, . - __relibc_internal_fork_wrapper
+
+    .p2align 6
+    .type __relibc_internal_fork_ret, @function
+__relibc_internal_fork_ret:
     mov rdi, [rsp]
     mov rsi, [rsp + 8]
     call __relibc_internal_fork_hook
@@ -280,6 +285,8 @@ fork_ret:
     fldcw [rsp+24]
 
     xor rax, rax
+
+    .p2align 4
 2:
     add rsp, 32
     pop r15
@@ -291,11 +298,13 @@ fork_ret:
 
     pop rbp
     ret
-    .size fork_wrapper, . - fork_wrapper
 
-    .globl pte_clone_ret
-    .type pte_clone_ret, @function
-pte_clone_ret:
+    .size __relibc_internal_fork_ret, . - __relibc_internal_fork_ret
+
+    .globl __relibc_internal_pte_clone_ret
+    .type __relibc_internal_pte_clone_ret, @function
+    .p2align 6
+__relibc_internal_pte_clone_ret:
     # Load registers
     pop rax
     pop rdi
@@ -318,11 +327,11 @@ pte_clone_ret:
     call rax
 
     ret
-    .size pte_clone_ret, . - pte_clone_ret
+    .size __relibc_internal_pte_clone_ret, . - __relibc_internal_pte_clone_ret
 ");
 
 extern "sysv64" {
-    fn fork_wrapper() -> usize;
-    fn fork_ret();
-    fn pte_clone_ret();
+    fn __relibc_internal_fork_wrapper() -> usize;
+    fn __relibc_internal_fork_ret();
+    fn __relibc_internal_pte_clone_ret();
 }