[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