Don't try to create thin bsd archives.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 2 May 2016 21:06:57 +0000 (21:06 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 2 May 2016 21:06:57 +0000 (21:06 +0000)
Not such variant has been specified yet.

llvm-svn: 268305

llvm/lib/Object/ArchiveWriter.cpp
llvm/test/Object/archive-format.test
llvm/tools/llvm-ar/llvm-ar.cpp

index 011c9d5..c7737eb 100644 (file)
@@ -308,6 +308,9 @@ llvm::writeArchive(StringRef ArcName,
                    std::vector<NewArchiveIterator> &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",
index 651a9b9..70458d5 100644 (file)
@@ -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.
index e0bd7d2..ae70b2c 100644 (file)
@@ -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;
   }