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
signature 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...@@ -93,11 +93,12 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
93 .sanitize_c = false,93 .sanitize_c = false,
94 .sanitize_thread = false,94 .sanitize_thread = false,
95 .red_zone = comp.root_mod.red_zone,95 .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(),
97 .valgrind = false,97 .valgrind = false,
98 .optimize_mode = optimize_mode,98 .optimize_mode = optimize_mode,
99 .structured_cfg = comp.root_mod.structured_cfg,99 .structured_cfg = comp.root_mod.structured_cfg,
100 .pic = true,100 .pic = true,
101 .no_builtin = true,
101 },102 },
102 .global = config,103 .global = config,
103 .cc_argv = &common_flags,104 .cc_argv = &common_flags,
...@@ -123,10 +124,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo...@@ -123,10 +124,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
123 try cflags.append("-I");124 try cflags.append("-I");
124 try cflags.append(tsan_include_path);125 try cflags.append(tsan_include_path);
125126
126 try cflags.append("-nostdinc++");127 try addCcArgs(target, &cflags);
127 try cflags.append("-fvisibility-inlines-hidden");
128 try cflags.append("-std=c++17");
129 try cflags.append("-fno-rtti");
130128
131 c_source_files.appendAssumeCapacity(.{129 c_source_files.appendAssumeCapacity(.{
132 .src_path = try comp.zig_lib_directory.join(arena, &.{ "tsan", tsan_src }),130 .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...@@ -147,10 +145,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
147 try cflags.append("-I");145 try cflags.append("-I");
148 try cflags.append(tsan_include_path);146 try cflags.append(tsan_include_path);
149147
150 try cflags.append("-nostdinc++");148 try addCcArgs(target, &cflags);
151 try cflags.append("-fvisibility-inlines-hidden");
152 try cflags.append("-std=c++17");
153 try cflags.append("-fno-rtti");
154149
155 c_source_files.appendAssumeCapacity(.{150 c_source_files.appendAssumeCapacity(.{
156 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ "tsan", tsan_src }),151 .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...@@ -195,10 +190,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
195 try cflags.append("-I");190 try cflags.append("-I");
196 try cflags.append(tsan_include_path);191 try cflags.append(tsan_include_path);
197192
198 try cflags.append("-nostdinc++");193 try addCcArgs(target, &cflags);
199 try cflags.append("-fvisibility-inlines-hidden");
200 try cflags.append("-std=c++17");
201 try cflags.append("-fno-rtti");
202194
203 c_source_files.appendAssumeCapacity(.{195 c_source_files.appendAssumeCapacity(.{
204 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{196 .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...@@ -222,10 +214,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
222 try cflags.append("-I");214 try cflags.append("-I");
223 try cflags.append(tsan_include_path);215 try cflags.append(tsan_include_path);
224216
225 try cflags.append("-nostdinc++");217 try addCcArgs(target, &cflags);
226 try cflags.append("-fvisibility-inlines-hidden");
227 try cflags.append("-std=c++17");
228 try cflags.append("-fno-rtti");
229218
230 c_source_files.appendAssumeCapacity(.{219 c_source_files.appendAssumeCapacity(.{
231 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{220 .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...@@ -243,10 +232,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
243 try cflags.append("-I");232 try cflags.append("-I");
244 try cflags.append(tsan_include_path);233 try cflags.append(tsan_include_path);
245234
246 try cflags.append("-nostdinc++");235 try addCcArgs(target, &cflags);
247 try cflags.append("-fvisibility-inlines-hidden");
248 try cflags.append("-std=c++17");
249 try cflags.append("-fno-rtti");
250236
251 c_source_files.appendAssumeCapacity(.{237 c_source_files.appendAssumeCapacity(.{
252 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{238 .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...@@ -272,10 +258,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
272 try cflags.append("-I");258 try cflags.append("-I");
273 try cflags.append(tsan_include_path);259 try cflags.append(tsan_include_path);
274260
275 try cflags.append("-nostdinc++");261 try addCcArgs(target, &cflags);
276 try cflags.append("-fvisibility-inlines-hidden");
277 try cflags.append("-std=c++17");
278 try cflags.append("-fno-rtti");
279262
280 c_source_files.appendAssumeCapacity(.{263 c_source_files.appendAssumeCapacity(.{
281 .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{264 .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...@@ -348,6 +331,25 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
348 comp.tsan_lib = crt_file;331 comp.tsan_lib = crt_file;
349}332}
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
351const tsan_sources = [_][]const u8{353const tsan_sources = [_][]const u8{
352 "tsan_debugging.cpp",354 "tsan_debugging.cpp",
353 "tsan_external.cpp",355 "tsan_external.cpp",