summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/include/lld/Core/TargetInfo.h11
-rw-r--r--lld/include/lld/ReaderWriter/CoreTargetInfo.h6
-rw-r--r--lld/include/lld/ReaderWriter/ELFTargetInfo.h6
-rw-r--r--lld/include/lld/ReaderWriter/MachOTargetInfo.h7
-rw-r--r--lld/include/lld/ReaderWriter/Reader.h5
-rw-r--r--lld/include/lld/ReaderWriter/ReaderArchive.h2
-rw-r--r--lld/include/lld/ReaderWriter/ReaderLinkerScript.h2
-rw-r--r--lld/lib/Core/TargetInfo.cpp3
-rw-r--r--lld/lib/ReaderWriter/CoreTargetInfo.cpp7
-rw-r--r--lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp36
-rw-r--r--lld/lib/ReaderWriter/ELF/Reader.cpp11
-rw-r--r--lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp7
-rw-r--r--lld/lib/ReaderWriter/Native/ReaderNative.cpp6
-rw-r--r--lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp4
-rw-r--r--lld/lib/ReaderWriter/Reader.cpp3
-rw-r--r--lld/lib/ReaderWriter/ReaderArchive.cpp9
-rw-r--r--lld/lib/ReaderWriter/ReaderLinkerScript.cpp6
-rw-r--r--lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp2
18 files changed, 64 insertions, 69 deletions
diff --git a/lld/include/lld/Core/TargetInfo.h b/lld/include/lld/Core/TargetInfo.h
index c0fdbdae275..4c7a7771d3c 100644
--- a/lld/include/lld/Core/TargetInfo.h
+++ b/lld/include/lld/Core/TargetInfo.h
@@ -260,18 +260,17 @@ public:
/// \param [out] result The instantiated lld::File object is returned here.
/// The \p result is a vector because some input files parse into more than
/// one lld::File (e.g. YAML).
- virtual error_code
- parseFile(std::unique_ptr<MemoryBuffer> inputBuff,
- std::vector<std::unique_ptr<File>> &result) const = 0;
-
+ virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &inputBuff,
+ std::vector<std::unique_ptr<File>> &result) const = 0;
+
/// This is a wrapper around parseFile() where the input file is specified
/// by file system path. The default implementation reads the input file
/// into a memory buffer and calls parseFile().
///
/// \param path This is the file system path to the input file.
/// \param [out] result The instantiated lld::File object is returned here.
- virtual error_code
- readFile(StringRef path, std::vector<std::unique_ptr<File>> &result) const;
+ virtual error_code readFile(StringRef path,
+ std::vector<std::unique_ptr<File>> &result) const;
/// This method is called by core linking to give the Writer a chance
/// to add file format specific "files" to set of files to be linked. This is
diff --git a/lld/include/lld/ReaderWriter/CoreTargetInfo.h b/lld/include/lld/ReaderWriter/CoreTargetInfo.h
index 907456bc54d..339f6196ee8 100644
--- a/lld/include/lld/ReaderWriter/CoreTargetInfo.h
+++ b/lld/include/lld/ReaderWriter/CoreTargetInfo.h
@@ -30,10 +30,10 @@ public:
virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str) const;
virtual ErrorOr<std::string> stringFromRelocKind(Reference::Kind kind) const;
- virtual error_code
- parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const;
+ virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File>> &result) const;
+
void addPassNamed(StringRef name) {
_passNames.push_back(name);
}
diff --git a/lld/include/lld/ReaderWriter/ELFTargetInfo.h b/lld/include/lld/ReaderWriter/ELFTargetInfo.h
index 44aa4eac04d..dabd6dbd915 100644
--- a/lld/include/lld/ReaderWriter/ELFTargetInfo.h
+++ b/lld/include/lld/ReaderWriter/ELFTargetInfo.h
@@ -57,10 +57,10 @@ public:
}
virtual bool validate(raw_ostream &diagnostics);
- virtual error_code
- parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const;
+ virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File>> &result) const;
+
static std::unique_ptr<ELFTargetInfo> create(llvm::Triple);
/// \brief Does this relocation belong in the dynamic plt relocation table?
diff --git a/lld/include/lld/ReaderWriter/MachOTargetInfo.h b/lld/include/lld/ReaderWriter/MachOTargetInfo.h
index 6f0618cec57..db5ab3e70d9 100644
--- a/lld/include/lld/ReaderWriter/MachOTargetInfo.h
+++ b/lld/include/lld/ReaderWriter/MachOTargetInfo.h
@@ -31,10 +31,9 @@ public:
virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str) const;
virtual ErrorOr<std::string> stringFromRelocKind(Reference::Kind kind) const;
virtual bool validate(raw_ostream &diagnostics);
-
- virtual error_code
- parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const;
+
+ virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File>> &result) const;
uint32_t getCPUType() const;
uint32_t getCPUSubType() const;
diff --git a/lld/include/lld/ReaderWriter/Reader.h b/lld/include/lld/ReaderWriter/Reader.h
index 7d6e60d3207..133dc05e677 100644
--- a/lld/include/lld/ReaderWriter/Reader.h
+++ b/lld/include/lld/ReaderWriter/Reader.h
@@ -39,9 +39,8 @@ public:
/// file) and create a File object.
///
/// On success, the resulting File object takes ownership of the MemoryBuffer.
- virtual error_code
- parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const = 0;
+ virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File>> &result) const = 0;
protected:
// only concrete subclasses can be instantiated
diff --git a/lld/include/lld/ReaderWriter/ReaderArchive.h b/lld/include/lld/ReaderWriter/ReaderArchive.h
index f9650b0faf6..c1e8cd7335f 100644
--- a/lld/include/lld/ReaderWriter/ReaderArchive.h
+++ b/lld/include/lld/ReaderWriter/ReaderArchive.h
@@ -35,7 +35,7 @@ public:
/// \brief Returns a vector of Files that are contained in the archive file
/// pointed to by the Memorybuffer
- error_code parseFile(std::unique_ptr<llvm::MemoryBuffer> mb,
+ error_code parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,
std::vector<std::unique_ptr<File>> &result) const;
private:
diff --git a/lld/include/lld/ReaderWriter/ReaderLinkerScript.h b/lld/include/lld/ReaderWriter/ReaderLinkerScript.h
index 8a4725fb4e0..0dfa5d3c20a 100644
--- a/lld/include/lld/ReaderWriter/ReaderLinkerScript.h
+++ b/lld/include/lld/ReaderWriter/ReaderLinkerScript.h
@@ -26,7 +26,7 @@ public:
/// \brief Returns a vector of Files that are contained in the archive file
/// pointed to by the Memorybuffer
- error_code parseFile(std::unique_ptr<llvm::MemoryBuffer> mb,
+ error_code parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,
std::vector<std::unique_ptr<File>> &result) const;
};
diff --git a/lld/lib/Core/TargetInfo.cpp b/lld/lib/Core/TargetInfo.cpp
index 8793b73f02e..eb69bc5772c 100644
--- a/lld/lib/Core/TargetInfo.cpp
+++ b/lld/lib/Core/TargetInfo.cpp
@@ -38,7 +38,8 @@ error_code TargetInfo::readFile(StringRef path,
if (error_code ec = llvm::MemoryBuffer::getFileOrSTDIN(path, opmb))
return ec;
- return this->parseFile(std::unique_ptr<MemoryBuffer>(opmb.take()), result);
+ std::unique_ptr<MemoryBuffer> mb(opmb.take());
+ return this->parseFile(mb, result);
}
error_code TargetInfo::writeFile(const File &linkedFile) const {
diff --git a/lld/lib/ReaderWriter/CoreTargetInfo.cpp b/lld/lib/ReaderWriter/CoreTargetInfo.cpp
index 75d3727301b..a4a4333d6b5 100644
--- a/lld/lib/ReaderWriter/CoreTargetInfo.cpp
+++ b/lld/lib/ReaderWriter/CoreTargetInfo.cpp
@@ -358,12 +358,11 @@ void CoreTargetInfo::addPasses(PassManager &pm) const {
}
}
-error_code
-CoreTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const {
+error_code CoreTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File>> &result) const {
if (!_reader)
_reader = createReaderYAML(*this);
- return _reader->parseFile(std::move(mb), result);
+ return _reader->parseFile(mb,result);
}
Writer &CoreTargetInfo::writer() const {
diff --git a/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp b/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp
index 671df194a24..db3a032feeb 100644
--- a/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp
+++ b/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp
@@ -91,27 +91,27 @@ bool ELFTargetInfo::isDynamic() const {
return false;
}
-error_code
-ELFTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const {
+error_code ELFTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File>> &result) const {
if (!_elfReader)
_elfReader = createReaderELF(*this);
- std::string path = mb->getBufferIdentifier();
- auto magic = llvm::sys::fs::identify_magic(mb->getBuffer());
- if (magic == llvm::sys::fs::file_magic::elf_relocatable ||
- magic == llvm::sys::fs::file_magic::elf_shared_object ||
- magic == llvm::sys::fs::file_magic::archive)
- return _elfReader->parseFile(std::move(mb), result);
- // Not an ELF file, check file extension to see if it might be yaml
- if (StringRef(path).endswith(".objtxt")) {
- if (!_yamlReader)
- _yamlReader = createReaderYAML(*this);
- return _yamlReader->parseFile(std::move(mb), result);
+ error_code ec = _elfReader->parseFile(mb, result);
+ if (ec) {
+ // Not an ELF file, check file extension to see if it might be yaml
+ StringRef path = mb->getBufferIdentifier();
+ if ( path.endswith(".objtxt") ) {
+ if (!_yamlReader)
+ _yamlReader = createReaderYAML(*this);
+ ec = _yamlReader->parseFile(mb, result);
+ }
+ if (ec) {
+ // Not a yaml file, assume it is a linkerscript
+ if (!_linkerScriptReader)
+ _linkerScriptReader.reset(new ReaderLinkerScript(*this));
+ ec = _linkerScriptReader->parseFile(mb, result);
+ }
}
- // Not a yaml file, assume it is a linkerscript
- if (!_linkerScriptReader)
- _linkerScriptReader.reset(new ReaderLinkerScript(*this));
- return _linkerScriptReader->parseFile(std::move(mb), result);
+ return ec;
}
Writer &ELFTargetInfo::writer() const {
diff --git a/lld/lib/ReaderWriter/ELF/Reader.cpp b/lld/lib/ReaderWriter/ELF/Reader.cpp
index 28517611bb4..cb6e9cde00f 100644
--- a/lld/lib/ReaderWriter/ELF/Reader.cpp
+++ b/lld/lib/ReaderWriter/ELF/Reader.cpp
@@ -82,8 +82,8 @@ public:
: lld::Reader(ti), _elfTargetInfo(ti), _readerArchive(ti, *this) {
}
- error_code parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const {
+ error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File> > &result) const {
using llvm::object::ELFType;
llvm::sys::LLVMFileType fileType =
llvm::sys::IdentifyFileType(mb->getBufferStart(),
@@ -96,7 +96,7 @@ public:
switch (fileType) {
case llvm::sys::ELF_Relocatable_FileType: {
std::unique_ptr<File> f(createELF<ELFFileCreateELFTraits>(
- getElfArchType(mb.get()), MaxAlignment, _elfTargetInfo, std::move(mb),
+ getElfArchType(&*mb), MaxAlignment, _elfTargetInfo, std::move(mb),
ec));
if (ec)
return ec;
@@ -105,15 +105,14 @@ public:
}
case llvm::sys::ELF_SharedObject_FileType: {
auto f = createELF<DynamicFileCreateELFTraits>(
- getElfArchType(mb.get()), MaxAlignment, _elfTargetInfo,
- std::move(mb));
+ getElfArchType(&*mb), MaxAlignment, _elfTargetInfo, std::move(mb));
if (!f)
return f;
result.push_back(std::move(*f));
break;
}
case llvm::sys::Archive_FileType:
- ec = _readerArchive.parseFile(std::move(mb), result);
+ ec = _readerArchive.parseFile(mb, result);
break;
default:
return llvm::make_error_code(llvm::errc::executable_format_error);
diff --git a/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp b/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp
index bc01ae0082b..7ada6dad8e2 100644
--- a/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp
+++ b/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp
@@ -209,16 +209,15 @@ void MachOTargetInfo::addPasses(PassManager &pm) const {
pm.add(std::unique_ptr<Pass>(new LayoutPass()));
}
-error_code MachOTargetInfo::parseFile(
- std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const {
+error_code MachOTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File>> &result) const {
// if (!_machoReader)
// _machoReader = createReaderMachO(*this);
// error_code ec = _machoReader->parseFile(mb,result);
// if (ec) {
if (!_yamlReader)
_yamlReader = createReaderYAML(*this);
- return _yamlReader->parseFile(std::move(mb), result);
+ return _yamlReader->parseFile(mb, result);
// }
return error_code::success();
diff --git a/lld/lib/ReaderWriter/Native/ReaderNative.cpp b/lld/lib/ReaderWriter/Native/ReaderNative.cpp
index bccd8b8652e..ac3cf3bfe41 100644
--- a/lld/lib/ReaderWriter/Native/ReaderNative.cpp
+++ b/lld/lib/ReaderWriter/Native/ReaderNative.cpp
@@ -915,9 +915,9 @@ public:
Reader(const TargetInfo &ti)
: lld::Reader(ti) {}
- virtual error_code
- parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<lld::File>> &result) const {
+ virtual error_code parseFile(
+ std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<lld::File> > &result) const {
return File::make(_targetInfo, mb, mb->getBufferIdentifier(), result);
}
};
diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
index 5b1fde42720..b752a794117 100644
--- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
@@ -369,8 +369,8 @@ class ReaderCOFF : public Reader {
public:
ReaderCOFF(const TargetInfo &ti) : Reader(ti) {}
- error_code parseFile(std::unique_ptr<MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const {
+ error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File> > &result) const {
llvm::error_code ec;
std::unique_ptr<File> f(new FileCOFF(_targetInfo, std::move(mb), ec));
if (ec) {
diff --git a/lld/lib/ReaderWriter/Reader.cpp b/lld/lib/ReaderWriter/Reader.cpp
index 7da1f311358..9f08ed27436 100644
--- a/lld/lib/ReaderWriter/Reader.cpp
+++ b/lld/lib/ReaderWriter/Reader.cpp
@@ -24,6 +24,7 @@ error_code Reader::readFile(StringRef path,
if (error_code ec = llvm::MemoryBuffer::getFileOrSTDIN(path, opmb))
return ec;
- return parseFile(std::unique_ptr<MemoryBuffer>(opmb.take()), result);
+ std::unique_ptr<MemoryBuffer> mb(opmb.take());
+ return this->parseFile(mb, result);
}
} // end namespace lld
diff --git a/lld/lib/ReaderWriter/ReaderArchive.cpp b/lld/lib/ReaderWriter/ReaderArchive.cpp
index c59a04de927..1928e2fa0f7 100644
--- a/lld/lib/ReaderWriter/ReaderArchive.cpp
+++ b/lld/lib/ReaderWriter/ReaderArchive.cpp
@@ -48,7 +48,7 @@ public:
if (_targetInfo.logInputFiles())
llvm::outs() << buff->getBufferIdentifier() << "\n";
std::unique_ptr<MemoryBuffer> mb(buff.take());
- if (_targetInfo.parseFile(std::move(mb), result))
+ if (_targetInfo.parseFile(mb, result))
return nullptr;
assert(result.size() == 1);
@@ -159,9 +159,8 @@ public:
// Returns a vector of Files that are contained in the archive file
// pointed to by the MemoryBuffer
-error_code
-ReaderArchive::parseFile(std::unique_ptr<llvm::MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const {
+error_code ReaderArchive::parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File>> &result) const {
error_code ec;
if (_targetInfo.forceLoadAllArchives()) {
@@ -177,7 +176,7 @@ ReaderArchive::parseFile(std::unique_ptr<llvm::MemoryBuffer> mb,
std::unique_ptr<MemoryBuffer> mbc(buff.take());
if (_targetInfo.logInputFiles())
llvm::outs() << buff->getBufferIdentifier() << "\n";
- if ((ec = _targetInfo.parseFile(std::move(mbc), result)))
+ if ((ec = _targetInfo.parseFile(mbc, result)))
return ec;
}
} else {
diff --git a/lld/lib/ReaderWriter/ReaderLinkerScript.cpp b/lld/lib/ReaderWriter/ReaderLinkerScript.cpp
index 12f81c91e74..646f97e7f46 100644
--- a/lld/lib/ReaderWriter/ReaderLinkerScript.cpp
+++ b/lld/lib/ReaderWriter/ReaderLinkerScript.cpp
@@ -79,9 +79,9 @@ private:
} // end anon namespace
namespace lld {
-error_code ReaderLinkerScript::parseFile(
- std::unique_ptr<llvm::MemoryBuffer> mb,
- std::vector<std::unique_ptr<File>> &result) const {
+error_code
+ReaderLinkerScript::parseFile(std::unique_ptr<llvm::MemoryBuffer> &mb,
+ std::vector<std::unique_ptr<File> > &result) const {
auto lsf = LinkerScriptFile::create(_targetInfo, std::move(mb));
if (!lsf)
return lsf;
diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
index 26678cc4f3a..c07bf56a345 100644
--- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
+++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
@@ -1342,7 +1342,7 @@ class ReaderYAML : public Reader {
public:
ReaderYAML(const TargetInfo &ti) : Reader(ti) {}
- error_code parseFile(std::unique_ptr<MemoryBuffer> mb,
+ error_code parseFile(std::unique_ptr<MemoryBuffer> &mb,
std::vector<std::unique_ptr<File>> &result) const {
// Note: we do not take ownership of the MemoryBuffer. That is
// because yaml may produce multiple File objects, so there is no
OpenPOWER on IntegriCloud