aboutsummaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-05-16 14:17:00 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-05-16 14:19:13 -0400
commit978fab817caacb7bb3ba96fe3ec08bab1c78c1da (patch)
tree584a749d0d79d662f12454b0e2179dde12ad3056 /std
parent81e960eb748fdb37d1d61da262ec343e2fdb2511 (diff)
downloadzig-978fab817caacb7bb3ba96fe3ec08bab1c78c1da.tar.gz
zig-978fab817caacb7bb3ba96fe3ec08bab1c78c1da.zip
the wasm freestanding _start function is return value void
Diffstat (limited to 'std')
-rw-r--r--std/special/bootstrap.zig21
-rw-r--r--std/special/c.zig4
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,