| ... | ... | @@ -14,14 +14,16 @@ comptime { |
| 14 | 14 | @export("main", main, strong_linkage); |
| 15 | 15 | } else if (builtin.os == builtin.Os.windows) { |
| 16 | 16 | @export("WinMainCRTStartup", WinMainCRTStartup, strong_linkage); |
| 17 | | } else if (builtin.os == builtin.Os.wasi) { |
| 18 | | @export("_start", wasiStart, strong_linkage); |
| 19 | 17 | } else { |
| 20 | 18 | @export("_start", _start, strong_linkage); |
| 21 | 19 | } |
| 22 | 20 | } |
| 23 | 21 | |
| 24 | 22 | nakedcc fn _start() noreturn { |
| 23 | if (builtin.os == builtin.Os.wasi) { |
| 24 | std.os.wasi.__wasi_proc_exit(callMain()); |
| 25 | } |
| 26 | |
| 25 | 27 | switch (builtin.arch) { |
| 26 | 28 | builtin.Arch.x86_64 => { |
| 27 | 29 | argc_ptr = asm ("lea (%%rsp), %[argc]" |
| ... | ... | @@ -45,16 +47,6 @@ nakedcc fn _start() noreturn { |
| 45 | 47 | @noInlineCall(posixCallMainAndExit); |
| 46 | 48 | } |
| 47 | 49 | |
| 48 | | nakedcc fn wasiStart() noreturn { |
| 49 | | // TODO: Decide if alloc at init is acceptable for args and env |
| 50 | | // @llvm.wasm.mem.grow.i32 |
| 51 | | // __wasi_args_get() |
| 52 | | // __wasi_args_sizes_get() |
| 53 | | // __wasi_environ_get() |
| 54 | | // __wasi_environ_sizes_get() |
| 55 | | std.os.posix.exit(callMain()); |
| 56 | | } |
| 57 | | |
| 58 | 50 | extern fn WinMainCRTStartup() noreturn { |
| 59 | 51 | @setAlignStack(16); |
| 60 | 52 | if (!builtin.single_threaded) { |