From 6e78642d5158bdf6240c446fee5775c2888ad82e Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Wed, 26 Jun 2024 07:38:36 +0200 Subject: [PATCH 1/3] macho: link in TSAN if requested --- src/link/MachO.zig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 9cec01c437..5ec5cd764c 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -411,6 +411,11 @@ pub fn flushModule(self: *MachO, arena: Allocator, prog_node: std.Progress.Node) if (module_obj_path) |path| try positionals.append(.{ .path = path }); + // TSAN + if (comp.config.any_sanitize_thread) { + try positionals.append(.{ .path = comp.tsan_static_lib.?.full_object_path }); + } + for (positionals.items) |obj| { self.parsePositional(obj.path, obj.must_link) catch |err| switch (err) { error.MalformedObject, From e9309036b28d402afd5f9f77d2d32e7d7b902b9f Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Wed, 26 Jun 2024 08:43:46 +0200 Subject: [PATCH 2/3] macho: print libtsan ref when dumping argv --- src/link/MachO.zig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 5ec5cd764c..75b2ab4d74 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -830,6 +830,10 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void { try argv.append(p); } + if (comp.config.any_sanitize_thread) { + try argv.append(comp.tsan_static_lib.?.full_object_path); + } + for (self.lib_dirs) |lib_dir| { const arg = try std.fmt.allocPrint(arena, "-L{s}", .{lib_dir}); try argv.append(arg); From 766e281a72bb915ebee21cafd862d6b7a2a298ca Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Wed, 26 Jun 2024 22:01:00 +0200 Subject: [PATCH 3/3] macho: set allow_shlib_undefined to true when TSAN was requested --- src/link/MachO.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 75b2ab4d74..dd185fcaec 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -192,7 +192,7 @@ pub fn createEmpty( null else try std.fmt.allocPrint(arena, "{s}.o", .{emit.sub_path}); - const allow_shlib_undefined = options.allow_shlib_undefined orelse false; + const allow_shlib_undefined = options.allow_shlib_undefined orelse comp.config.any_sanitize_thread; const self = try arena.create(MachO); self.* = .{