diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig index 13e0b05064..ca32f40ce4 100644 --- a/src/codegen/llvm/bindings.zig +++ b/src/codegen/llvm/bindings.zig @@ -1186,9 +1186,9 @@ pub extern fn LLVMInitializeM68kAsmParser() void; pub extern fn LLVMInitializeCSKYAsmParser() void; pub extern fn LLVMInitializeVEAsmParser() void; -extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) c_int; -extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) c_int; -extern fn ZigLLDLinkWasm(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) c_int; +extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; +extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; +extern fn ZigLLDLinkWasm(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; pub const LinkCOFF = ZigLLDLinkCOFF; pub const LinkELF = ZigLLDLinkELF; diff --git a/src/main.zig b/src/main.zig index 849aa93d13..00696693f2 100644 --- a/src/main.zig +++ b/src/main.zig @@ -4481,10 +4481,11 @@ pub fn lldMain( defer arena_instance.deinit(); const arena = arena_instance.allocator(); - // Convert the args to the format llvm-ar expects. + // Convert the args to the format LLD expects. // We intentionally shave off the zig binary at args[0]. const argv = try argsCopyZ(arena, args[1..]); - const exit_code = rc: { + // "If an error occurs, false will be returned." + const ok = rc: { const llvm = @import("codegen/llvm/bindings.zig"); const argc = @intCast(c_int, argv.len); if (mem.eql(u8, args[1], "ld.lld")) { @@ -4497,7 +4498,7 @@ pub fn lldMain( unreachable; } }; - return @bitCast(u8, @truncate(i8, exit_code)); + return @boolToInt(!ok); } const ArgIteratorResponseFile = process.ArgIteratorGeneral(.{ .comments = true, .single_quotes = true }); diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index 7cef3d01f7..b71356138d 100644 --- a/src/zig_llvm.cpp +++ b/src/zig_llvm.cpp @@ -1335,17 +1335,17 @@ bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size return false; } -int ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output) { +bool ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output) { std::vector args(argv, argv + argc); return lld::coff::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output); } -int ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output) { +bool ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output) { std::vector args(argv, argv + argc); return lld::elf::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output); } -int ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output) { +bool ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output) { std::vector args(argv, argv + argc); return lld::wasm::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output); } diff --git a/src/zig_llvm.h b/src/zig_llvm.h index ba8c31d668..804caf616e 100644 --- a/src/zig_llvm.h +++ b/src/zig_llvm.h @@ -543,9 +543,9 @@ ZIG_EXTERN_C const char *ZigLLVMGetVendorTypeName(enum ZigLLVM_VendorType vendor ZIG_EXTERN_C const char *ZigLLVMGetOSTypeName(enum ZigLLVM_OSType os); ZIG_EXTERN_C const char *ZigLLVMGetEnvironmentTypeName(enum ZigLLVM_EnvironmentType abi); -ZIG_EXTERN_C int ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output); -ZIG_EXTERN_C int ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output); -ZIG_EXTERN_C int ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output); +ZIG_EXTERN_C bool ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output); +ZIG_EXTERN_C bool ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output); +ZIG_EXTERN_C bool ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output); ZIG_EXTERN_C bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size_t file_name_count, enum ZigLLVM_OSType os_type);