[PATCH] D122746: [AIX][XCOFF] print unsupported message for llvm-ar big archive write operation

Digger Lin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 30 10:07:56 PDT 2022


DiggerLin created this revision.
DiggerLin added reviewers: jhenderson, daltenty, Esme, PowerPC, hubert.reinterpretcast.
Herald added a subscriber: rupprecht.
Herald added a project: All.
DiggerLin requested review of this revision.
Herald added subscribers: llvm-commits, MaskRay.
Herald added a project: LLVM.

when run "llvm-ar cr" on AIX OS , it  created  a gnu archive, it is not desirable in aix OS. 
instead of creating a gnu archive, the patch will print a unsupport message for llvm-ar big archive write operation  in AIX OS.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D122746

Files:
  llvm/test/tools/llvm-ar/Inputs/xcoff.yaml
  llvm/test/tools/llvm-ar/default-xcoff.test
  llvm/tools/llvm-ar/llvm-ar.cpp


Index: llvm/tools/llvm-ar/llvm-ar.cpp
===================================================================
--- llvm/tools/llvm-ar/llvm-ar.cpp
+++ llvm/tools/llvm-ar/llvm-ar.cpp
@@ -22,6 +22,7 @@
 #include "llvm/Object/MachO.h"
 #include "llvm/Object/ObjectFile.h"
 #include "llvm/Object/SymbolicFile.h"
+#include "llvm/Object/XCOFFObjectFile.h"
 #include "llvm/Support/Chrono.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ConvertUTF.h"
@@ -881,9 +882,11 @@
 }
 
 static object::Archive::Kind getDefaultForHost() {
-  return Triple(sys::getProcessTriple()).isOSDarwin()
+  Triple HostTriple(sys::getProcessTriple());
+  return HostTriple.isOSDarwin()
              ? object::Archive::K_DARWIN
-             : object::Archive::K_GNU;
+             : (HostTriple.isOSAIX() ? object::Archive::K_AIXBIG
+                                     : object::Archive::K_GNU);
 }
 
 static object::Archive::Kind getKindFromMember(const NewArchiveMember &Member) {
@@ -894,7 +897,9 @@
   if (OptionalObject)
     return isa<object::MachOObjectFile>(**OptionalObject)
                ? object::Archive::K_DARWIN
-               : object::Archive::K_GNU;
+               : (isa<object::XCOFFObjectFile>(**OptionalObject)
+                      ? object::Archive::K_AIXBIG
+                      : object::Archive::K_GNU);
 
   // squelch the error in case we had a non-object file
   consumeError(OptionalObject.takeError());
@@ -939,6 +944,8 @@
     else
       Kind = !NewMembers.empty() ? getKindFromMember(NewMembers.front())
                                  : getDefaultForHost();
+    if (Kind == object::Archive::K_AIXBIG)
+      llvm_unreachable("Unsupported big AIX write operation");
     break;
   case GNU:
     Kind = object::Archive::K_GNU;
@@ -1267,10 +1274,10 @@
         arg = arg.drop_front(1);
       }
     } else {
-      if (ArchiveSpecified)
         fail("exactly one archive should be specified");
-      ArchiveSpecified = true;
-      ArchiveName = arg.str();
+        if (ArchiveSpecified)
+          ArchiveSpecified = true;
+        ArchiveName = arg.str();
     }
   }
   if (!ArchiveSpecified) {
Index: llvm/test/tools/llvm-ar/default-xcoff.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-ar/default-xcoff.test
@@ -0,0 +1,11 @@
+; REQUIRES: system-aix 
+;; Test llvm-ar do not big AIX archive write operation.
+
+; RUN: yaml2obj %S/Inputs/xcoff.yaml -o %t.obj
+; RUN: rm -f %t.ar
+; RUN: not --crash llvm-ar cr %t.ar %t.obj 2>&1 | FileCheck %s 
+; RUN: echo "test big archive" > %t.txt
+; RUN: not --crash llvm-ar cr %t.ar %t.txt 2>&1 | FileCheck %s
+
+; CHECK: Unsupported big AIX write operation   
+
Index: llvm/test/tools/llvm-ar/Inputs/xcoff.yaml
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-ar/Inputs/xcoff.yaml
@@ -0,0 +1,3 @@
+--- !XCOFF
+FileHeader:
+  MagicNumber:          0x1DF


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D122746.419194.patch
Type: text/x-patch
Size: 2951 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220330/cf7d0bfe/attachment.bin>


More information about the llvm-commits mailing list