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 {...@@ -847,7 +847,7 @@ pub const Object = struct {
847 return diags.fail("emitting without libllvm not implemented", .{});847 return diags.fail("emitting without libllvm not implemented", .{});
848 }848 }
849849
850 initializeLLVMTarget(comp.root_mod.resolved_target.result.cpu.arch);850 initializeLLVMTarget(io, comp.root_mod.resolved_target.result.cpu.arch);
851851
852 const context: *bindings.Context = .create();852 const context: *bindings.Context = .create();
853 errdefer context.dispose();853 errdefer context.dispose();
...@@ -4811,7 +4811,14 @@ const struct_layout_version = 2;...@@ -4811,7 +4811,14 @@ const struct_layout_version = 2;
4811// https://github.com/llvm/llvm-project/issues/56585/ is fixed4811// https://github.com/llvm/llvm-project/issues/56585/ is fixed
4812pub const optional_layout_version = 3;4812pub 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
4815 switch (arch) {4822 switch (arch) {
4816 .aarch64, .aarch64_be => {4823 .aarch64, .aarch64_be => {
4817 bindings.LLVMInitializeAArch64Target();4824 bindings.LLVMInitializeAArch64Target();
src/link/Lld.zig+1-1
...@@ -341,7 +341,7 @@ fn linkAsArchive(lld: *Lld, arena: Allocator) link.Error!void {...@@ -341,7 +341,7 @@ fn linkAsArchive(lld: *Lld, arena: Allocator) link.Error!void {
341 const llvm_bindings = @import("../codegen/llvm/bindings.zig");341 const llvm_bindings = @import("../codegen/llvm/bindings.zig");
342 const llvm = @import("../codegen/llvm.zig");342 const llvm = @import("../codegen/llvm.zig");
343 const target = &comp.root_mod.resolved_target.result;343 const target = &comp.root_mod.resolved_target.result;
344 llvm.initializeLLVMTarget(target.cpu.arch);344 llvm.initializeLLVMTarget(comp.io, target.cpu.arch);
345 var err_file_index: usize = undefined;345 var err_file_index: usize = undefined;
346 var err_msg: [*:0]u8 = undefined;346 var err_msg: [*:0]u8 = undefined;
347 if (llvm_bindings.WriteArchive(347 if (llvm_bindings.WriteArchive(