authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-06-04 05:44:13+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-06-04 13:25:21+02:00
logbc8ace2a6d0304887add4b6b6688d87aea34cf26
treee9ab1f00c7d2a21c5227eaa320ca62abe6953d30
parent3b2bef8a95190cb93f8edb6425dddbf845c3ad79

compiler-rt: Issue VALGRIND_DISCARD_TRANSLATIONS request in __clear_cache().

Closes #24030.

2 files changed, 78 insertions(+), 15 deletions(-)

lib/compiler_rt/clear_cache.zig+2
...@@ -173,6 +173,8 @@ fn clear_cache(start: usize, end: usize) callconv(.c) void {...@@ -173,6 +173,8 @@ fn clear_cache(start: usize, end: usize) callconv(.c) void {
173 );173 );
174 exportIt();174 exportIt();
175 }175 }
176
177 std.valgrind.discardTranslations(@as([*]u8, @ptrFromInt(start))[0 .. end - start]);
176}178}
177179
178fn exportIt() void {180fn exportIt() void {
src/Compilation.zig+76-15
...@@ -4206,23 +4206,78 @@ fn performAllTheWorkInner(...@@ -4206,23 +4206,78 @@ fn performAllTheWorkInner(
4206 // compiler-rt due to LLD bugs as well, e.g.:4206 // compiler-rt due to LLD bugs as well, e.g.:
4207 //4207 //
4208 // https://github.com/llvm/llvm-project/issues/43698#issuecomment-25426606114208 // https://github.com/llvm/llvm-project/issues/43698#issuecomment-2542660611
4209 comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "compiler_rt.zig", "compiler_rt", .compiler_rt, .Lib, false, &comp.compiler_rt_lib, main_progress_node });4209 comp.link_task_wait_group.spawnManager(buildRt, .{
4210 comp,
4211 "compiler_rt.zig",
4212 "compiler_rt",
4213 .Lib,
4214 .compiler_rt,
4215 main_progress_node,
4216 RtOptions{
4217 .checks_valgrind = true,
4218 .allow_lto = false,
4219 },
4220 &comp.compiler_rt_lib,
4221 });
4210 }4222 }
42114223
4212 if (comp.queued_jobs.compiler_rt_obj and comp.compiler_rt_obj == null) {4224 if (comp.queued_jobs.compiler_rt_obj and comp.compiler_rt_obj == null) {
4213 comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "compiler_rt.zig", "compiler_rt", .compiler_rt, .Obj, false, &comp.compiler_rt_obj, main_progress_node });4225 comp.link_task_wait_group.spawnManager(buildRt, .{
4226 comp,
4227 "compiler_rt.zig",
4228 "compiler_rt",
4229 .Obj,
4230 .compiler_rt,
4231 main_progress_node,
4232 RtOptions{
4233 .checks_valgrind = true,
4234 .allow_lto = false,
4235 },
4236 &comp.compiler_rt_obj,
4237 });
4214 }4238 }
42154239
4216 if (comp.queued_jobs.fuzzer_lib and comp.fuzzer_lib == null) {4240 if (comp.queued_jobs.fuzzer_lib and comp.fuzzer_lib == null) {
4217 comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "fuzzer.zig", "fuzzer", .libfuzzer, .Lib, true, &comp.fuzzer_lib, main_progress_node });4241 comp.link_task_wait_group.spawnManager(buildRt, .{
4242 comp,
4243 "fuzzer.zig",
4244 "fuzzer",
4245 .Lib,
4246 .libfuzzer,
4247 main_progress_node,
4248 RtOptions{},
4249 &comp.fuzzer_lib,
4250 });
4218 }4251 }
42194252
4220 if (comp.queued_jobs.ubsan_rt_lib and comp.ubsan_rt_lib == null) {4253 if (comp.queued_jobs.ubsan_rt_lib and comp.ubsan_rt_lib == null) {
4221 comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "ubsan_rt.zig", "ubsan_rt", .libubsan, .Lib, false, &comp.ubsan_rt_lib, main_progress_node });4254 comp.link_task_wait_group.spawnManager(buildRt, .{
4255 comp,
4256 "ubsan_rt.zig",
4257 "ubsan_rt",
4258 .Lib,
4259 .libubsan,
4260 main_progress_node,
4261 RtOptions{
4262 .allow_lto = false,
4263 },
4264 &comp.ubsan_rt_lib,
4265 });
4222 }4266 }
42234267
4224 if (comp.queued_jobs.ubsan_rt_obj and comp.ubsan_rt_obj == null) {4268 if (comp.queued_jobs.ubsan_rt_obj and comp.ubsan_rt_obj == null) {
4225 comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "ubsan_rt.zig", "ubsan_rt", .libubsan, .Obj, false, &comp.ubsan_rt_obj, main_progress_node });4269 comp.link_task_wait_group.spawnManager(buildRt, .{
4270 comp,
4271 "ubsan_rt.zig",
4272 "ubsan_rt",
4273 .Obj,
4274 .libubsan,
4275 main_progress_node,
4276 RtOptions{
4277 .allow_lto = false,
4278 },
4279 &comp.ubsan_rt_obj,
4280 });
4226 }4281 }
42274282
4228 if (comp.queued_jobs.glibc_shared_objects) {4283 if (comp.queued_jobs.glibc_shared_objects) {
...@@ -5201,24 +5256,29 @@ fn workerUpdateWin32Resource(...@@ -5201,24 +5256,29 @@ fn workerUpdateWin32Resource(
5201 };5256 };
5202}5257}
52035258
5259pub const RtOptions = struct {
5260 checks_valgrind: bool = false,
5261 allow_lto: bool = true,
5262};
5263
5204fn buildRt(5264fn buildRt(
5205 comp: *Compilation,5265 comp: *Compilation,
5206 root_source_name: []const u8,5266 root_source_name: []const u8,
5207 root_name: []const u8,5267 root_name: []const u8,
5208 misc_task: MiscTask,
5209 output_mode: std.builtin.OutputMode,5268 output_mode: std.builtin.OutputMode,
5210 allow_lto: bool,5269 misc_task: MiscTask,
5211 out: *?CrtFile,
5212 prog_node: std.Progress.Node,5270 prog_node: std.Progress.Node,
5271 options: RtOptions,
5272 out: *?CrtFile,
5213) void {5273) void {
5214 comp.buildOutputFromZig(5274 comp.buildOutputFromZig(
5215 root_source_name,5275 root_source_name,
5216 root_name,5276 root_name,
5217 output_mode,5277 output_mode,
5218 allow_lto,
5219 out,
5220 misc_task,5278 misc_task,
5221 prog_node,5279 prog_node,
5280 options,
5281 out,
5222 ) catch |err| switch (err) {5282 ) catch |err| switch (err) {
5223 error.SubCompilationFailed => return, // error reported already5283 error.SubCompilationFailed => return, // error reported already
5224 else => comp.lockAndSetMiscFailure(misc_task, "unable to build {s}: {s}", .{5284 else => comp.lockAndSetMiscFailure(misc_task, "unable to build {s}: {s}", .{
...@@ -5370,10 +5430,10 @@ fn buildLibZigC(comp: *Compilation, prog_node: std.Progress.Node) void {...@@ -5370,10 +5430,10 @@ fn buildLibZigC(comp: *Compilation, prog_node: std.Progress.Node) void {
5370 "c.zig",5430 "c.zig",
5371 "zigc",5431 "zigc",
5372 .Lib,5432 .Lib,
5373 true,
5374 &comp.zigc_static_lib,
5375 .libzigc,5433 .libzigc,
5376 prog_node,5434 prog_node,
5435 .{},
5436 &comp.zigc_static_lib,
5377 ) catch |err| switch (err) {5437 ) catch |err| switch (err) {
5378 error.SubCompilationFailed => return, // error reported already5438 error.SubCompilationFailed => return, // error reported already
5379 else => comp.lockAndSetMiscFailure(.libzigc, "unable to build libzigc: {s}", .{@errorName(err)}),5439 else => comp.lockAndSetMiscFailure(.libzigc, "unable to build libzigc: {s}", .{@errorName(err)}),
...@@ -7044,10 +7104,10 @@ fn buildOutputFromZig(...@@ -7044,10 +7104,10 @@ fn buildOutputFromZig(
7044 src_basename: []const u8,7104 src_basename: []const u8,
7045 root_name: []const u8,7105 root_name: []const u8,
7046 output_mode: std.builtin.OutputMode,7106 output_mode: std.builtin.OutputMode,
7047 allow_lto: bool,
7048 out: *?CrtFile,
7049 misc_task_tag: MiscTask,7107 misc_task_tag: MiscTask,
7050 prog_node: std.Progress.Node,7108 prog_node: std.Progress.Node,
7109 options: RtOptions,
7110 out: *?CrtFile,
7051) !void {7111) !void {
7052 const tracy_trace = trace(@src());7112 const tracy_trace = trace(@src());
7053 defer tracy_trace.end();7113 defer tracy_trace.end();
...@@ -7075,7 +7135,7 @@ fn buildOutputFromZig(...@@ -7075,7 +7135,7 @@ fn buildOutputFromZig(
7075 .any_unwind_tables = comp.root_mod.unwind_tables != .none,7135 .any_unwind_tables = comp.root_mod.unwind_tables != .none,
7076 .any_error_tracing = false,7136 .any_error_tracing = false,
7077 .root_error_tracing = false,7137 .root_error_tracing = false,
7078 .lto = if (allow_lto) comp.config.lto else .none,7138 .lto = if (options.allow_lto) comp.config.lto else .none,
7079 });7139 });
70807140
7081 const root_mod = try Package.Module.create(arena, .{7141 const root_mod = try Package.Module.create(arena, .{
...@@ -7098,6 +7158,7 @@ fn buildOutputFromZig(...@@ -7098,6 +7158,7 @@ fn buildOutputFromZig(
7098 .no_builtin = true,7158 .no_builtin = true,
7099 .code_model = comp.root_mod.code_model,7159 .code_model = comp.root_mod.code_model,
7100 .error_tracing = false,7160 .error_tracing = false,
7161 .valgrind = if (options.checks_valgrind) comp.root_mod.valgrind else null,
7101 },7162 },
7102 .global = config,7163 .global = config,
7103 .cc_argv = &.{},7164 .cc_argv = &.{},