diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-10-07 19:34:51 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-10-07 19:34:51 +0000 |
| commit | 2cac5843a02917529ba55a030ff21f765e51ec58 (patch) | |
| tree | b51085301720037fb7ec6fbce84c684953cc1f38 | |
| parent | 39234fc67e3fbb4320e9000af8f2e0b0bed79d3f (diff) | |
| download | bcm5719-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.h | 4 | ||||
| -rw-r--r-- | lld/ELF/Driver.cpp | 40 |
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; |

