summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-10-07 19:34:51 +0000
committerRui Ueyama <ruiu@google.com>2015-10-07 19:34:51 +0000
commit2cac5843a02917529ba55a030ff21f765e51ec58 (patch)
treeb51085301720037fb7ec6fbce84c684953cc1f38
parent39234fc67e3fbb4320e9000af8f2e0b0bed79d3f (diff)
downloadbcm5719-llvm-2cac5843a02917529ba55a030ff21f765e51ec58.tar.gz
bcm5719-llvm-2cac5843a02917529ba55a030ff21f765e51ec58.zip
ELF2: Define a utility function to handle simple command line options.
llvm-svn: 249592
-rw-r--r--lld/ELF/Config.h4
-rw-r--r--lld/ELF/Driver.cpp40
2 files changed, 19 insertions, 25 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h
index 920b1165b85..40aaa008fed 100644
--- a/lld/ELF/Config.h
+++ b/lld/ELF/Config.h
@@ -29,8 +29,8 @@ enum ELFKind {
struct Configuration {
llvm::StringRef DynamicLinker;
llvm::StringRef Entry;
- llvm::StringRef Fini = "_fini";
- llvm::StringRef Init = "_init";
+ llvm::StringRef Fini;
+ llvm::StringRef Init;
llvm::StringRef OutputFile;
llvm::StringRef SoName;
llvm::StringRef Sysroot;
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 0774252fc60..c31656dbcdb 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -139,18 +139,19 @@ void LinkerDriver::addFile(StringRef Path) {
}
}
+static StringRef
+getString(opt::InputArgList &Args, unsigned Key, StringRef Default = "") {
+ if (auto *Arg = Args.getLastArg(Key))
+ return Arg->getValue();
+ return Default;
+}
+
void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
// Parse command line options.
opt::InputArgList Args = Parser.parse(ArgsArr);
- if (auto *Arg = Args.getLastArg(OPT_output))
- Config->OutputFile = Arg->getValue();
-
- if (auto *Arg = Args.getLastArg(OPT_dynamic_linker))
- Config->DynamicLinker = Arg->getValue();
-
- if (auto *Arg = Args.getLastArg(OPT_sysroot))
- Config->Sysroot = Arg->getValue();
+ for (auto *Arg : Args.filtered(OPT_L))
+ Config->InputSearchPaths.push_back(Arg->getValue());
std::vector<StringRef> RPaths;
for (auto *Arg : Args.filtered(OPT_rpath))
@@ -158,21 +159,6 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
if (!RPaths.empty())
Config->RPath = llvm::join(RPaths.begin(), RPaths.end(), ":");
- for (auto *Arg : Args.filtered(OPT_L))
- Config->InputSearchPaths.push_back(Arg->getValue());
-
- if (auto *Arg = Args.getLastArg(OPT_entry))
- Config->Entry = Arg->getValue();
-
- if (auto *Arg = Args.getLastArg(OPT_fini))
- Config->Fini = Arg->getValue();
-
- if (auto *Arg = Args.getLastArg(OPT_init))
- Config->Init = Arg->getValue();
-
- if (auto *Arg = Args.getLastArg(OPT_soname))
- Config->SoName = Arg->getValue();
-
if (auto *Arg = Args.getLastArg(OPT_m))
setELFType(Arg->getValue());
@@ -186,6 +172,14 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
Config->NoUndefined = Args.hasArg(OPT_no_undefined);
Config->Shared = Args.hasArg(OPT_shared);
+ Config->DynamicLinker = getString(Args, OPT_dynamic_linker);
+ Config->Entry = getString(Args, OPT_entry);
+ Config->Fini = getString(Args, OPT_fini, "_fini");
+ Config->Init = getString(Args, OPT_init, "_init");
+ Config->OutputFile = getString(Args, OPT_output);
+ Config->SoName = getString(Args, OPT_soname);
+ Config->Sysroot = getString(Args, OPT_sysroot);
+
for (auto *Arg : Args.filtered(OPT_z))
if (Arg->getValue() == StringRef("now"))
Config->ZNow = true;
OpenPOWER on IntegriCloud