diff options
Diffstat (limited to 'lld/ELF/Driver.cpp')
-rw-r--r-- | lld/ELF/Driver.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 95d099fb40c..320f9cbef0f 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -71,7 +71,8 @@ static std::pair<ELFKind, uint16_t> parseEmulation(StringRef S) { // Returns slices of MB by parsing MB as an archive file. // Each slice consists of a member file in the archive. -static std::vector<MemoryBufferRef> getArchiveMembers(MemoryBufferRef MB) { +std::vector<MemoryBufferRef> +LinkerDriver::getArchiveMembers(MemoryBufferRef MB) { std::unique_ptr<Archive> File = check(Archive::create(MB), "failed to parse archive"); @@ -85,6 +86,11 @@ static std::vector<MemoryBufferRef> getArchiveMembers(MemoryBufferRef MB) { File->getFileName()); V.push_back(Mb); } + + // Take ownership of memory buffers created for members of thin archives. + for (std::unique_ptr<MemoryBuffer> &MB : File->takeThinBuffers()) + OwningMBs.push_back(std::move(MB)); + return V; } |