Commit 978fab817c
Changed files (2)
std
special
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
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,