the wasm freestanding _start function is return value void

This commit is contained in:
Andrew Kelley 2019-05-16 14:17:00 -04:00
parent 81e960eb74
commit 978fab817c
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
2 changed files with 14 additions and 11 deletions

View File

@ -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

View File

@ -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,