From 4210409f443a40c72876e5e8398e8652a47a2ba6 Mon Sep 17 00:00:00 2001 From: Aaron Green Date: Wed, 15 Jan 2020 15:48:53 -0800 Subject: [PATCH 1/2] Enable ASan on Fuchsia This change adds the x86_64-fuchsia and aarch64-fuchsia LLVM targets to those allowed to invoke -Zsanitizer. Currently, the only overlap between compiler_rt sanitizers supported by both rustc and Fuchsia is ASan. --- src/bootstrap/native.rs | 18 ++++++++++++++++++ src/librustc_codegen_ssa/back/link.rs | 2 +- src/librustc_session/session.rs | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index 89e1a7319cf59..5bbd9f47fc907 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -659,6 +659,24 @@ fn supported_sanitizers(out_dir: &Path, target: Interned) -> Vec { + for s in &["asan"] { + result.push(SanitizerRuntime { + cmake_target: format!("clang_rt.{}-x86_64", s), + path: out_dir.join(&format!("build/lib/fuchsia/libclang_rt.{}-x86_64.a", s)), + name: format!("librustc_rt.{}.a", s), + }); + } + } + "aarch64-fuchsia" => { + for s in &["asan"] { + result.push(SanitizerRuntime { + cmake_target: format!("clang_rt.{}-aarch64", s), + path: out_dir.join(&format!("build/lib/fuchsia/libclang_rt.{}-aarch64.a", s)), + name: format!("librustc_rt.{}.a", s), + }); + } + } _ => {} } result diff --git a/src/librustc_codegen_ssa/back/link.rs b/src/librustc_codegen_ssa/back/link.rs index 53ee5996432ce..f56a4170c0a4b 100644 --- a/src/librustc_codegen_ssa/back/link.rs +++ b/src/librustc_codegen_ssa/back/link.rs @@ -777,7 +777,7 @@ fn link_sanitizer_runtime(sess: &Session, crate_type: config::CrateType, linker: linker.args(&["-Wl,-rpath".into(), "-Xlinker".into(), rpath.into()]); linker.link_dylib(Symbol::intern(&libname)); } - "x86_64-unknown-linux-gnu" => { + "x86_64-unknown-linux-gnu" | "x86_64-fuchsia" | "aarch64-fuchsia" => { let filename = format!("librustc_rt.{}.a", name); let path = default_tlib.join(&filename); linker.link_whole_rlib(&path); diff --git a/src/librustc_session/session.rs b/src/librustc_session/session.rs index d979247b46d3a..527d85f69658c 100644 --- a/src/librustc_session/session.rs +++ b/src/librustc_session/session.rs @@ -1128,7 +1128,7 @@ fn validate_commandline_args_with_session_available(sess: &Session) { // Sanitizers can only be used on some tested platforms. if let Some(ref sanitizer) = sess.opts.debugging_opts.sanitizer { const ASAN_SUPPORTED_TARGETS: &[&str] = - &["x86_64-unknown-linux-gnu", "x86_64-apple-darwin"]; + &["x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-fuchsia", "aarch64-fuchsia" ]; const TSAN_SUPPORTED_TARGETS: &[&str] = &["x86_64-unknown-linux-gnu", "x86_64-apple-darwin"]; const LSAN_SUPPORTED_TARGETS: &[&str] = From 192650a9aac7a2e006afbbafb83088eaf0d9d820 Mon Sep 17 00:00:00 2001 From: Aaron Green Date: Wed, 22 Jan 2020 15:34:39 -0800 Subject: [PATCH 2/2] Fix tidy warnings --- src/librustc_session/session.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/librustc_session/session.rs b/src/librustc_session/session.rs index 527d85f69658c..a40d6451b958c 100644 --- a/src/librustc_session/session.rs +++ b/src/librustc_session/session.rs @@ -1127,8 +1127,12 @@ fn validate_commandline_args_with_session_available(sess: &Session) { // Sanitizers can only be used on some tested platforms. if let Some(ref sanitizer) = sess.opts.debugging_opts.sanitizer { - const ASAN_SUPPORTED_TARGETS: &[&str] = - &["x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-fuchsia", "aarch64-fuchsia" ]; + const ASAN_SUPPORTED_TARGETS: &[&str] = &[ + "x86_64-unknown-linux-gnu", + "x86_64-apple-darwin", + "x86_64-fuchsia", + "aarch64-fuchsia", + ]; const TSAN_SUPPORTED_TARGETS: &[&str] = &["x86_64-unknown-linux-gnu", "x86_64-apple-darwin"]; const LSAN_SUPPORTED_TARGETS: &[&str] =