summaryrefslogtreecommitdiffstats
path: root/lld/lib/Driver/UniversalDriver.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-09-11 03:13:20 +0000
committerRui Ueyama <ruiu@google.com>2014-09-11 03:13:20 +0000
commita726ef12a411d379a3924f3db5fa4a43e520a324 (patch)
tree8a286565324cf0afbbc4be5897a31ee3e9a33825 /lld/lib/Driver/UniversalDriver.cpp
parent8e5f548b8117ae11baf3518dc47cca0497f66c87 (diff)
downloadbcm5719-llvm-a726ef12a411d379a3924f3db5fa4a43e520a324.tar.gz
bcm5719-llvm-a726ef12a411d379a3924f3db5fa4a43e520a324.zip
Make getFlavor function.
The dangling "else" at the end of #if looked a bit error-prone. Make it a separate function. No functionality change. llvm-svn: 217568
Diffstat (limited to 'lld/lib/Driver/UniversalDriver.cpp')
-rw-r--r--lld/lib/Driver/UniversalDriver.cpp52
1 files changed, 28 insertions, 24 deletions
diff --git a/lld/lib/Driver/UniversalDriver.cpp b/lld/lib/Driver/UniversalDriver.cpp
index b39bc30d479..0212bb8789b 100644
--- a/lld/lib/Driver/UniversalDriver.cpp
+++ b/lld/lib/Driver/UniversalDriver.cpp
@@ -123,6 +123,32 @@ static ProgramNameParts parseProgramName(StringRef programName) {
return ret;
}
+static Flavor getFlavor(int &argc, const char **&argv,
+ std::unique_ptr<llvm::opt::InputArgList> &parsedArgs) {
+#if LLVM_ON_UNIX
+ if (llvm::sys::path::filename(argv[0]).equals("ld")) {
+#if __APPLE__
+ // On a Darwin systems, if linker binary is named "ld", use Darwin driver.
+ return Flavor::darwin_ld;
+#endif
+ // On a ELF based systems, if linker binary is named "ld", use gnu driver.
+ return Flavor::gnu_ld;
+ }
+#endif
+ if (parsedArgs->getLastArg(OPT_core)) {
+ argc--;
+ argv++;
+ return Flavor::core;
+ }
+ if (llvm::opt::Arg *argFlavor = parsedArgs->getLastArg(OPT_flavor)) {
+ argc -= 2;
+ argv += 2;
+ return strToFlavor(argFlavor->getValue());
+ }
+ StringRef name = llvm::sys::path::stem(argv[0]);
+ return strToFlavor(parseProgramName(name)._flavor);
+}
+
namespace lld {
bool UniversalDriver::link(int argc, const char *argv[],
@@ -152,31 +178,9 @@ bool UniversalDriver::link(int argc, const char *argv[],
return true;
}
- Flavor flavor;
-
-#if LLVM_ON_UNIX
- if (llvm::sys::path::filename(argv[0]).equals("ld")) {
-#if __APPLE__
- // On a Darwin systems, if linker binary is named "ld", use Darwin driver.
- flavor = Flavor::darwin_ld;
-#else
- // On a ELF based systems, if linker binary is named "ld", use gnu driver.
- flavor = Flavor::gnu_ld;
-#endif
- } else
-#endif
- if (parsedArgs->getLastArg(OPT_core)) {
- flavor = Flavor::core;
- argv++;
- argc--;
- } else if (llvm::opt::Arg *argFlavor = parsedArgs->getLastArg(OPT_flavor)) {
- flavor = strToFlavor(argFlavor->getValue());
- argv += 2;
- argc -= 2;
- } else
- flavor = strToFlavor(parseProgramName(programName)._flavor);
-
+ Flavor flavor = getFlavor(argc, argv, parsedArgs);
std::vector<const char *> args(argv, argv + argc);
+
// Switch to appropriate driver.
switch (flavor) {
case Flavor::gnu_ld:
OpenPOWER on IntegriCloud