Skip to content

Commit cd32b9b

Browse files
authored
[MachO] Move getArchTriple implementation into BinaryFormat. (#161468)
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.
1 parent 0ce7cbd commit cd32b9b

File tree

4 files changed

+169
-163
lines changed

4 files changed

+169
-163
lines changed

llvm/include/llvm/BinaryFormat/MachO.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@
1717
#include "llvm/Support/DataTypes.h"
1818
#include "llvm/Support/Error.h"
1919
#include "llvm/Support/SwapByteOrder.h"
20+
#include "llvm/TargetParser/Triple.h"
2021

2122
namespace llvm {
22-
23-
class Triple;
24-
2523
namespace MachO {
2624
// Enums from <mach-o/loader.h>
2725
enum : uint32_t {
@@ -1710,6 +1708,11 @@ LLVM_ABI Expected<uint32_t> getCPUSubType(const Triple &T,
17101708
unsigned PtrAuthABIVersion,
17111709
bool PtrAuthKernelABIVersion);
17121710

1711+
LLVM_ABI Triple::ArchType getArch(uint32_t CPUType, uint32_t CPUSubType);
1712+
LLVM_ABI Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
1713+
const char **McpuDefault = nullptr,
1714+
const char **ArchFlag = nullptr);
1715+
17131716
struct x86_thread_state32_t {
17141717
uint32_t eax;
17151718
uint32_t ebx;

llvm/include/llvm/Object/MachO.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -752,10 +752,14 @@ class LLVM_ABI MachOObjectFile : public ObjectFile {
752752
static StringRef guessLibraryShortName(StringRef Name, bool &isFramework,
753753
StringRef &Suffix);
754754

755-
static Triple::ArchType getArch(uint32_t CPUType, uint32_t CPUSubType);
755+
static Triple::ArchType getArch(uint32_t CPUType, uint32_t CPUSubType) {
756+
return MachO::getArch(CPUType, CPUSubType);
757+
}
756758
static Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
757759
const char **McpuDefault = nullptr,
758-
const char **ArchFlag = nullptr);
760+
const char **ArchFlag = nullptr) {
761+
return MachO::getArchTriple(CPUType, CPUSubType, McpuDefault, ArchFlag);
762+
}
759763
static bool isValidArch(StringRef ArchFlag);
760764
static ArrayRef<StringRef> getValidArchs();
761765
static Triple getHostArch();

llvm/lib/BinaryFormat/MachO.cpp

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,160 @@ Expected<uint32_t> MachO::getCPUSubType(const Triple &T,
123123
return CPU_SUBTYPE_ARM64E_WITH_PTRAUTH_VERSION(PtrAuthABIVersion,
124124
PtrAuthKernelABIVersion);
125125
}
126+
127+
Triple::ArchType MachO::getArch(uint32_t CPUType, uint32_t CPUSubType) {
128+
switch (CPUType) {
129+
case MachO::CPU_TYPE_I386:
130+
return Triple::x86;
131+
case MachO::CPU_TYPE_X86_64:
132+
return Triple::x86_64;
133+
case MachO::CPU_TYPE_ARM:
134+
return Triple::arm;
135+
case MachO::CPU_TYPE_ARM64:
136+
return Triple::aarch64;
137+
case MachO::CPU_TYPE_ARM64_32:
138+
return Triple::aarch64_32;
139+
case MachO::CPU_TYPE_POWERPC:
140+
return Triple::ppc;
141+
case MachO::CPU_TYPE_POWERPC64:
142+
return Triple::ppc64;
143+
default:
144+
return Triple::UnknownArch;
145+
}
146+
}
147+
148+
Triple MachO::getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
149+
const char **McpuDefault, const char **ArchFlag) {
150+
if (McpuDefault)
151+
*McpuDefault = nullptr;
152+
if (ArchFlag)
153+
*ArchFlag = nullptr;
154+
155+
switch (CPUType) {
156+
case MachO::CPU_TYPE_I386:
157+
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
158+
case MachO::CPU_SUBTYPE_I386_ALL:
159+
if (ArchFlag)
160+
*ArchFlag = "i386";
161+
return Triple("i386-apple-darwin");
162+
default:
163+
return Triple();
164+
}
165+
case MachO::CPU_TYPE_X86_64:
166+
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
167+
case MachO::CPU_SUBTYPE_X86_64_ALL:
168+
if (ArchFlag)
169+
*ArchFlag = "x86_64";
170+
return Triple("x86_64-apple-darwin");
171+
case MachO::CPU_SUBTYPE_X86_64_H:
172+
if (ArchFlag)
173+
*ArchFlag = "x86_64h";
174+
return Triple("x86_64h-apple-darwin");
175+
default:
176+
return Triple();
177+
}
178+
case MachO::CPU_TYPE_ARM:
179+
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
180+
case MachO::CPU_SUBTYPE_ARM_V4T:
181+
if (ArchFlag)
182+
*ArchFlag = "armv4t";
183+
return Triple("armv4t-apple-darwin");
184+
case MachO::CPU_SUBTYPE_ARM_V5TEJ:
185+
if (ArchFlag)
186+
*ArchFlag = "armv5e";
187+
return Triple("armv5e-apple-darwin");
188+
case MachO::CPU_SUBTYPE_ARM_XSCALE:
189+
if (ArchFlag)
190+
*ArchFlag = "xscale";
191+
return Triple("xscale-apple-darwin");
192+
case MachO::CPU_SUBTYPE_ARM_V6:
193+
if (ArchFlag)
194+
*ArchFlag = "armv6";
195+
return Triple("armv6-apple-darwin");
196+
case MachO::CPU_SUBTYPE_ARM_V6M:
197+
if (McpuDefault)
198+
*McpuDefault = "cortex-m0";
199+
if (ArchFlag)
200+
*ArchFlag = "armv6m";
201+
return Triple("armv6m-apple-darwin");
202+
case MachO::CPU_SUBTYPE_ARM_V7:
203+
if (ArchFlag)
204+
*ArchFlag = "armv7";
205+
return Triple("armv7-apple-darwin");
206+
case MachO::CPU_SUBTYPE_ARM_V7EM:
207+
if (McpuDefault)
208+
*McpuDefault = "cortex-m4";
209+
if (ArchFlag)
210+
*ArchFlag = "armv7em";
211+
return Triple("thumbv7em-apple-darwin");
212+
case MachO::CPU_SUBTYPE_ARM_V7K:
213+
if (McpuDefault)
214+
*McpuDefault = "cortex-a7";
215+
if (ArchFlag)
216+
*ArchFlag = "armv7k";
217+
return Triple("armv7k-apple-darwin");
218+
case MachO::CPU_SUBTYPE_ARM_V7M:
219+
if (McpuDefault)
220+
*McpuDefault = "cortex-m3";
221+
if (ArchFlag)
222+
*ArchFlag = "armv7m";
223+
return Triple("thumbv7m-apple-darwin");
224+
case MachO::CPU_SUBTYPE_ARM_V7S:
225+
if (McpuDefault)
226+
*McpuDefault = "cortex-a7";
227+
if (ArchFlag)
228+
*ArchFlag = "armv7s";
229+
return Triple("armv7s-apple-darwin");
230+
default:
231+
return Triple();
232+
}
233+
case MachO::CPU_TYPE_ARM64:
234+
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
235+
case MachO::CPU_SUBTYPE_ARM64_ALL:
236+
if (McpuDefault)
237+
*McpuDefault = "cyclone";
238+
if (ArchFlag)
239+
*ArchFlag = "arm64";
240+
return Triple("arm64-apple-darwin");
241+
case MachO::CPU_SUBTYPE_ARM64E:
242+
if (McpuDefault)
243+
*McpuDefault = "apple-a12";
244+
if (ArchFlag)
245+
*ArchFlag = "arm64e";
246+
return Triple("arm64e-apple-darwin");
247+
default:
248+
return Triple();
249+
}
250+
case MachO::CPU_TYPE_ARM64_32:
251+
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
252+
case MachO::CPU_SUBTYPE_ARM64_32_V8:
253+
if (McpuDefault)
254+
*McpuDefault = "cyclone";
255+
if (ArchFlag)
256+
*ArchFlag = "arm64_32";
257+
return Triple("arm64_32-apple-darwin");
258+
default:
259+
return Triple();
260+
}
261+
case MachO::CPU_TYPE_POWERPC:
262+
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
263+
case MachO::CPU_SUBTYPE_POWERPC_ALL:
264+
if (ArchFlag)
265+
*ArchFlag = "ppc";
266+
return Triple("ppc-apple-darwin");
267+
default:
268+
return Triple();
269+
}
270+
case MachO::CPU_TYPE_POWERPC64:
271+
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
272+
case MachO::CPU_SUBTYPE_POWERPC_ALL:
273+
if (ArchFlag)
274+
*ArchFlag = "ppc64";
275+
return Triple("ppc64-apple-darwin");
276+
default:
277+
return Triple();
278+
}
279+
default:
280+
return Triple();
281+
}
282+
}

llvm/lib/Object/MachOObjectFile.cpp

Lines changed: 0 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -2685,164 +2685,6 @@ StringRef MachOObjectFile::getFileFormatName() const {
26852685
}
26862686
}
26872687

2688-
Triple::ArchType MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType) {
2689-
switch (CPUType) {
2690-
case MachO::CPU_TYPE_I386:
2691-
return Triple::x86;
2692-
case MachO::CPU_TYPE_X86_64:
2693-
return Triple::x86_64;
2694-
case MachO::CPU_TYPE_ARM:
2695-
return Triple::arm;
2696-
case MachO::CPU_TYPE_ARM64:
2697-
return Triple::aarch64;
2698-
case MachO::CPU_TYPE_ARM64_32:
2699-
return Triple::aarch64_32;
2700-
case MachO::CPU_TYPE_POWERPC:
2701-
return Triple::ppc;
2702-
case MachO::CPU_TYPE_POWERPC64:
2703-
return Triple::ppc64;
2704-
default:
2705-
return Triple::UnknownArch;
2706-
}
2707-
}
2708-
2709-
Triple MachOObjectFile::getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
2710-
const char **McpuDefault,
2711-
const char **ArchFlag) {
2712-
if (McpuDefault)
2713-
*McpuDefault = nullptr;
2714-
if (ArchFlag)
2715-
*ArchFlag = nullptr;
2716-
2717-
switch (CPUType) {
2718-
case MachO::CPU_TYPE_I386:
2719-
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
2720-
case MachO::CPU_SUBTYPE_I386_ALL:
2721-
if (ArchFlag)
2722-
*ArchFlag = "i386";
2723-
return Triple("i386-apple-darwin");
2724-
default:
2725-
return Triple();
2726-
}
2727-
case MachO::CPU_TYPE_X86_64:
2728-
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
2729-
case MachO::CPU_SUBTYPE_X86_64_ALL:
2730-
if (ArchFlag)
2731-
*ArchFlag = "x86_64";
2732-
return Triple("x86_64-apple-darwin");
2733-
case MachO::CPU_SUBTYPE_X86_64_H:
2734-
if (ArchFlag)
2735-
*ArchFlag = "x86_64h";
2736-
return Triple("x86_64h-apple-darwin");
2737-
default:
2738-
return Triple();
2739-
}
2740-
case MachO::CPU_TYPE_ARM:
2741-
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
2742-
case MachO::CPU_SUBTYPE_ARM_V4T:
2743-
if (ArchFlag)
2744-
*ArchFlag = "armv4t";
2745-
return Triple("armv4t-apple-darwin");
2746-
case MachO::CPU_SUBTYPE_ARM_V5TEJ:
2747-
if (ArchFlag)
2748-
*ArchFlag = "armv5e";
2749-
return Triple("armv5e-apple-darwin");
2750-
case MachO::CPU_SUBTYPE_ARM_XSCALE:
2751-
if (ArchFlag)
2752-
*ArchFlag = "xscale";
2753-
return Triple("xscale-apple-darwin");
2754-
case MachO::CPU_SUBTYPE_ARM_V6:
2755-
if (ArchFlag)
2756-
*ArchFlag = "armv6";
2757-
return Triple("armv6-apple-darwin");
2758-
case MachO::CPU_SUBTYPE_ARM_V6M:
2759-
if (McpuDefault)
2760-
*McpuDefault = "cortex-m0";
2761-
if (ArchFlag)
2762-
*ArchFlag = "armv6m";
2763-
return Triple("armv6m-apple-darwin");
2764-
case MachO::CPU_SUBTYPE_ARM_V7:
2765-
if (ArchFlag)
2766-
*ArchFlag = "armv7";
2767-
return Triple("armv7-apple-darwin");
2768-
case MachO::CPU_SUBTYPE_ARM_V7EM:
2769-
if (McpuDefault)
2770-
*McpuDefault = "cortex-m4";
2771-
if (ArchFlag)
2772-
*ArchFlag = "armv7em";
2773-
return Triple("thumbv7em-apple-darwin");
2774-
case MachO::CPU_SUBTYPE_ARM_V7K:
2775-
if (McpuDefault)
2776-
*McpuDefault = "cortex-a7";
2777-
if (ArchFlag)
2778-
*ArchFlag = "armv7k";
2779-
return Triple("armv7k-apple-darwin");
2780-
case MachO::CPU_SUBTYPE_ARM_V7M:
2781-
if (McpuDefault)
2782-
*McpuDefault = "cortex-m3";
2783-
if (ArchFlag)
2784-
*ArchFlag = "armv7m";
2785-
return Triple("thumbv7m-apple-darwin");
2786-
case MachO::CPU_SUBTYPE_ARM_V7S:
2787-
if (McpuDefault)
2788-
*McpuDefault = "cortex-a7";
2789-
if (ArchFlag)
2790-
*ArchFlag = "armv7s";
2791-
return Triple("armv7s-apple-darwin");
2792-
default:
2793-
return Triple();
2794-
}
2795-
case MachO::CPU_TYPE_ARM64:
2796-
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
2797-
case MachO::CPU_SUBTYPE_ARM64_ALL:
2798-
if (McpuDefault)
2799-
*McpuDefault = "cyclone";
2800-
if (ArchFlag)
2801-
*ArchFlag = "arm64";
2802-
return Triple("arm64-apple-darwin");
2803-
case MachO::CPU_SUBTYPE_ARM64E:
2804-
if (McpuDefault)
2805-
*McpuDefault = "apple-a12";
2806-
if (ArchFlag)
2807-
*ArchFlag = "arm64e";
2808-
return Triple("arm64e-apple-darwin");
2809-
default:
2810-
return Triple();
2811-
}
2812-
case MachO::CPU_TYPE_ARM64_32:
2813-
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
2814-
case MachO::CPU_SUBTYPE_ARM64_32_V8:
2815-
if (McpuDefault)
2816-
*McpuDefault = "cyclone";
2817-
if (ArchFlag)
2818-
*ArchFlag = "arm64_32";
2819-
return Triple("arm64_32-apple-darwin");
2820-
default:
2821-
return Triple();
2822-
}
2823-
case MachO::CPU_TYPE_POWERPC:
2824-
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
2825-
case MachO::CPU_SUBTYPE_POWERPC_ALL:
2826-
if (ArchFlag)
2827-
*ArchFlag = "ppc";
2828-
return Triple("ppc-apple-darwin");
2829-
default:
2830-
return Triple();
2831-
}
2832-
case MachO::CPU_TYPE_POWERPC64:
2833-
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
2834-
case MachO::CPU_SUBTYPE_POWERPC_ALL:
2835-
if (ArchFlag)
2836-
*ArchFlag = "ppc64";
2837-
return Triple("ppc64-apple-darwin");
2838-
default:
2839-
return Triple();
2840-
}
2841-
default:
2842-
return Triple();
2843-
}
2844-
}
2845-
28462688
Triple MachOObjectFile::getHostArch() {
28472689
return Triple(sys::getDefaultTargetTriple());
28482690
}

0 commit comments

Comments
 (0)