aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-02-06 22:29:40 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-02-06 22:29:40 -0700
commit33fa29601921d88097a1ee3c0d92b93047a5186d (patch)
tree5926ea2d182a76f80429776a5473202738c9b656 /src/main.zig
parentc1cf158729f4d726639a5695754957f9f45f89da (diff)
downloadzig-33fa29601921d88097a1ee3c0d92b93047a5186d.tar.gz
zig-33fa29601921d88097a1ee3c0d92b93047a5186d.zip
stage2: pass proper can_exit_early value to LLD
and adjust the warning message for invoking LLD twice in the same process.
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/main.zig b/src/main.zig
index 6a1416cd6b..3f38fd1f78 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -236,7 +236,7 @@ pub fn mainArgs(gpa: Allocator, arena: Allocator, args: []const []const u8) !voi
mem.eql(u8, cmd, "lld-link") or
mem.eql(u8, cmd, "wasm-ld"))
{
- return process.exit(try lldMain(arena, args));
+ return process.exit(try lldMain(arena, args, true));
} else if (mem.eql(u8, cmd, "build")) {
return cmdBuild(gpa, arena, cmd_args);
} else if (mem.eql(u8, cmd, "fmt")) {
@@ -4119,7 +4119,11 @@ pub fn llvmArMain(alloc: Allocator, args: []const []const u8) error{OutOfMemory}
/// * `ld.lld` - ELF
/// * `lld-link` - COFF
/// * `wasm-ld` - WebAssembly
-pub fn lldMain(alloc: Allocator, args: []const []const u8) error{OutOfMemory}!u8 {
+pub fn lldMain(
+ alloc: Allocator,
+ args: []const []const u8,
+ can_exit_early: bool,
+) error{OutOfMemory}!u8 {
if (!build_options.have_llvm)
fatal("`zig {s}` unavailable: compiler built without LLVM extensions", .{args[0]});
@@ -4130,7 +4134,7 @@ pub fn lldMain(alloc: Allocator, args: []const []const u8) error{OutOfMemory}!u8
var count: usize = 0;
};
if (CallCounter.count == 1) { // Issue the warning on the first repeat call
- warn("calling lldMain repeatedly within the same process can have side effects (https://github.com/ziglang/zig/issues/3825)", .{});
+ warn("invoking LLD for the second time within the same process because the host OS ({s}) does not support spawning child processes. This sometimes activates LLD bugs", .{@tagName(builtin.os.tag)});
}
CallCounter.count += 1;
@@ -4145,11 +4149,11 @@ pub fn lldMain(alloc: Allocator, args: []const []const u8) error{OutOfMemory}!u8
const llvm = @import("codegen/llvm/bindings.zig");
const argc = @intCast(c_int, argv.len);
if (mem.eql(u8, args[1], "ld.lld")) {
- break :rc llvm.LinkELF(argc, argv.ptr, true);
+ break :rc llvm.LinkELF(argc, argv.ptr, can_exit_early);
} else if (mem.eql(u8, args[1], "lld-link")) {
- break :rc llvm.LinkCOFF(argc, argv.ptr, true);
+ break :rc llvm.LinkCOFF(argc, argv.ptr, can_exit_early);
} else if (mem.eql(u8, args[1], "wasm-ld")) {
- break :rc llvm.LinkWasm(argc, argv.ptr, true);
+ break :rc llvm.LinkWasm(argc, argv.ptr, can_exit_early);
} else {
unreachable;
}