]> git.lizzy.rs Git - rust.git/commitdiff
Move linker code to the Linker trait instead.
authorEmilio Cobos Álvarez <emilio@crisal.io>
Mon, 19 Mar 2018 21:29:58 +0000 (22:29 +0100)
committerEmilio Cobos Álvarez <emilio@crisal.io>
Sun, 25 Mar 2018 01:30:07 +0000 (03:30 +0200)
src/librustc_trans/back/link.rs
src/librustc_trans/back/linker.rs

index 19f0d5866ef3497ef2387a2cb1b471e83413b542..75ba83a7c620a62932c6bac64503fd4c47f23683 100644 (file)
@@ -1085,20 +1085,8 @@ fn link_args(cmd: &mut Linker,
         cmd.build_static_executable();
     }
 
-    // If we're doing PGO generation stuff and on a GNU-like linker, use the
-    // "-u" flag to properly pull in the profiler runtime bits.
-    //
-    // This is because LLVM otherwise won't add the needed initialization for us
-    // on Linux (though the extra flag should be harmless if it does).
-    //
-    // See https://reviews.llvm.org/D14033 and https://reviews.llvm.org/D14030.
-    //
-    // Though it may be worth to try to revert those changes upstream, since the
-    // overhead of the initialization should be minor.
-    if sess.opts.debugging_opts.pgo_gen.is_some() &&
-        sess.target.target.options.linker_is_gnu
-    {
-        cmd.args(&["-u".to_owned(), "__llvm_profile_runtime".to_owned()]);
+    if sess.opts.debugging_opts.pgo_gen.is_some() {
+        cmd.pgo_gen();
     }
 
     // FIXME (#2397): At some point we want to rpath our guesses as to
index 9bd7d83a19185135f3f4f9307f974b1583c22211..c8bbfed41eb51f0f259cc921e4f8549679147148 100644 (file)
@@ -117,6 +117,7 @@ pub trait Linker {
     fn partial_relro(&mut self);
     fn no_relro(&mut self);
     fn optimize(&mut self);
+    fn pgo_gen(&mut self);
     fn debuginfo(&mut self);
     fn no_default_libraries(&mut self);
     fn build_dylib(&mut self, out_filename: &Path);
@@ -280,6 +281,24 @@ fn optimize(&mut self) {
         }
     }
 
+    fn pgo_gen(&mut self) {
+        if !self.sess.target.target.options.linker_is_gnu { return }
+
+        // If we're doing PGO generation stuff and on a GNU-like linker, use the
+        // "-u" flag to properly pull in the profiler runtime bits.
+        //
+        // This is because LLVM otherwise won't add the needed initialization
+        // for us on Linux (though the extra flag should be harmless if it
+        // does).
+        //
+        // See https://reviews.llvm.org/D14033 and https://reviews.llvm.org/D14030.
+        //
+        // Though it may be worth to try to revert those changes upstream, since
+        // the overhead of the initialization should be minor.
+        self.cmd.arg("-u");
+        self.cmd.arg("__llvm_profile_runtime");
+    }
+
     fn debuginfo(&mut self) {
         // Don't do anything special here for GNU-style linkers.
     }
@@ -509,6 +528,10 @@ fn optimize(&mut self) {
         // Needs more investigation of `/OPT` arguments
     }
 
+    fn pgo_gen(&mut self) {
+        // Nothing needed here.
+    }
+
     fn debuginfo(&mut self) {
         // This will cause the Microsoft linker to generate a PDB file
         // from the CodeView line tables in the object files.
@@ -712,6 +735,10 @@ fn optimize(&mut self) {
         self.cmd.args(&["--memory-init-file", "0"]);
     }
 
+    fn pgo_gen(&mut self) {
+        // noop, but maybe we need something like the gnu linker?
+    }
+
     fn debuginfo(&mut self) {
         // Preserve names or generate source maps depending on debug info
         self.cmd.arg(match self.sess.opts.debuginfo {
@@ -877,6 +904,9 @@ fn gc_sections(&mut self, _keep_metadata: bool) {
     fn optimize(&mut self) {
     }
 
+    fn pgo_gen(&mut self) {
+    }
+
     fn debuginfo(&mut self) {
     }