authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-11-05 14:20:55+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-11-05 22:41:09+01:00
log0563525b214f776c9ae43d4b2c97da45bdc513d6
treeb42c0b882e75cf736b960115948b3ff03b8d6d63
parentbdca2d0f485682f78ea155df9f9f1cbb5f461ed8
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

tsan: Synchronize CFLAGS with upstream.

In particular: * -fms-extensions for MinGW * -fno-builtin * -fno-emulated-tls for Android 29+ * -fno-exceptions * -fomit-frame-pointer * -fvisibility=hidden

1 files changed, 27 insertions(+), 25 deletions(-)

src/libtsan.zig+27-25
......@@ -93,11 +93,12 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
9393 .sanitize_c = false,
9494 .sanitize_thread = false,
9595 .red_zone = comp.root_mod.red_zone,
96 .omit_frame_pointer = comp.root_mod.omit_frame_pointer,
96 .omit_frame_pointer = optimize_mode != .Debug and !target.os.tag.isDarwin(),
9797 .valgrind = false,
9898 .optimize_mode = optimize_mode,
9999 .structured_cfg = comp.root_mod.structured_cfg,
100100 .pic = true,
101 .no_builtin = true,
101102 },
102103 .global = config,
103104 .cc_argv = &common_flags,
......@@ -123,10 +124,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
123124 try cflags.append("-I");
124125 try cflags.append(tsan_include_path);
125126
126 try cflags.append("-nostdinc++");
127 try cflags.append("-fvisibility-inlines-hidden");
128 try cflags.append("-std=c++17");
129 try cflags.append("-fno-rtti");
127 try addCcArgs(target, &cflags);
130128
131129 c_source_files.appendAssumeCapacity(.{
132130 .src_path = try comp.zig_lib_directory.join(arena, &.{ "tsan", tsan_src }),
......@@ -147,10 +145,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
147145 try cflags.append("-I");
148146 try cflags.append(tsan_include_path);
149147
150 try cflags.append("-nostdinc++");
151 try cflags.append("-fvisibility-inlines-hidden");
152 try cflags.append("-std=c++17");
153 try cflags.append("-fno-rtti");
148 try addCcArgs(target, &cflags);
154149
155150 c_source_files.appendAssumeCapacity(.{
156151 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ "tsan", tsan_src }),
......@@ -195,10 +190,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
195190 try cflags.append("-I");
196191 try cflags.append(tsan_include_path);
197192
198 try cflags.append("-nostdinc++");
199 try cflags.append("-fvisibility-inlines-hidden");
200 try cflags.append("-std=c++17");
201 try cflags.append("-fno-rtti");
193 try addCcArgs(target, &cflags);
202194
203195 c_source_files.appendAssumeCapacity(.{
204196 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{
......@@ -222,10 +214,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
222214 try cflags.append("-I");
223215 try cflags.append(tsan_include_path);
224216
225 try cflags.append("-nostdinc++");
226 try cflags.append("-fvisibility-inlines-hidden");
227 try cflags.append("-std=c++17");
228 try cflags.append("-fno-rtti");
217 try addCcArgs(target, &cflags);
229218
230219 c_source_files.appendAssumeCapacity(.{
231220 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{
......@@ -243,10 +232,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
243232 try cflags.append("-I");
244233 try cflags.append(tsan_include_path);
245234
246 try cflags.append("-nostdinc++");
247 try cflags.append("-fvisibility-inlines-hidden");
248 try cflags.append("-std=c++17");
249 try cflags.append("-fno-rtti");
235 try addCcArgs(target, &cflags);
250236
251237 c_source_files.appendAssumeCapacity(.{
252238 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{
......@@ -272,10 +258,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
272258 try cflags.append("-I");
273259 try cflags.append(tsan_include_path);
274260
275 try cflags.append("-nostdinc++");
276 try cflags.append("-fvisibility-inlines-hidden");
277 try cflags.append("-std=c++17");
278 try cflags.append("-fno-rtti");
261 try addCcArgs(target, &cflags);
279262
280263 c_source_files.appendAssumeCapacity(.{
281264 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{
......@@ -348,6 +331,25 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
348331 comp.tsan_lib = crt_file;
349332}
350333
334fn addCcArgs(target: std.Target, args: *std.ArrayList([]const u8)) error{OutOfMemory}!void {
335 try args.appendSlice(&[_][]const u8{
336 "-nostdinc++",
337 "-fvisibility=hidden",
338 "-fvisibility-inlines-hidden",
339 "-std=c++17",
340 "-fno-rtti",
341 "-fno-exceptions",
342 });
343
344 if (target.abi.isAndroid() and target.os.version_range.linux.android >= 29) {
345 try args.append("-fno-emulated-tls");
346 }
347
348 if (target.isMinGW()) {
349 try args.append("-fms-extensions");
350 }
351}
352
351353const tsan_sources = [_][]const u8{
352354 "tsan_debugging.cpp",
353355 "tsan_external.cpp",