diff options
-rw-r--r-- | lld/include/lld/Core/TargetInfo.h | 7 | ||||
-rw-r--r-- | lld/include/lld/ReaderWriter/CoreTargetInfo.h | 5 | ||||
-rw-r--r-- | lld/include/lld/ReaderWriter/ELFTargetInfo.h | 3 | ||||
-rw-r--r-- | lld/include/lld/ReaderWriter/MachOTargetInfo.h | 5 | ||||
-rw-r--r-- | lld/include/lld/ReaderWriter/PECOFFTargetInfo.h | 2 | ||||
-rw-r--r-- | lld/lib/Core/TargetInfo.cpp | 5 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/CoreTargetInfo.cpp | 3 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp | 3 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp | 4 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/PECOFFTargetInfo.cpp | 2 |
10 files changed, 22 insertions, 17 deletions
diff --git a/lld/include/lld/Core/TargetInfo.h b/lld/include/lld/Core/TargetInfo.h index 96230cab175..cb81eb86019 100644 --- a/lld/include/lld/Core/TargetInfo.h +++ b/lld/include/lld/Core/TargetInfo.h @@ -243,7 +243,7 @@ public: /// is written to the supplied stream. /// /// \returns true if there is an error with the current settings. - virtual bool validate(raw_ostream &diagnostics) = 0; + bool validate(raw_ostream &diagnostics); /// @} @@ -339,6 +339,11 @@ protected: std::vector<StringRef> _deadStripRoots; std::vector<LinkerInput> _inputFiles; std::vector<const char*> _llvmOptions; + std::unique_ptr<Reader> _yamlReader; + + private: + /// Validate the subclass bits. Only called by validate. + virtual bool validateImpl(raw_ostream &diagnostics) = 0; }; } // end namespace lld diff --git a/lld/include/lld/ReaderWriter/CoreTargetInfo.h b/lld/include/lld/ReaderWriter/CoreTargetInfo.h index 339f6196ee8..e2368c3bfbd 100644 --- a/lld/include/lld/ReaderWriter/CoreTargetInfo.h +++ b/lld/include/lld/ReaderWriter/CoreTargetInfo.h @@ -22,10 +22,7 @@ class CoreTargetInfo : public TargetInfo { public: CoreTargetInfo(); - virtual bool validate(raw_ostream &diagnostics) { - return false; - } - + virtual bool validateImpl(raw_ostream &diagnostics); virtual void addPasses(PassManager &pm) const; virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str) const; virtual ErrorOr<std::string> stringFromRelocKind(Reference::Kind kind) const; diff --git a/lld/include/lld/ReaderWriter/ELFTargetInfo.h b/lld/include/lld/ReaderWriter/ELFTargetInfo.h index 2e078f97337..b71e6706df5 100644 --- a/lld/include/lld/ReaderWriter/ELFTargetInfo.h +++ b/lld/include/lld/ReaderWriter/ELFTargetInfo.h @@ -62,7 +62,7 @@ public: const Reference &) const { return false; } - virtual bool validate(raw_ostream &diagnostics); + virtual bool validateImpl(raw_ostream &diagnostics); virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb, @@ -148,7 +148,6 @@ protected: std::vector<StringRef> _inputSearchPaths; llvm::BumpPtrAllocator _extraStrings; std::unique_ptr<Reader> _elfReader; - std::unique_ptr<Reader> _yamlReader; std::unique_ptr<Writer> _writer; std::unique_ptr<Reader> _linkerScriptReader; StringRef _dynamicLinkerPath; diff --git a/lld/include/lld/ReaderWriter/MachOTargetInfo.h b/lld/include/lld/ReaderWriter/MachOTargetInfo.h index db5ab3e70d9..2ef4a392544 100644 --- a/lld/include/lld/ReaderWriter/MachOTargetInfo.h +++ b/lld/include/lld/ReaderWriter/MachOTargetInfo.h @@ -30,8 +30,8 @@ public: virtual void addPasses(PassManager &pm) const; virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str) const; virtual ErrorOr<std::string> stringFromRelocKind(Reference::Kind kind) const; - virtual bool validate(raw_ostream &diagnostics); - + virtual bool validateImpl(raw_ostream &diagnostics); + virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb, std::vector<std::unique_ptr<File>> &result) const; @@ -97,7 +97,6 @@ private: uint64_t _pageZeroSize; mutable std::unique_ptr<mach_o::KindHandler> _kindHandler; mutable std::unique_ptr<Reader> _machoReader; - mutable std::unique_ptr<Reader> _yamlReader; mutable std::unique_ptr<Writer> _writer; }; diff --git a/lld/include/lld/ReaderWriter/PECOFFTargetInfo.h b/lld/include/lld/ReaderWriter/PECOFFTargetInfo.h index 80fa4091aaf..9c6cde9bba3 100644 --- a/lld/include/lld/ReaderWriter/PECOFFTargetInfo.h +++ b/lld/include/lld/ReaderWriter/PECOFFTargetInfo.h @@ -41,7 +41,7 @@ public: std::vector<std::unique_ptr<File>> &result) const; virtual Writer &writer() const; - virtual bool validate(raw_ostream &diagnostics); + virtual bool validateImpl(raw_ostream &diagnostics); virtual void addPasses(PassManager &pm) const {} diff --git a/lld/lib/Core/TargetInfo.cpp b/lld/lib/Core/TargetInfo.cpp index e5d936fe517..c936d6615b2 100644 --- a/lld/lib/Core/TargetInfo.cpp +++ b/lld/lib/Core/TargetInfo.cpp @@ -26,6 +26,11 @@ TargetInfo::TargetInfo() TargetInfo::~TargetInfo() {} +bool TargetInfo::validate(raw_ostream &diagnostics) { + _yamlReader = createReaderYAML(*this); + return validateImpl(diagnostics); +} + error_code TargetInfo::readFile(StringRef path, std::vector<std::unique_ptr<File>> &result) const { OwningPtr<llvm::MemoryBuffer> opmb; diff --git a/lld/lib/ReaderWriter/CoreTargetInfo.cpp b/lld/lib/ReaderWriter/CoreTargetInfo.cpp index a4a4333d6b5..3cc58db2229 100644 --- a/lld/lib/ReaderWriter/CoreTargetInfo.cpp +++ b/lld/lib/ReaderWriter/CoreTargetInfo.cpp @@ -344,6 +344,9 @@ private: CoreTargetInfo::CoreTargetInfo() { } +bool CoreTargetInfo::validateImpl(raw_ostream &diagnostics) { + return false; +} void CoreTargetInfo::addPasses(PassManager &pm) const { for (StringRef name : _passNames) { diff --git a/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp b/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp index b9443fc7fc2..8cd6c2dd7c2 100644 --- a/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp +++ b/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp @@ -63,7 +63,7 @@ uint16_t ELFTargetInfo::getOutputMachine() const { } } -bool ELFTargetInfo::validate(raw_ostream &diagnostics) { +bool ELFTargetInfo::validateImpl(raw_ostream &diagnostics) { if (_outputFileType == elf::ET_EXEC && _entrySymbolName.empty()) { _entrySymbolName = "_start"; @@ -75,7 +75,6 @@ bool ELFTargetInfo::validate(raw_ostream &diagnostics) { } _elfReader = createReaderELF(*this); - _yamlReader = createReaderYAML(*this); _linkerScriptReader.reset(new ReaderLinkerScript(*this)); _writer = _outputYAML ? createWriterYAML(*this) : createWriterELF(*this); return false; diff --git a/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp b/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp index 3a710991a2a..0141e1aed89 100644 --- a/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp +++ b/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp @@ -181,7 +181,7 @@ bool MachOTargetInfo::addUnixThreadLoadCommand() const { } } -bool MachOTargetInfo::validate(raw_ostream &diagnostics) { +bool MachOTargetInfo::validateImpl(raw_ostream &diagnostics) { if ((_outputFileType == mach_o::MH_EXECUTE) && _entrySymbolName.empty()) { if (_outputFileTypeStatic) { _entrySymbolName = "start"; @@ -217,8 +217,6 @@ error_code MachOTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb, // _machoReader = createReaderMachO(*this); // error_code ec = _machoReader->parseFile(mb,result); // if (ec) { - if (!_yamlReader) - _yamlReader = createReaderYAML(*this); return _yamlReader->parseFile(mb, result); // } diff --git a/lld/lib/ReaderWriter/PECOFF/PECOFFTargetInfo.cpp b/lld/lib/ReaderWriter/PECOFF/PECOFFTargetInfo.cpp index e4bdf5a3479..566161516b0 100644 --- a/lld/lib/ReaderWriter/PECOFF/PECOFFTargetInfo.cpp +++ b/lld/lib/ReaderWriter/PECOFF/PECOFFTargetInfo.cpp @@ -22,7 +22,7 @@ error_code PECOFFTargetInfo::parseFile( return _reader->parseFile(mb, result); } -bool PECOFFTargetInfo::validate(raw_ostream &diagnostics) { +bool PECOFFTargetInfo::validateImpl(raw_ostream &diagnostics) { if (_stackReserve < _stackCommit) { diagnostics << "Invalid stack size: reserve size must be equal to or " << "greater than commit size, but got " |