[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