@@ -37,12 +37,14 @@ pub fn disable_localization(linker: &mut Command) {
3737/// need out of the shared crate context before we get rid of it.
3838#[ derive( Encodable , Decodable ) ]
3939pub struct LinkerInfo {
40+ target_cpu : String ,
4041 exports : FxHashMap < CrateType , Vec < String > > ,
4142}
4243
4344impl LinkerInfo {
44- pub fn new ( tcx : TyCtxt < ' _ > ) -> LinkerInfo {
45+ pub fn new ( tcx : TyCtxt < ' _ > , target_cpu : String ) -> LinkerInfo {
4546 LinkerInfo {
47+ target_cpu,
4648 exports : tcx
4749 . sess
4850 . crate_types ( )
@@ -57,38 +59,31 @@ impl LinkerInfo {
5759 cmd : Command ,
5860 sess : & ' a Session ,
5961 flavor : LinkerFlavor ,
60- target_cpu : & ' a str ,
6162 ) -> Box < dyn Linker + ' a > {
6263 match flavor {
6364 LinkerFlavor :: Lld ( LldFlavor :: Link ) | LinkerFlavor :: Msvc => {
6465 Box :: new ( MsvcLinker { cmd, sess, info : self } ) as Box < dyn Linker >
6566 }
6667 LinkerFlavor :: Em => Box :: new ( EmLinker { cmd, sess, info : self } ) as Box < dyn Linker > ,
67- LinkerFlavor :: Gcc => Box :: new ( GccLinker {
68- cmd,
69- sess,
70- info : self ,
71- hinted_static : false ,
72- is_ld : false ,
73- target_cpu,
74- } ) as Box < dyn Linker > ,
68+ LinkerFlavor :: Gcc => {
69+ Box :: new ( GccLinker { cmd, sess, info : self , hinted_static : false , is_ld : false } )
70+ as Box < dyn Linker >
71+ }
7572
7673 LinkerFlavor :: Lld ( LldFlavor :: Ld )
7774 | LinkerFlavor :: Lld ( LldFlavor :: Ld64 )
78- | LinkerFlavor :: Ld => Box :: new ( GccLinker {
79- cmd,
80- sess,
81- info : self ,
82- hinted_static : false ,
83- is_ld : true ,
84- target_cpu,
85- } ) as Box < dyn Linker > ,
75+ | LinkerFlavor :: Ld => {
76+ Box :: new ( GccLinker { cmd, sess, info : self , hinted_static : false , is_ld : true } )
77+ as Box < dyn Linker >
78+ }
8679
8780 LinkerFlavor :: Lld ( LldFlavor :: Wasm ) => {
8881 Box :: new ( WasmLd :: new ( cmd, sess, self ) ) as Box < dyn Linker >
8982 }
9083
91- LinkerFlavor :: PtxLinker => Box :: new ( PtxLinker { cmd, sess } ) as Box < dyn Linker > ,
84+ LinkerFlavor :: PtxLinker => {
85+ Box :: new ( PtxLinker { cmd, sess, info : self } ) as Box < dyn Linker >
86+ }
9287 }
9388 }
9489}
@@ -157,7 +152,6 @@ pub struct GccLinker<'a> {
157152 hinted_static : bool , // Keeps track of the current hinting mode.
158153 // Link as ld
159154 is_ld : bool ,
160- target_cpu : & ' a str ,
161155}
162156
163157impl < ' a > GccLinker < ' a > {
@@ -229,8 +223,7 @@ impl<'a> GccLinker<'a> {
229223 } ;
230224
231225 self . linker_arg ( & format ! ( "-plugin-opt={}" , opt_level) ) ;
232- let target_cpu = self . target_cpu ;
233- self . linker_arg ( & format ! ( "-plugin-opt=mcpu={}" , target_cpu) ) ;
226+ self . linker_arg ( & format ! ( "-plugin-opt=mcpu={}" , self . info. target_cpu) ) ;
234227 }
235228
236229 fn build_dylib ( & mut self , out_filename : & Path ) {
@@ -1336,6 +1329,7 @@ fn exported_symbols(tcx: TyCtxt<'_>, crate_type: CrateType) -> Vec<String> {
13361329pub struct PtxLinker < ' a > {
13371330 cmd : Command ,
13381331 sess : & ' a Session ,
1332+ info : & ' a LinkerInfo ,
13391333}
13401334
13411335impl < ' a > Linker for PtxLinker < ' a > {
@@ -1381,10 +1375,7 @@ impl<'a> Linker for PtxLinker<'a> {
13811375
13821376 fn finalize ( & mut self ) {
13831377 // Provide the linker with fallback to internal `target-cpu`.
1384- self . cmd . arg ( "--fallback-arch" ) . arg ( match self . sess . opts . cg . target_cpu {
1385- Some ( ref s) => s,
1386- None => & self . sess . target . cpu ,
1387- } ) ;
1378+ self . cmd . arg ( "--fallback-arch" ) . arg ( & self . info . target_cpu ) ;
13881379 }
13891380
13901381 fn link_dylib ( & mut self , _lib : Symbol , _verbatim : bool , _as_needed : bool ) {
0 commit comments