[PATCH] D42733: [ELF] - Use InitTargetOptionsFromCodeGenFlags/ParseCommandLineOptions for parsing LTO options.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 6 01:07:47 PST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL324322: [ELF] - Use InitTargetOptionsFromCodeGenFlags/ParseCommandLineOptions for… (authored by grimar, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D42733?vs=132794&id=132950#toc
Repository:
rL LLVM
https://reviews.llvm.org/D42733
Files:
lld/trunk/ELF/Driver.cpp
lld/trunk/test/ELF/lto-plugin-ignore.s
Index: lld/trunk/ELF/Driver.cpp
===================================================================
--- lld/trunk/ELF/Driver.cpp
+++ lld/trunk/ELF/Driver.cpp
@@ -42,6 +42,7 @@
#include "lld/Common/Driver.h"
#include "lld/Common/ErrorHandler.h"
#include "lld/Common/Memory.h"
+#include "lld/Common/TargetOptionsCommandFlags.h"
#include "lld/Common/Threads.h"
#include "lld/Common/Version.h"
#include "llvm/ADT/StringExtras.h"
@@ -252,18 +253,11 @@
// LTO calls LLVM functions to compile bitcode files to native code.
// Technically this can be delayed until we read bitcode files, but
// we don't bother to do lazily because the initialization is fast.
-static void initLLVM(opt::InputArgList &Args) {
+static void initLLVM() {
InitializeAllTargets();
InitializeAllTargetMCs();
InitializeAllAsmPrinters();
InitializeAllAsmParsers();
-
- // Parse and evaluate -mllvm options.
- std::vector<const char *> V;
- V.push_back("lld (LLVM option parsing)");
- for (auto *Arg : Args.filtered(OPT_mllvm))
- V.push_back(Arg->getValue());
- cl::ParseCommandLineOptions(V.size(), V.data());
}
// Some command line options or some combinations of them are not allowed.
@@ -372,7 +366,7 @@
}
readConfigs(Args);
- initLLVM(Args);
+ initLLVM();
createFiles(Args);
inferMachineType();
setConfigs(Args);
@@ -696,6 +690,7 @@
Config->ZWxneeded = hasZOption(Args, "wxneeded");
// Parse LTO plugin-related options for compatibility with gold.
+ std::vector<const char *> LTOOptions({Config->Argv[0].data()});
for (auto *Arg : Args.filtered(OPT_plugin_opt)) {
StringRef S = Arg->getValue();
if (S == "disable-verify")
@@ -709,11 +704,13 @@
else if (S.startswith("jobs="))
Config->ThinLTOJobs = parseInt(S.substr(5), Arg);
else if (!S.startswith("/") && !S.startswith("-fresolution=") &&
- !S.startswith("-pass-through=") && !S.startswith("mcpu=") &&
- !S.startswith("thinlto") && S != "-function-sections" &&
- S != "-data-sections")
- error(Arg->getSpelling() + ": unknown option: " + S);
+ !S.startswith("-pass-through="))
+ LTOOptions.push_back(S.data());
}
+ // Parse and evaluate -mllvm options.
+ for (auto *Arg : Args.filtered(OPT_mllvm))
+ LTOOptions.push_back(Arg->getValue());
+ cl::ParseCommandLineOptions(LTOOptions.size(), LTOOptions.data());
if (Config->LTOO > 3)
error("invalid optimization level for LTO: " + Twine(Config->LTOO));
Index: lld/trunk/test/ELF/lto-plugin-ignore.s
===================================================================
--- lld/trunk/test/ELF/lto-plugin-ignore.s
+++ lld/trunk/test/ELF/lto-plugin-ignore.s
@@ -5,7 +5,7 @@
# RUN: -plugin-opt=-pass-through=-lgcc -plugin-opt=-function-sections \
# RUN: -plugin-opt=-data-sections -o /dev/null
-# RUN: not ld.lld %t -plugin-opt=-data-sectionssss \
-# RUN: -plugin-opt=-function-sectionsss 2>&1 | FileCheck %s
-# CHECK: unknown option: -data-sectionsss
-# CHECK: unknown option: -function-sectionsss
+# RUN: not ld.lld %t -plugin-opt=-data-sectionxxx \
+# RUN: -plugin-opt=-function-sectionxxx 2>&1 | FileCheck %s
+# CHECK: Unknown command line argument '-data-sectionxxx'
+# CHECK: Unknown command line argument '-function-sectionxxx'
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42733.132950.patch
Type: text/x-patch
Size: 3278 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180206/6986ce72/attachment.bin>
More information about the llvm-commits
mailing list