diff options
Diffstat (limited to 'lld/COFF/InputFiles.cpp')
-rw-r--r-- | lld/COFF/InputFiles.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp index ad21311..a94c984c 100644 --- a/lld/COFF/InputFiles.cpp +++ b/lld/COFF/InputFiles.cpp @@ -149,11 +149,19 @@ std::vector<MemoryBufferRef> lld::coff::getArchiveMembers(COFFLinkerContext &ctx, Archive *file) { std::vector<MemoryBufferRef> v; Error err = Error::success(); + + // Thin archives refer to .o files, so --reproduces needs the .o files too. + bool addToTar = file->isThin() && ctx.driver.tar; + for (const Archive::Child &c : file->children(err)) { MemoryBufferRef mbref = CHECK(c.getMemoryBufferRef(), file->getFileName() + ": could not get the buffer for a child of the archive"); + if (addToTar) { + ctx.driver.tar->append(relativeToRoot(check(c.getFullName())), + mbref.getBuffer()); + } v.push_back(mbref); } if (err) @@ -1412,5 +1420,5 @@ void DLLFile::makeImport(DLLFile::Symbol *s) { memcpy(p, s->dllName.data(), s->dllName.size()); MemoryBufferRef mbref = MemoryBufferRef(StringRef(buf, size), s->dllName); ImportFile *impFile = make<ImportFile>(symtab.ctx, mbref); - symtab.addFile(impFile); + symtab.ctx.driver.addFile(impFile); } |