[llvm] [MachO] Move getArchTriple implementation into BinaryFormat. (PR #161468)
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 3 21:46:06 PDT 2025
https://github.com/lhames updated https://github.com/llvm/llvm-project/pull/161468
>From 1c09fe2a21aa14942e85b158597c00f887c19ba3 Mon Sep 17 00:00:00 2001
From: Lang Hames <lhames at gmail.com>
Date: Wed, 1 Oct 2025 11:09:27 +1000
Subject: [PATCH 1/3] [MachO] Move getArchTriple implementation into
BinaryFormat.
There's nothing ObjectFile specific about getArchTriple, so move it into the
BinaryFormat library so that clients can use it without taking a dependence on
libObject.
MachOObjectFile::getArchTriple is updated to call through to the moved
implementation.
---
llvm/include/llvm/BinaryFormat/MachO.h | 3 +
llvm/include/llvm/Object/MachO.h | 4 +-
llvm/lib/BinaryFormat/MachO.cpp | 136 ++++++++++++++++++++++++
llvm/lib/Object/MachOObjectFile.cpp | 137 -------------------------
4 files changed, 142 insertions(+), 138 deletions(-)
diff --git a/llvm/include/llvm/BinaryFormat/MachO.h b/llvm/include/llvm/BinaryFormat/MachO.h
index 5dbdfb13d1a5f..dfab897ea43cc 100644
--- a/llvm/include/llvm/BinaryFormat/MachO.h
+++ b/llvm/include/llvm/BinaryFormat/MachO.h
@@ -1709,6 +1709,9 @@ LLVM_ABI Expected<uint32_t> getCPUSubType(const Triple &T);
LLVM_ABI Expected<uint32_t> getCPUSubType(const Triple &T,
unsigned PtrAuthABIVersion,
bool PtrAuthKernelABIVersion);
+LLVM_ABI Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
+ const char **McpuDefault = nullptr,
+ const char **ArchFlag = nullptr);
struct x86_thread_state32_t {
uint32_t eax;
diff --git a/llvm/include/llvm/Object/MachO.h b/llvm/include/llvm/Object/MachO.h
index 3f4a21d2d1bac..332d803710b26 100644
--- a/llvm/include/llvm/Object/MachO.h
+++ b/llvm/include/llvm/Object/MachO.h
@@ -755,7 +755,9 @@ class LLVM_ABI MachOObjectFile : public ObjectFile {
static Triple::ArchType getArch(uint32_t CPUType, uint32_t CPUSubType);
static Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
const char **McpuDefault = nullptr,
- const char **ArchFlag = nullptr);
+ const char **ArchFlag = nullptr) {
+ return MachO::getArchTriple(CPUType, CPUSubType, McpuDefault, ArchFlag);
+ }
static bool isValidArch(StringRef ArchFlag);
static ArrayRef<StringRef> getValidArchs();
static Triple getHostArch();
diff --git a/llvm/lib/BinaryFormat/MachO.cpp b/llvm/lib/BinaryFormat/MachO.cpp
index f46b9d5147ff1..d143bcaa2de32 100644
--- a/llvm/lib/BinaryFormat/MachO.cpp
+++ b/llvm/lib/BinaryFormat/MachO.cpp
@@ -123,3 +123,139 @@ Expected<uint32_t> MachO::getCPUSubType(const Triple &T,
return CPU_SUBTYPE_ARM64E_WITH_PTRAUTH_VERSION(PtrAuthABIVersion,
PtrAuthKernelABIVersion);
}
+
+Triple MachO::getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
+ const char **McpuDefault, const char **ArchFlag) {
+ if (McpuDefault)
+ *McpuDefault = nullptr;
+ if (ArchFlag)
+ *ArchFlag = nullptr;
+
+ switch (CPUType) {
+ case MachO::CPU_TYPE_I386:
+ switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
+ case MachO::CPU_SUBTYPE_I386_ALL:
+ if (ArchFlag)
+ *ArchFlag = "i386";
+ return Triple("i386-apple-darwin");
+ default:
+ return Triple();
+ }
+ case MachO::CPU_TYPE_X86_64:
+ switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
+ case MachO::CPU_SUBTYPE_X86_64_ALL:
+ if (ArchFlag)
+ *ArchFlag = "x86_64";
+ return Triple("x86_64-apple-darwin");
+ case MachO::CPU_SUBTYPE_X86_64_H:
+ if (ArchFlag)
+ *ArchFlag = "x86_64h";
+ return Triple("x86_64h-apple-darwin");
+ default:
+ return Triple();
+ }
+ case MachO::CPU_TYPE_ARM:
+ switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
+ case MachO::CPU_SUBTYPE_ARM_V4T:
+ if (ArchFlag)
+ *ArchFlag = "armv4t";
+ return Triple("armv4t-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_V5TEJ:
+ if (ArchFlag)
+ *ArchFlag = "armv5e";
+ return Triple("armv5e-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_XSCALE:
+ if (ArchFlag)
+ *ArchFlag = "xscale";
+ return Triple("xscale-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_V6:
+ if (ArchFlag)
+ *ArchFlag = "armv6";
+ return Triple("armv6-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_V6M:
+ if (McpuDefault)
+ *McpuDefault = "cortex-m0";
+ if (ArchFlag)
+ *ArchFlag = "armv6m";
+ return Triple("armv6m-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_V7:
+ if (ArchFlag)
+ *ArchFlag = "armv7";
+ return Triple("armv7-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_V7EM:
+ if (McpuDefault)
+ *McpuDefault = "cortex-m4";
+ if (ArchFlag)
+ *ArchFlag = "armv7em";
+ return Triple("thumbv7em-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_V7K:
+ if (McpuDefault)
+ *McpuDefault = "cortex-a7";
+ if (ArchFlag)
+ *ArchFlag = "armv7k";
+ return Triple("armv7k-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_V7M:
+ if (McpuDefault)
+ *McpuDefault = "cortex-m3";
+ if (ArchFlag)
+ *ArchFlag = "armv7m";
+ return Triple("thumbv7m-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM_V7S:
+ if (McpuDefault)
+ *McpuDefault = "cortex-a7";
+ if (ArchFlag)
+ *ArchFlag = "armv7s";
+ return Triple("armv7s-apple-darwin");
+ default:
+ return Triple();
+ }
+ case MachO::CPU_TYPE_ARM64:
+ switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
+ case MachO::CPU_SUBTYPE_ARM64_ALL:
+ if (McpuDefault)
+ *McpuDefault = "cyclone";
+ if (ArchFlag)
+ *ArchFlag = "arm64";
+ return Triple("arm64-apple-darwin");
+ case MachO::CPU_SUBTYPE_ARM64E:
+ if (McpuDefault)
+ *McpuDefault = "apple-a12";
+ if (ArchFlag)
+ *ArchFlag = "arm64e";
+ return Triple("arm64e-apple-darwin");
+ default:
+ return Triple();
+ }
+ case MachO::CPU_TYPE_ARM64_32:
+ switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
+ case MachO::CPU_SUBTYPE_ARM64_32_V8:
+ if (McpuDefault)
+ *McpuDefault = "cyclone";
+ if (ArchFlag)
+ *ArchFlag = "arm64_32";
+ return Triple("arm64_32-apple-darwin");
+ default:
+ return Triple();
+ }
+ case MachO::CPU_TYPE_POWERPC:
+ switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
+ case MachO::CPU_SUBTYPE_POWERPC_ALL:
+ if (ArchFlag)
+ *ArchFlag = "ppc";
+ return Triple("ppc-apple-darwin");
+ default:
+ return Triple();
+ }
+ case MachO::CPU_TYPE_POWERPC64:
+ switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
+ case MachO::CPU_SUBTYPE_POWERPC_ALL:
+ if (ArchFlag)
+ *ArchFlag = "ppc64";
+ return Triple("ppc64-apple-darwin");
+ default:
+ return Triple();
+ }
+ default:
+ return Triple();
+ }
+}
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index e09dc947c2779..309a3f3fbc635 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -2706,143 +2706,6 @@ Triple::ArchType MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType)
}
}
-Triple MachOObjectFile::getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
- const char **McpuDefault,
- const char **ArchFlag) {
- if (McpuDefault)
- *McpuDefault = nullptr;
- if (ArchFlag)
- *ArchFlag = nullptr;
-
- switch (CPUType) {
- case MachO::CPU_TYPE_I386:
- switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
- case MachO::CPU_SUBTYPE_I386_ALL:
- if (ArchFlag)
- *ArchFlag = "i386";
- return Triple("i386-apple-darwin");
- default:
- return Triple();
- }
- case MachO::CPU_TYPE_X86_64:
- switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
- case MachO::CPU_SUBTYPE_X86_64_ALL:
- if (ArchFlag)
- *ArchFlag = "x86_64";
- return Triple("x86_64-apple-darwin");
- case MachO::CPU_SUBTYPE_X86_64_H:
- if (ArchFlag)
- *ArchFlag = "x86_64h";
- return Triple("x86_64h-apple-darwin");
- default:
- return Triple();
- }
- case MachO::CPU_TYPE_ARM:
- switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
- case MachO::CPU_SUBTYPE_ARM_V4T:
- if (ArchFlag)
- *ArchFlag = "armv4t";
- return Triple("armv4t-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_V5TEJ:
- if (ArchFlag)
- *ArchFlag = "armv5e";
- return Triple("armv5e-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_XSCALE:
- if (ArchFlag)
- *ArchFlag = "xscale";
- return Triple("xscale-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_V6:
- if (ArchFlag)
- *ArchFlag = "armv6";
- return Triple("armv6-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_V6M:
- if (McpuDefault)
- *McpuDefault = "cortex-m0";
- if (ArchFlag)
- *ArchFlag = "armv6m";
- return Triple("armv6m-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_V7:
- if (ArchFlag)
- *ArchFlag = "armv7";
- return Triple("armv7-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_V7EM:
- if (McpuDefault)
- *McpuDefault = "cortex-m4";
- if (ArchFlag)
- *ArchFlag = "armv7em";
- return Triple("thumbv7em-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_V7K:
- if (McpuDefault)
- *McpuDefault = "cortex-a7";
- if (ArchFlag)
- *ArchFlag = "armv7k";
- return Triple("armv7k-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_V7M:
- if (McpuDefault)
- *McpuDefault = "cortex-m3";
- if (ArchFlag)
- *ArchFlag = "armv7m";
- return Triple("thumbv7m-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM_V7S:
- if (McpuDefault)
- *McpuDefault = "cortex-a7";
- if (ArchFlag)
- *ArchFlag = "armv7s";
- return Triple("armv7s-apple-darwin");
- default:
- return Triple();
- }
- case MachO::CPU_TYPE_ARM64:
- switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
- case MachO::CPU_SUBTYPE_ARM64_ALL:
- if (McpuDefault)
- *McpuDefault = "cyclone";
- if (ArchFlag)
- *ArchFlag = "arm64";
- return Triple("arm64-apple-darwin");
- case MachO::CPU_SUBTYPE_ARM64E:
- if (McpuDefault)
- *McpuDefault = "apple-a12";
- if (ArchFlag)
- *ArchFlag = "arm64e";
- return Triple("arm64e-apple-darwin");
- default:
- return Triple();
- }
- case MachO::CPU_TYPE_ARM64_32:
- switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
- case MachO::CPU_SUBTYPE_ARM64_32_V8:
- if (McpuDefault)
- *McpuDefault = "cyclone";
- if (ArchFlag)
- *ArchFlag = "arm64_32";
- return Triple("arm64_32-apple-darwin");
- default:
- return Triple();
- }
- case MachO::CPU_TYPE_POWERPC:
- switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
- case MachO::CPU_SUBTYPE_POWERPC_ALL:
- if (ArchFlag)
- *ArchFlag = "ppc";
- return Triple("ppc-apple-darwin");
- default:
- return Triple();
- }
- case MachO::CPU_TYPE_POWERPC64:
- switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
- case MachO::CPU_SUBTYPE_POWERPC_ALL:
- if (ArchFlag)
- *ArchFlag = "ppc64";
- return Triple("ppc64-apple-darwin");
- default:
- return Triple();
- }
- default:
- return Triple();
- }
-}
-
Triple MachOObjectFile::getHostArch() {
return Triple(sys::getDefaultTargetTriple());
}
>From 626de30e0fa987da8987ee2a9b7175cc46a23f8d Mon Sep 17 00:00:00 2001
From: Lang Hames <lhames at gmail.com>
Date: Sat, 4 Oct 2025 00:12:20 +1000
Subject: [PATCH 2/3] Move MachOObjectFile::getArch over to BinaryFormat too.
---
llvm/include/llvm/BinaryFormat/MachO.h | 3 +++
llvm/include/llvm/Object/MachO.h | 4 +++-
llvm/lib/BinaryFormat/MachO.cpp | 21 +++++++++++++++++++++
llvm/lib/Object/MachOObjectFile.cpp | 21 ---------------------
4 files changed, 27 insertions(+), 22 deletions(-)
diff --git a/llvm/include/llvm/BinaryFormat/MachO.h b/llvm/include/llvm/BinaryFormat/MachO.h
index dfab897ea43cc..e1d8c04438755 100644
--- a/llvm/include/llvm/BinaryFormat/MachO.h
+++ b/llvm/include/llvm/BinaryFormat/MachO.h
@@ -17,6 +17,7 @@
#include "llvm/Support/DataTypes.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/SwapByteOrder.h"
+#include "llvm/TargetParser/Triple.h"
namespace llvm {
@@ -1709,6 +1710,8 @@ LLVM_ABI Expected<uint32_t> getCPUSubType(const Triple &T);
LLVM_ABI Expected<uint32_t> getCPUSubType(const Triple &T,
unsigned PtrAuthABIVersion,
bool PtrAuthKernelABIVersion);
+
+LLVM_ABI Triple::ArchType getArch(uint32_t CPUType, uint32_t CPUSubType);
LLVM_ABI Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
const char **McpuDefault = nullptr,
const char **ArchFlag = nullptr);
diff --git a/llvm/include/llvm/Object/MachO.h b/llvm/include/llvm/Object/MachO.h
index 332d803710b26..0dfe9802009a2 100644
--- a/llvm/include/llvm/Object/MachO.h
+++ b/llvm/include/llvm/Object/MachO.h
@@ -752,7 +752,9 @@ class LLVM_ABI MachOObjectFile : public ObjectFile {
static StringRef guessLibraryShortName(StringRef Name, bool &isFramework,
StringRef &Suffix);
- static Triple::ArchType getArch(uint32_t CPUType, uint32_t CPUSubType);
+ static Triple::ArchType getArch(uint32_t CPUType, uint32_t CPUSubType) {
+ return MachO::getArch(CPUType, CPUSubType);
+ }
static Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
const char **McpuDefault = nullptr,
const char **ArchFlag = nullptr) {
diff --git a/llvm/lib/BinaryFormat/MachO.cpp b/llvm/lib/BinaryFormat/MachO.cpp
index d143bcaa2de32..b2af2434f3518 100644
--- a/llvm/lib/BinaryFormat/MachO.cpp
+++ b/llvm/lib/BinaryFormat/MachO.cpp
@@ -124,6 +124,27 @@ Expected<uint32_t> MachO::getCPUSubType(const Triple &T,
PtrAuthKernelABIVersion);
}
+Triple::ArchType MachO::getArch(uint32_t CPUType, uint32_t CPUSubType) {
+ switch (CPUType) {
+ case MachO::CPU_TYPE_I386:
+ return Triple::x86;
+ case MachO::CPU_TYPE_X86_64:
+ return Triple::x86_64;
+ case MachO::CPU_TYPE_ARM:
+ return Triple::arm;
+ case MachO::CPU_TYPE_ARM64:
+ return Triple::aarch64;
+ case MachO::CPU_TYPE_ARM64_32:
+ return Triple::aarch64_32;
+ case MachO::CPU_TYPE_POWERPC:
+ return Triple::ppc;
+ case MachO::CPU_TYPE_POWERPC64:
+ return Triple::ppc64;
+ default:
+ return Triple::UnknownArch;
+ }
+}
+
Triple MachO::getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
const char **McpuDefault, const char **ArchFlag) {
if (McpuDefault)
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index 309a3f3fbc635..abadb047ef521 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -2685,27 +2685,6 @@ StringRef MachOObjectFile::getFileFormatName() const {
}
}
-Triple::ArchType MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType) {
- switch (CPUType) {
- case MachO::CPU_TYPE_I386:
- return Triple::x86;
- case MachO::CPU_TYPE_X86_64:
- return Triple::x86_64;
- case MachO::CPU_TYPE_ARM:
- return Triple::arm;
- case MachO::CPU_TYPE_ARM64:
- return Triple::aarch64;
- case MachO::CPU_TYPE_ARM64_32:
- return Triple::aarch64_32;
- case MachO::CPU_TYPE_POWERPC:
- return Triple::ppc;
- case MachO::CPU_TYPE_POWERPC64:
- return Triple::ppc64;
- default:
- return Triple::UnknownArch;
- }
-}
-
Triple MachOObjectFile::getHostArch() {
return Triple(sys::getDefaultTargetTriple());
}
>From d2a7664696e2b65bfaf9ac9049664ea4dd5d3f6a Mon Sep 17 00:00:00 2001
From: Lang Hames <lhames at gmail.com>
Date: Sat, 4 Oct 2025 14:44:01 +1000
Subject: [PATCH 3/3] Remove forward declaration of Triple
---
llvm/include/llvm/BinaryFormat/MachO.h | 3 ---
1 file changed, 3 deletions(-)
diff --git a/llvm/include/llvm/BinaryFormat/MachO.h b/llvm/include/llvm/BinaryFormat/MachO.h
index e1d8c04438755..ad6b27f61ec91 100644
--- a/llvm/include/llvm/BinaryFormat/MachO.h
+++ b/llvm/include/llvm/BinaryFormat/MachO.h
@@ -20,9 +20,6 @@
#include "llvm/TargetParser/Triple.h"
namespace llvm {
-
-class Triple;
-
namespace MachO {
// Enums from <mach-o/loader.h>
enum : uint32_t {
More information about the llvm-commits
mailing list