From 12433301462900d80031c1073d80a5076dc9be57 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sat, 20 Aug 2022 22:20:42 -0600 Subject: [PATCH] Implement pte_clone_ret for x86 --- src/platform/redox/clone.rs | 16 +++++++++++++++- src/platform/redox/mod.rs | 13 ------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/platform/redox/clone.rs b/src/platform/redox/clone.rs index ba079e1f23..ab8c30cb85 100644 --- a/src/platform/redox/clone.rs +++ b/src/platform/redox/clone.rs @@ -91,8 +91,22 @@ core::arch::global_asm!(" .type __relibc_internal_pte_clone_ret, @function .p2align 6 __relibc_internal_pte_clone_ret: - ud2 + # Load registers + pop eax + sub esp, 8 + + mov DWORD PTR [esp], 0x00001F80 + # TODO: ldmxcsr [esp] + mov WORD PTR [esp], 0x031F + fldcw [esp] + + add esp, 8 + + # Call entry point + call eax + + ret .size __relibc_internal_pte_clone_ret, . - __relibc_internal_pte_clone_ret "); diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index 8b74849463..3e32068c30 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -728,19 +728,6 @@ impl Pal for Sys { res as c_int } - #[cfg(target_arch = "aarch64")] - unsafe fn pte_clone(stack: *mut usize) -> pid_t { - //TODO: aarch64 - unimplemented!("pte_clone not implemented on aarch64"); - } - - #[cfg(target_arch = "x86")] - unsafe fn pte_clone(stack: *mut usize) -> pid_t { - //TODO: x86 - unimplemented!("pte_clone not implemented on x86"); - } - - #[cfg(target_arch = "x86_64")] unsafe fn pte_clone(stack: *mut usize) -> pid_t { e(clone::pte_clone_impl(stack)) as pid_t }