summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/include/lld/Core/TargetInfo.h7
-rw-r--r--lld/include/lld/ReaderWriter/CoreTargetInfo.h5
-rw-r--r--lld/include/lld/ReaderWriter/ELFTargetInfo.h3
-rw-r--r--lld/include/lld/ReaderWriter/MachOTargetInfo.h5
-rw-r--r--lld/include/lld/ReaderWriter/PECOFFTargetInfo.h2
-rw-r--r--lld/lib/Core/TargetInfo.cpp5
-rw-r--r--lld/lib/ReaderWriter/CoreTargetInfo.cpp3
-rw-r--r--lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp3
-rw-r--r--lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp4
-rw-r--r--lld/lib/ReaderWriter/PECOFF/PECOFFTargetInfo.cpp2
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 "
OpenPOWER on IntegriCloud