@@ -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}
@@ -156,7 +151,6 @@ pub struct GccLinker<'a> {
156151 hinted_static : bool , // Keeps track of the current hinting mode.
157152 // Link as ld
158153 is_ld : bool ,
159- target_cpu : & ' a str ,
160154}
161155
162156impl < ' a > GccLinker < ' a > {
@@ -228,8 +222,7 @@ impl<'a> GccLinker<'a> {
228222 } ;
229223
230224 self . linker_arg ( & format ! ( "-plugin-opt={}" , opt_level) ) ;
231- let target_cpu = self . target_cpu ;
232- self . linker_arg ( & format ! ( "-plugin-opt=mcpu={}" , target_cpu) ) ;
225+ self . linker_arg ( & format ! ( "-plugin-opt=mcpu={}" , self . info. target_cpu) ) ;
233226 }
234227
235228 fn build_dylib ( & mut self , out_filename : & Path ) {
@@ -1276,6 +1269,7 @@ fn exported_symbols(tcx: TyCtxt<'_>, crate_type: CrateType) -> Vec<String> {
12761269pub struct PtxLinker < ' a > {
12771270 cmd : Command ,
12781271 sess : & ' a Session ,
1272+ info : & ' a LinkerInfo ,
12791273}
12801274
12811275impl < ' a > Linker for PtxLinker < ' a > {
@@ -1321,10 +1315,7 @@ impl<'a> Linker for PtxLinker<'a> {
13211315
13221316 fn finalize ( & mut self ) {
13231317 // Provide the linker with fallback to internal `target-cpu`.
1324- self . cmd . arg ( "--fallback-arch" ) . arg ( match self . sess . opts . cg . target_cpu {
1325- Some ( ref s) => s,
1326- None => & self . sess . target . cpu ,
1327- } ) ;
1318+ self . cmd . arg ( "--fallback-arch" ) . arg ( & self . info . target_cpu ) ;
13281319 }
13291320
13301321 fn link_dylib ( & mut self , _lib : Symbol ) {
0 commit comments