[llvm] 04751b4 - [AArch64][llvm-objdump] Add missing arm64_32 architecture checks (#171638)

via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 17 04:14:42 PST 2025


Author: Ryan Mansfield
Date: 2025-12-17T13:14:39+01:00
New Revision: 04751b47607df1b8cde88589464dd2c939fb0041

URL: https://github.com/llvm/llvm-project/commit/04751b47607df1b8cde88589464dd2c939fb0041
DIFF: https://github.com/llvm/llvm-project/commit/04751b47607df1b8cde88589464dd2c939fb0041.diff

LOG: [AArch64][llvm-objdump] Add missing arm64_32 architecture checks (#171638)

Use the same code paths as arm64 since arm64_32 has the same instruction
encoding and register usage.

Added: 
    llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/bad-opcodes.obj.macho-arm64_32
    llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/reloc-addend.obj.macho-arm64_32
    llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-bad-opcodes.test
    llvm/test/tools/llvm-objdump/MachO/AArch64/arm64_32-reloc-addend.test

Modified: 
    llvm/tools/llvm-objdump/MachODump.cpp

Removed: 
    


################################################################################
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 0000000000000..ea78dc022fc12
Binary files /dev/null and b/llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/bad-opcodes.obj.macho-arm64_32 
diff er

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 0000000000000..af3ac9548b2a4
Binary files /dev/null and b/llvm/test/tools/llvm-objdump/MachO/AArch64/Inputs/reloc-addend.obj.macho-arm64_32 
diff er

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

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)


        


More information about the llvm-commits mailing list