diff options
Diffstat (limited to 'lld/lib')
-rw-r--r-- | lld/lib/Core/TargetInfo.cpp | 5 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/CoreTargetInfo.cpp | 10 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp | 37 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/ELF/Reader.cpp | 11 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp | 11 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/Native/ReaderNative.cpp | 6 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp | 4 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/Reader.cpp | 3 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/ReaderArchive.cpp | 9 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/ReaderLinkerScript.cpp | 6 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp | 2 |
11 files changed, 51 insertions, 53 deletions
diff --git a/lld/lib/Core/TargetInfo.cpp b/lld/lib/Core/TargetInfo.cpp index da97a10553a..8793b73f02e 100644 --- a/lld/lib/Core/TargetInfo.cpp +++ b/lld/lib/Core/TargetInfo.cpp @@ -37,9 +37,8 @@ error_code TargetInfo::readFile(StringRef path, OwningPtr<llvm::MemoryBuffer> opmb; if (error_code ec = llvm::MemoryBuffer::getFileOrSTDIN(path, opmb)) return ec; - - std::unique_ptr<MemoryBuffer> mb(opmb.take()); - return this->parseFile(mb, result); + + return this->parseFile(std::unique_ptr<MemoryBuffer>(opmb.take()), result); } error_code TargetInfo::writeFile(const File &linkedFile) const { diff --git a/lld/lib/ReaderWriter/CoreTargetInfo.cpp b/lld/lib/ReaderWriter/CoreTargetInfo.cpp index 18da8378090..75d3727301b 100644 --- a/lld/lib/ReaderWriter/CoreTargetInfo.cpp +++ b/lld/lib/ReaderWriter/CoreTargetInfo.cpp @@ -358,12 +358,12 @@ 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(mb,result); + _reader = createReaderYAML(*this); + return _reader->parseFile(std::move(mb), result); } Writer &CoreTargetInfo::writer() const { diff --git a/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp b/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp index 577f5a86107..671df194a24 100644 --- a/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp +++ b/lld/lib/ReaderWriter/ELF/ELFTargetInfo.cpp @@ -91,28 +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); - 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); - } + 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); } - return ec; + // Not a yaml file, assume it is a linkerscript + if (!_linkerScriptReader) + _linkerScriptReader.reset(new ReaderLinkerScript(*this)); + return _linkerScriptReader->parseFile(std::move(mb), result); } Writer &ELFTargetInfo::writer() const { diff --git a/lld/lib/ReaderWriter/ELF/Reader.cpp b/lld/lib/ReaderWriter/ELF/Reader.cpp index cb6e9cde00f..28517611bb4 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), MaxAlignment, _elfTargetInfo, std::move(mb), + getElfArchType(mb.get()), MaxAlignment, _elfTargetInfo, std::move(mb), ec)); if (ec) return ec; @@ -105,14 +105,15 @@ public: } case llvm::sys::ELF_SharedObject_FileType: { auto f = createELF<DynamicFileCreateELFTraits>( - getElfArchType(&*mb), MaxAlignment, _elfTargetInfo, std::move(mb)); + getElfArchType(mb.get()), MaxAlignment, _elfTargetInfo, + std::move(mb)); if (!f) return f; result.push_back(std::move(*f)); break; } case llvm::sys::Archive_FileType: - ec = _readerArchive.parseFile(mb, result); + ec = _readerArchive.parseFile(std::move(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 f60f32ea43c..bc01ae0082b 100644 --- a/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp +++ b/lld/lib/ReaderWriter/MachO/MachOTargetInfo.cpp @@ -209,19 +209,18 @@ 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(mb,result); + return _yamlReader->parseFile(std::move(mb), result); // } - + return error_code::success(); } diff --git a/lld/lib/ReaderWriter/Native/ReaderNative.cpp b/lld/lib/ReaderWriter/Native/ReaderNative.cpp index ac3cf3bfe41..bccd8b8652e 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 b752a794117..5b1fde42720 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 9f08ed27436..7da1f311358 100644 --- a/lld/lib/ReaderWriter/Reader.cpp +++ b/lld/lib/ReaderWriter/Reader.cpp @@ -24,7 +24,6 @@ error_code Reader::readFile(StringRef path, if (error_code ec = llvm::MemoryBuffer::getFileOrSTDIN(path, opmb)) return ec; - std::unique_ptr<MemoryBuffer> mb(opmb.take()); - return this->parseFile(mb, result); + return parseFile(std::unique_ptr<MemoryBuffer>(opmb.take()), result); } } // end namespace lld diff --git a/lld/lib/ReaderWriter/ReaderArchive.cpp b/lld/lib/ReaderWriter/ReaderArchive.cpp index 1928e2fa0f7..c59a04de927 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(mb, result)) + if (_targetInfo.parseFile(std::move(mb), result)) return nullptr; assert(result.size() == 1); @@ -159,8 +159,9 @@ 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()) { @@ -176,7 +177,7 @@ error_code 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(mbc, result))) + if ((ec = _targetInfo.parseFile(std::move(mbc), result))) return ec; } } else { diff --git a/lld/lib/ReaderWriter/ReaderLinkerScript.cpp b/lld/lib/ReaderWriter/ReaderLinkerScript.cpp index 646f97e7f46..12f81c91e74 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 c07bf56a345..26678cc4f3a 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 |