@@ -20,7 +20,7 @@ use rustc_session::utils::NativeLibKind;
2020use rustc_session:: { filesearch, Session } ;
2121use rustc_span:: symbol:: Symbol ;
2222use rustc_span:: DebuggerVisualizerFile ;
23- use rustc_target:: spec:: crt_objects:: { CrtObjects , CrtObjectsFallback } ;
23+ use rustc_target:: spec:: crt_objects:: { CrtObjects , LinkSelfContainedDefault } ;
2424use rustc_target:: spec:: { LinkOutputKind , LinkerFlavor , LldFlavor , SplitDebuginfo } ;
2525use rustc_target:: spec:: { PanicStrategy , RelocModel , RelroLevel , SanitizerSet , Target } ;
2626
@@ -764,15 +764,15 @@ fn link_natively<'a>(
764764 "Linker does not support -static-pie command line option. Retrying with -static instead."
765765 ) ;
766766 // Mirror `add_(pre,post)_link_objects` to replace CRT objects.
767- let self_contained = crt_objects_fallback ( sess, crate_type) ;
767+ let self_contained = self_contained ( sess, crate_type) ;
768768 let opts = & sess. target ;
769769 let pre_objects = if self_contained {
770- & opts. pre_link_objects_fallback
770+ & opts. pre_link_objects_self_contained
771771 } else {
772772 & opts. pre_link_objects
773773 } ;
774774 let post_objects = if self_contained {
775- & opts. post_link_objects_fallback
775+ & opts. post_link_objects_self_contained
776776 } else {
777777 & opts. post_link_objects
778778 } ;
@@ -1556,26 +1556,26 @@ fn detect_self_contained_mingw(sess: &Session) -> bool {
15561556 true
15571557}
15581558
1559- /// Whether we link to our own CRT objects instead of relying on gcc to pull them.
1559+ /// Various toolchain components used during linking are used from rustc distribution
1560+ /// instead of being found somewhere on the host system.
15601561/// We only provide such support for a very limited number of targets.
1561- fn crt_objects_fallback ( sess : & Session , crate_type : CrateType ) -> bool {
1562+ fn self_contained ( sess : & Session , crate_type : CrateType ) -> bool {
15621563 if let Some ( self_contained) = sess. opts . cg . link_self_contained {
15631564 return self_contained;
15641565 }
15651566
1566- match sess. target . crt_objects_fallback {
1567+ match sess. target . link_self_contained {
1568+ LinkSelfContainedDefault :: False => false ,
1569+ LinkSelfContainedDefault :: True => true ,
15671570 // FIXME: Find a better heuristic for "native musl toolchain is available",
15681571 // based on host and linker path, for example.
15691572 // (https://github.com/rust-lang/rust/pull/71769#issuecomment-626330237).
1570- Some ( CrtObjectsFallback :: Musl ) => sess. crt_static ( Some ( crate_type) ) ,
1571- Some ( CrtObjectsFallback :: Mingw ) => {
1573+ LinkSelfContainedDefault :: Musl => sess. crt_static ( Some ( crate_type) ) ,
1574+ LinkSelfContainedDefault :: Mingw => {
15721575 sess. host == sess. target
15731576 && sess. target . vendor != "uwp"
15741577 && detect_self_contained_mingw ( & sess)
15751578 }
1576- // FIXME: Figure out cases in which WASM needs to link with a native toolchain.
1577- Some ( CrtObjectsFallback :: Wasm ) => true ,
1578- None => false ,
15791579 }
15801580}
15811581
@@ -1586,9 +1586,11 @@ fn add_pre_link_objects(
15861586 link_output_kind : LinkOutputKind ,
15871587 self_contained : bool ,
15881588) {
1589- let opts = & sess. target ;
1590- let objects =
1591- if self_contained { & opts. pre_link_objects_fallback } else { & opts. pre_link_objects } ;
1589+ let objects = if self_contained {
1590+ & sess. target . pre_link_objects_self_contained
1591+ } else {
1592+ & sess. target . pre_link_objects
1593+ } ;
15921594 for obj in objects. get ( & link_output_kind) . iter ( ) . copied ( ) . flatten ( ) {
15931595 cmd. add_object ( & get_object_file_path ( sess, obj, self_contained) ) ;
15941596 }
@@ -1601,9 +1603,11 @@ fn add_post_link_objects(
16011603 link_output_kind : LinkOutputKind ,
16021604 self_contained : bool ,
16031605) {
1604- let opts = & sess. target ;
1605- let objects =
1606- if self_contained { & opts. post_link_objects_fallback } else { & opts. post_link_objects } ;
1606+ let objects = if self_contained {
1607+ & sess. target . post_link_objects_self_contained
1608+ } else {
1609+ & sess. target . post_link_objects
1610+ } ;
16071611 for obj in objects. get ( & link_output_kind) . iter ( ) . copied ( ) . flatten ( ) {
16081612 cmd. add_object ( & get_object_file_path ( sess, obj, self_contained) ) ;
16091613 }
@@ -1882,12 +1886,12 @@ fn linker_with_args<'a>(
18821886 out_filename : & Path ,
18831887 codegen_results : & CodegenResults ,
18841888) -> Result < Command , ErrorGuaranteed > {
1885- let crt_objects_fallback = crt_objects_fallback ( sess, crate_type) ;
1889+ let self_contained = self_contained ( sess, crate_type) ;
18861890 let cmd = & mut * super :: linker:: get_linker (
18871891 sess,
18881892 path,
18891893 flavor,
1890- crt_objects_fallback ,
1894+ self_contained ,
18911895 & codegen_results. crate_info . target_cpu ,
18921896 ) ;
18931897 let link_output_kind = link_output_kind ( sess, crate_type) ;
@@ -1914,7 +1918,7 @@ fn linker_with_args<'a>(
19141918 // ------------ Object code and libraries, order-dependent ------------
19151919
19161920 // Pre-link CRT objects.
1917- add_pre_link_objects ( cmd, sess, link_output_kind, crt_objects_fallback ) ;
1921+ add_pre_link_objects ( cmd, sess, link_output_kind, self_contained ) ;
19181922
19191923 add_linked_symbol_object (
19201924 cmd,
@@ -2024,7 +2028,7 @@ fn linker_with_args<'a>(
20242028 cmd,
20252029 sess,
20262030 link_output_kind,
2027- crt_objects_fallback ,
2031+ self_contained ,
20282032 flavor,
20292033 crate_type,
20302034 codegen_results,
@@ -2040,7 +2044,7 @@ fn linker_with_args<'a>(
20402044 // ------------ Object code and libraries, order-dependent ------------
20412045
20422046 // Post-link CRT objects.
2043- add_post_link_objects ( cmd, sess, link_output_kind, crt_objects_fallback ) ;
2047+ add_post_link_objects ( cmd, sess, link_output_kind, self_contained ) ;
20442048
20452049 // ------------ Late order-dependent options ------------
20462050
@@ -2057,7 +2061,7 @@ fn add_order_independent_options(
20572061 cmd : & mut dyn Linker ,
20582062 sess : & Session ,
20592063 link_output_kind : LinkOutputKind ,
2060- crt_objects_fallback : bool ,
2064+ self_contained : bool ,
20612065 flavor : LinkerFlavor ,
20622066 crate_type : CrateType ,
20632067 codegen_results : & CodegenResults ,
@@ -2086,7 +2090,7 @@ fn add_order_independent_options(
20862090 // Make the binary compatible with data execution prevention schemes.
20872091 cmd. add_no_exec ( ) ;
20882092
2089- if crt_objects_fallback {
2093+ if self_contained {
20902094 cmd. no_crt_objects ( ) ;
20912095 }
20922096
@@ -2115,7 +2119,7 @@ fn add_order_independent_options(
21152119
21162120 cmd. linker_plugin_lto ( ) ;
21172121
2118- add_library_search_dirs ( cmd, sess, crt_objects_fallback ) ;
2122+ add_library_search_dirs ( cmd, sess, self_contained ) ;
21192123
21202124 cmd. output_filename ( out_filename) ;
21212125
0 commit comments