@@ -295,16 +295,33 @@ where
295
295
296
296
// add some flags to sanitizers to make them work with Rust code
297
297
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
+ ) ;
299
302
300
303
let tsan_options = env:: var ( "TSAN_OPTIONS" ) . unwrap_or_default ( ) ;
301
304
let tsan_options = format ! ( "report_signal_unsafe=0:{}" , tsan_options) ;
302
305
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
303
319
let mut rustflags = format ! (
304
320
"--cfg fuzzing \
305
321
-C debug-assertions \
306
322
-C overflow_checks \
307
- -C passes=sancov \
323
+ -C passes={} \
324
+ -C codegen-units=1 \
308
325
-C llvm-args=-sanitizer-coverage-level=3 \
309
326
-C llvm-args=-sanitizer-coverage-trace-pc-guard \
310
327
-C llvm-args=-sanitizer-coverage-prune-blocks=0 \
@@ -313,6 +330,7 @@ where
313
330
-C debuginfo=0 \
314
331
-l afl-llvm-rt \
315
332
-L {} ",
333
+ passes,
316
334
common:: afl_llvm_rt_dir( ) . display( )
317
335
) ;
318
336
@@ -323,14 +341,16 @@ where
323
341
"--cfg fuzzing \
324
342
-C debug-assertions \
325
343
-C overflow_checks \
326
- -C passes=sancov \
344
+ -C passes={} \
345
+ -C codegen-units=1 \
327
346
-C llvm-args=-sanitizer-coverage-level=3 \
328
347
-C llvm-args=-sanitizer-coverage-trace-pc-guard \
329
348
-C llvm-args=-sanitizer-coverage-prune-blocks=0 \
330
349
-C opt-level=3 \
331
350
-C target-cpu=native \
332
351
-C debuginfo=0 \
333
352
-L {} ",
353
+ passes,
334
354
common:: afl_llvm_rt_dir( ) . display( )
335
355
) ;
336
356
0 commit comments