Skip to content

Commit f22da2d

Browse files
authored
Merge pull request #193 from taiki-e/newpm
Update for new LLVM pass manager
2 parents 2913404 + eb50593 commit f22da2d

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

src/bin/cargo-afl.rs

+23-3
Original file line numberDiff line numberDiff line change
@@ -295,16 +295,33 @@ where
295295

296296
// add some flags to sanitizers to make them work with Rust code
297297
let asan_options = env::var("ASAN_OPTIONS").unwrap_or_default();
298-
let asan_options = format!("detect_odr_violation=0:abort_on_error=1:symbolize=0:{}", asan_options);
298+
let asan_options = format!(
299+
"detect_odr_violation=0:abort_on_error=1:symbolize=0:{}",
300+
asan_options
301+
);
299302

300303
let tsan_options = env::var("TSAN_OPTIONS").unwrap_or_default();
301304
let tsan_options = format!("report_signal_unsafe=0:{}", tsan_options);
302305

306+
let version_meta = rustc_version::version_meta().unwrap();
307+
let passes = if version_meta.semver.minor >= 57
308+
&& version_meta.llvm_version.map_or(true, |v| v.major >= 13)
309+
{
310+
// New LLVM pass manager is enabled when Rust 1.57+ and LLVM 13+
311+
// https://github.com/rust-lang/rust/pull/88243
312+
"sancov-module"
313+
} else {
314+
"sancov"
315+
};
316+
317+
// `-C codegen-units=1` is needed to work around link errors
318+
// https://github.com/rust-fuzz/afl.rs/pull/193#issuecomment-933550430
303319
let mut rustflags = format!(
304320
"--cfg fuzzing \
305321
-C debug-assertions \
306322
-C overflow_checks \
307-
-C passes=sancov \
323+
-C passes={} \
324+
-C codegen-units=1 \
308325
-C llvm-args=-sanitizer-coverage-level=3 \
309326
-C llvm-args=-sanitizer-coverage-trace-pc-guard \
310327
-C llvm-args=-sanitizer-coverage-prune-blocks=0 \
@@ -313,6 +330,7 @@ where
313330
-C debuginfo=0 \
314331
-l afl-llvm-rt \
315332
-L {} ",
333+
passes,
316334
common::afl_llvm_rt_dir().display()
317335
);
318336

@@ -323,14 +341,16 @@ where
323341
"--cfg fuzzing \
324342
-C debug-assertions \
325343
-C overflow_checks \
326-
-C passes=sancov \
344+
-C passes={} \
345+
-C codegen-units=1 \
327346
-C llvm-args=-sanitizer-coverage-level=3 \
328347
-C llvm-args=-sanitizer-coverage-trace-pc-guard \
329348
-C llvm-args=-sanitizer-coverage-prune-blocks=0 \
330349
-C opt-level=3 \
331350
-C target-cpu=native \
332351
-C debuginfo=0 \
333352
-L {} ",
353+
passes,
334354
common::afl_llvm_rt_dir().display()
335355
);
336356

0 commit comments

Comments
 (0)