[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