Skip to content

Commit 57bc1a9

Browse files
committed
Add arm syscalls
1 parent 6d7c2ec commit 57bc1a9

File tree

4 files changed

+78
-2
lines changed

4 files changed

+78
-2
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
use super::error::{Error, Result};
2+
3+
pub unsafe fn syscall0(mut a: usize) -> Result<usize> {
4+
asm!("swi $$0"
5+
: "={r0}"(a)
6+
: "{r7}"(a)
7+
: "memory"
8+
: "volatile");
9+
10+
Error::demux(a)
11+
}
12+
13+
pub unsafe fn syscall1(mut a: usize, b: usize) -> Result<usize> {
14+
asm!("swi $$0"
15+
: "={r0}"(a)
16+
: "{r7}"(a), "{r0}"(b)
17+
: "memory"
18+
: "volatile");
19+
20+
Error::demux(a)
21+
}
22+
23+
// Clobbers all registers - special for clone
24+
pub unsafe fn syscall1_clobber(mut a: usize, b: usize) -> Result<usize> {
25+
asm!("swi $$0"
26+
: "={r0}"(a)
27+
: "{r7}"(a), "{r0}"(b)
28+
: "memory", "r0", "r1", "r2", "r3", "r4"
29+
: "volatile");
30+
31+
Error::demux(a)
32+
}
33+
34+
pub unsafe fn syscall2(mut a: usize, b: usize, c: usize) -> Result<usize> {
35+
asm!("swi $$0"
36+
: "={r0}"(a)
37+
: "{r7}"(a), "{r0}"(b), "{r1}"(c)
38+
: "memory"
39+
: "volatile");
40+
41+
Error::demux(a)
42+
}
43+
44+
pub unsafe fn syscall3(mut a: usize, b: usize, c: usize, d: usize) -> Result<usize> {
45+
asm!("swi $$0"
46+
: "={r0}"(a)
47+
: "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d)
48+
: "memory"
49+
: "volatile");
50+
51+
Error::demux(a)
52+
}
53+
54+
pub unsafe fn syscall4(mut a: usize, b: usize, c: usize, d: usize, e: usize) -> Result<usize> {
55+
asm!("swi $$0"
56+
: "={r0}"(a)
57+
: "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d), "{r3}"(e)
58+
: "memory"
59+
: "volatile");
60+
61+
Error::demux(a)
62+
}
63+
64+
pub unsafe fn syscall5(mut a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) -> Result<usize> {
65+
asm!("swi $$0"
66+
: "={r0}"(a)
67+
: "{r7}"(a), "{r0}"(b), "{r1}"(c), "{r2}"(d), "{r3}"(e), "{r4}"(f)
68+
: "memory"
69+
: "volatile");
70+
71+
Error::demux(a)
72+
}

src/libstd/sys/redox/syscall/mod.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,16 @@ pub use self::flag::*;
66
pub use self::number::*;
77
pub use self::scheme::*;
88

9+
#[cfg(target_arch = "arm")]
10+
#[path="arch/arm.rs"]
11+
mod arch;
12+
913
#[cfg(target_arch = "x86")]
10-
#[path="x86.rs"]
14+
#[path="arch/x86.rs"]
1115
mod arch;
1216

1317
#[cfg(target_arch = "x86_64")]
14-
#[path="x86_64.rs"]
18+
#[path="arch/x86_64.rs"]
1519
mod arch;
1620

1721
/// Function definitions

0 commit comments

Comments
 (0)