diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-05-16 14:17:00 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-05-16 14:19:13 -0400 |
| commit | 978fab817caacb7bb3ba96fe3ec08bab1c78c1da (patch) | |
| tree | 584a749d0d79d662f12454b0e2179dde12ad3056 | |
| parent | 81e960eb748fdb37d1d61da262ec343e2fdb2511 (diff) | |
| download | zig-978fab817caacb7bb3ba96fe3ec08bab1c78c1da.tar.gz zig-978fab817caacb7bb3ba96fe3ec08bab1c78c1da.zip | |
the wasm freestanding _start function is return value void
| -rw-r--r-- | std/special/bootstrap.zig | 21 | ||||
| -rw-r--r-- | std/special/c.zig | 4 |
2 files changed, 14 insertions, 11 deletions
diff --git a/std/special/bootstrap.zig b/std/special/bootstrap.zig index e8f943b78c..b389c03c8c 100644 --- a/std/special/bootstrap.zig +++ b/std/special/bootstrap.zig @@ -8,17 +8,24 @@ const assert = std.debug.assert; var argc_ptr: [*]usize = undefined; +const is_wasm = switch (builtin.arch) { .wasm32, .wasm64 => true, else => false}; + comptime { - const strong_linkage = builtin.GlobalLinkage.Strong; if (builtin.link_libc) { - @export("main", main, strong_linkage); - } else if (builtin.os == builtin.Os.windows) { - @export("WinMainCRTStartup", WinMainCRTStartup, strong_linkage); + @export("main", main, .Strong); + } else if (builtin.os == .windows) { + @export("WinMainCRTStartup", WinMainCRTStartup, .Strong); + } else if (is_wasm and builtin.os == .freestanding) { + @export("_start", wasm_freestanding_start, .Strong); } else { - @export("_start", _start, strong_linkage); + @export("_start", _start, .Strong); } } +extern fn wasm_freestanding_start() void { + _ = callMain(); +} + nakedcc fn _start() noreturn { if (builtin.os == builtin.Os.wasi) { std.os.wasi.proc_exit(callMain()); @@ -40,10 +47,6 @@ nakedcc fn _start() noreturn { : [argc] "=r" (-> [*]usize) ); }, - .wasm32, .wasm64 => { - _ = callMain(); - while (true) {} - }, else => @compileError("unsupported arch"), } // If LLVM inlines stack variables into _start, they will overwrite diff --git a/std/special/c.zig b/std/special/c.zig index 281e177469..6332d9a12e 100644 --- a/std/special/c.zig +++ b/std/special/c.zig @@ -17,8 +17,8 @@ comptime { } extern fn main(argc: c_int, argv: [*][*]u8) c_int; -extern fn wasm_start() c_int { - return main(0, undefined); +extern fn wasm_start() void { + _ = main(0, undefined); } // Avoid dragging in the runtime safety mechanisms into this .o file, |
