summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/FileArchive.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-01-15 04:34:31 +0000
committerRui Ueyama <ruiu@google.com>2015-01-15 04:34:31 +0000
commitdf230b21e3c74b0a056db843978500b312f36025 (patch)
tree724728d9f1f973fa796d2e1fef632b6a6260e0f5 /lld/lib/ReaderWriter/FileArchive.cpp
parent6725a83e84a5e6e6ebc8db6fe9199a431e045d79 (diff)
downloadbcm5719-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.cpp13
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 &reg,
- std::vector<std::unique_ptr<File>> &result) const override {
+ loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry &reg,
+ 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));
OpenPOWER on IntegriCloud