-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[llvm-readobj][MachO] Add support for CPU_TYPE_ARM64_32 #170193
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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/pr-subscribers-llvm-binary-utilities Author: Ryan Mansfield (rjmansfield) ChangesThis 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. Full diff: https://github.com/llvm/llvm-project/pull/170193.diff 2 Files Affected:
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);
|
jh7370
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks basically fine. Just some test and formatting thoughts.
- Disable clang-format for MachOHeaderCpuTypes. - Refactor file-headers.test check patterns.
jh7370
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks!
|
Thanks for the review. If you can merge on my behalf, I would appreciate it. |
Done. |
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.