about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-03-04 12:33:35 +0000
committerbors <bors@rust-lang.org>2017-03-04 12:33:35 +0000
commit27918f32ad82b4feb72b33e47a7b9207a9d7a49b (patch)
treefe1de9f17039c21cea2a9364a4d13d7344c3b5be
parent73d31e3f7ba50d04d42ec78f2cc8641b3a50321e (diff)
parent111fbe7921a7de649a9b76b3f247fc8762217819 (diff)
downloadrust-27918f32ad82b4feb72b33e47a7b9207a9d7a49b.tar.gz
rust-27918f32ad82b4feb72b33e47a7b9207a9d7a49b.zip
Auto merge of #40245 - cuviper:maybe-not-pie, r=alexcrichton
Let `-Crelocation-model` better control `-pie` linking

Prior to this, if relocation model in the target options was "pic", as
most targets have it, then the user's `-Crelocation-model` had no effect
on whether `-pie` would be used.  Only `-Clink-arg=-static` would have a
further override here.

Now we use `context::get_reloc_model`, which gives precedence to the
user's option, and if it's `RelocMode::PIC` we enable `-pie`.  This is
the same test as `context::is_pie_binary`, except that folds across all
`sess.crate_types`, not just the current one.

Fixes #35061.
-rw-r--r--src/librustc_trans/back/link.rs8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
index 1da9fcb0e95..b58f96033bf 100644
--- a/src/librustc_trans/back/link.rs
+++ b/src/librustc_trans/back/link.rs
@@ -31,6 +31,8 @@ use rustc::hir::svh::Svh;
 use rustc_back::tempdir::TempDir;
 use rustc_back::PanicStrategy;
 use rustc_incremental::IncrementalHashesMap;
+use context::get_reloc_model;
+use llvm;
 
 use std::ascii;
 use std::char;
@@ -859,13 +861,11 @@ fn link_args(cmd: &mut Linker,
     if crate_type == config::CrateTypeExecutable &&
        t.options.position_independent_executables {
         let empty_vec = Vec::new();
-        let empty_str = String::new();
         let args = sess.opts.cg.link_args.as_ref().unwrap_or(&empty_vec);
         let more_args = &sess.opts.cg.link_arg;
         let mut args = args.iter().chain(more_args.iter()).chain(used_link_args.iter());
-        let relocation_model = sess.opts.cg.relocation_model.as_ref()
-                                   .unwrap_or(&empty_str);
-        if (t.options.relocation_model == "pic" || *relocation_model == "pic")
+
+        if get_reloc_model(sess) == llvm::RelocMode::PIC
             && !args.any(|x| *x == "-static") {
             cmd.position_independent_executable();
         }