zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 105b91d30f732d127a7f23a1a1d4a2c794c05d3d (tree)
parent bde8c4a46ac924504ef851c733947cb6364d8add
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Sun, 21 Jul 2024 23:53:29 -0700

ZigLLVMTargetMachineEmitToFile: make sancov enable the options

Diffstat:
Msrc/zig_llvm.cpp | 67+++++++++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 41 insertions(+), 26 deletions(-)

diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp @@ -189,6 +189,27 @@ struct TimeTracerRAII { }; } // end anonymous namespace +static SanitizerCoverageOptions getSanCovOptions(void) { + SanitizerCoverageOptions o; + o.CoverageType = SanitizerCoverageOptions::SCK_Edge; + o.IndirectCalls = true; + o.TraceBB = false; + o.TraceCmp = true; + o.TraceDiv = false; + o.TraceGep = false; + o.Use8bitCounters = false; + o.TracePC = false; + o.TracePCGuard = false; + o.Inline8bitCounters = true; + o.InlineBoolFlag = false; + o.PCTable = true; + o.NoPrune = false; + o.StackDepth = true; + o.TraceLoads = false; + o.TraceStores = false; + o.CollectControlFlow = false; + return o; +} bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef module_ref, char **error_message, bool is_debug, @@ -279,36 +300,23 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM pass_builder.registerCGSCCAnalyses(cgscc_am); pass_builder.registerFunctionAnalyses(function_am); pass_builder.registerLoopAnalyses(loop_am); - pass_builder.crossRegisterProxies(loop_am, function_am, - cgscc_am, module_am); - - // IR verification - if (assertions_on) { - // Verify the input - pass_builder.registerPipelineStartEPCallback( - [](ModulePassManager &module_pm, OptimizationLevel OL) { - module_pm.addPass(VerifierPass()); - }); - // Verify the output - pass_builder.registerOptimizerLastEPCallback( - [](ModulePassManager &module_pm, OptimizationLevel OL) { - module_pm.addPass(VerifierPass()); - }); - } + pass_builder.crossRegisterProxies(loop_am, function_am, cgscc_am, module_am); - // Passes specific for release build - if (!is_debug) { - pass_builder.registerPipelineStartEPCallback( - [](ModulePassManager &module_pm, OptimizationLevel OL) { - module_pm.addPass( - createModuleToFunctionPassAdaptor(AddDiscriminatorsPass())); - }); - } + pass_builder.registerPipelineStartEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) { + // Verify the input + if (assertions_on) { + module_pm.addPass(VerifierPass()); + } - pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) { + if (!is_debug) { + module_pm.addPass(createModuleToFunctionPassAdaptor(AddDiscriminatorsPass())); + } + }); + + pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) { // Code coverage instrumentation. if (sancov) { - module_pm.addPass(SanitizerCoveragePass()); + module_pm.addPass(SanitizerCoveragePass(getSanCovOptions())); } // Thread sanitizer @@ -318,6 +326,13 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM } }); + pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) { + // Verify the output + if (assertions_on) { + module_pm.addPass(VerifierPass()); + } + }); + ModulePassManager module_pm; OptimizationLevel opt_level; // Setting up the optimization level