Skip to content

Commit 5401210

Browse files
authored
Reapply [MachO] Move getArchTriple implementation..." with fixes. (#161949)
This reapplies cd32b9b, which was reverted in 25e02a4 due to bot failures. The failures all appear to be link errors due to the Object library not depending on BinaryFormat. This commit adds the missing dependence.
1 parent 823094e commit 5401210

File tree

5 files changed

+170
-163
lines changed

5 files changed

+170
-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/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ add_llvm_component_library(LLVMObject
4545

4646
LINK_COMPONENTS
4747
BitReader
48+
BinaryFormat
4849
Core
4950
MC
5051
IRReader

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)