diff --git a/src/header/signal/linux.rs b/src/header/signal/linux.rs
index 7405d0175752f6eb5972a331910c11c0035f82c5..0313827aa3147265e5c0470d339c50e8180bf51e 100644
--- a/src/header/signal/linux.rs
+++ b/src/header/signal/linux.rs
@@ -1,3 +1,5 @@
+use core::arch::global_asm;
+
 // Needs to be defined in assembly because it can't have a function prologue
 // rax is register, 15 is RT_SIGRETURN
 #[cfg(target_arch = "x86_64")]
diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs
index 3c94ef972e65dc156450077c6a44fc50f0151824..88c40179db52ba4f5fe22e45031a498367531a84 100644
--- a/src/platform/linux/mod.rs
+++ b/src/platform/linux/mod.rs
@@ -1,4 +1,4 @@
-use core::ptr;
+use core::{arch::asm, ptr};
 use core_io::Write;
 
 use super::{errno, types::*, Pal};
@@ -280,7 +280,7 @@ impl Pal for Sys {
     }
 
     fn lchown(path: &CStr, owner: uid_t, group: gid_t) -> c_int {
-        e(unsafe { syscall!(LCHOWN, path.as_ptr(), owner, group) })
+        e(unsafe { syscall!(LCHOWN, path.as_ptr(), owner, group) }) as c_int
     }
 
     fn link(path1: &CStr, path2: &CStr) -> c_int {
@@ -363,13 +363,13 @@ impl Pal for Sys {
     unsafe fn pte_clone(stack: *mut usize) -> pid_t {
         let flags = CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD;
         let pid;
-        llvm_asm!("
+        asm!("
             # Call clone syscall
             syscall
 
             # Check if child or parent
             test rax, rax
-            jnz .parent
+            jnz 1f
 
             # Load registers
             pop rax
@@ -392,13 +392,22 @@ impl Pal for Sys {
             ud2
 
             # Return PID if parent
-            .parent:
-            "
-            : "={rax}"(pid)
-            : "{rax}"(SYS_CLONE), "{rdi}"(flags), "{rsi}"(stack), "{rdx}"(0), "{r10}"(0), "{r8}"(0)
-            : "memory", "rbx", "rcx", "rdx", "rsi", "rdi", "r8",
-              "r9", "r10", "r11", "r12", "r13", "r14", "r15"
-            : "intel", "volatile"
+            1:
+            ",
+            inout("rax") SYS_CLONE => pid,
+            inout("rdi") flags => _,
+            inout("rsi") stack => _,
+            inout("rdx") 0 => _,
+            inout("r10") 0 => _,
+            inout("r8") 0 => _,
+            //TODO: out("rbx") _,
+            out("rcx") _,
+            out("r9") _,
+            out("r11") _,
+            out("r12") _,
+            out("r13") _,
+            out("r14") _,
+            out("r15") _,
         );
         e(pid) as pid_t
     }
diff --git a/src/start.rs b/src/start.rs
index 33d9d7e23fbdedafef7f7fbf7d5dcf214a53a47a..0b9c13a68bf182eb08382775b380a01493d3a387 100644
--- a/src/start.rs
+++ b/src/start.rs
@@ -127,6 +127,8 @@ fn io_init() {
         stdio::stderr = stdio::default_stderr.get();
     }
 }
+
+#[cfg(target_os = "redox")]
 fn setup_sigstack() {
     use syscall::{Map, MapFlags};
     const SIGSTACK_SIZE: usize = 1024 * 256;
@@ -185,6 +187,7 @@ pub unsafe extern "C" fn relibc_start(sp: &'static Stack) -> ! {
     }
 
     // Setup signal stack, otherwise we cannot handle any signals besides SIG_IGN/SIG_DFL behavior.
+    #[cfg(target_os = "redox")]
     setup_sigstack();
 
     init_array();