Skip to content

Conversation

lhames
Copy link
Contributor

@lhames lhames commented Oct 1, 2025

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.

@llvmbot
Copy link
Member

llvmbot commented Oct 1, 2025

@llvm/pr-subscribers-llvm-binary-utilities

Author: Lang Hames (lhames)

Changes

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.


Full diff: https://github.com/llvm/llvm-project/pull/161468.diff

4 Files Affected:

  • (modified) llvm/include/llvm/BinaryFormat/MachO.h (+3)
  • (modified) llvm/include/llvm/Object/MachO.h (+3-1)
  • (modified) llvm/lib/BinaryFormat/MachO.cpp (+137)
  • (modified) llvm/lib/Object/MachOObjectFile.cpp (-137)
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..1aae894e35b41 100644
--- a/llvm/lib/BinaryFormat/MachO.cpp
+++ b/llvm/lib/BinaryFormat/MachO.cpp
@@ -123,3 +123,140 @@ 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());
 }

Copy link

github-actions bot commented Oct 1, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

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.
@lhames lhames force-pushed the move-macho-getarchtriple branch from 3457467 to cb3e04f Compare October 1, 2025 01:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants