| ... | ... | @@ -1243,6 +1243,12 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { |
| 1243 | 1243 | if (self.base.options.global_base) |global_base| { |
| 1244 | 1244 | const arg = try std.fmt.allocPrint(arena, "--global-base={d}", .{global_base}); |
| 1245 | 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 | 1254 | var auto_export_symbols = true; |
| ... | ... | @@ -1294,10 +1300,6 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { |
| 1294 | 1300 | const arg = try std.fmt.allocPrint(arena, "stack-size={d}", .{stack_size}); |
| 1295 | 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 | 1303 | if (self.base.options.wasi_exec_model == .reactor) { |
| 1302 | 1304 | // Reactor execution model does not have _start so lld doesn't look for it. |
| 1303 | 1305 | try argv.append("--no-entry"); |