From 21507a4a5a75fada388e3e6c546f6c0550129202 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Mon, 2 May 2016 21:06:57 +0000 Subject: [PATCH] Don't try to create thin bsd archives. Not such variant has been specified yet. llvm-svn: 268305 --- llvm/lib/Object/ArchiveWriter.cpp | 3 +++ llvm/test/Object/archive-format.test | 3 +++ llvm/tools/llvm-ar/llvm-ar.cpp | 4 +++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp index 011c9d5..c7737eb 100644 --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -308,6 +308,9 @@ llvm::writeArchive(StringRef ArcName, std::vector &NewMembers, bool WriteSymtab, object::Archive::Kind Kind, bool Deterministic, bool Thin) { + assert(!Thin || + Kind == object::Archive::K_GNU && + "Only the gnu format has a thin mode"); SmallString<128> TmpArchive; int TmpArchiveFD; if (auto EC = sys::fs::createUniqueFile(ArcName + ".temp-archive-%%%%%%%.a", diff --git a/llvm/test/Object/archive-format.test b/llvm/test/Object/archive-format.test index 651a9b9..70458d5 100644 --- a/llvm/test/Object/archive-format.test +++ b/llvm/test/Object/archive-format.test @@ -62,3 +62,6 @@ THIN-PATH-NEXT: /0 0 0 0 644 4 ` THIN-PATH-NEXT: /20 0 0 0 644 4 ` THIN-PATH-NEXT: /41 0 0 0 644 4 ` THIN-PATH-NEXT: /65 0 0 0 644 4 ` + +RUN: not llvm-ar --format=bsd rcT bad.a 0123456789abcde 0123456789abcdef 2>&1 | FileCheck --check-prefix=BSD-THIN %s +BSD-THIN: Only the gnu format has a thin mode. diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp index e0bd7d2..ae70b2c 100644 --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -585,7 +585,7 @@ performWriteOperation(ArchiveOperation Operation, object::Archive *OldArchive, switch (FormatOpt) { case Default: { Triple T(sys::getProcessTriple()); - if (T.isOSDarwin()) + if (T.isOSDarwin() && !Thin) Kind = object::Archive::K_BSD; else Kind = object::Archive::K_GNU; @@ -595,6 +595,8 @@ performWriteOperation(ArchiveOperation Operation, object::Archive *OldArchive, Kind = object::Archive::K_GNU; break; case BSD: + if (Thin) + fail("Only the gnu format has a thin mode"); Kind = object::Archive::K_BSD; break; } -- 2.7.4