From e2fdb84df7c967e840a576fab86affab1e63d9fd Mon Sep 17 00:00:00 2001 From: Gary Guo Date: Mon, 18 Apr 2022 02:58:33 +0100 Subject: Conditionally export msan symbols only if they are defined * `__msan_keep_going` is defined when `-Zsanitizer-recover=memory`. * `__msan_track_origins` is defined when `-Zsanitizer-memory-track-origins`. --- compiler/rustc_codegen_ssa/src/back/symbol_export.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'compiler/rustc_codegen_ssa/src/back') diff --git a/compiler/rustc_codegen_ssa/src/back/symbol_export.rs b/compiler/rustc_codegen_ssa/src/back/symbol_export.rs index 56159cc2e08..2fa6778cca4 100644 --- a/compiler/rustc_codegen_ssa/src/back/symbol_export.rs +++ b/compiler/rustc_codegen_ssa/src/back/symbol_export.rs @@ -241,10 +241,18 @@ fn exported_symbols_provider_local<'tcx>( } if tcx.sess.opts.debugging_opts.sanitizer.contains(SanitizerSet::MEMORY) { + let mut msan_weak_symbols = Vec::new(); + // Similar to profiling, preserve weak msan symbol during LTO. - const MSAN_WEAK_SYMBOLS: [&str; 2] = ["__msan_track_origins", "__msan_keep_going"]; + if tcx.sess.opts.debugging_opts.sanitizer_recover.contains(SanitizerSet::MEMORY) { + msan_weak_symbols.push("__msan_keep_going"); + } + + if tcx.sess.opts.debugging_opts.sanitizer_memory_track_origins != 0 { + msan_weak_symbols.push("__msan_track_origins"); + } - symbols.extend(MSAN_WEAK_SYMBOLS.iter().map(|sym| { + symbols.extend(msan_weak_symbols.into_iter().map(|sym| { let exported_symbol = ExportedSymbol::NoDefId(SymbolName::new(tcx, sym)); ( exported_symbol, -- cgit 1.4.1-3-g733a5