authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-12-16 06:07:02+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-01-25 14:57:33+01:00
logafe2fed34dd960afb44f88cfe6ce088e1817cb5b
treea83b5824089c293bf133e5ccab81e342a5972471
parentcd8c92fc40993d307e891be27bfd86574c2ce85d
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

link: Set machine and float ABI when invoking ld.lld and lld-link.

If this isn't done, LTO can completely miscompile the input bitcode modules for certain targets where we need to explicitly set these ABIs (because LLVM's defaults are bad).

2 files changed, 19 insertions(+), 0 deletions(-)

src/link/Coff.zig+7
......@@ -1876,6 +1876,13 @@ fn linkWithLLD(coff: *Coff, arena: Allocator, tid: Zcu.PerThread.Id, prog_node:
18761876 if (comp.version) |version| {
18771877 try argv.append(try allocPrint(arena, "-VERSION:{}.{}", .{ version.major, version.minor }));
18781878 }
1879
1880 if (target_util.llvmMachineAbi(target)) |mabi| {
1881 try argv.append(try allocPrint(arena, "-MLLVM:-target-abi={s}", .{mabi}));
1882 }
1883
1884 try argv.append(try allocPrint(arena, "-MLLVM:-float-abi={s}", .{if (target.abi.floatAbi() == .hard) "hard" else "soft"}));
1885
18791886 if (comp.config.lto != .none) {
18801887 switch (optimize_mode) {
18811888 .Debug => {},
src/link/Elf.zig+12
......@@ -1700,6 +1700,18 @@ fn linkWithLLD(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: s
17001700 try argv.append(try std.fmt.allocPrint(arena, "--sysroot={s}", .{sysroot}));
17011701 }
17021702
1703 if (target_util.llvmMachineAbi(target)) |mabi| {
1704 try argv.appendSlice(&.{
1705 "-mllvm",
1706 try std.fmt.allocPrint(arena, "-target-abi={s}", .{mabi}),
1707 });
1708 }
1709
1710 try argv.appendSlice(&.{
1711 "-mllvm",
1712 try std.fmt.allocPrint(arena, "-float-abi={s}", .{if (target.abi.floatAbi() == .hard) "hard" else "soft"}),
1713 });
1714
17031715 if (comp.config.lto != .none) {
17041716 switch (comp.root_mod.optimize_mode) {
17051717 .Debug => {},