From fbe69f787ace06f44b6cb1bd3cd45ac703a16a05 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Mon, 8 May 2017 17:13:44 +0000 Subject: Vendor import of lld trunk r302418: https://llvm.org/svn/llvm-project/lld/trunk@302418 --- ELF/InputFiles.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'ELF/InputFiles.cpp') diff --git a/ELF/InputFiles.cpp b/ELF/InputFiles.cpp index 260a78ebbf8e..5f94fc9338a4 100644 --- a/ELF/InputFiles.cpp +++ b/ELF/InputFiles.cpp @@ -596,17 +596,13 @@ SymbolBody *elf::ObjectFile::createSymbolBody(const Elf_Sym *Sym) { } } -template void ArchiveFile::parse() { - File = check(Archive::create(MB), - MB.getBufferIdentifier() + ": failed to parse archive"); +ArchiveFile::ArchiveFile(std::unique_ptr &&File) + : InputFile(ArchiveKind, File->getMemoryBufferRef()), + File(std::move(File)) {} - // Read the symbol table to construct Lazy objects. - for (const Archive::Symbol &Sym : File->symbols()) { +template void ArchiveFile::parse() { + for (const Archive::Symbol &Sym : File->symbols()) Symtab::X->addLazyArchive(this, Sym); - } - - if (File->symbols().begin() == File->symbols().end()) - Config->ArchiveWithoutSymbolsSeen = true; } // Returns a buffer pointing to a member file containing a given symbol. @@ -981,6 +977,13 @@ MemoryBufferRef LazyObjectFile::getBuffer() { return MB; } +InputFile *LazyObjectFile::fetch() { + MemoryBufferRef MBRef = getBuffer(); + if (MBRef.getBuffer().empty()) + return nullptr; + return createObjectFile(MBRef, ArchiveName, OffsetInArchive); +} + template void LazyObjectFile::parse() { for (StringRef Sym : getSymbols()) Symtab::X->addLazyObject(Sym, *this); -- cgit v1.3