[llvm] [AArch64][llvm-objdump] Add missing arm64_32 architecture checks (PR #171638)
Ryan Mansfield via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 12 07:33:08 PST 2025
https://github.com/rjmansfield updated https://github.com/llvm/llvm-project/pull/171638
>From 4273f1e23c627d9aad4f4cc183a3f8b482541b18 Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Mon, 8 Dec 2025 12:00:18 -0500
Subject: [PATCH 1/2] [AArch64][llvm-objdump] Add missing arm64_32 architecture
checks
Use the same code paths as arm64 since arm64_32 has the same
instruction encoding and register usage.
---
llvm/tools/llvm-objdump/MachODump.cpp | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index f633ed52943da..93b9b0d1e4f9b 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -383,7 +383,7 @@ static void printRelocationTargetName(const MachOObjectFile *O,
uint64_t Val = O->getPlainRelocationSymbolNum(RE);
if (O->getAnyRelocationType(RE) == MachO::ARM64_RELOC_ADDEND &&
- (O->getArch() == Triple::aarch64 || O->getArch() == Triple::aarch64_be)) {
+ Triple(O->getArchTriple()).isAArch64()) {
Fmt << format("0x%0" PRIx64, Val);
return;
}
@@ -3142,7 +3142,7 @@ static int SymbolizerGetOpInfo(void *DisInfo, uint64_t Pc, uint64_t Offset,
op_info->AddSymbol.Value = value;
return 1;
}
- if (Arch == Triple::aarch64) {
+ if (Arch == Triple::aarch64 || Arch == Triple::aarch64_32) {
if (Offset != 0 || InstSize != 4)
return 0;
if (info->O->getHeader().filetype != MachO::MH_OBJECT) {
@@ -3386,7 +3386,7 @@ static void method_reference(struct DisassembleInfo *info,
if (method != nullptr) {
if (Arch == Triple::x86_64)
strcpy(method, "-[%rdi ");
- else if (Arch == Triple::aarch64)
+ else if (Arch == Triple::aarch64 || Arch == Triple::aarch64_32)
strcpy(method, "-[x0 ");
else
strcpy(method, "-[r? ");
@@ -3406,7 +3406,7 @@ static void method_reference(struct DisassembleInfo *info,
if (method != nullptr) {
if (Arch == Triple::x86_64)
strcpy(method, "-[[%rdi super] ");
- else if (Arch == Triple::aarch64)
+ else if (Arch == Triple::aarch64 || Arch == Triple::aarch64_32)
strcpy(method, "-[[x0 super] ");
else
strcpy(method, "-[[r? super] ");
@@ -7677,7 +7677,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
outs() << format("\t.byte 0x%02x #bad opcode\n",
*(Bytes.data() + Index) & 0xff);
Size = 1; // skip exactly one illegible byte and move on.
- } else if (Arch == Triple::aarch64 ||
+ } else if (Arch == Triple::aarch64 || Arch == Triple::aarch64_32 ||
(Arch == Triple::arm && !IsThumb)) {
uint32_t opcode = (*(Bytes.data() + Index) & 0xff) |
(*(Bytes.data() + Index + 1) & 0xff) << 8 |
@@ -7691,7 +7691,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
(*(Bytes.data() + Index + 1) & 0xff) << 8;
outs() << format("\t.short\t0x%04x\n", opcode);
Size = 2;
- } else{
+ } else {
WithColor::warning(errs(), "llvm-objdump")
<< "invalid instruction encoding\n";
if (Size == 0)
>From d9d00cb2596dfb9519cdd03d535b4e46e6d0a5d3 Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Fri, 12 Dec 2025 09:39:21 -0500
Subject: [PATCH 2/2] Add tests to validate the arm64_32 architecture checks.
---
.../AArch64/Inputs/bad-opcodes.obj.macho-arm64_32 | Bin 0 -> 300 bytes
.../Inputs/reloc-addend.obj.macho-arm64_32 | Bin 0 -> 380 bytes
.../MachO/AArch64/arm64_32-bad-opcodes.test | 7 +++++++
.../MachO/AArch64/arm64_32-reloc-addend.test | 7 +++++++
4 files changed, 14 insertions(+)
create mode 100644 llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/bad-opcodes.obj.macho-arm64_32
create mode 100644 llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/reloc-addend.obj.macho-arm64_32
create mode 100644 llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-bad-opcodes.test
create mode 100644 llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-reloc-addend.test
diff --git a/llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/bad-opcodes.obj.macho-arm64_32 b/llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/bad-opcodes.obj.macho-arm64_32
new file mode 100644
index 0000000000000000000000000000000000000000..ea78dc022fc12e22feed313646ccfc804f30508d
GIT binary patch
literal 300
zcmX^2>+L at t1_mZZ1_lNYW&z?aKnwyPehrv~NpJv#1b_-aG&>Z7)Pq2Ld`W6W34{&d
zhqy+BAow5_Oh2k9Lj#O&0AvV&IZSX;0?3j8S^~011!^}pkR1S40TG9}0Y*cmh^GDn
S0Z1`OKOfAHoRZuEpo0JwpAmup
literal 0
HcmV?d00001
diff --git a/llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/reloc-addend.obj.macho-arm64_32 b/llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/reloc-addend.obj.macho-arm64_32
new file mode 100644
index 0000000000000000000000000000000000000000..af3ac9548b2a47de36bed1d86372a94492cd54b4
GIT binary patch
literal 380
zcmX^2>+L at t1_mZZ1_lNYW&z?aKnwyPehrv~Nr(W21b_-aG&>Z7)Pq2Ld`W6W34{&d
zhqy+BAow5_Oh1UN0 at Mhy7f3XKC=f6JVgWFV2~J7?SuQ}e%s at H=YBx8K9ROAV5eLbE
z0E~w4NFpZyRZl#?9Dfa_3*@$$oD54qG|)9ZAaM{ML<9M at d_bBH>Uj_aW3xfo!0=^Y
Y$W6 at 5V~9`B$xlkmVaO at TEihmJ0Aj%zNB{r;
literal 0
HcmV?d00001
diff --git a/llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-bad-opcodes.test b/llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-bad-opcodes.test
new file mode 100644
index 0000000000000..ae8d07ebbeea0
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-bad-opcodes.test
@@ -0,0 +1,7 @@
+## Test invalid instruction handling for arm64_32 architecture.
+
+RUN: llvm-objdump -d %p/Inputs/bad-opcodes.obj.macho-arm64_32 | FileCheck %s
+
+CHECK: file format mach-o arm64 (ilp32)
+CHECK: <unknown>
+CHECK: udf #0x0
diff --git a/llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-reloc-addend.test b/llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-reloc-addend.test
new file mode 100644
index 0000000000000..ecad7e72d5a38
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-reloc-addend.test
@@ -0,0 +1,7 @@
+## Test ARM64_RELOC_ADDEND formatting for arm64_32 architecture.
+
+RUN: llvm-objdump -r %p/Inputs/reloc-addend.obj.macho-arm64_32 | FileCheck %s
+
+CHECK-DAG: ARM64_RELOC_ADDEND 0x999
+CHECK-DAG: ARM64_RELOC_PAGE21 _global
+CHECK-DAG: ARM64_RELOC_PAGEOFF12 _global
More information about the llvm-commits
mailing list