diff --git a/src/syscall/process.rs b/src/syscall/process.rs
index 535f68d3072542733f1188a71306c101bd0a57f5..67ff87845dbf7eac59c6e192734f706be61ce64e 100644
--- a/src/syscall/process.rs
+++ b/src/syscall/process.rs
@@ -94,28 +94,33 @@ pub fn clone(flags: CloneFlags, stack_base: usize) -> Result<ContextId> {
                 kfx_opt = Some(new_fx);
             }
 
-            if let Some(ref stack) = context.kstack {
-                // Get the relative offset to the return address of the function
-                // obtaining `stack_base`.
-                //
-                // (base pointer - start of stack) - one
-                offset = stack_base - stack.as_ptr() as usize - mem::size_of::<usize>(); // Add clone ret
-                let mut new_stack = stack.clone();
+            #[cfg(target_arch = "x86_64")]
+            {
+                if let Some(ref stack) = context.kstack {
+                    // Get the relative offset to the return address of the function
+                    // obtaining `stack_base`.
+                    //
+                    // (base pointer - start of stack) - one
+                    offset = stack_base - stack.as_ptr() as usize - mem::size_of::<usize>(); // Add clone ret
+                    let mut new_stack = stack.clone();
 
-                unsafe {
-                    // Set clone's return value to zero. This is done because
-                    // the clone won't return like normal, which means the value
-                    // would otherwise never get set.
-                    #[cfg(target_arch = "x86_64")] // TODO
-                    if let Some(regs) = ptrace::rebase_regs_ptr_mut(context.regs, Some(&mut new_stack)) {
-                        (*regs).scratch.rax = 0;
+                    unsafe {
+                        // Set clone's return value to zero. This is done because
+                        // the clone won't return like normal, which means the value
+                        // would otherwise never get set.
+                        if let Some(regs) = ptrace::rebase_regs_ptr_mut(context.regs, Some(&mut new_stack)) {
+                            (*regs).scratch.rax = 0;
+                        }
+
+                        // Change the return address of the child (previously
+                        // syscall) to the arch-specific clone_ret callback
+                        let func_ptr = new_stack.as_mut_ptr().add(offset);
+                        *(func_ptr as *mut usize) = interrupt::syscall::clone_ret as usize;
                     }
 
-                    // Change the return address of the child (previously
-                    // syscall) to the arch-specific clone_ret callback
-                    let func_ptr = new_stack.as_mut_ptr().add(offset);
-                    *(func_ptr as *mut usize) = interrupt::syscall::clone_ret as usize;
+                    kstack_opt = Some(new_stack);
                 }
+            }
 
                 kstack_opt = Some(new_stack);
             }