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;...@@ -9,16 +9,23 @@ pub const MBOX_TERMINAL = 1;
9//// Syscall numbers ////9//// Syscall numbers ////
10///////////////////////////10///////////////////////////
1111
12pub const SYS_createMailbox = 0;12pub const SYS_exit = 0;
13pub const SYS_send = 1;13pub const SYS_createMailbox = 1;
14pub const SYS_receive = 2;14pub const SYS_send = 2;
15pub const SYS_map = 3;15pub const SYS_receive = 3;
16pub const SYS_map = 4;
17pub const SYS_createThread = 5;
1618
1719
18////////////////////20////////////////////
19//// Syscalls ////21//// Syscalls ////
20////////////////////22////////////////////
2123
24pub fn exit(status: i32) -> noreturn {
25 _ = syscall1(SYS_exit, @bitCast(usize, isize(status)));
26 unreachable;
27}
28
22pub fn createMailbox(id: u16) {29pub fn createMailbox(id: u16) {
23 _ = syscall1(SYS_createMailbox, id);30 _ = syscall1(SYS_createMailbox, id);
24}31}
...@@ -35,6 +42,10 @@ pub fn map(v_addr: usize, p_addr: usize, size: usize, writable: bool) -> bool {...@@ -35,6 +42,10 @@ pub fn map(v_addr: usize, p_addr: usize, size: usize, writable: bool) -> bool {
35 return syscall4(SYS_map, v_addr, p_addr, size, usize(writable)) != 0;42 return syscall4(SYS_map, v_addr, p_addr, size, usize(writable)) != 0;
36}43}
3744
45pub fn createThread(function: fn()) -> u16 {
46 return u16(syscall1(SYS_createThread, @ptrToInt(function)));
47}
48
3849
39/////////////////////////50/////////////////////////
40//// Syscall stubs ////51//// Syscall stubs ////
std/special/bootstrap.zig+2-3
...@@ -21,9 +21,8 @@ comptime {...@@ -21,9 +21,8 @@ comptime {
21}21}
2222
23extern fn zenMain() -> noreturn {23extern fn zenMain() -> noreturn {
24 // TODO: call exit.24 root.main() catch std.os.posix.exit(1);
25 root.main() catch {};25 std.os.posix.exit(0);
26 while (true) {}
27}26}
2827
29nakedcc fn _start() -> noreturn {28nakedcc fn _start() -> noreturn {