From 0700ec35bda705fccb61cb3f28734ce11166fda5 Mon Sep 17 00:00:00 2001 From: alexrp Date: Sun, 21 Sep 2025 08:47:21 +0200 Subject: [PATCH] compiler: don't use self-hosted backend on any BSD yet There are some blocking bugs in the self-hosted ELF linker. --- src/target.zig | 2 +- test/src/StackTrace.zig | 2 +- test/tests.zig | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/target.zig b/src/target.zig index e999d2ae22..6326f3c3a1 100644 --- a/src/target.zig +++ b/src/target.zig @@ -238,7 +238,7 @@ pub fn hasLldSupport(ofmt: std.Target.ObjectFormat) bool { pub fn selfHostedBackendIsAsRobustAsLlvm(target: *const std.Target) bool { if (target.cpu.arch.isSpirV()) return true; if (target.cpu.arch == .x86_64 and target.ptrBitWidth() == 64) { - if (target.os.tag == .netbsd or target.os.tag == .openbsd) { + if (target.os.tag.isBSD()) { // Self-hosted linker needs work: https://github.com/ziglang/zig/issues/24341 return false; } diff --git a/test/src/StackTrace.zig b/test/src/StackTrace.zig index ff3bbe708b..9b51f4e4b2 100644 --- a/test/src/StackTrace.zig +++ b/test/src/StackTrace.zig @@ -45,7 +45,7 @@ fn addCaseInner(self: *StackTrace, config: Config, use_llvm: bool) void { fn shouldTestNonLlvm(target: *const std.Target) bool { return switch (target.cpu.arch) { .x86_64 => switch (target.ofmt) { - .elf => true, + .elf => !target.os.tag.isBSD(), else => false, }, else => false, diff --git a/test/tests.zig b/test/tests.zig index a99b7c703b..5b0dfc40a7 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -2451,8 +2451,9 @@ pub fn wouldUseLlvm(use_llvm: ?bool, query: std.Target.Query, optimize_mode: Opt else => return true, } const cpu_arch = query.cpu_arch orelse builtin.cpu.arch; + const os_tag = query.os_tag orelse builtin.os.tag; switch (cpu_arch) { - .x86_64 => if (std.Target.ptrBitWidth_arch_abi(cpu_arch, query.abi orelse .none) != 64) return true, + .x86_64 => if (os_tag.isBSD() or std.Target.ptrBitWidth_arch_abi(cpu_arch, query.abi orelse .none) != 64) return true, .spirv32, .spirv64 => return false, else => return true, }