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