[lld] abe0dd1 - [llvm-objdump] Print ... even if a data mapping symbol is active
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 25 10:32:43 PDT 2024
Author: Fangrui Song
Date: 2024-09-25T10:32:40-07:00
New Revision: abe0dd195a3b2630afdc5c1c233eb2a068b2d72f
URL: https://github.com/llvm/llvm-project/commit/abe0dd195a3b2630afdc5c1c233eb2a068b2d72f
DIFF: https://github.com/llvm/llvm-project/commit/abe0dd195a3b2630afdc5c1c233eb2a068b2d72f.diff
LOG: [llvm-objdump] Print ... even if a data mapping symbol is active
Swap `!DisassembleZeroes` and `if (DumpARMELFData)` conditions so that
in the false DisassembleZeroes case (default), `...` will be printed for
long consecutive zeroes, even when a data mapping symbol is active.
This is especially useful for certain lld tests that insert a huge
padding within a code section. Without `...` the output will be huge.
Pull Request: https://github.com/llvm/llvm-project/pull/109553
Added:
llvm/test/tools/llvm-objdump/ELF/AArch64/zeroes.test
llvm/test/tools/llvm-objdump/ELF/ARM/zeroes.test
Modified:
lld/test/ELF/aarch64-undefined-weak.s
llvm/test/MC/ARM/ltorg-range.s
llvm/tools/llvm-objdump/llvm-objdump.cpp
Removed:
################################################################################
diff --git a/lld/test/ELF/aarch64-undefined-weak.s b/lld/test/ELF/aarch64-undefined-weak.s
index f4628453ec3fea..015f9c9a043e54 100644
--- a/lld/test/ELF/aarch64-undefined-weak.s
+++ b/lld/test/ELF/aarch64-undefined-weak.s
@@ -1,7 +1,7 @@
// REQUIRES: aarch64
// RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux %s -o %t.o
// RUN: ld.lld --image-base=0x10000000 %t.o -o %t
-// RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s
+// RUN: llvm-objdump -d -z --no-show-raw-insn %t | FileCheck %s
// Check that the ARM 64-bit ABI rules for undefined weak symbols are applied.
// Branch instructions are resolved to the next instruction. Undefined
diff --git a/llvm/test/MC/ARM/ltorg-range.s b/llvm/test/MC/ARM/ltorg-range.s
index 5c27d4cd0df26f..88b9bb3cb5be80 100644
--- a/llvm/test/MC/ARM/ltorg-range.s
+++ b/llvm/test/MC/ARM/ltorg-range.s
@@ -1,5 +1,5 @@
@ RUN: llvm-mc -triple armv7-unknown-linux-gnueabi -filetype obj -o - %s \
-@ RUN: | llvm-objdump -d - | FileCheck %s
+@ RUN: | llvm-objdump -d -z - | FileCheck %s
ldr r0, =0x01020304
@ CHECK: ldr
diff --git a/llvm/test/tools/llvm-objdump/ELF/AArch64/zeroes.test b/llvm/test/tools/llvm-objdump/ELF/AArch64/zeroes.test
new file mode 100644
index 00000000000000..a56d056f8a2256
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/ELF/AArch64/zeroes.test
@@ -0,0 +1,66 @@
+## Test zero dumping when a data mapping symbol is active.
+# RUN: llvm-mc -filetype=obj -triple=aarch64 %s -o %t
+# RUN: llvm-objdump -t -d %t | FileCheck %s
+
+# CHECK: SYMBOL TABLE:
+# CHECK-NEXT: 0000000000000000 l .text 0000000000000000 $d
+# CHECK-NEXT: 000000000000000c l .text 0000000000000000 $x
+# CHECK-NEXT: 0000000000000010 l .text 0000000000000000 $d
+
+# CHECK: 0000000000000000 <_start>:
+# CHECK-NEXT: ...
+# CHECK-NEXT: 8: 01 00 00 00 .word 0x00000001
+# CHECK-NEXT: c: d503201f nop
+# CHECK-NEXT: ...
+# CHECK-NEXT: 18: d503201f nop
+# CHECK-NEXT: ...
+# CHECK-NEXT: 2c: d503201f nop
+# CHECK-NEXT: ...
+# CHECK-NEXT: 48: d503201f nop
+
+# RUN: llvm-objdump -d -z %t | FileCheck %s --check-prefix=ZERO
+
+# ZERO: 0000000000000000 <_start>:
+# ZERO-NEXT: 0: 00 00 00 00 .word 0x00000000
+# ZERO-NEXT: 4: 00 00 00 00 .word 0x00000000
+# ZERO-NEXT: 8: 01 00 00 00 .word 0x00000001
+# ZERO-NEXT: c: d503201f nop
+# ZERO-NEXT: 10: 00 00 00 00 .word 0x00000000
+# ZERO-NEXT: 14: 00 00 00 00 .word 0x00000000
+# ZERO-NEXT: 18: d503201f nop
+
+## Check we do not skip zeroes blocks if have relocations pointed to these places.
+# RUN: llvm-objdump -d -r %t | FileCheck %s --check-prefix=RELOC
+
+# RELOC: 0000000000000000 <_start>:
+# RELOC-NEXT: ...
+# RELOC-NEXT: 8: 01 00 00 00 .word 0x00000001
+# RELOC-NEXT: c: d503201f nop
+# RELOC-NEXT: ...
+# RELOC-NEXT: 18: d503201f nop
+# RELOC-NEXT: 1c: 00 00 00 00 .word 0x00000000
+# RELOC-NEXT: 000000000000001c: R_AARCH64_ABS64 x1
+# RELOC-NEXT: ...
+# RELOC-NEXT: 2c: d503201f nop
+# RELOC-NEXT: ...
+# RELOC-NEXT: 38: 00 00 00 00 .word 0x00000000
+# RELOC-NEXT: 0000000000000038: R_AARCH64_ABS64 x2
+# RELOC-NEXT: ...
+# RELOC-NEXT: 48: d503201f nop
+
+.globl _start
+_start:
+ .space 8
+ .long 1
+ nop
+ .space 8
+ nop
+
+ .quad x1
+ .space 8
+ nop
+
+ .space 8
+ .quad x2
+ .space 8
+ nop
diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/zeroes.test b/llvm/test/tools/llvm-objdump/ELF/ARM/zeroes.test
new file mode 100644
index 00000000000000..8601343bd146e9
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/zeroes.test
@@ -0,0 +1,47 @@
+## Test zero dumping when a data mapping symbol is active.
+# RUN: llvm-mc -filetype=obj -triple=armv7 %s -o %t
+# RUN: llvm-objdump -t -d %t | FileCheck %s
+
+# CHECK: SYMBOL TABLE:
+# CHECK-NEXT: 00000000 l .text 00000000 $d
+# CHECK-NEXT: 0000000c l .text 00000000 $a
+# CHECK-NEXT: 00000010 l .text 00000000 $d
+
+# CHECK: 00000000 <_start>:
+# CHECK-NEXT: ...
+# CHECK-NEXT: 8: 01 00 00 00 .word 0x00000001
+# CHECK-NEXT: c: e320f000 <unknown>
+# CHECK-NEXT: ...
+# CHECK-NEXT: 18: e320f000 <unknown>
+# CHECK-NEXT: ...
+# CHECK-NEXT: 28: e320f000 <unknown>
+# CHECK-NEXT: ...
+# CHECK-NEXT: 40: e320f000 <unknown>
+
+# RUN: llvm-objdump -d -z --triple=armv7 %t | FileCheck %s --check-prefix=ZERO
+
+# ZERO: 00000000 <_start>:
+# ZERO-NEXT: 0: 00 00 00 00 .word 0x00000000
+# ZERO-NEXT: 4: 00 00 00 00 .word 0x00000000
+# ZERO-NEXT: 8: 01 00 00 00 .word 0x00000001
+# ZERO-NEXT: c: e320f000 nop
+# ZERO-NEXT: 10: 00 00 00 00 .word 0x00000000
+# ZERO-NEXT: 14: 00 00 00 00 .word 0x00000000
+# ZERO-NEXT: 18: e320f000 nop
+
+.globl _start
+_start:
+ .space 8
+ .long 1
+ nop
+ .space 8
+ nop
+
+ .long x1
+ .space 8
+ nop
+
+ .space 8
+ .long x2
+ .space 8
+ nop
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index b69d14b4e7609a..8073c898b8a147 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -2244,27 +2244,28 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,
return false;
};
+ // When -z or --disassemble-zeroes are given we always dissasemble
+ // them. Otherwise we might want to skip zero bytes we see.
+ if (!DisassembleZeroes) {
+ uint64_t MaxOffset = End - Index;
+ // For --reloc: print zero blocks patched by relocations, so that
+ // relocations can be shown in the dump.
+ if (InlineRelocs && RelCur != RelEnd)
+ MaxOffset = std::min(RelCur->getOffset() - RelAdjustment - Index,
+ MaxOffset);
+
+ if (size_t N =
+ countSkippableZeroBytes(Bytes.slice(Index, MaxOffset))) {
+ FOS << "\t\t..." << '\n';
+ Index += N;
+ continue;
+ }
+ }
+
if (DumpARMELFData) {
Size = dumpARMELFData(SectionAddr, Index, End, Obj, Bytes,
MappingSymbols, *DT->SubtargetInfo, FOS);
} else {
- // When -z or --disassemble-zeroes are given we always dissasemble
- // them. Otherwise we might want to skip zero bytes we see.
- if (!DisassembleZeroes) {
- uint64_t MaxOffset = End - Index;
- // For --reloc: print zero blocks patched by relocations, so that
- // relocations can be shown in the dump.
- if (InlineRelocs && RelCur != RelEnd)
- MaxOffset = std::min(RelCur->getOffset() - RelAdjustment - Index,
- MaxOffset);
-
- if (size_t N =
- countSkippableZeroBytes(Bytes.slice(Index, MaxOffset))) {
- FOS << "\t\t..." << '\n';
- Index += N;
- continue;
- }
- }
if (DumpTracebackTableForXCOFFFunction &&
doesXCOFFTracebackTableBegin(Bytes.slice(Index, 4))) {
More information about the llvm-commits
mailing list