Auto merge of #30913 - brson:nogold, r=alexcrichton

This reverts commit 34dc0e0739.

cc #30783 #30784 #29974

r? @alexcrichton
This commit is contained in:
bors 2016-01-14 20:32:13 +00:00
commit c12c42de0a
3 changed files with 0 additions and 57 deletions

View File

@ -541,8 +541,6 @@ fn parse_passes(slot: &mut Passes, v: Option<&str>) -> bool {
"explicitly enable the cfg(debug_assertions) directive"),
inline_threshold: Option<usize> = (None, parse_opt_uint,
"set the inlining threshold for"),
disable_gold: bool = (false, parse_bool,
"disable use of the ld.gold linker"),
}

View File

@ -1063,10 +1063,6 @@ fn link_args(cmd: &mut Linker,
cmd.args(&rpath::get_rpath_flags(&mut rpath_config));
}
// Use the gold linker if possible instead of ld. It is much
// faster.
cmd.try_gold_linker();
// Finally add all the linker arguments provided on the command line along
// with any #[link_args] attributes found inside the crate
if let Some(ref args) = sess.opts.cg.link_args {

View File

@ -8,7 +8,6 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use std::env;
use std::ffi::OsString;
use std::fs::{self, File};
use std::io::{self, BufWriter};
@ -57,7 +56,6 @@ pub trait Linker {
fn no_whole_archives(&mut self);
fn export_symbols(&mut self, sess: &Session, trans: &CrateTranslation,
tmpdir: &Path);
fn try_gold_linker(&mut self);
}
pub struct GnuLinker<'a> {
@ -201,53 +199,6 @@ fn hint_dynamic(&mut self) {
fn export_symbols(&mut self, _: &Session, _: &CrateTranslation, _: &Path) {
// noop, visibility in object files takes care of this
}
fn try_gold_linker(&mut self) {
// Only use gold under specific conditions that we know work
let gold_exists = match env::var_os("PATH") {
Some(ref env_path) => {
env::split_paths(env_path).any(|mut p| {
p.push("ld.gold");
p.exists()
})
}
None => false
};
let host_is_linux = cfg!(target_os = "linux");
// Defensively prevent trying to use gold for bogus cross-targets.
let target_is_host_compatible = {
let host_os_is_target_os = self.sess.target.target.target_os == env::consts::OS;
let host_arch_is_target_arch = self.sess.target.target.arch == env::consts::ARCH;
// Support x86_64->i686 and reverse
let host_and_target_are_x86ish =
(self.sess.target.target.arch == "x86" ||
self.sess.target.target.arch == "x86_64") &&
(env::consts::ARCH == "x86" ||
env::consts::ARCH == "x86_64");
host_os_is_target_os && (host_arch_is_target_arch || host_and_target_are_x86ish)
};
// We have strong confidence that x86 works, but not much
// visibility into other architectures.
let target_works_with_gold =
self.sess.target.target.arch == "x86" ||
self.sess.target.target.arch == "x86_64";
let opt_out = self.sess.opts.cg.disable_gold;
let can_use_gold =
gold_exists &&
host_is_linux &&
target_is_host_compatible &&
target_works_with_gold &&
!opt_out;
if can_use_gold {
info!("linking with ld.gold");
self.cmd.arg("-fuse-ld=gold");
} else {
info!("linking with ld");
}
}
}
pub struct MsvcLinker<'a> {
@ -407,6 +358,4 @@ fn export_symbols(&mut self, sess: &Session, trans: &CrateTranslation,
arg.push(path);
self.cmd.arg(&arg);
}
fn try_gold_linker(&mut self) {}
}