blob b8d8a163 (2637B) - Raw
1 usingnamespace @import("../bits.zig"); 2 3 pub fn syscall0(number: usize) usize { 4 return asm volatile ("svc #0" 5 : [ret] "={x0}" (-> usize) 6 : [number] "{x8}" (number) 7 : "memory", "cc" 8 ); 9 } 10 11 pub fn syscall1(number: usize, arg1: usize) usize { 12 return asm volatile ("svc #0" 13 : [ret] "={x0}" (-> usize) 14 : [number] "{x8}" (number), 15 [arg1] "{x0}" (arg1) 16 : "memory", "cc" 17 ); 18 } 19 20 pub fn syscall2(number: usize, arg1: usize, arg2: usize) usize { 21 return asm volatile ("svc #0" 22 : [ret] "={x0}" (-> usize) 23 : [number] "{x8}" (number), 24 [arg1] "{x0}" (arg1), 25 [arg2] "{x1}" (arg2) 26 : "memory", "cc" 27 ); 28 } 29 30 pub fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) usize { 31 return asm volatile ("svc #0" 32 : [ret] "={x0}" (-> usize) 33 : [number] "{x8}" (number), 34 [arg1] "{x0}" (arg1), 35 [arg2] "{x1}" (arg2), 36 [arg3] "{x2}" (arg3) 37 : "memory", "cc" 38 ); 39 } 40 41 pub fn syscall4(number: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { 42 return asm volatile ("svc #0" 43 : [ret] "={x0}" (-> usize) 44 : [number] "{x8}" (number), 45 [arg1] "{x0}" (arg1), 46 [arg2] "{x1}" (arg2), 47 [arg3] "{x2}" (arg3), 48 [arg4] "{x3}" (arg4) 49 : "memory", "cc" 50 ); 51 } 52 53 pub fn syscall5(number: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { 54 return asm volatile ("svc #0" 55 : [ret] "={x0}" (-> usize) 56 : [number] "{x8}" (number), 57 [arg1] "{x0}" (arg1), 58 [arg2] "{x1}" (arg2), 59 [arg3] "{x2}" (arg3), 60 [arg4] "{x3}" (arg4), 61 [arg5] "{x4}" (arg5) 62 : "memory", "cc" 63 ); 64 } 65 66 pub fn syscall6( 67 number: usize, 68 arg1: usize, 69 arg2: usize, 70 arg3: usize, 71 arg4: usize, 72 arg5: usize, 73 arg6: usize, 74 ) usize { 75 return asm volatile ("svc #0" 76 : [ret] "={x0}" (-> usize) 77 : [number] "{x8}" (number), 78 [arg1] "{x0}" (arg1), 79 [arg2] "{x1}" (arg2), 80 [arg3] "{x2}" (arg3), 81 [arg4] "{x3}" (arg4), 82 [arg5] "{x4}" (arg5), 83 [arg6] "{x5}" (arg6) 84 : "memory", "cc" 85 ); 86 } 87 88 /// This matches the libc clone function. 89 pub extern fn clone(func: extern fn (arg: usize) u8, stack: usize, flags: u32, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; 90 91 pub const restore = restore_rt; 92 93 pub nakedcc fn restore_rt() void { 94 return asm volatile ("svc #0" 95 : 96 : [number] "{x8}" (usize(SYS_rt_sigreturn)) 97 : "memory", "cc" 98 ); 99 }