[llvm-branch-commits] [llvm] [llvm-objdump] Support --symbolize-operand on AArch64 (PR #145009)

Alexis Engelke via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Jun 23 02:24:58 PDT 2025


https://github.com/aengelke updated https://github.com/llvm/llvm-project/pull/145009

>From db5463b1af5c1c425866979dcf85ee5919c8a75d Mon Sep 17 00:00:00 2001
From: Alexis Engelke <engelke at in.tum.de>
Date: Mon, 23 Jun 2025 08:50:34 +0000
Subject: [PATCH 1/2] address comments + add reloctable test

Created using spr 1.3.5-bogner
---
 ...=> elf-executable-symbolize-operands.yaml} | 31 +++++++-
 .../elf-relocatable-symbolize-operands.s      | 77 +++++++++++++++++++
 2 files changed, 105 insertions(+), 3 deletions(-)
 rename llvm/test/tools/llvm-objdump/AArch64/{elf-disassemble-symbololize-operands.yaml => elf-executable-symbolize-operands.yaml} (64%)
 create mode 100644 llvm/test/tools/llvm-objdump/AArch64/elf-relocatable-symbolize-operands.s

diff --git a/llvm/test/tools/llvm-objdump/AArch64/elf-disassemble-symbololize-operands.yaml b/llvm/test/tools/llvm-objdump/AArch64/elf-executable-symbolize-operands.yaml
similarity index 64%
rename from llvm/test/tools/llvm-objdump/AArch64/elf-disassemble-symbololize-operands.yaml
rename to llvm/test/tools/llvm-objdump/AArch64/elf-executable-symbolize-operands.yaml
index 3f3c6f33e620f..d318ea01b4c30 100644
--- a/llvm/test/tools/llvm-objdump/AArch64/elf-disassemble-symbololize-operands.yaml
+++ b/llvm/test/tools/llvm-objdump/AArch64/elf-executable-symbolize-operands.yaml
@@ -1,14 +1,14 @@
 # RUN: yaml2obj %s -o %t
 # RUN: llvm-objdump %t -d --symbolize-operands --no-show-raw-insn --no-leading-addr | \
-# RUN:   FileCheck %s --match-full-lines
+# RUN:   FileCheck %s --match-full-lines -DABS_ADRP_VAL=0x6000
 # RUN: llvm-objdump %t -d --symbolize-operands --no-show-raw-insn --no-leading-addr --adjust-vma=0x2000 | \
-# RUN:   FileCheck %s --match-full-lines
+# RUN:   FileCheck %s --match-full-lines -DABS_ADRP_VAL=0x8000
 
 ## Expect to find the branch labels and global variable name.
 # CHECK:      <_start>:
 # CHECK-NEXT:   ldr x0, <symbol>
 # CHECK-NEXT: <L0>:
-# CHECK-NEXT:   adrp x1, 0x{{[68]}}000 <symbol+0xff4>
+# CHECK-NEXT:   adrp x1, [[ABS_ADRP_VAL]] <symbol+0xff4>
 # CHECK-NEXT:   adr x2, <symbol>
 # CHECK-NEXT:   cmp x1, x2
 # CHECK-NEXT:   b.eq <L1>
@@ -17,6 +17,31 @@
 # CHECK-NEXT:   cbz x2, <L0>
 # CHECK-NEXT:   ret
 
+## Machine code generated with:
+# llvm-mc --arch=aarch64 --filetype=obj -o tmp.o <<EOF
+#   .text
+#   .p2align 14
+#   .globl .start
+# _start:
+#   ldr x0, symbol
+# 1:
+#   adrp x1, symbol + 0x1000
+#   adr x2, symbol
+#   cmp x1, x2
+#   b.eq 2f
+#   b 1b
+# 2:
+#   cbz x2, 1b
+#   ret
+#
+#   .data
+#   .p2align 12
+#   .skip 12
+# symbol:
+# EOF
+# ld.lld -shared --nmagic -o tmp.so tmp.o
+# llvm-objdump -s tmp.so --section=.text
+
 --- !ELF
 FileHeader:
   Class:   ELFCLASS64
diff --git a/llvm/test/tools/llvm-objdump/AArch64/elf-relocatable-symbolize-operands.s b/llvm/test/tools/llvm-objdump/AArch64/elf-relocatable-symbolize-operands.s
new file mode 100644
index 0000000000000..c661f866cc7c8
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/AArch64/elf-relocatable-symbolize-operands.s
@@ -0,0 +1,77 @@
+# RUN: llvm-mc --arch=aarch64 --filetype=obj < %s | llvm-objdump -d -r --symbolize-operands --no-show-raw-insn --no-leading-addr - | FileCheck %s --match-full-lines
+
+# CHECK:      <fn1>:
+# CHECK-NEXT:   b <L0>
+# CHECK-NEXT:   tbz x0, #0x2c, <L2>
+# CHECK-NEXT: <L0>:
+# CHECK-NEXT:   b.eq <L1>
+# CHECK-NEXT: <L1>:
+# CHECK-NEXT:   cbz x1, <L0>
+# CHECK-NEXT: <L2>:
+# CHECK-NEXT:   nop
+# CHECK-NEXT: <L3>:
+# CHECK-NEXT:   bl <L3>
+# CHECK-NEXT:     R_AARCH64_CALL26 fn2
+# CHECK-NEXT:   bl <fn2>
+# CHECK-NEXT:   adr x0, <L2>
+# CHECK-NEXT: <L4>:
+# CHECK-NEXT:   adr x1, <L4>
+# CHECK-NEXT:     R_AARCH64_ADR_PREL_LO21 fn2
+# CHECK-NEXT:   adr x2, <fn2>
+# CHECK-NEXT:   ldr w0, <L2>
+# CHECK-NEXT: <L5>:
+# CHECK-NEXT:   ldr w0, <L5>
+# CHECK-NEXT:     R_AARCH64_LD_PREL_LO19 fn2
+# CHECK-NEXT:   ret
+# CHECK-NEXT:   nop
+# CHECK-NEXT:   nop
+# CHECK-NEXT:   nop
+# CHECK-EMPTY:
+# CHECK-NEXT: <fn2>:
+# CHECK-NEXT:   bl <L0>
+# CHECK-NEXT:   adrp x3, 0x0 <fn1>
+# CHECK-NEXT:     R_AARCH64_ADR_PREL_PG_HI21 fn2
+# CHECK-NEXT:   add x3, x3, #0x0
+# CHECK-NEXT:     R_AARCH64_ADD_ABS_LO12_NC fn2
+# CHECK-NEXT:   adrp x3, 0x0 <fn1>
+# CHECK-NEXT:     R_AARCH64_ADR_PREL_PG_HI21 fn2
+# CHECK-NEXT:   ldr x0, [x3]
+# CHECK-NEXT:     R_AARCH64_LDST64_ABS_LO12_NC fn2
+# CHECK-NEXT:   ret
+# CHECK-NEXT:   nop
+# CHECK-NEXT:   nop
+# CHECK-NEXT: <L0>:
+# CHECK-NEXT:   ret
+
+    .p2align 4
+    .global fn1
+fn1:
+    b 0f
+    tbz x0, 44, 2f
+0:  b.eq 1f
+1:  cbz x1, 0b
+2:  nop
+    bl fn2
+    bl .Lfn2
+    adr x0, 2b
+    adr x1, fn2
+    adr x2, .Lfn2
+    ldr w0, 2b
+    ldr w0, fn2
+    ret
+
+    .p2align 4
+    .global fn2
+fn2:
+.Lfn2: # local label for non-interposable call
+    bl .Lfn3
+    # In future, we might identify the pairs and symbolize the operands properly
+    adrp x3, fn2
+    add x3, x3, :lo12:fn2
+    adrp x3, fn2
+    ldr x0, [x3, :lo12:fn2]
+    ret
+
+    .p2align 4
+.Lfn3: # private function
+    ret

>From 1abf014077dd0e7f5592651a51484a544cad1e49 Mon Sep 17 00:00:00 2001
From: Alexis Engelke <engelke at in.tum.de>
Date: Mon, 23 Jun 2025 09:24:47 +0000
Subject: [PATCH 2/2] move tests to avoid failure if AArch64 is not configured

Created using spr 1.3.5-bogner
---
 .../AArch64/symbolize-operands-executable.yaml}                   | 0
 .../AArch64/symbolize-operands-reloctable.s}                      | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename llvm/test/tools/llvm-objdump/{AArch64/elf-executable-symbolize-operands.yaml => ELF/AArch64/symbolize-operands-executable.yaml} (100%)
 rename llvm/test/tools/llvm-objdump/{AArch64/elf-relocatable-symbolize-operands.s => ELF/AArch64/symbolize-operands-reloctable.s} (100%)

diff --git a/llvm/test/tools/llvm-objdump/AArch64/elf-executable-symbolize-operands.yaml b/llvm/test/tools/llvm-objdump/ELF/AArch64/symbolize-operands-executable.yaml
similarity index 100%
rename from llvm/test/tools/llvm-objdump/AArch64/elf-executable-symbolize-operands.yaml
rename to llvm/test/tools/llvm-objdump/ELF/AArch64/symbolize-operands-executable.yaml
diff --git a/llvm/test/tools/llvm-objdump/AArch64/elf-relocatable-symbolize-operands.s b/llvm/test/tools/llvm-objdump/ELF/AArch64/symbolize-operands-reloctable.s
similarity index 100%
rename from llvm/test/tools/llvm-objdump/AArch64/elf-relocatable-symbolize-operands.s
rename to llvm/test/tools/llvm-objdump/ELF/AArch64/symbolize-operands-reloctable.s



More information about the llvm-branch-commits mailing list