Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[llvm-objdump] Print symbolized labels with increasing index #139415

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
merged 1 commit into from
May 11, 2025

Conversation

s-barannikov
Copy link
Contributor

To make it easier to navigate the disassembly listing.

To make it easier to navigate the disassembly listing.
@llvmbot
Copy link
Member

llvmbot commented May 10, 2025

@llvm/pr-subscribers-llvm-binary-utilities

Author: Sergei Barannikov (s-barannikov)

Changes

To make it easier to navigate the disassembly listing.


Full diff: https://github.com/llvm/llvm-project/pull/139415.diff

5 Files Affected:

  • (modified) llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s (+3-3)
  • (modified) llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll (+6-6)
  • (modified) llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml (+8-8)
  • (modified) llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll (+6-6)
  • (modified) llvm/tools/llvm-objdump/llvm-objdump.cpp (+7-4)
diff --git a/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s b/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s
index a52ed56d680e3..38c10de67c447 100644
--- a/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s
+++ b/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s
@@ -15,10 +15,10 @@ main:
         exit
 
 # CHECK:      <main>:
-# CHECK-NEXT: <L1>:
-# CHECK-NEXT: 	if r1 > 0x2a goto +0x2 <L0>
+# CHECK-NEXT: <L0>:
+# CHECK-NEXT: 	if r1 > 0x2a goto +0x2 <L1>
 # CHECK-NEXT: 	r1 -= 0xa
 # CHECK-NEXT: 	goto -0x3 <main>
-# CHECK-NEXT: <L0>:
+# CHECK-NEXT: <L1>:
 # CHECK-NEXT: 	r0 = 0x0
 # CHECK-NEXT: 	exit
diff --git a/llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll b/llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll
index 4d75a874d616d..61c7f74e513bf 100644
--- a/llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll
+++ b/llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll
@@ -10,19 +10,19 @@
 ; CHECK-NEXT:        28:      blr
 
 ; CHECK-LABEL: <foo>:
-; CHECK:             6c:      	b 0x74 <L0>
-; CHECK-NEXT:  <L2>:
-; CHECK-NEXT:        70:      	bf	8, 0x94 <L1>
+; CHECK:             6c:      	b 0x74 <L1>
 ; CHECK-NEXT:  <L0>:
+; CHECK-NEXT:        70:      	bf	8, 0x94 <L2>
+; CHECK-NEXT:  <L1>:
 ; CHECK-NEXT:        74:      	clrldi	3, 30, 32
 ; CHECK-NEXT:        78:      	bl 0x0 <internal>
 ; CHECK-NEXT:        7c:      	mr	30, 3
 ; CHECK-NEXT:        80:      	cmplwi	30, 11
-; CHECK-NEXT:        84:      	bt	0, 0x70 <L2>
+; CHECK-NEXT:        84:      	bt	0, 0x70 <L0>
 ; CHECK-NEXT:        88:      	bl 0x88 <foo+0x48>
 ; CHECK-NEXT:        8c:      	nop
-; CHECK-NEXT:        90:      	b 0x70 <L2>
-; CHECK-NEXT:  <L1>:
+; CHECK-NEXT:        90:      	b 0x70 <L0>
+; CHECK-NEXT:  <L2>:
 ; CHECK-NEXT:        94:      	ld 30, 32(1)
 
 define internal i32 @internal(i32 %a) {
diff --git a/llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml b/llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml
index 959b6d8681f8b..c3dcc2dfd2e1e 100644
--- a/llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml
+++ b/llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml
@@ -7,20 +7,20 @@
 ## Expect to find the branch labels and global variable name.
 # ATT:      <_start>:
 # ATT-NEXT:   pushq %rax
-# ATT-NEXT: <L1>:
-# ATT-NEXT:   cmpl  , %eax <symbol>
-# ATT-NEXT:   jge    <L0>
-# ATT-NEXT:   jmp    <L1>
 # ATT-NEXT: <L0>:
+# ATT-NEXT:   cmpl  , %eax <symbol>
+# ATT-NEXT:   jge    <L1>
+# ATT-NEXT:   jmp    <L0>
+# ATT-NEXT: <L1>:
 # ATT-NEXT:   retq
 
 # INTEL:      <_start>:
 # INTEL-NEXT:   push rax
-# INTEL-NEXT: <L1>:
-# INTEL-NEXT:   cmp  eax, dword ptr <symbol>
-# INTEL-NEXT:   jge   <L0>
-# INTEL-NEXT:   jmp   <L1>
 # INTEL-NEXT: <L0>:
+# INTEL-NEXT:   cmp  eax, dword ptr <symbol>
+# INTEL-NEXT:   jge   <L1>
+# INTEL-NEXT:   jmp   <L0>
+# INTEL-NEXT: <L1>:
 # INTEL-NEXT:   ret
 
 --- !ELF
diff --git a/llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll b/llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll
index 2cad8fa4b6df8..7a14f62e47297 100644
--- a/llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll
+++ b/llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll
@@ -13,19 +13,19 @@
 ; CHECK-NEXT:        14:      blr
 
 ; CHECK-LABEL: <.foo>:
-; CHECK:             5c:      	b 0x64 <L0>
-; CHECK-NEXT:  <L2>:
-; CHECK-NEXT:        60:      	bf	8, 0x84 <L1>
+; CHECK:             5c:      	b 0x64 <L1>
 ; CHECK-NEXT:  <L0>:
+; CHECK-NEXT:        60:      	bf	8, 0x84 <L2>
+; CHECK-NEXT:  <L1>:
 ; CHECK-NEXT:        64:      	bl 0x0 <.internal>
 ; CHECK-NEXT:        68:      	cmplwi	3, 11
-; CHECK-NEXT:        6c:      	bt	0, 0x60 <L2>
+; CHECK-NEXT:        6c:      	bt	0, 0x60 <L0>
 ; CHECK-NEXT:        70:        mr      31, 3
 ; CHECK-NEXT:        74:      	bl 0x0 <.extern>
 ; CHECK-NEXT:        78:      	nop
 ; CHECK-NEXT:        7c:        mr      3, 31
-; CHECK-NEXT:        80:      	b 0x60 <L2>
-; CHECK-NEXT:  <L1>:
+; CHECK-NEXT:        80:      	b 0x60 <L0>
+; CHECK-NEXT:  <L2>:
 ; CHECK-NEXT:        84:      	lwz 31, 60(1)
 
 define internal i32 @internal(i32 %a) {
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 5c84fd5380c4d..578e0d475be02 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -1500,8 +1500,7 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, MCInstrAnalysis *MIA,
   if (MIA)
     MIA->resetState();
 
-  Labels.clear();
-  unsigned LabelCount = 0;
+  std::set<uint64_t> Targets;
   Start += SectionAddr;
   End += SectionAddr;
   const bool isXCOFF = STI->getTargetTriple().isOSBinFormatXCOFF();
@@ -1521,13 +1520,13 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, MCInstrAnalysis *MIA,
         uint64_t Target;
         bool TargetKnown = MIA->evaluateBranch(Inst, Index, Size, Target);
         if (TargetKnown && (Target >= Start && Target < End) &&
-            !Labels.count(Target)) {
+            !Targets.count(Target)) {
           // On PowerPC and AIX, a function call is encoded as a branch to 0.
           // On other PowerPC platforms (ELF), a function call is encoded as
           // a branch to self. Do not add a label for these cases.
           if (!(isPPC &&
                 ((Target == 0 && isXCOFF) || (Target == Index && !isXCOFF))))
-            Labels[Target] = ("L" + Twine(LabelCount++)).str();
+            Targets.insert(Target);
         }
         MIA->updateState(Inst, Index);
       } else
@@ -1535,6 +1534,10 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, MCInstrAnalysis *MIA,
     }
     Index += Size;
   }
+
+  Labels.clear();
+  for (auto [Idx, Target] : enumerate(Targets))
+    Labels[Target] = ("L" + Twine(Idx)).str();
 }
 
 // Create an MCSymbolizer for the target and add it to the MCDisassembler.

; CHECK-NEXT: 74: clrldi 3, 30, 32
; CHECK-NEXT: 78: bl 0x0 <internal>
; CHECK-NEXT: 7c: mr 30, 3
; CHECK-NEXT: 80: cmplwi 30, 11
; CHECK-NEXT: 84: bt 0, 0x70 <L2>
Copy link
Contributor Author

@s-barannikov s-barannikov May 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously, it was difficult to figure out whether the target is above or below the branch instruction.

@s-barannikov s-barannikov changed the title [llvm-objdump] Sort symbolized labels by index [llvm-objdump] Print symbolized labels with increasing index May 11, 2025
@s-barannikov s-barannikov merged commit e79c2bd into llvm:main May 11, 2025
13 checks passed
@s-barannikov s-barannikov deleted the objdump/sort-symbolized-labels branch May 11, 2025 00:37
@llvm-ci
Copy link
Collaborator

llvm-ci commented May 11, 2025

LLVM Buildbot has detected a new failure on builder ml-opt-dev-x86-64 running on ml-opt-dev-x86-64-b2 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/137/builds/18342

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: tools/llvm-exegesis/RISCV/rvv/filter.test' FAILED ********************
Exit Code: 2

Command Output (stderr):
--
/b/ml-opt-dev-x86-64-b1/build/bin/llvm-exegesis -mtriple=riscv64 -mcpu=sifive-x280 -benchmark-phase=assemble-measured-code --mode=inverse_throughput --opcode-name=PseudoVNCLIPU_WX_M1_MASK     --riscv-filter-config='vtype = {VXRM: rod, AVL: VLMAX, SEW: e(8|16), Policy: ta/mu}' --max-configs-per-opcode=1000 --min-instructions=10 | /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/tools/llvm-exegesis/RISCV/rvv/filter.test # RUN: at line 1
+ /b/ml-opt-dev-x86-64-b1/build/bin/llvm-exegesis -mtriple=riscv64 -mcpu=sifive-x280 -benchmark-phase=assemble-measured-code --mode=inverse_throughput --opcode-name=PseudoVNCLIPU_WX_M1_MASK '--riscv-filter-config=vtype = {VXRM: rod, AVL: VLMAX, SEW: e(8|16), Policy: ta/mu}' --max-configs-per-opcode=1000 --min-instructions=10
+ /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/tools/llvm-exegesis/RISCV/rvv/filter.test
PseudoVNCLIPU_WX_M1_MASK: Failed to produce any snippet via: instruction has tied variables, avoiding Read-After-Write issue, picking random def and use registers not aliasing each other, for uses, one unique register for each position
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/tools/llvm-exegesis/RISCV/rvv/filter.test

--

********************


@llvm-ci
Copy link
Collaborator

llvm-ci commented May 11, 2025

LLVM Buildbot has detected a new failure on builder premerge-monolithic-windows running on premerge-windows-1 while building llvm at step 5 "clean-build-dir".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/35/builds/9979

Here is the relevant piece of the build log for the reference
Step 5 (clean-build-dir) failure: Delete failed. (failure)
Step 8 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'lit :: timeout-hang.py' FAILED ********************
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 13
not env -u FILECHECK_OPTS "C:\Python39\python.exe" C:\ws\buildbot\premerge-monolithic-windows\llvm-project\llvm\utils\lit\lit.py -j1 --order=lexical Inputs/timeout-hang/run-nonexistent.txt  --timeout=1 --param external=0 | "C:\Python39\python.exe" C:\ws\buildbot\premerge-monolithic-windows\build\utils\lit\tests\timeout-hang.py 1
# executed command: not env -u FILECHECK_OPTS 'C:\Python39\python.exe' 'C:\ws\buildbot\premerge-monolithic-windows\llvm-project\llvm\utils\lit\lit.py' -j1 --order=lexical Inputs/timeout-hang/run-nonexistent.txt --timeout=1 --param external=0
# .---command stderr------------
# | lit.py: C:\ws\buildbot\premerge-monolithic-windows\llvm-project\llvm\utils\lit\lit\main.py:72: note: The test suite configuration requested an individual test timeout of 0 seconds but a timeout of 1 seconds was requested on the command line. Forcing timeout to be 1 seconds.
# `-----------------------------
# executed command: 'C:\Python39\python.exe' 'C:\ws\buildbot\premerge-monolithic-windows\build\utils\lit\tests\timeout-hang.py' 1
# .---command stdout------------
# | Testing took as long or longer than timeout
# `-----------------------------
# error: command failed with exit status: 1

--

********************


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants