Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lld/COFF
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-06-28 05:35:31 +0300
committerRui Ueyama <ruiu@google.com>2015-06-28 05:35:31 +0300
commit06cf3df2d5920de3b006058490a73e2731b034be (patch)
tree513a07a274e2d6c7d3c8b3dac9e0c66edaf0920a /lld/COFF
parentb0a360bf153d7c7dcbd572cf939a2cdbed621949 (diff)
COFF: Handle LINK environment variable.
If LINK is defined and not empty, it's supposed to contain command line options. llvm-svn: 240900
Diffstat (limited to 'lld/COFF')
-rw-r--r--lld/COFF/Driver.cpp2
-rw-r--r--lld/COFF/Driver.h3
-rw-r--r--lld/COFF/DriverUtils.cpp11
3 files changed, 15 insertions, 1 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index f67de4c58032..694f99f46236 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 4258ccaf825f..43e800548190 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 ac186ee635b5..464afb222663 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);