diff options
| author | Pete Cooper <peter_cooper@apple.com> | 2015-12-16 20:53:27 +0000 |
|---|---|---|
| committer | Pete Cooper <peter_cooper@apple.com> | 2015-12-16 20:53:27 +0000 |
| commit | 7bf3a85e2b87dc631d223d9c65df99814765dd83 (patch) | |
| tree | abbd99cf461ec6c1e1574c5e7cc6698dd961de28 /lld | |
| parent | 3e3edc91f9804890e9dece957d95a7a1347b971e (diff) | |
| download | bcm5719-llvm-7bf3a85e2b87dc631d223d9c65df99814765dd83.tar.gz bcm5719-llvm-7bf3a85e2b87dc631d223d9c65df99814765dd83.zip | |
Move parsing of LLVM options to parse() method.
We used to parse the LLVM options in Driver::link. However, that is
after parse() where we load files. By moving the LLVM option handling
earlier, we can add DEBUG() to code such as MachONormalizedFileToAtoms.cpp
and have it enabled correctly by '-mllvm --debug'.
llvm-svn: 255819
Diffstat (limited to 'lld')
| -rw-r--r-- | lld/include/lld/Driver/Driver.h | 3 | ||||
| -rw-r--r-- | lld/lib/Driver/CoreDriver.cpp | 2 | ||||
| -rw-r--r-- | lld/lib/Driver/DarwinLdDriver.cpp | 4 | ||||
| -rw-r--r-- | lld/lib/Driver/Driver.cpp | 7 | ||||
| -rw-r--r-- | lld/lib/Driver/GnuLdDriver.cpp | 4 |
5 files changed, 18 insertions, 2 deletions
diff --git a/lld/include/lld/Driver/Driver.h b/lld/include/lld/Driver/Driver.h index 1d0d547442a..4bf0f43f8ce 100644 --- a/lld/include/lld/Driver/Driver.h +++ b/lld/include/lld/Driver/Driver.h @@ -46,6 +46,9 @@ protected: static bool link(LinkingContext &context, raw_ostream &diag = llvm::errs()); + /// Parses the LLVM options from the context. + static void parseLLVMOptions(const LinkingContext &context); + private: Driver() = delete; }; diff --git a/lld/lib/Driver/CoreDriver.cpp b/lld/lib/Driver/CoreDriver.cpp index c9aa7ad50b0..ce864859510 100644 --- a/lld/lib/Driver/CoreDriver.cpp +++ b/lld/lib/Driver/CoreDriver.cpp @@ -159,6 +159,8 @@ bool CoreDriver::parse(llvm::ArrayRef<const char *> args, } } + parseLLVMOptions(ctx); + if (ctx.getNodes().empty()) { diagnostics << "No input files\n"; return false; diff --git a/lld/lib/Driver/DarwinLdDriver.cpp b/lld/lib/Driver/DarwinLdDriver.cpp index cf018934e32..40fad74c952 100644 --- a/lld/lib/Driver/DarwinLdDriver.cpp +++ b/lld/lib/Driver/DarwinLdDriver.cpp @@ -822,6 +822,10 @@ bool DarwinLdDriver::parse(llvm::ArrayRef<const char *> args, } } + // Parse the LLVM options before we process files in case the file handling + // makes use of things like DEBUG(). + parseLLVMOptions(ctx); + // Handle input files and sectcreate. for (auto &arg : parsedArgs) { bool upward; diff --git a/lld/lib/Driver/Driver.cpp b/lld/lib/Driver/Driver.cpp index a040e9cbdc5..6a7a26b3b0f 100644 --- a/lld/lib/Driver/Driver.cpp +++ b/lld/lib/Driver/Driver.cpp @@ -64,8 +64,7 @@ FileVector loadFile(LinkingContext &ctx, StringRef path, bool wholeArchive) { return files; } -/// This is where the link is actually performed. -bool Driver::link(LinkingContext &ctx, raw_ostream &diagnostics) { +void Driver::parseLLVMOptions(const LinkingContext &ctx) { // Honor -mllvm if (!ctx.llvmOptions().empty()) { unsigned numArgs = ctx.llvmOptions().size(); @@ -76,6 +75,10 @@ bool Driver::link(LinkingContext &ctx, raw_ostream &diagnostics) { args[numArgs + 1] = nullptr; llvm::cl::ParseCommandLineOptions(numArgs + 1, args); } +} + +/// This is where the link is actually performed. +bool Driver::link(LinkingContext &ctx, raw_ostream &diagnostics) { if (ctx.getNodes().empty()) return false; diff --git a/lld/lib/Driver/GnuLdDriver.cpp b/lld/lib/Driver/GnuLdDriver.cpp index 5989e216248..8c75126d6d4 100644 --- a/lld/lib/Driver/GnuLdDriver.cpp +++ b/lld/lib/Driver/GnuLdDriver.cpp @@ -637,6 +637,10 @@ bool GnuLdDriver::parse(llvm::ArrayRef<const char *> args, if (ctx->allowLinkWithDynamicLibraries()) ctx->registry().addSupportELFDynamicSharedObjects(*ctx); + // Parse the LLVM options before we process files in case the file handling + // makes use of things like DEBUG(). + parseLLVMOptions(*ctx); + std::stack<int> groupStack; int numfiles = 0; bool asNeeded = false; |

