@@ -274,8 +274,13 @@ void LinkerDriver::addBuffer(std::unique_ptr<MemoryBuffer> mb,
274274 make<std::unique_ptr<Archive>>(std::move (file)); // take ownership
275275
276276 int memberIndex = 0 ;
277- for (MemoryBufferRef m : getArchiveMembers (ctx, archive))
278- addArchiveBuffer (m, " <whole-archive>" , filename, memberIndex++);
277+ for (MemoryBufferRef m : getArchiveMembers (ctx, archive)) {
278+ if (!archive->isThin ())
279+ addArchiveBuffer (m, " <whole-archive>" , filename, memberIndex++);
280+ else
281+ addThinArchiveBuffer (m, " <whole-archive>" );
282+ }
283+
279284 return ;
280285 }
281286 addFile (make<ArchiveFile>(ctx, mbref));
@@ -386,6 +391,14 @@ void LinkerDriver::addArchiveBuffer(MemoryBufferRef mb, StringRef symName,
386391 Log (ctx) << " Loaded " << obj << " for " << symName;
387392}
388393
394+ void LinkerDriver::addThinArchiveBuffer (MemoryBufferRef mb, StringRef symName) {
395+ // Pass an empty string as the archive name and an offset of 0 so that
396+ // the original filename is used as the buffer identifier. This is
397+ // useful for DTLTO, where having the member identifier be the actual
398+ // path on disk enables distribution of bitcode files during ThinLTO.
399+ addArchiveBuffer (mb, symName, /* parentName=*/ " " , /* OffsetInArchive=*/ 0 );
400+ }
401+
389402void LinkerDriver::enqueueArchiveMember (const Archive::Child &c,
390403 const Archive::Symbol &sym,
391404 StringRef parentName) {
@@ -422,11 +435,8 @@ void LinkerDriver::enqueueArchiveMember(const Archive::Child &c,
422435 reportBufferError (errorCodeToError (mbOrErr.second ), childName);
423436 llvm::TimeTraceScope timeScope (" Archive: " ,
424437 mbOrErr.first ->getBufferIdentifier ());
425- // Pass empty string as archive name so that the original filename is
426- // used as the buffer identifier.
427- ctx.driver .addArchiveBuffer (takeBuffer (std::move (mbOrErr.first )),
428- toCOFFString (ctx, sym), " " ,
429- /* OffsetInArchive=*/ 0 );
438+ ctx.driver .addThinArchiveBuffer (takeBuffer (std::move (mbOrErr.first )),
439+ toCOFFString (ctx, sym));
430440 });
431441}
432442
0 commit comments