diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-06-28 02:35:31 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-06-28 02:35:31 +0000 |
| commit | 06cf3df2d5920de3b006058490a73e2731b034be (patch) | |
| tree | 513a07a274e2d6c7d3c8b3dac9e0c66edaf0920a | |
| parent | b0a360bf153d7c7dcbd572cf939a2cdbed621949 (diff) | |
| download | bcm5719-llvm-06cf3df2d5920de3b006058490a73e2731b034be.tar.gz bcm5719-llvm-06cf3df2d5920de3b006058490a73e2731b034be.zip | |
COFF: Handle LINK environment variable.
If LINK is defined and not empty, it's supposed to contain
command line options.
llvm-svn: 240900
| -rw-r--r-- | lld/COFF/Driver.cpp | 2 | ||||
| -rw-r--r-- | lld/COFF/Driver.h | 3 | ||||
| -rw-r--r-- | lld/COFF/DriverUtils.cpp | 11 | ||||
| -rw-r--r-- | lld/test/COFF/linkenv.test | 5 |
4 files changed, 20 insertions, 1 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index f67de4c5803..694f99f4623 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -233,7 +233,7 @@ bool LinkerDriver::link(llvm::ArrayRef<const char *> ArgsArr) { return llvm::libDriverMain(ArgsArr.slice(1)) == 0; // Parse command line options. - auto ArgsOrErr = Parser.parse(ArgsArr); + auto ArgsOrErr = Parser.parseLINK(ArgsArr); if (auto EC = ArgsOrErr.getError()) { llvm::errs() << EC.message() << "\n"; return false; diff --git a/lld/COFF/Driver.h b/lld/COFF/Driver.h index 4258ccaf825..43e80054819 100644 --- a/lld/COFF/Driver.h +++ b/lld/COFF/Driver.h @@ -44,6 +44,9 @@ public: // Parses command line options. ErrorOr<llvm::opt::InputArgList> parse(llvm::ArrayRef<const char *> Args); + // Concatenate LINK environment varirable and given arguments and parse them. + ErrorOr<llvm::opt::InputArgList> parseLINK(llvm::ArrayRef<const char *> Args); + // Tokenizes a given string and then parses as command line options. ErrorOr<llvm::opt::InputArgList> parse(StringRef S) { return parse(tokenize(S)); diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp index ac186ee635b..464afb22266 100644 --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -577,6 +577,17 @@ ArgParser::parse(llvm::ArrayRef<const char *> Args) { return parse(V); } +ErrorOr<llvm::opt::InputArgList> +ArgParser::parseLINK(ArrayRef<const char *> Args) { + // Concatenate LINK env and given arguments and parse them. + Optional<std::string> Env = Process::GetEnv("LINK"); + if (!Env) + return parse(Args); + std::vector<const char *> V = tokenize(*Env); + V.insert(V.end(), Args.begin() + 1, Args.end()); + return parse(V); +} + std::vector<const char *> ArgParser::tokenize(StringRef S) { SmallVector<const char *, 16> Tokens; BumpPtrStringSaver Saver(AllocAux); diff --git a/lld/test/COFF/linkenv.test b/lld/test/COFF/linkenv.test new file mode 100644 index 00000000000..25253c6490b --- /dev/null +++ b/lld/test/COFF/linkenv.test @@ -0,0 +1,5 @@ +# RUN: env LINK="-help -foo" lld -flavor link2 >& %t.log +# RUN: FileCheck %s < %t.log + +CHECK: unknown argument: -foo +CHECK: OVERVIEW: LLVM Linker |

