[llvm] [llvm-readobj][MachO] Add support for CPU_TYPE_ARM64_32 (PR #170193)
Ryan Mansfield via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 1 11:48:47 PST 2025
https://github.com/rjmansfield created https://github.com/llvm/llvm-project/pull/170193
This adds support for ARM64_32 (ILP32) cpu type and subtype in llvm-readobj --file-headers. The support was previously added for llvm-objdump but was accidentally omitted from llvm-readobj.
>From ab4a1b8d2461870477c879d433f65117a62f0a27 Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Mon, 1 Dec 2025 14:16:12 -0500
Subject: [PATCH] [llvm-readobj][MachO] Add support for CPU_TYPE_ARM64_32
This adds support for ARM64_32 (ILP32) cpu type and subtype
in llvm-readobj --file-headers. The support was previously added for
llvm-objdump but was accidentally omitted from llvm-readobj.
---
.../llvm-readobj/MachO/file-headers.test | 31 +++++++++++++++++++
llvm/tools/llvm-readobj/MachODumper.cpp | 27 ++++++++++------
2 files changed, 49 insertions(+), 9 deletions(-)
diff --git a/llvm/test/tools/llvm-readobj/MachO/file-headers.test b/llvm/test/tools/llvm-readobj/MachO/file-headers.test
index 9425094bbf502..5058219b8b018 100644
--- a/llvm/test/tools/llvm-readobj/MachO/file-headers.test
+++ b/llvm/test/tools/llvm-readobj/MachO/file-headers.test
@@ -158,3 +158,34 @@ FileHeader:
ncmds: 0
sizeofcmds: 0
flags: 0x00002000
+
+# RUN: yaml2obj %s --docnum=6 -o %t.arm64_32
+# RUN: llvm-readobj -h %t.arm64_32 \
+# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.arm64_32 --check-prefix ARM64_32
+
+# ARM64_32:File: [[FILE]]
+# ARM64_32-NEXT:Format: Mach-O arm64 (ILP32)
+# ARM64_32-NEXT:Arch: aarch64_32
+# ARM64_32-NEXT:AddressSize: 32bit
+# ARM64_32-NEXT:MachHeader {
+# ARM64_32-NEXT: Magic: Magic (0xFEEDFACE)
+# ARM64_32-NEXT: CpuType: Arm64 (ILP32) (0x200000C)
+# ARM64_32-NEXT: CpuSubType: CPU_SUBTYPE_ARM64_32_V8 (0x1)
+# ARM64_32-NEXT: FileType: Relocatable (0x1)
+# ARM64_32-NEXT: NumOfLoadCommands: 0
+# ARM64_32-NEXT: SizeOfLoadCommands: 0
+# ARM64_32-NEXT: Flags [ (0x2000)
+# ARM64_32-NEXT: MH_SUBSECTIONS_VIA_SYMBOLS (0x2000)
+# ARM64_32-NEXT: ]
+# ARM64_32-NEXT:}
+# ARM64_32-NOT:{{.}}
+
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACE
+ cputype: 0x0200000C
+ cpusubtype: 0x00000001
+ filetype: 0x00000001
+ ncmds: 0
+ sizeofcmds: 0
+ flags: 0x00002000
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp
index 0a23ad772e4c5..a2e22b4b3bb83 100644
--- a/llvm/tools/llvm-readobj/MachODumper.cpp
+++ b/llvm/tools/llvm-readobj/MachODumper.cpp
@@ -111,15 +111,16 @@ const EnumEntry<uint32_t> MachOHeaderFileTypes[] = {
};
const EnumEntry<uint32_t> MachOHeaderCpuTypes[] = {
- { "Any" , static_cast<uint32_t>(MachO::CPU_TYPE_ANY) },
- { "X86" , MachO::CPU_TYPE_X86 },
- { "X86-64" , MachO::CPU_TYPE_X86_64 },
- { "Mc98000" , MachO::CPU_TYPE_MC98000 },
- { "Arm" , MachO::CPU_TYPE_ARM },
- { "Arm64" , MachO::CPU_TYPE_ARM64 },
- { "Sparc" , MachO::CPU_TYPE_SPARC },
- { "PowerPC" , MachO::CPU_TYPE_POWERPC },
- { "PowerPC64" , MachO::CPU_TYPE_POWERPC64 },
+ {"Any", static_cast<uint32_t>(MachO::CPU_TYPE_ANY)},
+ {"X86", MachO::CPU_TYPE_X86},
+ {"X86-64", MachO::CPU_TYPE_X86_64},
+ {"Mc98000", MachO::CPU_TYPE_MC98000},
+ {"Arm", MachO::CPU_TYPE_ARM},
+ {"Arm64", MachO::CPU_TYPE_ARM64},
+ {"Arm64 (ILP32)", MachO::CPU_TYPE_ARM64_32},
+ {"Sparc", MachO::CPU_TYPE_SPARC},
+ {"PowerPC", MachO::CPU_TYPE_POWERPC},
+ {"PowerPC64", MachO::CPU_TYPE_POWERPC64},
};
const EnumEntry<uint32_t> MachOHeaderCpuSubtypesX86[] = {
@@ -166,6 +167,10 @@ const EnumEntry<uint32_t> MachOHeaderCpuSubtypesARM[] = {
LLVM_READOBJ_ENUM_ENT(MachO, CPU_SUBTYPE_ARM_V7EM),
};
+const EnumEntry<uint32_t> MachOHeaderCpuSubtypesARM64_32[] = {
+ LLVM_READOBJ_ENUM_ENT(MachO, CPU_SUBTYPE_ARM64_32_V8),
+};
+
const EnumEntry<uint32_t> MachOHeaderCpuSubtypesARM64[] = {
LLVM_READOBJ_ENUM_ENT(MachO, CPU_SUBTYPE_ARM64_ALL),
LLVM_READOBJ_ENUM_ENT(MachO, CPU_SUBTYPE_ARM64_V8),
@@ -453,6 +458,10 @@ void MachODumper::printFileHeaders(const MachHeader &Header) {
case MachO::CPU_TYPE_ARM64:
W.printEnum("CpuSubType", subtype, ArrayRef(MachOHeaderCpuSubtypesARM64));
break;
+ case MachO::CPU_TYPE_ARM64_32:
+ W.printEnum("CpuSubType", subtype,
+ ArrayRef(MachOHeaderCpuSubtypesARM64_32));
+ break;
case MachO::CPU_TYPE_POWERPC64:
default:
W.printHex("CpuSubtype", subtype);
More information about the llvm-commits
mailing list