about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2019-03-30 12:59:40 +0100
committerbjorn3 <bjorn3@users.noreply.github.com>2019-04-20 13:21:40 +0200
commitde4ee55dc70292a16c0a3c975737d5e3c4cdd25c (patch)
tree99fae5db00f65a57f9fd175492f2a2ee7fa85f92
parentd8bce01a04958337dc39b895655f8aa2e577b6d2 (diff)
downloadrust-de4ee55dc70292a16c0a3c975737d5e3c4cdd25c.tar.gz
rust-de4ee55dc70292a16c0a3c975737d5e3c4cdd25c.zip
Remove get_reloc_model and target_cpu dependency from most of link.rs
-rw-r--r--src/librustc_codegen_llvm/back/link.rs32
-rw-r--r--src/librustc_codegen_ssa/back/link.rs2
2 files changed, 19 insertions, 15 deletions
diff --git a/src/librustc_codegen_llvm/back/link.rs b/src/librustc_codegen_llvm/back/link.rs
index 3658bb11862..021d185da79 100644
--- a/src/librustc_codegen_llvm/back/link.rs
+++ b/src/librustc_codegen_llvm/back/link.rs
@@ -2,8 +2,6 @@ use super::archive::LlvmArchiveBuilder;
 use super::rpath::RPathConfig;
 use super::rpath;
 use crate::back::wasm;
-use crate::context::get_reloc_model;
-use crate::llvm;
 use rustc_codegen_ssa::{METADATA_FILENAME, RLIB_BYTECODE_EXTENSION};
 use rustc_codegen_ssa::back::archive::ArchiveBuilder;
 use rustc_codegen_ssa::back::linker::Linker;
@@ -40,6 +38,7 @@ pub(crate) fn link_binary<'a>(sess: &'a Session,
                           codegen_results: &CodegenResults,
                           outputs: &OutputFilenames,
                           crate_name: &str) -> Vec<PathBuf> {
+    let target_cpu = crate::llvm_util::target_cpu(sess);
     let mut out_filenames = Vec::new();
     for &crate_type in sess.crate_types.borrow().iter() {
         // Ignore executable crates if we have -Z no-codegen, as they will error.
@@ -58,7 +57,8 @@ pub(crate) fn link_binary<'a>(sess: &'a Session,
                                            codegen_results,
                                            crate_type,
                                            outputs,
-                                           crate_name);
+                                           crate_name,
+                                           target_cpu);
         out_filenames.extend(out_files);
     }
 
@@ -92,7 +92,8 @@ fn link_binary_output<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
                       codegen_results: &CodegenResults,
                       crate_type: config::CrateType,
                       outputs: &OutputFilenames,
-                      crate_name: &str) -> Vec<PathBuf> {
+                      crate_name: &str,
+                      target_cpu: &str) -> Vec<PathBuf> {
     for obj in codegen_results.modules.iter().filter_map(|m| m.object.as_ref()) {
         check_file_is_writeable(obj, sess);
     }
@@ -134,7 +135,7 @@ fn link_binary_output<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
                 link_staticlib::<B>(sess, codegen_results, &out_filename, &tmpdir);
             }
             _ => {
-                link_natively::<B>(sess, crate_type, &out_filename, codegen_results, tmpdir.path());
+                link_natively::<B>(sess, crate_type, &out_filename, codegen_results, tmpdir.path(), target_cpu);
             }
         }
         out_filenames.push(out_filename);
@@ -167,11 +168,6 @@ fn emit_metadata<'a>(
     out_filename
 }
 
-enum RlibFlavor {
-    Normal,
-    StaticlibBase,
-}
-
 // Create an 'rlib'
 //
 // An rlib in its current incarnation is essentially a renamed .a file. The
@@ -354,7 +350,8 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
                  crate_type: config::CrateType,
                  out_filename: &Path,
                  codegen_results: &CodegenResults,
-                 tmpdir: &Path) {
+                 tmpdir: &Path,
+                 target_cpu: &str) {
     info!("preparing {:?} to {:?}", crate_type, out_filename);
     let (linker, flavor) = linker_and_flavor(sess);
 
@@ -407,7 +404,6 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
     }
 
     {
-        let target_cpu = crate::llvm_util::target_cpu(sess);
         let mut linker = codegen_results.linker_info.to_linker(cmd, &sess, flavor, target_cpu);
         link_args::<B>(&mut *linker, flavor, sess, crate_type, tmpdir,
                   out_filename, codegen_results);
@@ -663,8 +659,7 @@ fn link_args<'a, B: ArchiveBuilder<'a>>(cmd: &mut dyn Linker,
             let more_args = &sess.opts.cg.link_arg;
             let mut args = args.iter().chain(more_args.iter()).chain(used_link_args.iter());
 
-            if get_reloc_model(sess) == llvm::RelocMode::PIC
-                && !sess.crt_static() && !args.any(|x| *x == "-static") {
+            if is_pic(sess) && !sess.crt_static() && !args.any(|x| *x == "-static") {
                 position_independent_executable = true;
             }
         }
@@ -1106,3 +1101,12 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(cmd: &mut dyn Linker,
                             parent.unwrap_or(Path::new("")));
     }
 }
+
+fn is_pic(sess: &Session) -> bool {
+    let reloc_model_arg = match sess.opts.cg.relocation_model {
+        Some(ref s) => &s[..],
+        None => &sess.target.target.options.relocation_model[..],
+    };
+
+    reloc_model_arg == "pic"
+}
diff --git a/src/librustc_codegen_ssa/back/link.rs b/src/librustc_codegen_ssa/back/link.rs
index 3d7ca251fcf..f97f78b7feb 100644
--- a/src/librustc_codegen_ssa/back/link.rs
+++ b/src/librustc_codegen_ssa/back/link.rs
@@ -258,7 +258,7 @@ pub fn archive_search_paths(sess: &Session) -> Vec<PathBuf> {
     sess.target_filesearch(PathKind::Native).search_path_dirs()
 }
 
-enum RlibFlavor {
+pub enum RlibFlavor {
     Normal,
     StaticlibBase,
 }