about summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
authorJeremy Soller <jackpot51@gmail.com>2016-12-20 11:17:09 -0700
committerJeremy Soller <jackpot51@gmail.com>2016-12-20 11:17:09 -0700
commit57bc1a982e20524bbaac892c04e537c8f714dce6 (patch)
treec9c7caff6dd08527900752354344a48f6cc43852 /src/libstd/sys
parent6d7c2ecf2e7b73f067c093ce9770ec187f9b3ea1 (diff)
downloadrust-57bc1a982e20524bbaac892c04e537c8f714dce6.tar.gz
rust-57bc1a982e20524bbaac892c04e537c8f714dce6.zip
Add arm syscalls
Diffstat (limited to 'src/libstd/sys')
-rw-r--r--src/libstd/sys/redox/syscall/arch/arm.rs72
-rw-r--r--src/libstd/sys/redox/syscall/arch/x86.rs (renamed from src/libstd/sys/redox/syscall/x86.rs)0
-rw-r--r--src/libstd/sys/redox/syscall/arch/x86_64.rs (renamed from src/libstd/sys/redox/syscall/x86_64.rs)0
-rw-r--r--src/libstd/sys/redox/syscall/mod.rs8
4 files changed, 78 insertions, 2 deletions
diff --git a/src/libstd/sys/redox/syscall/arch/arm.rs b/src/libstd/sys/redox/syscall/arch/arm.rs
new file mode 100644
index 00000000000..6e8bc2c0e63
--- /dev/null
+++ b/src/libstd/sys/redox/syscall/arch/arm.rs
@@ -0,0 +1,72 @@
+use super::error::{Error, Result};
+
+pub unsafe fn syscall0(mut a: usize) -> Result<usize> {
+    asm!("swi $$0"
+        : "={r0}"(a)
+        : "{r7}"(a)
+        : "memory"
+        : "volatile");
+
+    Error::demux(a)
+}
+
+pub unsafe fn syscall1(mut a: usize, b: usize) -> Result<usize> {
+    asm!("swi $$0"
+        : "={r0}"(a)
+        : "{r7}"(a), "{r0}"(b)
+        : "memory"
+        : "volatile");
+
+    Error::demux(a)
+}
+
+// Clobbers all registers - special for clone
+pub unsafe fn syscall1_clobber(mut a: usize, b: usize) -> Result<usize> {
+    asm!("swi $$0"
+        : "={r0}"(a)
+        : "{r7}"(a), "{r0}"(b)
+        : "memory", "r0", "r1", "r2", "r3", "r4"
+        : "volatile");
+
+    Error::demux(a)
+}
+
+pub unsafe fn syscall2(mut a: usize, b: usize, c: usize) -> Result<usize> {
+    asm!("swi $$0"
+        : "={r0}"(a)
+        : "{r7}"(a), "{r0}"(b), "{r1}"(c)
+        : "memory"
+        : "volatile");
+
+    Error::demux(a)
+}
+
+pub unsafe fn syscall3(mut a: usize, b: usize, c: usize, d: usize) -> Result<usize> {
+    asm!("swi $$0"
+        : "={r0}"(a)
+        : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d)
+        : "memory"
+        : "volatile");
+
+    Error::demux(a)
+}
+
+pub unsafe fn syscall4(mut a: usize, b: usize, c: usize, d: usize, e: usize) -> Result<usize> {
+    asm!("swi $$0"
+        : "={r0}"(a)
+        : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d), "{r3}"(e)
+        : "memory"
+        : "volatile");
+
+    Error::demux(a)
+}
+
+pub unsafe fn syscall5(mut a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) -> Result<usize> {
+    asm!("swi $$0"
+        : "={r0}"(a)
+        : "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d), "{r3}"(e), "{r4}"(f)
+        : "memory"
+        : "volatile");
+
+    Error::demux(a)
+}
diff --git a/src/libstd/sys/redox/syscall/x86.rs b/src/libstd/sys/redox/syscall/arch/x86.rs
index 4bb6060c43e..4bb6060c43e 100644
--- a/src/libstd/sys/redox/syscall/x86.rs
+++ b/src/libstd/sys/redox/syscall/arch/x86.rs
diff --git a/src/libstd/sys/redox/syscall/x86_64.rs b/src/libstd/sys/redox/syscall/arch/x86_64.rs
index 6c1f96adef9..6c1f96adef9 100644
--- a/src/libstd/sys/redox/syscall/x86_64.rs
+++ b/src/libstd/sys/redox/syscall/arch/x86_64.rs
diff --git a/src/libstd/sys/redox/syscall/mod.rs b/src/libstd/sys/redox/syscall/mod.rs
index 77f98d5b36b..34a35b967b1 100644
--- a/src/libstd/sys/redox/syscall/mod.rs
+++ b/src/libstd/sys/redox/syscall/mod.rs
@@ -6,12 +6,16 @@ pub use self::flag::*;
 pub use self::number::*;
 pub use self::scheme::*;
 
+#[cfg(target_arch = "arm")]
+#[path="arch/arm.rs"]
+mod arch;
+
 #[cfg(target_arch = "x86")]
-#[path="x86.rs"]
+#[path="arch/x86.rs"]
 mod arch;
 
 #[cfg(target_arch = "x86_64")]
-#[path="x86_64.rs"]
+#[path="arch/x86_64.rs"]
 mod arch;
 
 /// Function definitions