| 
8 | 8 | // option. This file may not be copied, modified, or distributed  | 
9 | 9 | // except according to those terms.  | 
10 | 10 | 
 
  | 
11 |  | -use std::env;  | 
12 | 11 | use std::ffi::OsString;  | 
13 | 12 | use std::fs::{self, File};  | 
14 | 13 | use std::io::{self, BufWriter};  | 
@@ -57,7 +56,6 @@ pub trait Linker {  | 
57 | 56 |     fn no_whole_archives(&mut self);  | 
58 | 57 |     fn export_symbols(&mut self, sess: &Session, trans: &CrateTranslation,  | 
59 | 58 |                       tmpdir: &Path);  | 
60 |  | -    fn try_gold_linker(&mut self);  | 
61 | 59 | }  | 
62 | 60 | 
 
  | 
63 | 61 | pub struct GnuLinker<'a> {  | 
@@ -201,53 +199,6 @@ impl<'a> Linker for GnuLinker<'a> {  | 
201 | 199 |     fn export_symbols(&mut self, _: &Session, _: &CrateTranslation, _: &Path) {  | 
202 | 200 |         // noop, visibility in object files takes care of this  | 
203 | 201 |     }  | 
204 |  | - | 
205 |  | -    fn try_gold_linker(&mut self) {  | 
206 |  | -        // Only use gold under specific conditions that we know work  | 
207 |  | - | 
208 |  | -        let gold_exists = match env::var_os("PATH") {  | 
209 |  | -            Some(ref env_path) => {  | 
210 |  | -                env::split_paths(env_path).any(|mut p| {  | 
211 |  | -                    p.push("ld.gold");  | 
212 |  | -                    p.exists()  | 
213 |  | -                })  | 
214 |  | -            }  | 
215 |  | -            None => false  | 
216 |  | -        };  | 
217 |  | -        let host_is_linux = cfg!(target_os = "linux");  | 
218 |  | -        // Defensively prevent trying to use gold for bogus cross-targets.  | 
219 |  | -        let target_is_host_compatible = {  | 
220 |  | -            let host_os_is_target_os = self.sess.target.target.target_os == env::consts::OS;  | 
221 |  | -            let host_arch_is_target_arch = self.sess.target.target.arch == env::consts::ARCH;  | 
222 |  | -            // Support x86_64->i686 and reverse  | 
223 |  | -            let host_and_target_are_x86ish =  | 
224 |  | -                (self.sess.target.target.arch == "x86" ||  | 
225 |  | -                 self.sess.target.target.arch == "x86_64") &&  | 
226 |  | -                (env::consts::ARCH == "x86" ||  | 
227 |  | -                 env::consts::ARCH == "x86_64");  | 
228 |  | -            host_os_is_target_os && (host_arch_is_target_arch || host_and_target_are_x86ish)  | 
229 |  | -        };  | 
230 |  | -        // We have strong confidence that x86 works, but not much  | 
231 |  | -        // visibility into other architectures.  | 
232 |  | -        let target_works_with_gold =  | 
233 |  | -            self.sess.target.target.arch == "x86" ||  | 
234 |  | -            self.sess.target.target.arch == "x86_64";  | 
235 |  | -        let opt_out = self.sess.opts.cg.disable_gold;  | 
236 |  | - | 
237 |  | -        let can_use_gold =  | 
238 |  | -            gold_exists &&  | 
239 |  | -            host_is_linux &&  | 
240 |  | -            target_is_host_compatible &&  | 
241 |  | -            target_works_with_gold &&  | 
242 |  | -            !opt_out;  | 
243 |  | - | 
244 |  | -        if can_use_gold {  | 
245 |  | -            info!("linking with ld.gold");  | 
246 |  | -            self.cmd.arg("-fuse-ld=gold");  | 
247 |  | -        } else {  | 
248 |  | -            info!("linking with ld");  | 
249 |  | -        }  | 
250 |  | -    }  | 
251 | 202 | }  | 
252 | 203 | 
 
  | 
253 | 204 | pub struct MsvcLinker<'a> {  | 
@@ -407,6 +358,4 @@ impl<'a> Linker for MsvcLinker<'a> {  | 
407 | 358 |         arg.push(path);  | 
408 | 359 |         self.cmd.arg(&arg);  | 
409 | 360 |     }  | 
410 |  | - | 
411 |  | -    fn try_gold_linker(&mut self) {}  | 
412 | 361 | }  | 
0 commit comments