| ... | @@ -1243,6 +1243,12 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { | ... | @@ -1243,6 +1243,12 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { |
| 1243 | if (self.base.options.global_base) |global_base| { | 1243 | if (self.base.options.global_base) |global_base| { |
| 1244 | const arg = try std.fmt.allocPrint(arena, "--global-base={d}", .{global_base}); | 1244 | const arg = try std.fmt.allocPrint(arena, "--global-base={d}", .{global_base}); |
| 1245 | try argv.append(arg); | 1245 | try argv.append(arg); |
| | 1246 | } else { |
| | 1247 | // We prepend it by default, so when a stack overflow happens the runtime will trap correctly, |
| | 1248 | // rather than silently overwrite all global declarations. See https://github.com/ziglang/zig/issues/4496 |
| | 1249 | // |
| | 1250 | // The user can overwrite this behavior by setting the global-base |
| | 1251 | try argv.append("--stack-first"); |
| 1246 | } | 1252 | } |
| 1247 | | 1253 | |
| 1248 | var auto_export_symbols = true; | 1254 | var auto_export_symbols = true; |
| ... | @@ -1294,10 +1300,6 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { | ... | @@ -1294,10 +1300,6 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { |
| 1294 | const arg = try std.fmt.allocPrint(arena, "stack-size={d}", .{stack_size}); | 1300 | const arg = try std.fmt.allocPrint(arena, "stack-size={d}", .{stack_size}); |
| 1295 | try argv.append(arg); | 1301 | try argv.append(arg); |
| 1296 | | 1302 | |
| 1297 | // Put stack before globals so that stack overflow results in segfault immediately | | |
| 1298 | // before corrupting globals. See https://github.com/ziglang/zig/issues/4496 | | |
| 1299 | try argv.append("--stack-first"); | | |
| 1300 | | | |
| 1301 | if (self.base.options.wasi_exec_model == .reactor) { | 1303 | if (self.base.options.wasi_exec_model == .reactor) { |
| 1302 | // Reactor execution model does not have _start so lld doesn't look for it. | 1304 | // Reactor execution model does not have _start so lld doesn't look for it. |
| 1303 | try argv.append("--no-entry"); | 1305 | try argv.append("--no-entry"); |