Skip to content

Commit

Permalink
Create sanitizer passes in a separate function
Browse files Browse the repository at this point in the history
  • Loading branch information
tmiasko committed Nov 19, 2019
1 parent 5024d14 commit 3b45626
Showing 1 changed file with 26 additions and 20 deletions.
46 changes: 26 additions & 20 deletions src/librustc_codegen_llvm/back/write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -363,26 +363,7 @@ pub(crate) unsafe fn optimize(cgcx: &CodegenContext<LlvmCodegenBackend>,
}
}

if let Some(sanitizer) = &config.sanitizer {
let recover = config.sanitizer_recover.contains(sanitizer);
match sanitizer {
Sanitizer::Address => {
extra_passes.push(llvm::LLVMRustCreateAddressSanitizerFunctionPass(
recover));
extra_passes.push(llvm::LLVMRustCreateModuleAddressSanitizerPass(
recover));
}
Sanitizer::Memory => {
let track_origins = config.sanitizer_memory_track_origins as c_int;
extra_passes.push(llvm::LLVMRustCreateMemorySanitizerPass(
track_origins, recover));
}
Sanitizer::Thread => {
extra_passes.push(llvm::LLVMRustCreateThreadSanitizerPass());
}
_ => {}
}
}
add_sanitizer_passes(config, &mut extra_passes);

for pass_name in &cgcx.plugin_passes {
if let Some(pass) = find_pass(pass_name) {
Expand Down Expand Up @@ -469,6 +450,31 @@ pub(crate) unsafe fn optimize(cgcx: &CodegenContext<LlvmCodegenBackend>,
Ok(())
}

unsafe fn add_sanitizer_passes(config: &ModuleConfig,
passes: &mut Vec<&'static mut llvm::Pass>) {

let sanitizer = match &config.sanitizer {
None => return,
Some(s) => s,
};

let recover = config.sanitizer_recover.contains(sanitizer);
match sanitizer {
Sanitizer::Address => {
passes.push(llvm::LLVMRustCreateAddressSanitizerFunctionPass(recover));
passes.push(llvm::LLVMRustCreateModuleAddressSanitizerPass(recover));
}
Sanitizer::Memory => {
let track_origins = config.sanitizer_memory_track_origins as c_int;
passes.push(llvm::LLVMRustCreateMemorySanitizerPass(track_origins, recover));
}
Sanitizer::Thread => {
passes.push(llvm::LLVMRustCreateThreadSanitizerPass());
}
Sanitizer::Leak => {}
}
}

pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
diag_handler: &Handler,
module: ModuleCodegen<ModuleLlvm>,
Expand Down

0 comments on commit 3b45626

Please sign in to comment.