summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Config.h1
-rw-r--r--lld/ELF/Driver.cpp3
-rw-r--r--lld/ELF/LTO.cpp2
-rw-r--r--lld/ELF/Options.td3
-rw-r--r--lld/test/ELF/lto/ltopasses-basic.ll4
5 files changed, 11 insertions, 2 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h
index ff18e6b1cee..36f9efc9762 100644
--- a/lld/ELF/Config.h
+++ b/lld/ELF/Config.h
@@ -91,6 +91,7 @@ struct Configuration {
uint16_t EMachine = llvm::ELF::EM_NONE;
uint64_t EntryAddr = -1;
unsigned LtoO;
+ std::vector<const char *> MLlvm = {"lld (LLVM option parsing)"};
unsigned Optimize;
};
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 320f9cbef0f..80fb60c8e70 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -308,6 +308,9 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
for (auto *Arg : Args.filtered(OPT_undefined))
Config->Undefined.push_back(Arg->getValue());
+
+ for (auto *Arg : Args.filtered(OPT_mllvm))
+ Config->MLlvm.push_back(Arg->getValue());
}
void LinkerDriver::createFiles(opt::InputArgList &Args) {
diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp
index 180236c475f..6d5d71df3f3 100644
--- a/lld/ELF/LTO.cpp
+++ b/lld/ELF/LTO.cpp
@@ -143,6 +143,8 @@ std::unique_ptr<InputFile> BitcodeCompiler::compile() {
internalize(*GV);
}
+ cl::ParseCommandLineOptions(Config->MLlvm.size(), Config->MLlvm.data());
+
if (Config->SaveTemps)
saveBCFile(Combined, ".lto.bc");
diff --git a/lld/ELF/Options.td b/lld/ELF/Options.td
index ee3de0845f9..df3327fc3d3 100644
--- a/lld/ELF/Options.td
+++ b/lld/ELF/Options.td
@@ -215,5 +215,6 @@ def G : Separate<["-"], "G">;
// Aliases for ignored options
def alias_version_script_version_script : Joined<["--"], "version-script=">, Alias<version_script>;
-// Debugging options
+// Debugging/developer options
def save_temps : Flag<["-"], "save-temps">;
+def mllvm : Separate<["-"], "mllvm">;
diff --git a/lld/test/ELF/lto/ltopasses-basic.ll b/lld/test/ELF/lto/ltopasses-basic.ll
index 4e4c68fd432..5bd5f4122fd 100644
--- a/lld/test/ELF/lto/ltopasses-basic.ll
+++ b/lld/test/ELF/lto/ltopasses-basic.ll
@@ -1,7 +1,7 @@
; REQUIRES: x86
; RUN: rm -f %t.so.lto.bc %t.so.lto.opt.bc %t.so.lto.o
; RUN: llvm-as %s -o %t.o
-; RUN: ld.lld -m elf_x86_64 %t.o -o %t.so -save-temps -shared
+; RUN: ld.lld -m elf_x86_64 %t.o -o %t.so -save-temps -mllvm -debug-pass=Arguments -shared 2>&1 | FileCheck %s --check-prefix=MLLVM
; RUN: llvm-dis %t.so.lto.opt.bc -o - | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
@@ -14,3 +14,5 @@ define void @ctor() {
; `@ctor` doesn't do anything and so the optimizer should kill it, leaving no ctors
; CHECK: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
+
+; MLLVM: Pass Arguments:
OpenPOWER on IntegriCloud