about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohannes Löthberg <johannes@kyriasis.com>2018-02-22 21:28:20 +0100
committerJohannes Löthberg <johannes@kyriasis.com>2018-03-06 23:39:00 +0100
commitf0c459ebd2edbf6ad18eac91fb1ad80b98d3359e (patch)
tree98cba0916ee9524724a1464b1ebf94f1f3181c63
parent2789b067da2ac921b86199bde21dd231ace1da39 (diff)
downloadrust-f0c459ebd2edbf6ad18eac91fb1ad80b98d3359e.tar.gz
rust-f0c459ebd2edbf6ad18eac91fb1ad80b98d3359e.zip
Make relro-level=off explicitly disable RELRO
Previously relro-level=off would just not tell the linker to use RELRO,
but when you want to disable RELRO you most likely want to entirely
prevent.

Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
-rw-r--r--src/librustc_trans/back/link.rs4
-rw-r--r--src/librustc_trans/back/linker.rs23
2 files changed, 21 insertions, 6 deletions
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
index 636b3984117..56b845c3049 100644
--- a/src/librustc_trans/back/link.rs
+++ b/src/librustc_trans/back/link.rs
@@ -1014,7 +1014,9 @@ fn link_args(cmd: &mut Linker,
         RelroLevel::Partial => {
             cmd.partial_relro();
         },
-        RelroLevel::Off => {},
+        RelroLevel::Off => {
+            cmd.no_relro();
+        },
     }
 
     // Pass optimization flags down to the linker.
diff --git a/src/librustc_trans/back/linker.rs b/src/librustc_trans/back/linker.rs
index 3fe667f1543..9bd7d83a191 100644
--- a/src/librustc_trans/back/linker.rs
+++ b/src/librustc_trans/back/linker.rs
@@ -113,8 +113,9 @@ pub trait Linker {
     fn gc_sections(&mut self, keep_metadata: bool);
     fn position_independent_executable(&mut self);
     fn no_position_independent_executable(&mut self);
-    fn partial_relro(&mut self);
     fn full_relro(&mut self);
+    fn partial_relro(&mut self);
+    fn no_relro(&mut self);
     fn optimize(&mut self);
     fn debuginfo(&mut self);
     fn no_default_libraries(&mut self);
@@ -188,8 +189,9 @@ impl<'a> Linker for GccLinker<'a> {
     fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
     fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
     fn no_position_independent_executable(&mut self) { self.cmd.arg("-no-pie"); }
-    fn partial_relro(&mut self) { self.linker_arg("-z,relro"); }
     fn full_relro(&mut self) { self.linker_arg("-z,relro,-z,now"); }
+    fn partial_relro(&mut self) { self.linker_arg("-z,relro"); }
+    fn no_relro(&mut self) { self.linker_arg("-z,norelro"); }
     fn build_static_executable(&mut self) { self.cmd.arg("-static"); }
     fn args(&mut self, args: &[String]) { self.cmd.args(args); }
 
@@ -452,11 +454,15 @@ impl<'a> Linker for MsvcLinker<'a> {
         // noop
     }
 
+    fn full_relro(&mut self) {
+        // noop
+    }
+
     fn partial_relro(&mut self) {
         // noop
     }
 
-    fn full_relro(&mut self) {
+    fn no_relro(&mut self) {
         // noop
     }
 
@@ -664,11 +670,15 @@ impl<'a> Linker for EmLinker<'a> {
         // noop
     }
 
+    fn full_relro(&mut self) {
+        // noop
+    }
+
     fn partial_relro(&mut self) {
         // noop
     }
 
-    fn full_relro(&mut self) {
+    fn no_relro(&mut self) {
         // noop
     }
 
@@ -829,10 +839,13 @@ impl Linker for WasmLd {
     fn position_independent_executable(&mut self) {
     }
 
+    fn full_relro(&mut self) {
+    }
+
     fn partial_relro(&mut self) {
     }
 
-    fn full_relro(&mut self) {
+    fn no_relro(&mut self) {
     }
 
     fn build_static_executable(&mut self) {