| ... | @@ -8,6 +8,26 @@ const SYS_write = switch (@compile_var("arch")) { | ... | @@ -8,6 +8,26 @@ const SYS_write = switch (@compile_var("arch")) { |
| 8 | i386 => 4, | 8 | i386 => 4, |
| 9 | else => unreachable{}, | 9 | else => unreachable{}, |
| 10 | }; | 10 | }; |
| | 11 | const SYS_open = switch (@compile_var("arch")) { |
| | 12 | x86_64 => 2, |
| | 13 | i386 => 5, |
| | 14 | else => unreachable{}, |
| | 15 | }; |
| | 16 | const SYS_close = switch (@compile_var("arch")) { |
| | 17 | x86_64 => 3, |
| | 18 | i386 => 6, |
| | 19 | else => unreachable{}, |
| | 20 | }; |
| | 21 | const SYS_creat = switch (@compile_var("arch")) { |
| | 22 | x86_64 => 85, |
| | 23 | i386 => 8, |
| | 24 | else => unreachable{}, |
| | 25 | }; |
| | 26 | const SYS_lseek = switch (@compile_var("arch")) { |
| | 27 | x86_64 => 8, |
| | 28 | i386 => 19, |
| | 29 | else => unreachable{}, |
| | 30 | }; |
| 11 | const SYS_mmap = switch (@compile_var("arch")) { | 31 | const SYS_mmap = switch (@compile_var("arch")) { |
| 12 | x86_64 => 9, | 32 | x86_64 => 9, |
| 13 | i386 => 90, | 33 | i386 => 90, |
| ... | @@ -53,6 +73,11 @@ const SYS_tgkill = switch (@compile_var("arch")) { | ... | @@ -53,6 +73,11 @@ const SYS_tgkill = switch (@compile_var("arch")) { |
| 53 | i386 => 270, | 73 | i386 => 270, |
| 54 | else => unreachable{}, | 74 | else => unreachable{}, |
| 55 | }; | 75 | }; |
| | 76 | const SYS_openat = switch (@compile_var("arch")) { |
| | 77 | x86_64 => 257, |
| | 78 | i386 => 295, |
| | 79 | else => unreachable{}, |
| | 80 | }; |
| 56 | const SYS_getrandom = switch (@compile_var("arch")) { | 81 | const SYS_getrandom = switch (@compile_var("arch")) { |
| 57 | x86_64 => 318, | 82 | x86_64 => 318, |
| 58 | i386 => 355, | 83 | i386 => 355, |
| ... | @@ -70,6 +95,15 @@ pub const MMAP_MAP_PRIVATE = 2; | ... | @@ -70,6 +95,15 @@ pub const MMAP_MAP_PRIVATE = 2; |
| 70 | pub const MMAP_MAP_FIXED = 16; | 95 | pub const MMAP_MAP_FIXED = 16; |
| 71 | pub const MMAP_MAP_ANON = 32; | 96 | pub const MMAP_MAP_ANON = 32; |
| 72 | | 97 | |
| | 98 | pub const O_RDONLY = 0x0; |
| | 99 | pub const O_WRONLY = 0x1; |
| | 100 | pub const O_RDWR = 0x2; |
| | 101 | pub const O_CREAT = 0x40; |
| | 102 | pub const O_EXCL = 0x80; |
| | 103 | pub const O_TRUNC = 0x200; |
| | 104 | pub const O_APPEND = 0x400; |
| | 105 | pub const O_SYNC = 0x101000; |
| | 106 | |
| 73 | pub const SIGHUP = 1; | 107 | pub const SIGHUP = 1; |
| 74 | pub const SIGINT = 2; | 108 | pub const SIGINT = 2; |
| 75 | pub const SIGQUIT = 3; | 109 | pub const SIGQUIT = 3; |
| ... | @@ -268,6 +302,35 @@ pub fn write(fd: isize, buf: &const u8, count: isize) -> isize { | ... | @@ -268,6 +302,35 @@ pub fn write(fd: isize, buf: &const u8, count: isize) -> isize { |
| 268 | syscall3(SYS_write, isize(fd), isize(buf), count) | 302 | syscall3(SYS_write, isize(fd), isize(buf), count) |
| 269 | } | 303 | } |
| 270 | | 304 | |
| | 305 | pub fn open(path: []u8, flags: isize, perm: isize) -> isize { |
| | 306 | var buf: [path.len + 1]u8 = undefined; |
| | 307 | @memcpy(&buf[0], &path[0], path.len); |
| | 308 | buf[path.len] = 0; |
| | 309 | syscall3(SYS_open, isize(&buf[0]), flags, perm) |
| | 310 | } |
| | 311 | |
| | 312 | pub fn create(path: []u8, perm: isize) -> isize { |
| | 313 | var buf: [path.len + 1]u8 = undefined; |
| | 314 | @memcpy(&buf[0], &path[0], path.len); |
| | 315 | buf[path.len] = 0; |
| | 316 | syscall2(SYS_creat, isize(&buf[0]), perm) |
| | 317 | } |
| | 318 | |
| | 319 | pub fn openat(dirfd: isize, path: []u8, flags: isize, mode: isize) -> isize { |
| | 320 | var buf: [path.len + 1]u8 = undefined; |
| | 321 | @memcpy(&buf[0], &path[0], path.len); |
| | 322 | buf[path.len] = 0; |
| | 323 | syscall4(SYS_openat, dirfd, isize(&buf[0]), flags, mode) |
| | 324 | } |
| | 325 | |
| | 326 | pub fn close(fd: isize) -> isize { |
| | 327 | syscall1(SYS_close, fd) |
| | 328 | } |
| | 329 | |
| | 330 | pub fn lseek(fd: isize, offset: isize, ref_pos: isize) -> isize { |
| | 331 | syscall3(SYS_lseek, fd, offset, ref_pos) |
| | 332 | } |
| | 333 | |
| 271 | pub fn exit(status: i32) -> unreachable { | 334 | pub fn exit(status: i32) -> unreachable { |
| 272 | syscall1(SYS_exit, isize(status)); | 335 | syscall1(SYS_exit, isize(status)); |
| 273 | unreachable{} | 336 | unreachable{} |