| ... | ... | @@ -8,6 +8,26 @@ const SYS_write = switch (@compile_var("arch")) { |
| 8 | 8 | i386 => 4, |
| 9 | 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 | 31 | const SYS_mmap = switch (@compile_var("arch")) { |
| 12 | 32 | x86_64 => 9, |
| 13 | 33 | i386 => 90, |
| ... | ... | @@ -53,6 +73,11 @@ const SYS_tgkill = switch (@compile_var("arch")) { |
| 53 | 73 | i386 => 270, |
| 54 | 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 | 81 | const SYS_getrandom = switch (@compile_var("arch")) { |
| 57 | 82 | x86_64 => 318, |
| 58 | 83 | i386 => 355, |
| ... | ... | @@ -70,6 +95,15 @@ pub const MMAP_MAP_PRIVATE = 2; |
| 70 | 95 | pub const MMAP_MAP_FIXED = 16; |
| 71 | 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 | 107 | pub const SIGHUP = 1; |
| 74 | 108 | pub const SIGINT = 2; |
| 75 | 109 | pub const SIGQUIT = 3; |
| ... | ... | @@ -268,6 +302,35 @@ pub fn write(fd: isize, buf: &const u8, count: isize) -> isize { |
| 268 | 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 | 334 | pub fn exit(status: i32) -> unreachable { |
| 272 | 335 | syscall1(SYS_exit, isize(status)); |
| 273 | 336 | unreachable{} |