@@ -20,7 +20,7 @@ use rustc_session::utils::NativeLibKind;
20
20
use rustc_session:: { filesearch, Session } ;
21
21
use rustc_span:: symbol:: Symbol ;
22
22
use rustc_span:: DebuggerVisualizerFile ;
23
- use rustc_target:: spec:: crt_objects:: { CrtObjects , CrtObjectsFallback } ;
23
+ use rustc_target:: spec:: crt_objects:: { CrtObjects , LinkSelfContainedDefault } ;
24
24
use rustc_target:: spec:: { LinkOutputKind , LinkerFlavor , LldFlavor , SplitDebuginfo } ;
25
25
use rustc_target:: spec:: { PanicStrategy , RelocModel , RelroLevel , SanitizerSet , Target } ;
26
26
@@ -764,15 +764,15 @@ fn link_natively<'a>(
764
764
"Linker does not support -static-pie command line option. Retrying with -static instead."
765
765
) ;
766
766
// 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) ;
768
768
let opts = & sess. target ;
769
769
let pre_objects = if self_contained {
770
- & opts. pre_link_objects_fallback
770
+ & opts. pre_link_objects_self_contained
771
771
} else {
772
772
& opts. pre_link_objects
773
773
} ;
774
774
let post_objects = if self_contained {
775
- & opts. post_link_objects_fallback
775
+ & opts. post_link_objects_self_contained
776
776
} else {
777
777
& opts. post_link_objects
778
778
} ;
@@ -1556,26 +1556,26 @@ fn detect_self_contained_mingw(sess: &Session) -> bool {
1556
1556
true
1557
1557
}
1558
1558
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.
1560
1561
/// 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 {
1562
1563
if let Some ( self_contained) = sess. opts . cg . link_self_contained {
1563
1564
return self_contained;
1564
1565
}
1565
1566
1566
- match sess. target . crt_objects_fallback {
1567
+ match sess. target . link_self_contained {
1568
+ LinkSelfContainedDefault :: False => false ,
1569
+ LinkSelfContainedDefault :: True => true ,
1567
1570
// FIXME: Find a better heuristic for "native musl toolchain is available",
1568
1571
// based on host and linker path, for example.
1569
1572
// (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 => {
1572
1575
sess. host == sess. target
1573
1576
&& sess. target . vendor != "uwp"
1574
1577
&& detect_self_contained_mingw ( & sess)
1575
1578
}
1576
- // FIXME: Figure out cases in which WASM needs to link with a native toolchain.
1577
- Some ( CrtObjectsFallback :: Wasm ) => true ,
1578
- None => false ,
1579
1579
}
1580
1580
}
1581
1581
@@ -1586,9 +1586,11 @@ fn add_pre_link_objects(
1586
1586
link_output_kind : LinkOutputKind ,
1587
1587
self_contained : bool ,
1588
1588
) {
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
+ } ;
1592
1594
for obj in objects. get ( & link_output_kind) . iter ( ) . copied ( ) . flatten ( ) {
1593
1595
cmd. add_object ( & get_object_file_path ( sess, obj, self_contained) ) ;
1594
1596
}
@@ -1601,9 +1603,11 @@ fn add_post_link_objects(
1601
1603
link_output_kind : LinkOutputKind ,
1602
1604
self_contained : bool ,
1603
1605
) {
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
+ } ;
1607
1611
for obj in objects. get ( & link_output_kind) . iter ( ) . copied ( ) . flatten ( ) {
1608
1612
cmd. add_object ( & get_object_file_path ( sess, obj, self_contained) ) ;
1609
1613
}
@@ -1882,12 +1886,12 @@ fn linker_with_args<'a>(
1882
1886
out_filename : & Path ,
1883
1887
codegen_results : & CodegenResults ,
1884
1888
) -> Result < Command , ErrorGuaranteed > {
1885
- let crt_objects_fallback = crt_objects_fallback ( sess, crate_type) ;
1889
+ let self_contained = self_contained ( sess, crate_type) ;
1886
1890
let cmd = & mut * super :: linker:: get_linker (
1887
1891
sess,
1888
1892
path,
1889
1893
flavor,
1890
- crt_objects_fallback ,
1894
+ self_contained ,
1891
1895
& codegen_results. crate_info . target_cpu ,
1892
1896
) ;
1893
1897
let link_output_kind = link_output_kind ( sess, crate_type) ;
@@ -1914,7 +1918,7 @@ fn linker_with_args<'a>(
1914
1918
// ------------ Object code and libraries, order-dependent ------------
1915
1919
1916
1920
// 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 ) ;
1918
1922
1919
1923
add_linked_symbol_object (
1920
1924
cmd,
@@ -2024,7 +2028,7 @@ fn linker_with_args<'a>(
2024
2028
cmd,
2025
2029
sess,
2026
2030
link_output_kind,
2027
- crt_objects_fallback ,
2031
+ self_contained ,
2028
2032
flavor,
2029
2033
crate_type,
2030
2034
codegen_results,
@@ -2040,7 +2044,7 @@ fn linker_with_args<'a>(
2040
2044
// ------------ Object code and libraries, order-dependent ------------
2041
2045
2042
2046
// 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 ) ;
2044
2048
2045
2049
// ------------ Late order-dependent options ------------
2046
2050
@@ -2057,7 +2061,7 @@ fn add_order_independent_options(
2057
2061
cmd : & mut dyn Linker ,
2058
2062
sess : & Session ,
2059
2063
link_output_kind : LinkOutputKind ,
2060
- crt_objects_fallback : bool ,
2064
+ self_contained : bool ,
2061
2065
flavor : LinkerFlavor ,
2062
2066
crate_type : CrateType ,
2063
2067
codegen_results : & CodegenResults ,
@@ -2086,7 +2090,7 @@ fn add_order_independent_options(
2086
2090
// Make the binary compatible with data execution prevention schemes.
2087
2091
cmd. add_no_exec ( ) ;
2088
2092
2089
- if crt_objects_fallback {
2093
+ if self_contained {
2090
2094
cmd. no_crt_objects ( ) ;
2091
2095
}
2092
2096
@@ -2115,7 +2119,7 @@ fn add_order_independent_options(
2115
2119
2116
2120
cmd. linker_plugin_lto ( ) ;
2117
2121
2118
- add_library_search_dirs ( cmd, sess, crt_objects_fallback ) ;
2122
+ add_library_search_dirs ( cmd, sess, self_contained ) ;
2119
2123
2120
2124
cmd. output_filename ( out_filename) ;
2121
2125
0 commit comments