authorgravatar for pjanv42@gmail.comJan Procházka <pjanv42@gmail.com> 2026-08-16 12:47:05+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-16 22:19:28+02:00
log75044cb04cc67454db98ed7c054081806c3830c6
tree863ad71618a413213f4a5070a556d6e3668824f4
parent00af3bfc40c2e4e13757d93a88d17fe9e3073beb

llvm: synchronize target initialization


2 files changed, 10 insertions(+), 3 deletions(-)

src/codegen/llvm.zig+9-2
......@@ -847,7 +847,7 @@ pub const Object = struct {
847847 return diags.fail("emitting without libllvm not implemented", .{});
848848 }
849849
850 initializeLLVMTarget(comp.root_mod.resolved_target.result.cpu.arch);
850 initializeLLVMTarget(io, comp.root_mod.resolved_target.result.cpu.arch);
851851
852852 const context: *bindings.Context = .create();
853853 errdefer context.dispose();
......@@ -4811,7 +4811,14 @@ const struct_layout_version = 2;
48114811// https://github.com/llvm/llvm-project/issues/56585/ is fixed
48124812pub const optional_layout_version = 3;
48134813
4814pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
4814var target_registry_mutex: std.Io.Mutex = .init;
4815
4816pub fn initializeLLVMTarget(io: Io, arch: std.Target.Cpu.Arch) void {
4817 // Repeated initialization is safe, as targets which have already been registered will be skipped.
4818 // It is however the client's responsibility to synchronize registry access.
4819 target_registry_mutex.lockUncancelable(io);
4820 defer target_registry_mutex.unlock(io);
4821
48154822 switch (arch) {
48164823 .aarch64, .aarch64_be => {
48174824 bindings.LLVMInitializeAArch64Target();
src/link/Lld.zig+1-1
......@@ -341,7 +341,7 @@ fn linkAsArchive(lld: *Lld, arena: Allocator) link.Error!void {
341341 const llvm_bindings = @import("../codegen/llvm/bindings.zig");
342342 const llvm = @import("../codegen/llvm.zig");
343343 const target = &comp.root_mod.resolved_target.result;
344 llvm.initializeLLVMTarget(target.cpu.arch);
344 llvm.initializeLLVMTarget(comp.io, target.cpu.arch);
345345 var err_file_index: usize = undefined;
346346 var err_msg: [*:0]u8 = undefined;
347347 if (llvm_bindings.WriteArchive(