[clang] [llvm] [llvm-ar][Archive] Use getDefaultTargetTriple instead of host triple for the fallback archive format. (PR #82888)
Jacek Caban via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 27 10:46:04 PST 2024
https://github.com/cjacek updated https://github.com/llvm/llvm-project/pull/82888
>From 24c0fae7f777daa235ba435e1ae3479d26da526b Mon Sep 17 00:00:00 2001
From: Jacek Caban <jacek at codeweavers.com>
Date: Sat, 24 Feb 2024 01:16:45 +0100
Subject: [PATCH] [llvm-ar][Archive] Use getDefaultTargetTriple instead of host
triple for the fallback archive format.
---
.../ClangOffloadPackager.cpp | 2 +-
llvm/docs/CommandGuide/llvm-ar.rst | 5 +++--
llvm/docs/ReleaseNotes.rst | 4 ++++
llvm/include/llvm/Object/Archive.h | 2 +-
llvm/lib/Object/Archive.cpp | 4 ++--
llvm/lib/Object/ArchiveWriter.cpp | 2 +-
llvm/tools/llvm-ar/llvm-ar.cpp | 16 +++++++---------
7 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp b/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp
index c36a5aa58cee50..c6d5b31ab512cb 100644
--- a/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp
+++ b/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp
@@ -197,7 +197,7 @@ static Error unbundleImages() {
if (Error E = writeArchive(
Args["file"], Members, SymtabWritingMode::NormalSymtab,
- Archive::getDefaultKindForHost(), true, false, nullptr))
+ Archive::getDefaultKind(), true, false, nullptr))
return E;
} else if (Args.count("file")) {
if (Extracted.size() > 1)
diff --git a/llvm/docs/CommandGuide/llvm-ar.rst b/llvm/docs/CommandGuide/llvm-ar.rst
index f643b214bcc837..03d5b9e41ada38 100644
--- a/llvm/docs/CommandGuide/llvm-ar.rst
+++ b/llvm/docs/CommandGuide/llvm-ar.rst
@@ -262,8 +262,9 @@ Other
.. option:: --format=<type>
This option allows for default, gnu, darwin or bsd ``<type>`` to be selected.
- When creating an ``archive``, ``<type>`` will default to that of the host
- machine.
+ When creating an ``archive`` with the default ``<type>``, :program:``llvm-ar``
+ will attempt to infer it from the input files and fallback to the default
+ toolchain target if unable to do so.
.. option:: -h, --help
diff --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst
index 5be00d9d5a5899..8a3a0ec66ed874 100644
--- a/llvm/docs/ReleaseNotes.rst
+++ b/llvm/docs/ReleaseNotes.rst
@@ -143,6 +143,10 @@ Changes to the LLVM tools
files using reference types and GC are also supported (but also only for
functions, globals, and data, and only for listing symbols and names).
+* llvm-ar now utilizes LLVM_DEFAULT_TARGET_TRIPLE to determine the archive format
+ if it's not specified with the ``--format`` argument and cannot be inferred from
+ input files.
+
Changes to LLDB
---------------------------------
diff --git a/llvm/include/llvm/Object/Archive.h b/llvm/include/llvm/Object/Archive.h
index 3dd99a46507a24..f71630054dc637 100644
--- a/llvm/include/llvm/Object/Archive.h
+++ b/llvm/include/llvm/Object/Archive.h
@@ -338,7 +338,7 @@ class Archive : public Binary {
Kind kind() const { return (Kind)Format; }
bool isThin() const { return IsThin; }
- static object::Archive::Kind getDefaultKindForHost();
+ static object::Archive::Kind getDefaultKind();
child_iterator child_begin(Error &Err, bool SkipInternal = true) const;
child_iterator child_end() const;
diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp
index e447e5b23316f1..9000e9aa81ff41 100644
--- a/llvm/lib/Object/Archive.cpp
+++ b/llvm/lib/Object/Archive.cpp
@@ -969,8 +969,8 @@ Archive::Archive(MemoryBufferRef Source, Error &Err)
Err = Error::success();
}
-object::Archive::Kind Archive::getDefaultKindForHost() {
- Triple HostTriple(sys::getProcessTriple());
+object::Archive::Kind Archive::getDefaultKind() {
+ Triple HostTriple(sys::getDefaultTargetTriple());
return HostTriple.isOSDarwin()
? object::Archive::K_DARWIN
: (HostTriple.isOSAIX() ? object::Archive::K_AIXBIG
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp
index 155926a8c5949d..96e4ec1ee0b777 100644
--- a/llvm/lib/Object/ArchiveWriter.cpp
+++ b/llvm/lib/Object/ArchiveWriter.cpp
@@ -90,7 +90,7 @@ object::Archive::Kind NewArchiveMember::detectKindFromObject() const {
}
}
- return object::Archive::getDefaultKindForHost();
+ return object::Archive::getDefaultKind();
}
Expected<NewArchiveMember>
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index c8800303bc1e42..81cb2a21daf1f2 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -670,7 +670,7 @@ Expected<std::unique_ptr<Binary>> getAsBinary(const Archive::Child &C,
}
template <class A> static bool isValidInBitMode(const A &Member) {
- if (object::Archive::getDefaultKindForHost() != object::Archive::K_AIXBIG)
+ if (object::Archive::getDefaultKind() != object::Archive::K_AIXBIG)
return true;
LLVMContext Context;
Expected<std::unique_ptr<Binary>> BinOrErr = getAsBinary(Member, &Context);
@@ -1036,10 +1036,10 @@ static void performWriteOperation(ArchiveOperation Operation,
}
} else if (NewMembersP)
Kind = !NewMembersP->empty() ? NewMembersP->front().detectKindFromObject()
- : object::Archive::getDefaultKindForHost();
+ : object::Archive::getDefaultKind();
else
Kind = !NewMembers.empty() ? NewMembers.front().detectKindFromObject()
- : object::Archive::getDefaultKindForHost();
+ : object::Archive::getDefaultKind();
break;
case GNU:
Kind = object::Archive::K_GNU;
@@ -1331,7 +1331,7 @@ static int ar_main(int argc, char **argv) {
// Get BitMode from enviorment variable "OBJECT_MODE" for AIX OS, if
// specified.
- if (object::Archive::getDefaultKindForHost() == object::Archive::K_AIXBIG) {
+ if (object::Archive::getDefaultKind() == object::Archive::K_AIXBIG) {
BitMode = getBitMode(getenv("OBJECT_MODE"));
if (BitMode == BitModeTy::Unknown)
BitMode = BitModeTy::Bit32;
@@ -1392,8 +1392,7 @@ static int ar_main(int argc, char **argv) {
continue;
if (strncmp(*ArgIt, "-X", 2) == 0) {
- if (object::Archive::getDefaultKindForHost() ==
- object::Archive::K_AIXBIG) {
+ if (object::Archive::getDefaultKind() == object::Archive::K_AIXBIG) {
Match = *(*ArgIt + 2) != '\0' ? *ArgIt + 2 : *(++ArgIt);
BitMode = getBitMode(Match);
if (BitMode == BitModeTy::Unknown)
@@ -1432,8 +1431,7 @@ static int ranlib_main(int argc, char **argv) {
cl::PrintVersionMessage();
return 0;
} else if (arg.front() == 'X') {
- if (object::Archive::getDefaultKindForHost() ==
- object::Archive::K_AIXBIG) {
+ if (object::Archive::getDefaultKind() == object::Archive::K_AIXBIG) {
HasAIXXOption = true;
arg.consume_front("X");
const char *Xarg = arg.data();
@@ -1464,7 +1462,7 @@ static int ranlib_main(int argc, char **argv) {
}
}
- if (object::Archive::getDefaultKindForHost() == object::Archive::K_AIXBIG) {
+ if (object::Archive::getDefaultKind() == object::Archive::K_AIXBIG) {
// If not specify -X option, get BitMode from enviorment variable
// "OBJECT_MODE" for AIX OS if specify.
if (!HasAIXXOption) {
More information about the cfe-commits
mailing list