authorgravatar for andrea@orru.ioAndrea Orru <andrea@orru.io> 2018-01-08 12:16:23-05:00
committergravatar for andrea@orru.ioAndrea Orru <andrea@orru.io> 2018-01-08 12:16:23-05:00
log98a95cc6987988886b90957415e9ef850b6fb119
treed971fb55167e0010d3dbda86b9c84d16bcd8aa26
parent598170756cd91b6f300921d256baa72141ec3098

exit, createThread for zen


2 files changed, 17 insertions(+), 7 deletions(-)

std/os/zen.zig+15-4
......@@ -9,16 +9,23 @@ pub const MBOX_TERMINAL = 1;
99//// Syscall numbers ////
1010///////////////////////////
1111
12pub const SYS_createMailbox = 0;
13pub const SYS_send = 1;
14pub const SYS_receive = 2;
15pub const SYS_map = 3;
12pub const SYS_exit = 0;
13pub const SYS_createMailbox = 1;
14pub const SYS_send = 2;
15pub const SYS_receive = 3;
16pub const SYS_map = 4;
17pub const SYS_createThread = 5;
1618
1719
1820////////////////////
1921//// Syscalls ////
2022////////////////////
2123
24pub fn exit(status: i32) -> noreturn {
25 _ = syscall1(SYS_exit, @bitCast(usize, isize(status)));
26 unreachable;
27}
28
2229pub fn createMailbox(id: u16) {
2330 _ = syscall1(SYS_createMailbox, id);
2431}
......@@ -35,6 +42,10 @@ pub fn map(v_addr: usize, p_addr: usize, size: usize, writable: bool) -> bool {
3542 return syscall4(SYS_map, v_addr, p_addr, size, usize(writable)) != 0;
3643}
3744
45pub fn createThread(function: fn()) -> u16 {
46 return u16(syscall1(SYS_createThread, @ptrToInt(function)));
47}
48
3849
3950/////////////////////////
4051//// Syscall stubs ////
std/special/bootstrap.zig+2-3
......@@ -21,9 +21,8 @@ comptime {
2121}
2222
2323extern fn zenMain() -> noreturn {
24 // TODO: call exit.
25 root.main() catch {};
26 while (true) {}
24 root.main() catch std.os.posix.exit(1);
25 std.os.posix.exit(0);
2726}
2827
2928nakedcc fn _start() -> noreturn {