summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/Config.h3
-rw-r--r--lld/COFF/Driver.cpp10
-rw-r--r--lld/COFF/Driver.h2
-rw-r--r--lld/COFF/DriverUtils.cpp23
4 files changed, 17 insertions, 21 deletions
diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h
index c94134ad274..932b2078848 100644
--- a/lld/COFF/Config.h
+++ b/lld/COFF/Config.h
@@ -20,6 +20,7 @@
namespace lld {
namespace coff {
+using llvm::COFF::IMAGE_FILE_MACHINE_UNKNOWN;
using llvm::COFF::WindowsSubsystem;
using llvm::StringRef;
class Undefined;
@@ -45,7 +46,7 @@ struct Export {
struct Configuration {
enum ManifestKind { SideBySide, Embed, No };
- llvm::COFF::MachineTypes MachineType = llvm::COFF::IMAGE_FILE_MACHINE_AMD64;
+ llvm::COFF::MachineTypes MachineType = IMAGE_FILE_MACHINE_UNKNOWN;
bool Verbose = false;
WindowsSubsystem Subsystem = llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN;
Undefined *Entry = nullptr;
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 24ef2285c3a..e582f348998 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -322,12 +322,12 @@ bool LinkerDriver::link(llvm::ArrayRef<const char *> ArgsArr) {
}
// Handle /machine
- auto MTOrErr = getMachineType(&Args);
- if (auto EC = MTOrErr.getError()) {
- llvm::errs() << EC.message() << "\n";
- return false;
+ if (auto *Arg = Args.getLastArg(OPT_machine)) {
+ ErrorOr<MachineTypes> MTOrErr = getMachineType(Arg->getValue());
+ if (MTOrErr.getError())
+ return false;
+ Config->MachineType = MTOrErr.get();
}
- Config->MachineType = MTOrErr.get();
// Handle /nodefaultlib:<filename>
for (auto *Arg : Args.filtered(OPT_nodefaultlib))
diff --git a/lld/COFF/Driver.h b/lld/COFF/Driver.h
index b2a3b532526..3cdfc06feb6 100644
--- a/lld/COFF/Driver.h
+++ b/lld/COFF/Driver.h
@@ -117,7 +117,7 @@ std::error_code writeImportLibrary();
void printHelp(const char *Argv0);
// For /machine option.
-ErrorOr<MachineTypes> getMachineType(llvm::opt::InputArgList *Args);
+ErrorOr<MachineTypes> getMachineType(StringRef Arg);
StringRef machineTypeToStr(MachineTypes MT);
// Parses a string in the form of "<integer>[,<integer>]".
diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp
index 7ca8e87ee19..0247d291e99 100644
--- a/lld/COFF/DriverUtils.cpp
+++ b/lld/COFF/DriverUtils.cpp
@@ -79,21 +79,16 @@ private:
} // anonymous namespace
// Returns /machine's value.
-ErrorOr<MachineTypes> getMachineType(llvm::opt::InputArgList *Args) {
- if (auto *Arg = Args->getLastArg(OPT_machine)) {
- StringRef S(Arg->getValue());
- MachineTypes MT = StringSwitch<MachineTypes>(S.lower())
- .Case("arm", IMAGE_FILE_MACHINE_ARMNT)
- .Case("x64", IMAGE_FILE_MACHINE_AMD64)
- .Case("x86", IMAGE_FILE_MACHINE_I386)
- .Default(IMAGE_FILE_MACHINE_UNKNOWN);
- if (MT == IMAGE_FILE_MACHINE_UNKNOWN) {
- llvm::errs() << "unknown /machine argument" << S << "\n";
- return make_error_code(LLDError::InvalidOption);
- }
+ErrorOr<MachineTypes> getMachineType(StringRef S) {
+ MachineTypes MT = StringSwitch<MachineTypes>(S.lower())
+ .Case("arm", IMAGE_FILE_MACHINE_ARMNT)
+ .Case("x64", IMAGE_FILE_MACHINE_AMD64)
+ .Case("x86", IMAGE_FILE_MACHINE_I386)
+ .Default(IMAGE_FILE_MACHINE_UNKNOWN);
+ if (MT != IMAGE_FILE_MACHINE_UNKNOWN)
return MT;
- }
- return IMAGE_FILE_MACHINE_UNKNOWN;
+ llvm::errs() << "unknown /machine argument" << S << "\n";
+ return make_error_code(LLDError::InvalidOption);
}
StringRef machineTypeToStr(MachineTypes MT) {
OpenPOWER on IntegriCloud