-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[llvm-objdump] Support --symbolize-operand on AArch64 #145009
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
Merged
aengelke
merged 8 commits into
main
from
users/aengelke/spr/llvm-objdump-support-symbolize-operand-on-aarch64
Jun 25, 2025
+159
−2
Merged
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
8785865
[𝘀𝗽𝗿] changes to main this commit is based on
matthias-springer 7f3bf71
[𝘀𝗽𝗿] initial version
aengelke db5463b
address comments + add reloctable test
aengelke 1abf014
move tests to avoid failure if AArch64 is not configured
aengelke ff6dde1
fix typo in filename
aengelke 010cd60
specify triple in test command line
aengelke ca20e1f
address comments
aengelke 0688739
[𝘀𝗽𝗿] landed version
aengelke File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 67 additions & 0 deletions
67
llvm/test/tools/llvm-objdump/ELF/AArch64/symbolize-operands-executable.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# 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 -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 -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, [[ABS_ADRP_VAL]] <symbol+0xff4> | ||
# CHECK-NEXT: adr x2, <symbol> | ||
# CHECK-NEXT: cmp x1, x2 | ||
# CHECK-NEXT: b.eq <L1> | ||
# CHECK-NEXT: b <L0> | ||
# CHECK-NEXT: <L1>: | ||
# 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 | ||
Data: ELFDATA2LSB | ||
Type: ET_EXEC | ||
Machine: EM_AARCH64 | ||
Sections: | ||
- Name: .text | ||
Type: SHT_PROGBITS | ||
Address: 0x4000 | ||
Flags: [SHF_ALLOC, SHF_EXECINSTR] | ||
Content: '60800058010000d0228000103f0002eb40000054fcffff1762ffffb4c0035fd6' | ||
- Name: .data | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_ALLOC, SHF_WRITE] | ||
Address: 0x5000 | ||
Symbols: | ||
- Name: _start | ||
Section: .text | ||
Value: 0x4000 | ||
- Name: symbol | ||
Section: .data | ||
Value: 0x500c |
79 changes: 79 additions & 0 deletions
79
llvm/test/tools/llvm-objdump/ELF/AArch64/symbolize-operands-relocatable.s
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
# RUN: llvm-mc --triple=aarch64-elf --filetype=obj < %s | \ | ||
# RUN: llvm-objdump -d -r --symbolize-operands --no-show-raw-insn --no-leading-addr - | \ | ||
# RUN: 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Consider adopting llvm/utils/update_test_body.py to make this easier to re-create https://llvm.org/docs/TestingGuide.html#elaborated-tests
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.
obj2yaml produces loads of unnecessary content (program headers, dynamic sections (dynsym/dynstr/hash/dynamic), its output is twice as long as this test currently is. I can do that, but I don't think it's worth the effort.