authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-01 22:13:30-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-01 22:13:30-07:00
log3ab5912eee54083033be5f72454980d7e83b2936
treee77c5ee7fc9fab79210dac6e18b1b584dc3e91fb
parentae0b0729fc10dc3aee1e005b8f30f54d2da271ec

LLD: the driver functions now return "false" to mean "error"


4 files changed, 13 insertions(+), 12 deletions(-)

src/codegen/llvm/bindings.zig+3-3
...@@ -1186,9 +1186,9 @@ pub extern fn LLVMInitializeM68kAsmParser() void;...@@ -1186,9 +1186,9 @@ pub extern fn LLVMInitializeM68kAsmParser() void;
1186pub extern fn LLVMInitializeCSKYAsmParser() void;1186pub extern fn LLVMInitializeCSKYAsmParser() void;
1187pub extern fn LLVMInitializeVEAsmParser() void;1187pub extern fn LLVMInitializeVEAsmParser() void;
11881188
1189extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) c_int;1189extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool;
1190extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) c_int;1190extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool;
1191extern fn ZigLLDLinkWasm(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) c_int;1191extern fn ZigLLDLinkWasm(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool;
11921192
1193pub const LinkCOFF = ZigLLDLinkCOFF;1193pub const LinkCOFF = ZigLLDLinkCOFF;
1194pub const LinkELF = ZigLLDLinkELF;1194pub const LinkELF = ZigLLDLinkELF;
src/main.zig+4-3
...@@ -4481,10 +4481,11 @@ pub fn lldMain(...@@ -4481,10 +4481,11 @@ pub fn lldMain(
4481 defer arena_instance.deinit();4481 defer arena_instance.deinit();
4482 const arena = arena_instance.allocator();4482 const arena = arena_instance.allocator();
44834483
4484 // Convert the args to the format llvm-ar expects.4484 // Convert the args to the format LLD expects.
4485 // We intentionally shave off the zig binary at args[0].4485 // We intentionally shave off the zig binary at args[0].
4486 const argv = try argsCopyZ(arena, args[1..]);4486 const argv = try argsCopyZ(arena, args[1..]);
4487 const exit_code = rc: {4487 // "If an error occurs, false will be returned."
4488 const ok = rc: {
4488 const llvm = @import("codegen/llvm/bindings.zig");4489 const llvm = @import("codegen/llvm/bindings.zig");
4489 const argc = @intCast(c_int, argv.len);4490 const argc = @intCast(c_int, argv.len);
4490 if (mem.eql(u8, args[1], "ld.lld")) {4491 if (mem.eql(u8, args[1], "ld.lld")) {
...@@ -4497,7 +4498,7 @@ pub fn lldMain(...@@ -4497,7 +4498,7 @@ pub fn lldMain(
4497 unreachable;4498 unreachable;
4498 }4499 }
4499 };4500 };
4500 return @bitCast(u8, @truncate(i8, exit_code));4501 return @boolToInt(!ok);
4501}4502}
45024503
4503const ArgIteratorResponseFile = process.ArgIteratorGeneral(.{ .comments = true, .single_quotes = true });4504const ArgIteratorResponseFile = process.ArgIteratorGeneral(.{ .comments = true, .single_quotes = true });
src/zig_llvm.cpp+3-3
...@@ -1335,17 +1335,17 @@ bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size...@@ -1335,17 +1335,17 @@ bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size
1335 return false;1335 return false;
1336}1336}
13371337
1338int ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output) {1338bool ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output) {
1339 std::vector<const char *> args(argv, argv + argc);1339 std::vector<const char *> args(argv, argv + argc);
1340 return lld::coff::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output);1340 return lld::coff::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output);
1341}1341}
13421342
1343int ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output) {1343bool ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output) {
1344 std::vector<const char *> args(argv, argv + argc);1344 std::vector<const char *> args(argv, argv + argc);
1345 return lld::elf::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output);1345 return lld::elf::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output);
1346}1346}
13471347
1348int ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output) {1348bool ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output) {
1349 std::vector<const char *> args(argv, argv + argc);1349 std::vector<const char *> args(argv, argv + argc);
1350 return lld::wasm::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output);1350 return lld::wasm::link(args, llvm::outs(), llvm::errs(), can_exit_early, disable_output);
1351}1351}
src/zig_llvm.h+3-3
...@@ -543,9 +543,9 @@ ZIG_EXTERN_C const char *ZigLLVMGetVendorTypeName(enum ZigLLVM_VendorType vendor...@@ -543,9 +543,9 @@ ZIG_EXTERN_C const char *ZigLLVMGetVendorTypeName(enum ZigLLVM_VendorType vendor
543ZIG_EXTERN_C const char *ZigLLVMGetOSTypeName(enum ZigLLVM_OSType os);543ZIG_EXTERN_C const char *ZigLLVMGetOSTypeName(enum ZigLLVM_OSType os);
544ZIG_EXTERN_C const char *ZigLLVMGetEnvironmentTypeName(enum ZigLLVM_EnvironmentType abi);544ZIG_EXTERN_C const char *ZigLLVMGetEnvironmentTypeName(enum ZigLLVM_EnvironmentType abi);
545545
546ZIG_EXTERN_C int ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output);546ZIG_EXTERN_C bool ZigLLDLinkCOFF(int argc, const char **argv, bool can_exit_early, bool disable_output);
547ZIG_EXTERN_C int ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output);547ZIG_EXTERN_C bool ZigLLDLinkELF(int argc, const char **argv, bool can_exit_early, bool disable_output);
548ZIG_EXTERN_C int ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output);548ZIG_EXTERN_C bool ZigLLDLinkWasm(int argc, const char **argv, bool can_exit_early, bool disable_output);
549549
550ZIG_EXTERN_C bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size_t file_name_count,550ZIG_EXTERN_C bool ZigLLVMWriteArchive(const char *archive_name, const char **file_names, size_t file_name_count,
551 enum ZigLLVM_OSType os_type);551 enum ZigLLVM_OSType os_type);