]> git.lizzy.rs Git - rust.git/commitdiff
librustc_trans: Mark some profiler symbols as exported to avoid LTO removing them.
authorEmilio Cobos Álvarez <emilio@crisal.io>
Tue, 13 Mar 2018 11:40:57 +0000 (12:40 +0100)
committerEmilio Cobos Álvarez <emilio@crisal.io>
Sun, 25 Mar 2018 01:30:06 +0000 (03:30 +0200)
src/librustc_trans/back/symbol_export.rs
src/test/run-make/pgo-gen-lto/Makefile [new file with mode: 0644]
src/test/run-make/pgo-gen-lto/test.rs [new file with mode: 0644]

index fd79ae7435ed1b74857c187b5aaa5d8fcde9b661..d205e6ca4eda6ed5b78e5afd8cfeeab40af71b07 100644 (file)
@@ -223,6 +223,20 @@ fn exported_symbols_provider_local<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
         }
     }
 
+    if tcx.sess.opts.debugging_opts.pgo_gen.is_some() {
+        // These are weak symbols that point to the profile version and the
+        // profile name, which need to be treated as exported so LTO doesn't nix
+        // them.
+        const PROFILER_WEAK_SYMBOLS: [&'static str; 2] = [
+            "__llvm_profile_raw_version",
+            "__llvm_profile_filename",
+        ];
+        for sym in &PROFILER_WEAK_SYMBOLS {
+            let exported_symbol = ExportedSymbol::NoDefId(SymbolName::new(sym));
+            symbols.push((exported_symbol, SymbolExportLevel::C));
+        }
+    }
+
     if tcx.sess.crate_types.borrow().contains(&config::CrateTypeDylib) {
         let symbol_name = metadata_symbol_name(tcx);
         let exported_symbol = ExportedSymbol::NoDefId(SymbolName::new(&symbol_name));
diff --git a/src/test/run-make/pgo-gen-lto/Makefile b/src/test/run-make/pgo-gen-lto/Makefile
new file mode 100644 (file)
index 0000000..5de2c70
--- /dev/null
@@ -0,0 +1,8 @@
+-include ../tools.mk
+
+all:
+ifeq ($(PROFILER_SUPPORT),1)
+       $(RUSTC) -Copt-level=3 -Clto=fat -Z pgo-gen=test.profraw test.rs
+       $(call RUN,test) || exit 1
+       [ -e "$(TMPDIR)/test.profraw" ] || (echo "No .profraw file"; exit 1)
+endif
diff --git a/src/test/run-make/pgo-gen-lto/test.rs b/src/test/run-make/pgo-gen-lto/test.rs
new file mode 100644 (file)
index 0000000..3f07b46
--- /dev/null
@@ -0,0 +1,11 @@
+// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {}