diff options
| author | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2020-07-25 00:00:00 +0000 |
|---|---|---|
| committer | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2020-08-13 09:45:55 +0200 |
| commit | 4fbbc81e5fca7f012daf6059d85f2f3d2ca7087b (patch) | |
| tree | 294f430a3ee514a4e94cd2f107386a251900fa5e | |
| parent | 814bc4fe9364865bfaa94d7825b8eabc11245c7c (diff) | |
| download | rust-4fbbc81e5fca7f012daf6059d85f2f3d2ca7087b.tar.gz rust-4fbbc81e5fca7f012daf6059d85f2f3d2ca7087b.zip | |
Link sanitizers when creating dynamic libraries on macOS
4 files changed, 14 insertions, 4 deletions
diff --git a/src/librustc_codegen_ssa/back/link.rs b/src/librustc_codegen_ssa/back/link.rs index d725a60118e..5de7ffbcfcb 100644 --- a/src/librustc_codegen_ssa/back/link.rs +++ b/src/librustc_codegen_ssa/back/link.rs @@ -769,9 +769,22 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>( } fn link_sanitizers(sess: &Session, crate_type: CrateType, linker: &mut dyn Linker) { - if crate_type != CrateType::Executable { + // On macOS the runtimes are distributed as dylibs which should be linked to + // both executables and dynamic shared objects. Everywhere else the runtimes + // are currently distributed as static liraries which should be linked to + // executables only. + let needs_runtime = match crate_type { + CrateType::Executable => true, + CrateType::Dylib | CrateType::Cdylib | CrateType::ProcMacro => { + sess.target.target.options.is_like_osx + } + CrateType::Rlib | CrateType::Staticlib => false, + }; + + if !needs_runtime { return; } + let sanitizer = sess.opts.debugging_opts.sanitizer; if sanitizer.contains(SanitizerSet::ADDRESS) { link_sanitizer_runtime(sess, linker, "asan"); diff --git a/src/test/run-make-fulldeps/sanitizer-cdylib-link/Makefile b/src/test/run-make-fulldeps/sanitizer-cdylib-link/Makefile index b11d4c4cab7..e72fe5a5091 100644 --- a/src/test/run-make-fulldeps/sanitizer-cdylib-link/Makefile +++ b/src/test/run-make-fulldeps/sanitizer-cdylib-link/Makefile @@ -1,6 +1,5 @@ # needs-sanitizer-support # needs-sanitizer-address -# only-linux -include ../tools.mk diff --git a/src/test/run-make-fulldeps/sanitizer-dylib-link/Makefile b/src/test/run-make-fulldeps/sanitizer-dylib-link/Makefile index c2ebd2a6d8c..b9a3f829555 100644 --- a/src/test/run-make-fulldeps/sanitizer-dylib-link/Makefile +++ b/src/test/run-make-fulldeps/sanitizer-dylib-link/Makefile @@ -1,6 +1,5 @@ # needs-sanitizer-support # needs-sanitizer-address -# only-linux -include ../tools.mk diff --git a/src/test/run-make-fulldeps/sanitizer-staticlib-link/Makefile b/src/test/run-make-fulldeps/sanitizer-staticlib-link/Makefile index 5ceff16471c..4894f65b114 100644 --- a/src/test/run-make-fulldeps/sanitizer-staticlib-link/Makefile +++ b/src/test/run-make-fulldeps/sanitizer-staticlib-link/Makefile @@ -1,6 +1,5 @@ # needs-sanitizer-support # needs-sanitizer-address -# only-linux -include ../tools.mk |
