Skip to content

Commit ab4a1b8

Browse files
committed
[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.
1 parent 9edbf83 commit ab4a1b8

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

llvm/test/tools/llvm-readobj/MachO/file-headers.test

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,34 @@ FileHeader:
158158
ncmds: 0
159159
sizeofcmds: 0
160160
flags: 0x00002000
161+
162+
# RUN: yaml2obj %s --docnum=6 -o %t.arm64_32
163+
# RUN: llvm-readobj -h %t.arm64_32 \
164+
# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.arm64_32 --check-prefix ARM64_32
165+
166+
# ARM64_32:File: [[FILE]]
167+
# ARM64_32-NEXT:Format: Mach-O arm64 (ILP32)
168+
# ARM64_32-NEXT:Arch: aarch64_32
169+
# ARM64_32-NEXT:AddressSize: 32bit
170+
# ARM64_32-NEXT:MachHeader {
171+
# ARM64_32-NEXT: Magic: Magic (0xFEEDFACE)
172+
# ARM64_32-NEXT: CpuType: Arm64 (ILP32) (0x200000C)
173+
# ARM64_32-NEXT: CpuSubType: CPU_SUBTYPE_ARM64_32_V8 (0x1)
174+
# ARM64_32-NEXT: FileType: Relocatable (0x1)
175+
# ARM64_32-NEXT: NumOfLoadCommands: 0
176+
# ARM64_32-NEXT: SizeOfLoadCommands: 0
177+
# ARM64_32-NEXT: Flags [ (0x2000)
178+
# ARM64_32-NEXT: MH_SUBSECTIONS_VIA_SYMBOLS (0x2000)
179+
# ARM64_32-NEXT: ]
180+
# ARM64_32-NEXT:}
181+
# ARM64_32-NOT:{{.}}
182+
183+
--- !mach-o
184+
FileHeader:
185+
magic: 0xFEEDFACE
186+
cputype: 0x0200000C
187+
cpusubtype: 0x00000001
188+
filetype: 0x00000001
189+
ncmds: 0
190+
sizeofcmds: 0
191+
flags: 0x00002000

llvm/tools/llvm-readobj/MachODumper.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,16 @@ const EnumEntry<uint32_t> MachOHeaderFileTypes[] = {
111111
};
112112

113113
const EnumEntry<uint32_t> MachOHeaderCpuTypes[] = {
114-
{ "Any" , static_cast<uint32_t>(MachO::CPU_TYPE_ANY) },
115-
{ "X86" , MachO::CPU_TYPE_X86 },
116-
{ "X86-64" , MachO::CPU_TYPE_X86_64 },
117-
{ "Mc98000" , MachO::CPU_TYPE_MC98000 },
118-
{ "Arm" , MachO::CPU_TYPE_ARM },
119-
{ "Arm64" , MachO::CPU_TYPE_ARM64 },
120-
{ "Sparc" , MachO::CPU_TYPE_SPARC },
121-
{ "PowerPC" , MachO::CPU_TYPE_POWERPC },
122-
{ "PowerPC64" , MachO::CPU_TYPE_POWERPC64 },
114+
{"Any", static_cast<uint32_t>(MachO::CPU_TYPE_ANY)},
115+
{"X86", MachO::CPU_TYPE_X86},
116+
{"X86-64", MachO::CPU_TYPE_X86_64},
117+
{"Mc98000", MachO::CPU_TYPE_MC98000},
118+
{"Arm", MachO::CPU_TYPE_ARM},
119+
{"Arm64", MachO::CPU_TYPE_ARM64},
120+
{"Arm64 (ILP32)", MachO::CPU_TYPE_ARM64_32},
121+
{"Sparc", MachO::CPU_TYPE_SPARC},
122+
{"PowerPC", MachO::CPU_TYPE_POWERPC},
123+
{"PowerPC64", MachO::CPU_TYPE_POWERPC64},
123124
};
124125

125126
const EnumEntry<uint32_t> MachOHeaderCpuSubtypesX86[] = {
@@ -166,6 +167,10 @@ const EnumEntry<uint32_t> MachOHeaderCpuSubtypesARM[] = {
166167
LLVM_READOBJ_ENUM_ENT(MachO, CPU_SUBTYPE_ARM_V7EM),
167168
};
168169

170+
const EnumEntry<uint32_t> MachOHeaderCpuSubtypesARM64_32[] = {
171+
LLVM_READOBJ_ENUM_ENT(MachO, CPU_SUBTYPE_ARM64_32_V8),
172+
};
173+
169174
const EnumEntry<uint32_t> MachOHeaderCpuSubtypesARM64[] = {
170175
LLVM_READOBJ_ENUM_ENT(MachO, CPU_SUBTYPE_ARM64_ALL),
171176
LLVM_READOBJ_ENUM_ENT(MachO, CPU_SUBTYPE_ARM64_V8),
@@ -453,6 +458,10 @@ void MachODumper::printFileHeaders(const MachHeader &Header) {
453458
case MachO::CPU_TYPE_ARM64:
454459
W.printEnum("CpuSubType", subtype, ArrayRef(MachOHeaderCpuSubtypesARM64));
455460
break;
461+
case MachO::CPU_TYPE_ARM64_32:
462+
W.printEnum("CpuSubType", subtype,
463+
ArrayRef(MachOHeaderCpuSubtypesARM64_32));
464+
break;
456465
case MachO::CPU_TYPE_POWERPC64:
457466
default:
458467
W.printHex("CpuSubtype", subtype);

0 commit comments

Comments
 (0)