summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRumeet Dhindsa <rdhindsa@google.com>2018-05-08 22:37:57 +0000
committerRumeet Dhindsa <rdhindsa@google.com>2018-05-08 22:37:57 +0000
commitb5b7d6e19c086528613fcf455d2df70d45eb7d38 (patch)
treed0de8282fbd7d82e2159dbac6d4e2b85f3d4638f
parentd24dcdd1f74b981eea590ebfb9dfd455cea8a8f6 (diff)
downloadbcm5719-llvm-b5b7d6e19c086528613fcf455d2df70d45eb7d38.tar.gz
bcm5719-llvm-b5b7d6e19c086528613fcf455d2df70d45eb7d38.zip
Add support for LTO plugin option obj-path
Differential Revision: https://reviews.llvm.org/D46598 llvm-svn: 331817
-rw-r--r--lld/ELF/Config.h1
-rw-r--r--lld/ELF/Driver.cpp2
-rw-r--r--lld/ELF/LTO.cpp4
-rw-r--r--lld/test/ELF/lto/thinlto.ll11
4 files changed, 11 insertions, 7 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h
index 228b5949f28..c860741e9bd 100644
--- a/lld/ELF/Config.h
+++ b/lld/ELF/Config.h
@@ -86,6 +86,7 @@ struct Configuration {
llvm::StringRef Init;
llvm::StringRef LTOAAPipeline;
llvm::StringRef LTONewPmPasses;
+ llvm::StringRef LTOObjPath;
llvm::StringRef LTOSampleProfile;
llvm::StringRef MapFile;
llvm::StringRef OutputFile;
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 1ac4e235a0f..c15fcf04cc5 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -796,6 +796,8 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
Config->LTODebugPassManager = true;
} else if (S.startswith("sample-profile=")) {
Config->LTOSampleProfile = S.substr(15);
+ } else if (S.startswith("obj-path=")) {
+ Config->LTOObjPath = S.substr(9);
} else if (S == "thinlto-index-only") {
Config->ThinLTOIndexOnly = true;
} else if (S.startswith("thinlto-index-only=")) {
diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp
index 22e1e330a49..3e07463113e 100644
--- a/lld/ELF/LTO.cpp
+++ b/lld/ELF/LTO.cpp
@@ -279,8 +279,8 @@ std::vector<InputFile *> BitcodeCompiler::compile() {
openFile(Path + ".imports");
}
- if (Config->SaveTemps)
- saveBuffer(Buff[0], Config->OutputFile + ".lto.o");
+ if (!Config->LTOObjPath.empty())
+ saveBuffer(Buff[0], Config->LTOObjPath);
// ThinLTO with index only option is required to generate only the index
// files. After that, we exit from linker and ThinLTO backend runs in a
diff --git a/lld/test/ELF/lto/thinlto.ll b/lld/test/ELF/lto/thinlto.ll
index 0cec41d1dbc..227d771d90b 100644
--- a/lld/test/ELF/lto/thinlto.ll
+++ b/lld/test/ELF/lto/thinlto.ll
@@ -49,11 +49,6 @@
; RUN: not ls %t2.o.thinlto.bc
; RUN: not ls %t4.o.thinlto.bc
-; Ensure lld generates one regular LTO file via splitting for ThinLTO builds
-; RUN: rm -f %t.lto.o
-; RUN: ld.lld -save-temps --plugin-opt=thinlto-index-only -shared %t.o %t2.o -o %t
-; RUN: llvm-readobj -h %t.lto.o | FileCheck %s --check-prefix=FORMAT
-
; First force single-threaded mode
; RUN: rm -f %t.lto.o %t1.lto.o
; RUN: ld.lld -save-temps --thinlto-jobs=1 -shared %t.o %t2.o -o %t
@@ -71,6 +66,12 @@
; stable on the final output file itself.
; RUN: ld.lld -shared %t.o %t2.o -o %t2
+; Test to ensure that thinlto-index-only with obj-path creates the file.
+; RUN: rm -f %t5.o
+; RUN: ld.lld --plugin-opt=thinlto-index-only --plugin-opt=obj-path=%t5.o -shared %t.o %t2.o -o %t4
+; RUN: llvm-readobj -h %t5.o | FileCheck %s --check-prefix=FORMAT
+; RUN: llvm-nm %t5.o | count 0
+
; NM: T f
; NM1: T f
; NM1-NOT: U g
OpenPOWER on IntegriCloud