-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[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
[llvm-objdump] Print symbolized labels with increasing index #139415
Conversation
To make it easier to navigate the disassembly listing.
@llvm/pr-subscribers-llvm-binary-utilities Author: Sergei Barannikov (s-barannikov) ChangesTo make it easier to navigate the disassembly listing. Full diff: https://github.com/llvm/llvm-project/pull/139415.diff 5 Files Affected:
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> |
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.
Previously, it was difficult to figure out whether the target is above or below the branch instruction.
LLVM Buildbot has detected a new failure on builder 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
|
LLVM Buildbot has detected a new failure on builder 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
|
To make it easier to navigate the disassembly listing.