[lld] d25e572 - [llvm-objdump] Print memory operand addresses as regular comments
Igor Kudrin via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 28 00:27:21 PDT 2021
Author: Igor Kudrin
Date: 2021-06-28T14:25:22+07:00
New Revision: d25e572421a66270c0ee8d51c96256f2958a6f1d
URL: https://github.com/llvm/llvm-project/commit/d25e572421a66270c0ee8d51c96256f2958a6f1d
DIFF: https://github.com/llvm/llvm-project/commit/d25e572421a66270c0ee8d51c96256f2958a6f1d.diff
LOG: [llvm-objdump] Print memory operand addresses as regular comments
The patch reuses the common code to print memory operand addresses as
instruction comments. This helps to align the comments and enables using
target-specific comment markers when `evaluateMemoryOperandAddress()` is
implemented for them.
Differential Revision: https://reviews.llvm.org/D104861
Added:
Modified:
lld/test/MachO/dso-handle.s
lld/test/MachO/dylink-ordinal.s
lld/test/MachO/mattrs.ll
lld/test/MachO/static-link.s
lld/test/MachO/tapi-link.s
lld/test/MachO/tlv-dylib.s
lld/test/MachO/tlv.s
lld/test/MachO/weak-binding.s
lld/test/MachO/x86-64-reloc-got-load.s
lld/test/MachO/x86-64-reloc-signed.s
llvm/test/tools/llvm-objdump/X86/disassemble-align.s
llvm/tools/llvm-objdump/llvm-objdump.cpp
Removed:
################################################################################
diff --git a/lld/test/MachO/dso-handle.s b/lld/test/MachO/dso-handle.s
index 2104d1dcf75a..260a0495989c 100644
--- a/lld/test/MachO/dso-handle.s
+++ b/lld/test/MachO/dso-handle.s
@@ -3,13 +3,13 @@
# RUN: %lld -lSystem %t.o -o %t
# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s
-# CHECK: leaq {{.*}} # 0x100000000
-# CHECK-NEXT: leaq {{.*}} # 0x100000000
+# CHECK: leaq {{.*}} ## 0x100000000
+# CHECK-NEXT: leaq {{.*}} ## 0x100000000
# RUN: %lld -dylib %t.o -o %t.dylib
# RUN: llvm-objdump -d --no-show-raw-insn --rebase --section-headers %t.dylib | FileCheck %s --check-prefix=DYLIB-CHECK
-# DYLIB-CHECK: leaq {{.*}} # 0x0
-# DYLIB-CHECK-NEXT: leaq {{.*}} # 0x0
+# DYLIB-CHECK: leaq {{.*}} ## 0x0
+# DYLIB-CHECK-NEXT: leaq {{.*}} ## 0x0
# DYLIB-LABEL: Sections:
# DYLIB: __data 00000008 [[#%x,DATA:]] DATA
diff --git a/lld/test/MachO/dylink-ordinal.s b/lld/test/MachO/dylink-ordinal.s
index 9dcdaccf7cb9..7edb218f7321 100644
--- a/lld/test/MachO/dylink-ordinal.s
+++ b/lld/test/MachO/dylink-ordinal.s
@@ -10,8 +10,8 @@
# CHECK: callq 0x[[#%x,FOO_OFF:]]
# CHECK-NEXT: callq 0x[[#%x,BAR_OFF:]]
-# CHECK: [[#%x,BAR_OFF]]: jmpq {{.*}} # 0x[[#%x,BAR_BIND:]]
-# CHECK: [[#%x,FOO_OFF]]: jmpq {{.*}} # 0x[[#%x,FOO_BIND:]]
+# CHECK: [[#%x,BAR_OFF]]: jmpq {{.*}} ## 0x[[#%x,BAR_BIND:]]
+# CHECK: [[#%x,FOO_OFF]]: jmpq {{.*}} ## 0x[[#%x,FOO_BIND:]]
# CHECK-LABEL: Lazy bind table:
# CHECK-DAG: __DATA __la_symbol_ptr 0x[[#%x,FOO_BIND]] Foo _foo
diff --git a/lld/test/MachO/mattrs.ll b/lld/test/MachO/mattrs.ll
index 25ed6f0cf73a..fad0b5e3bc61 100644
--- a/lld/test/MachO/mattrs.ll
+++ b/lld/test/MachO/mattrs.ll
@@ -18,7 +18,8 @@
; NO-FMA: <_foo>:
; NO-FMA-NEXT: vrcpss %xmm0, %xmm0, %xmm1
; NO-FMA-NEXT: vmulss %xmm1, %xmm0, %xmm0
-; NO-FMA-NEXT: vmovss [[#]](%rip), %xmm2
+; NO-FMA-NEXT: vmovss [[#]](%rip), %xmm2 ## xmm2 =
+; NO-FMA-NEXT: ## 0x
; NO-FMA-NEXT: vsubss %xmm0, %xmm2, %xmm0
; NO-FMA-NEXT: vmulss %xmm0, %xmm1, %xmm0
; NO-FMA-NEXT: vaddss %xmm0, %xmm1, %xmm0
diff --git a/lld/test/MachO/static-link.s b/lld/test/MachO/static-link.s
index b3e197cda80d..c3760f13af95 100644
--- a/lld/test/MachO/static-link.s
+++ b/lld/test/MachO/static-link.s
@@ -15,7 +15,7 @@
# CHECK: Disassembly of section __TEXT,__text
# CHECK-LABEL: <_main>:
-# CHECK: leaq {{.*}}(%rip), %rsi # 0x[[ADDR]] <_goodbye_world>
+# CHECK: leaq {{.*}}(%rip), %rsi ## 0x[[ADDR]] <_goodbye_world>
.section __TEXT,__text
.global _main
diff --git a/lld/test/MachO/tapi-link.s b/lld/test/MachO/tapi-link.s
index 8e073b844f7d..e46871a5b271 100644
--- a/lld/test/MachO/tapi-link.s
+++ b/lld/test/MachO/tapi-link.s
@@ -14,7 +14,7 @@
# RUN: llvm-objdump --bind --no-show-raw-insn -d -r %t/with-reexport | FileCheck %s
# CHECK: Disassembly of section __TEXT,__text:
-# CHECK: movq {{.*}} # 0x[[ADDR:[0-9a-f]+]]
+# CHECK: movq {{.*}} ## 0x[[ADDR:[0-9a-f]+]]
# CHECK: Bind table:
# CHECK-DAG: __DATA_CONST __got 0x[[ADDR]] pointer 0 libSystem ___nan
diff --git a/lld/test/MachO/tlv-dylib.s b/lld/test/MachO/tlv-dylib.s
index 7a083615492f..dc6bdef1433e 100644
--- a/lld/test/MachO/tlv-dylib.s
+++ b/lld/test/MachO/tlv-dylib.s
@@ -17,9 +17,9 @@
# RUN: %lld -lSystem -L%t -ltlv %t/test.o -o %t/test
# RUN: llvm-objdump --bind -d --no-show-raw-insn %t/test | FileCheck %s
-# CHECK: movq [[#]](%rip), %rax # 0x[[#%x, FOO:]]
-# CHECK-NEXT: movq [[#]](%rip), %rax # 0x[[#%x, BAR:]]
-# CHECK-NEXT: movq [[#]](%rip), %rax # 0x[[#%x, BAZ:]]
+# CHECK: movq [[#]](%rip), %rax ## 0x[[#%x, FOO:]]
+# CHECK-NEXT: movq [[#]](%rip), %rax ## 0x[[#%x, BAR:]]
+# CHECK-NEXT: movq [[#]](%rip), %rax ## 0x[[#%x, BAZ:]]
# CHECK-LABEL: Bind table:
# CHECK-DAG: __DATA __thread_ptrs 0x{{0*}}[[#%x, FOO]] pointer 0 libtlv _foo
diff --git a/lld/test/MachO/tlv.s b/lld/test/MachO/tlv.s
index a7e032b01a4a..9c74ea082ba7 100644
--- a/lld/test/MachO/tlv.s
+++ b/lld/test/MachO/tlv.s
@@ -34,13 +34,13 @@
# HEADER: MH_HAS_TLV_DESCRIPTORS
# REG: <_main>:
-# REG-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_foo>
-# REG-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_bar>
+# REG-NEXT: leaq {{.*}}(%rip), %rax ## {{.*}} <_foo>
+# REG-NEXT: leaq {{.*}}(%rip), %rax ## {{.*}} <_bar>
# REG-NEXT: retq
# TBSS: <_f>:
-# TBSS-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_baz>
-# TBSS-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_qux>
+# TBSS-NEXT: leaq {{.*}}(%rip), %rax ## {{.*}} <_baz>
+# TBSS-NEXT: leaq {{.*}}(%rip), %rax ## {{.*}} <_qux>
# TBSS-NEXT: retq
# REG-TLVP: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
diff --git a/lld/test/MachO/weak-binding.s b/lld/test/MachO/weak-binding.s
index 11b7562c69e9..0c79f981137a 100644
--- a/lld/test/MachO/weak-binding.s
+++ b/lld/test/MachO/weak-binding.s
@@ -19,12 +19,12 @@
# CHECK-NEXT: {{[0-9a-f]+}} {{[0-9a-f ]*[1-9a-f]+[0-9a-f ]*}}
# CHECK: <_main>:
-# CHECK-NEXT: movq [[#]](%rip), %rax # 0x[[#%X,WEAK_DY_GOT_ADDR:]]
-# CHECK-NEXT: movq [[#]](%rip), %rax # 0x[[#%X,WEAK_EXT_GOT_ADDR:]]
-# CHECK-NEXT: leaq [[#]](%rip), %rax # 0x[[#%X,WEAK_INT_GOT_ADDR:]]
-# CHECK-NEXT: movq [[#]](%rip), %rax # 0x[[#%X,WEAK_TLV_ADDR:]]
-# CHECK-NEXT: movq [[#]](%rip), %rax # 0x[[#%X,WEAK_DY_TLV_ADDR:]]
-# CHECK-NEXT: leaq [[#]](%rip), %rax # 0x[[#%X,WEAK_INT_TLV_ADDR:]]
+# CHECK-NEXT: movq [[#]](%rip), %rax ## 0x[[#%X,WEAK_DY_GOT_ADDR:]]
+# CHECK-NEXT: movq [[#]](%rip), %rax ## 0x[[#%X,WEAK_EXT_GOT_ADDR:]]
+# CHECK-NEXT: leaq [[#]](%rip), %rax ## 0x[[#%X,WEAK_INT_GOT_ADDR:]]
+# CHECK-NEXT: movq [[#]](%rip), %rax ## 0x[[#%X,WEAK_TLV_ADDR:]]
+# CHECK-NEXT: movq [[#]](%rip), %rax ## 0x[[#%X,WEAK_DY_TLV_ADDR:]]
+# CHECK-NEXT: leaq [[#]](%rip), %rax ## 0x[[#%X,WEAK_INT_TLV_ADDR:]]
# CHECK-NEXT: callq 0x{{[0-9a-f]*}}
# CHECK-NEXT: callq 0x{{[0-9a-f]*}}
# CHECK-NEXT: callq 0x{{[0-9a-f]*}}
diff --git a/lld/test/MachO/x86-64-reloc-got-load.s b/lld/test/MachO/x86-64-reloc-got-load.s
index 9bc65ecefa4d..b5443126866e 100644
--- a/lld/test/MachO/x86-64-reloc-got-load.s
+++ b/lld/test/MachO/x86-64-reloc-got-load.s
@@ -6,7 +6,7 @@
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
# RUN: %lld -o %t %t.o
# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s
-# CHECK: leaq [[#]](%rip), %rax # {{.*}} <_foo>
+# CHECK: leaq [[#]](%rip), %rax ## {{.*}} <_foo>
.globl _main, _foo
diff --git a/lld/test/MachO/x86-64-reloc-signed.s b/lld/test/MachO/x86-64-reloc-signed.s
index fd12b9bff701..00643c838cde 100644
--- a/lld/test/MachO/x86-64-reloc-signed.s
+++ b/lld/test/MachO/x86-64-reloc-signed.s
@@ -12,18 +12,20 @@
# CHECK-LABEL: Disassembly of section
# CHECK: <_main>:
-# CHECK-NEXT: movl {{.*}} # 0x[[#S]]
+# CHECK-NEXT: movl {{.*}} ## imm =
+# CHECK-NEXT: ## 0x[[#S]]
# CHECK-NEXT: callq {{.*}}
-# CHECK-NEXT: movl {{.*}} # 0x[[#S + 2]]
+# CHECK-NEXT: movl {{.*}} ## 0x[[#S + 2]]
# CHECK-NEXT: callq {{.*}}
-# CHECK-NEXT: movb {{.*}} # 0x[[#S]]
+# CHECK-NEXT: movb {{.*}} ## 0x[[#S]]
# CHECK-NEXT: callq {{.*}}
# CHECK: <__not_text>:
-# CHECK-NEXT: movl {{.*}} # 0x[[#FOO + 8]]
+# CHECK-NEXT: movl {{.*}} ## imm =
+# CHECK-NEXT: ## 0x[[#FOO + 8]]
# CHECK-NEXT: callq {{.*}}
-# CHECK-NEXT: movl {{.*}} # 0x[[#FOO + 8 + 2]]
+# CHECK-NEXT: movl {{.*}} ## 0x[[#FOO + 8 + 2]]
# CHECK-NEXT: callq {{.*}}
-# CHECK-NEXT: movb {{.*}} # 0x[[#FOO + 8]]
+# CHECK-NEXT: movb {{.*}} ## 0x[[#FOO + 8]]
# CHECK-NEXT: callq {{.*}}
.section __TEXT,__text
diff --git a/llvm/test/tools/llvm-objdump/X86/disassemble-align.s b/llvm/test/tools/llvm-objdump/X86/disassemble-align.s
index d3ccc59e64ec..68565fe9732e 100644
--- a/llvm/test/tools/llvm-objdump/X86/disassemble-align.s
+++ b/llvm/test/tools/llvm-objdump/X86/disassemble-align.s
@@ -10,14 +10,14 @@
# Instructions are expected to be aligned if the instruction in hex is not too long.
# CHECK: 0: c3 |retq
-# CHECK-NEXT: 1: 48 8b 05 56 34 12 00 |movq|0x123456(%rip), %rax # 0x12345e <.text+0x12345e>
+# CHECK-NEXT: 1: 48 8b 05 56 34 12 00 |movq|0x123456(%rip), %rax # 0x12345e <.text+0x12345e>
# CHECK-NEXT: 8: 48 b8 54 55 55 55 55 55 55 55|movabsq|$0x5555555555555554, %rax # imm = 0x5555555555555554
# CHECK-NEXT: 12: 8f ea 00 12 4c 02 40 00 00 00 00 |lwpval|$0x0, 0x40(%rdx,%rax), %r15d
# CHECK-NEXT: 1d: 8f ea 00 12 04 25 f0 1c f0 1c 00 00 00 00 |lwpins|$0x0, 0x1cf01cf0, %r15d
# CHECK-NEXT: 2b: ff ff |<unknown>
# NORAW: 0: |retq
-# NORAW-NEXT: 1: |movq|0x123456(%rip), %rax # 0x12345e <.text+0x12345e>
+# NORAW-NEXT: 1: |movq|0x123456(%rip), %rax # 0x12345e <.text+0x12345e>
# NORAW-NEXT: 8: |movabsq|$0x5555555555555554, %rax # imm = 0x5555555555555554
# NORAW-NEXT: 12: |lwpval|$0x0, 0x40(%rdx,%rax), %r15d
# NORAW-NEXT: 1d: |lwpins|$0x0, 0x1cf01cf0, %r15d
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index c75d0e482dbc..39ce32d892aa 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -1433,6 +1433,8 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
// address (jump target or memory operand address) and print it on the
// right of the instruction.
if (Disassembled && MIA) {
+ // Branch targets are printed just after the instructions.
+ llvm::raw_ostream *TargetOS = &FOS;
uint64_t Target;
bool PrintTarget =
MIA->evaluateBranch(Inst, SectionAddr + Index, Size, Target);
@@ -1443,8 +1445,11 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
Target = *MaybeTarget;
PrintTarget = true;
// Do not print real address when symbolizing.
- if (!SymbolizeOperands)
- FOS << " # 0x" << Twine::utohexstr(Target);
+ if (!SymbolizeOperands) {
+ // Memory operand addresses are printed as comments.
+ TargetOS = &CommentStream;
+ *TargetOS << "0x" << Twine::utohexstr(Target);
+ }
}
if (PrintTarget) {
// In a relocatable object, the target's section must reside in
@@ -1503,22 +1508,26 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
if (Demangle)
TargetName = demangle(TargetName);
- FOS << " <";
+ *TargetOS << " <";
if (!Disp) {
// Always Print the binary symbol precisely corresponding to
// the target address.
- FOS << TargetName;
+ *TargetOS << TargetName;
} else if (!LabelAvailable) {
// Always Print the binary symbol plus an offset if there's no
// local label corresponding to the target address.
- FOS << TargetName << "+0x" << Twine::utohexstr(Disp);
+ *TargetOS << TargetName << "+0x" << Twine::utohexstr(Disp);
} else {
- FOS << AllLabels[Target];
+ *TargetOS << AllLabels[Target];
}
- FOS << ">";
+ *TargetOS << ">";
} else if (LabelAvailable) {
- FOS << " <" << AllLabels[Target] << ">";
+ *TargetOS << " <" << AllLabels[Target] << ">";
}
+ // By convention, each record in the comment stream should be
+ // terminated.
+ if (TargetOS == &CommentStream)
+ *TargetOS << "\n";
}
}
}
More information about the llvm-commits
mailing list