diff options
author | Rui Ueyama <ruiu@google.com> | 2015-01-15 04:34:31 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2015-01-15 04:34:31 +0000 |
commit | df230b21e3c74b0a056db843978500b312f36025 (patch) | |
tree | 724728d9f1f973fa796d2e1fef632b6a6260e0f5 /lld/lib/ReaderWriter/FileArchive.cpp | |
parent | 6725a83e84a5e6e6ebc8db6fe9199a431e045d79 (diff) | |
download | bcm5719-llvm-df230b21e3c74b0a056db843978500b312f36025.tar.gz bcm5719-llvm-df230b21e3c74b0a056db843978500b312f36025.zip |
Re-commit r225674: Convert other drivers to use WrapperNode.
The original commit had an issue with Mac OS dylib files. It didn't
handle fat binary dylib files correctly. This patch includes a fix.
A test for that case has already been committed in r225764.
llvm-svn: 226123
Diffstat (limited to 'lld/lib/ReaderWriter/FileArchive.cpp')
-rw-r--r-- | lld/lib/ReaderWriter/FileArchive.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lld/lib/ReaderWriter/FileArchive.cpp b/lld/lib/ReaderWriter/FileArchive.cpp index 5080c2a819d..a344fdf72a7 100644 --- a/lld/lib/ReaderWriter/FileArchive.cpp +++ b/lld/lib/ReaderWriter/FileArchive.cpp @@ -67,7 +67,9 @@ public: /// \brief parse each member std::error_code - parseAllMembers(std::vector<std::unique_ptr<File>> &result) const override { + parseAllMembers(std::vector<std::unique_ptr<File>> &result) override { + if (std::error_code ec = parse()) + return ec; for (auto mf = _archive->child_begin(), me = _archive->child_end(); mf != me; ++mf) { std::unique_ptr<File> file; @@ -152,9 +154,12 @@ private: mb.getBuffer(), memberPath, false)); std::vector<std::unique_ptr<File>> files; - _registry.parseFile(std::move(memberMB), files); + if (std::error_code ec = _registry.loadFile(std::move(memberMB), files)) + return ec; assert(files.size() == 1); result = std::move(files[0]); + if (std::error_code ec = result->parse()) + return ec; // The memory buffer is co-owned by the archive file and the children, // so that the bufffer is deallocated when all the members are destructed. @@ -232,8 +237,8 @@ public: } std::error_code - parseFile(std::unique_ptr<MemoryBuffer> mb, const Registry ®, - std::vector<std::unique_ptr<File>> &result) const override { + loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry ®, + std::vector<std::unique_ptr<File>> &result) const override { StringRef path = mb->getBufferIdentifier(); std::unique_ptr<FileArchive> file( new FileArchive(std::move(mb), reg, path, _logLoading)); |