@@ -885,9 +885,22 @@ fn link_sanitizers(sess: &Session, crate_type: CrateType, linker: &mut dyn Linke
885
885
}
886
886
887
887
fn link_sanitizer_runtime ( sess : & Session , linker : & mut dyn Linker , name : & str ) {
888
- let default_sysroot = filesearch:: get_or_default_sysroot ( ) ;
889
- let default_tlib =
890
- filesearch:: make_target_lib_path ( & default_sysroot, sess. opts . target_triple . triple ( ) ) ;
888
+ fn find_sanitizer_runtime ( sess : & Session , filename : & String ) -> PathBuf {
889
+ let session_tlib =
890
+ filesearch:: make_target_lib_path ( & sess. sysroot , sess. opts . target_triple . triple ( ) ) ;
891
+ let path = session_tlib. join ( & filename) ;
892
+ if path. exists ( ) {
893
+ return session_tlib;
894
+ } else {
895
+ let default_sysroot = filesearch:: get_or_default_sysroot ( ) ;
896
+ let default_tlib = filesearch:: make_target_lib_path (
897
+ & default_sysroot,
898
+ sess. opts . target_triple . triple ( ) ,
899
+ ) ;
900
+ return default_tlib;
901
+ }
902
+ }
903
+
891
904
let channel = option_env ! ( "CFG_RELEASE_CHANNEL" )
892
905
. map ( |channel| format ! ( "-{}" , channel) )
893
906
. unwrap_or_default ( ) ;
@@ -898,18 +911,19 @@ fn link_sanitizer_runtime(sess: &Session, linker: &mut dyn Linker, name: &str) {
898
911
// LLVM will link to `@rpath/*.dylib`, so we need to specify an
899
912
// rpath to the library as well (the rpath should be absolute, see
900
913
// PR #41352 for details).
901
- let libname = format ! ( "rustc{}_rt.{}" , channel, name) ;
902
- let rpath = default_tlib. to_str ( ) . expect ( "non-utf8 component in path" ) ;
914
+ let filename = format ! ( "rustc{}_rt.{}" , channel, name) ;
915
+ let path = find_sanitizer_runtime ( & sess, & filename) ;
916
+ let rpath = path. to_str ( ) . expect ( "non-utf8 component in path" ) ;
903
917
linker. args ( & [ "-Wl,-rpath" , "-Xlinker" , rpath] ) ;
904
- linker. link_dylib ( Symbol :: intern ( & libname ) ) ;
918
+ linker. link_dylib ( Symbol :: intern ( & filename ) ) ;
905
919
}
906
920
"aarch64-fuchsia"
907
921
| "aarch64-unknown-linux-gnu"
908
922
| "x86_64-fuchsia"
909
923
| "x86_64-unknown-freebsd"
910
924
| "x86_64-unknown-linux-gnu" => {
911
925
let filename = format ! ( "librustc{}_rt.{}.a" , channel, name) ;
912
- let path = default_tlib . join ( & filename) ;
926
+ let path = find_sanitizer_runtime ( & sess , & filename ) . join ( & filename) ;
913
927
linker. link_whole_rlib ( & path) ;
914
928
}
915
929
_ => { }
0 commit comments