From c37759d29ea496b4287005c7da7fe4b5976b5310 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Wed, 1 Oct 2025 11:09:27 +1000 Subject: [PATCH] [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 | 9 +- llvm/include/llvm/Object/MachO.h | 8 +- llvm/lib/BinaryFormat/MachO.cpp | 157 ++++++++++++++++++++++++ llvm/lib/Object/MachOObjectFile.cpp | 158 ------------------------- 4 files changed, 169 insertions(+), 163 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/MachO.h b/llvm/include/llvm/BinaryFormat/MachO.h index 5dbdfb13d1a5f..ad6b27f61ec91 100644 --- a/llvm/include/llvm/BinaryFormat/MachO.h +++ b/llvm/include/llvm/BinaryFormat/MachO.h @@ -17,11 +17,9 @@ #include "llvm/Support/DataTypes.h" #include "llvm/Support/Error.h" #include "llvm/Support/SwapByteOrder.h" +#include "llvm/TargetParser/Triple.h" namespace llvm { - -class Triple; - namespace MachO { // Enums from enum : uint32_t { @@ -1710,6 +1708,11 @@ LLVM_ABI Expected 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); + struct x86_thread_state32_t { uint32_t eax; uint32_t ebx; diff --git a/llvm/include/llvm/Object/MachO.h b/llvm/include/llvm/Object/MachO.h index 3f4a21d2d1bac..0dfe9802009a2 100644 --- a/llvm/include/llvm/Object/MachO.h +++ b/llvm/include/llvm/Object/MachO.h @@ -752,10 +752,14 @@ 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); + const char **ArchFlag = nullptr) { + return MachO::getArchTriple(CPUType, CPUSubType, McpuDefault, ArchFlag); + } static bool isValidArch(StringRef ArchFlag); static ArrayRef getValidArchs(); static Triple getHostArch(); diff --git a/llvm/lib/BinaryFormat/MachO.cpp b/llvm/lib/BinaryFormat/MachO.cpp index f46b9d5147ff1..b2af2434f3518 100644 --- a/llvm/lib/BinaryFormat/MachO.cpp +++ b/llvm/lib/BinaryFormat/MachO.cpp @@ -123,3 +123,160 @@ Expected MachO::getCPUSubType(const Triple &T, return CPU_SUBTYPE_ARM64E_WITH_PTRAUTH_VERSION(PtrAuthABIVersion, 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) + *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..abadb047ef521 100644 --- a/llvm/lib/Object/MachOObjectFile.cpp +++ b/llvm/lib/Object/MachOObjectFile.cpp @@ -2685,164 +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::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()); }