diff options
| -rw-r--r-- | lld/ELF/Config.h | 1 | ||||
| -rw-r--r-- | lld/ELF/Driver.cpp | 3 | ||||
| -rw-r--r-- | lld/ELF/LTO.cpp | 2 | ||||
| -rw-r--r-- | lld/ELF/Options.td | 3 | ||||
| -rw-r--r-- | lld/test/ELF/lto/ltopasses-basic.ll | 4 |
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: |

