@@ -23,7 +23,7 @@ use rustc_session::utils::NativeLibKind;
23
23
use rustc_session:: { filesearch, Session } ;
24
24
use rustc_span:: symbol:: Symbol ;
25
25
use rustc_target:: spec:: crt_objects:: { CrtObjects , LinkSelfContainedDefault } ;
26
- use rustc_target:: spec:: { Cc , LinkOutputKind , LinkerFlavor , Lld , PanicStrategy } ;
26
+ use rustc_target:: spec:: { Cc , CcFlavor , LinkOutputKind , LinkerFlavor , Lld , PanicStrategy } ;
27
27
use rustc_target:: spec:: { RelocModel , RelroLevel , SanitizerSet , SplitDebuginfo } ;
28
28
29
29
use super :: archive:: { ArchiveBuilder , ArchiveBuilderBuilder } ;
@@ -782,7 +782,7 @@ fn link_natively<'a>(
782
782
// then it should not default to linking executables as pie. Different
783
783
// versions of gcc seem to use different quotes in the error message so
784
784
// don't check for them.
785
- if matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes , _) )
785
+ if matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes ( _ ) , _) )
786
786
&& unknown_arg_regex. is_match ( & out)
787
787
&& out. contains ( "-no-pie" )
788
788
&& cmd. get_args ( ) . iter ( ) . any ( |e| e. to_string_lossy ( ) == "-no-pie" )
@@ -800,7 +800,7 @@ fn link_natively<'a>(
800
800
801
801
// Detect '-static-pie' used with an older version of gcc or clang not supporting it.
802
802
// Fallback from '-static-pie' to '-static' in that case.
803
- if matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes , _) )
803
+ if matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes ( _ ) , _) )
804
804
&& unknown_arg_regex. is_match ( & out)
805
805
&& ( out. contains ( "-static-pie" ) || out. contains ( "--no-dynamic-linker" ) )
806
806
&& cmd. get_args ( ) . iter ( ) . any ( |e| e. to_string_lossy ( ) == "-static-pie" )
@@ -1286,11 +1286,13 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
1286
1286
// only the linker flavor is known; use the default linker for the selected flavor
1287
1287
( None , Some ( flavor) ) => Some ( (
1288
1288
PathBuf :: from ( match flavor {
1289
- LinkerFlavor :: Gnu ( Cc :: Yes , _)
1290
- | LinkerFlavor :: Darwin ( Cc :: Yes , _)
1291
- | LinkerFlavor :: WasmLld ( Cc :: Yes )
1292
- | LinkerFlavor :: Unix ( Cc :: Yes ) => {
1293
- if cfg ! ( any( target_os = "solaris" , target_os = "illumos" ) ) {
1289
+ LinkerFlavor :: Gnu ( Cc :: Yes ( cc_flavor) , _)
1290
+ | LinkerFlavor :: Darwin ( Cc :: Yes ( cc_flavor) , _)
1291
+ | LinkerFlavor :: WasmLld ( Cc :: Yes ( cc_flavor) )
1292
+ | LinkerFlavor :: Unix ( Cc :: Yes ( cc_flavor) ) => {
1293
+ if cfg ! ( any( target_os = "solaris" , target_os = "illumos" ) )
1294
+ && cc_flavor == CcFlavor :: AnyCc
1295
+ {
1294
1296
// On historical Solaris systems, "cc" may have
1295
1297
// been Sun Studio, which is not flag-compatible
1296
1298
// with "gcc". This history casts a long shadow,
@@ -1299,7 +1301,7 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
1299
1301
// available as "cc".
1300
1302
"gcc"
1301
1303
} else {
1302
- "cc"
1304
+ cc_flavor . default_bin_name ( )
1303
1305
}
1304
1306
}
1305
1307
LinkerFlavor :: Gnu ( _, Lld :: Yes )
@@ -1745,7 +1747,7 @@ fn add_pre_link_objects(
1745
1747
let empty = Default :: default ( ) ;
1746
1748
let objects = if self_contained {
1747
1749
& opts. pre_link_objects_self_contained
1748
- } else if !( sess. target . os == "fuchsia" && matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes , _) ) ) {
1750
+ } else if !( sess. target . os == "fuchsia" && matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes ( _ ) , _) ) ) {
1749
1751
& opts. pre_link_objects
1750
1752
} else {
1751
1753
& empty
@@ -2276,7 +2278,7 @@ fn add_order_independent_options(
2276
2278
2277
2279
if sess. target . os == "fuchsia"
2278
2280
&& crate_type == CrateType :: Executable
2279
- && !matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes , _) )
2281
+ && !matches ! ( flavor, LinkerFlavor :: Gnu ( Cc :: Yes ( _ ) , _) )
2280
2282
{
2281
2283
let prefix = if sess. opts . unstable_opts . sanitizer . contains ( SanitizerSet :: ADDRESS ) {
2282
2284
"asan/"
@@ -2906,7 +2908,7 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
2906
2908
} ;
2907
2909
2908
2910
match flavor {
2909
- LinkerFlavor :: Darwin ( Cc :: Yes , _) => {
2911
+ LinkerFlavor :: Darwin ( Cc :: Yes ( _ ) , _) => {
2910
2912
cmd. args ( & [ "-isysroot" , & sdk_root, "-Wl,-syslibroot" , & sdk_root] ) ;
2911
2913
}
2912
2914
LinkerFlavor :: Darwin ( Cc :: No , _) => {
0 commit comments