diff options
| -rw-r--r-- | lld/COFF/Config.h | 3 | ||||
| -rw-r--r-- | lld/COFF/Driver.cpp | 10 | ||||
| -rw-r--r-- | lld/COFF/Driver.h | 2 | ||||
| -rw-r--r-- | lld/COFF/DriverUtils.cpp | 23 |
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) { |

