diff options
-rw-r--r-- | llvm/include/llvm/Object/ArchiveWriter.h | 1 | ||||
-rw-r--r-- | llvm/lib/Object/ArchiveWriter.cpp | 11 | ||||
-rw-r--r-- | llvm/test/Object/archive-thin-create.test | 14 |
3 files changed, 23 insertions, 3 deletions
diff --git a/llvm/include/llvm/Object/ArchiveWriter.h b/llvm/include/llvm/Object/ArchiveWriter.h index 6b4084351dd..3e84a5814d7 100644 --- a/llvm/include/llvm/Object/ArchiveWriter.h +++ b/llvm/include/llvm/Object/ArchiveWriter.h @@ -25,6 +25,7 @@ struct NewArchiveMember { sys::TimePoint<std::chrono::seconds> ModTime; unsigned UID = 0, GID = 0, Perms = 0644; + bool IsNew = false; NewArchiveMember() = default; NewArchiveMember(MemoryBufferRef BufRef); diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp index 64d04a0c729..f8e3c5a0a03 100644 --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -45,6 +45,7 @@ NewArchiveMember::getOldMember(const object::Archive::Child &OldMember, return BufOrErr.takeError(); NewArchiveMember M; + assert(M.IsNew == false); M.Buf = MemoryBuffer::getMemBuffer(*BufOrErr, false); if (!Deterministic) { auto ModTimeOrErr = OldMember.getLastModified(); @@ -93,6 +94,7 @@ Expected<NewArchiveMember> NewArchiveMember::getFile(StringRef FileName, return errorCodeToError(std::error_code(errno, std::generic_category())); NewArchiveMember M; + M.IsNew = true; M.Buf = std::move(*MemberBufferOrErr); if (!Deterministic) { M.ModTime = std::chrono::time_point_cast<std::chrono::seconds>( @@ -231,9 +233,12 @@ static void writeStringTable(raw_fd_ostream &Out, StringRef ArcName, } StringMapIndexes.push_back(Out.tell() - StartOffset); - if (Thin) - Out << computeRelativePath(ArcName, Path); - else + if (Thin) { + if (M.IsNew) + Out << computeRelativePath(ArcName, Path); + else + Out << M.Buf->getBufferIdentifier(); + } else Out << Name; Out << "/\n"; diff --git a/llvm/test/Object/archive-thin-create.test b/llvm/test/Object/archive-thin-create.test new file mode 100644 index 00000000000..d9ee518bc2d --- /dev/null +++ b/llvm/test/Object/archive-thin-create.test @@ -0,0 +1,14 @@ +RUN: mkdir -p %t +RUN: cd %t +RUN: mkdir -p foo +RUN: touch foo/test1.o +RUN: touch foo/test2.o +RUN: llvm-ar qcT foo/libtest.a foo/test1.o +RUN: llvm-ar qcT foo/libtest.a foo/test1.o +RUN: llvm-ar qcT foo/libtest.a foo/test2.o +RUN: llvm-ar t foo/libtest.a | FileCheck %s + +CHECK: test1.o +CHECK: test1.o +CHECK: test2.o + |