[clang] [llvm] [llvm-ar][Archive] Use getDefaultTargetTriple instead of host triple for the fallback archive format. (PR #82888)
Jacek Caban via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 26 08:20:14 PST 2024
https://github.com/cjacek updated https://github.com/llvm/llvm-project/pull/82888
>From 3f23b5ed11ef7453c64da562ad47701cc77ee3e0 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 1/2] [llvm-ar][Archive] Use getDefaultTargetTriple instead of
host triple for the fallback archive format.
---
.../ClangOffloadPackager.cpp | 2 +-
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 +++++++---------
5 files changed, 12 insertions(+), 14 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/include/llvm/Object/Archive.h b/llvm/include/llvm/Object/Archive.h
index 66f07939b11050..a3165c3235e0ed 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();
static object::Archive::Kind getDefaultKindForTriple(Triple &T);
child_iterator child_begin(Error &Err, bool SkipInternal = true) const;
diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp
index d3fdcd9ee88111..6139d9996bdad3 100644
--- a/llvm/lib/Object/Archive.cpp
+++ b/llvm/lib/Object/Archive.cpp
@@ -979,8 +979,8 @@ object::Archive::Kind Archive::getDefaultKindForTriple(Triple &T) {
return object::Archive::K_GNU;
}
-object::Archive::Kind Archive::getDefaultKindForHost() {
- Triple HostTriple(sys::getProcessTriple());
+object::Archive::Kind Archive::getDefaultKind() {
+ Triple HostTriple(sys::getDefaultTargetTriple());
return getDefaultKindForTriple(HostTriple);
}
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp
index 02f72521c8b544..978eff64e5ee7d 100644
--- a/llvm/lib/Object/ArchiveWriter.cpp
+++ b/llvm/lib/Object/ArchiveWriter.cpp
@@ -91,7 +91,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 c58a85c695dacf..0c4392baacd052 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -671,7 +671,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);
@@ -1037,10 +1037,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;
@@ -1335,7 +1335,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;
@@ -1397,8 +1397,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)
@@ -1437,8 +1436,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();
@@ -1469,7 +1467,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) {
>From b09aaea5ab0ef20e17d1728136b13871353e9036 Mon Sep 17 00:00:00 2001
From: Jacek Caban <jacek at codeweavers.com>
Date: Mon, 26 Feb 2024 16:20:58 +0100
Subject: [PATCH 2/2] Update documentation
---
llvm/docs/CommandGuide/llvm-ar.rst | 5 +++--
llvm/docs/ReleaseNotes.rst | 4 ++++
2 files changed, 7 insertions(+), 2 deletions(-)
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
---------------------------------
More information about the llvm-commits
mailing list