[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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
66
llvm/test/tools/llvm-objdump/ELF/AArch64/zeroes.test
Normal file
66
llvm/test/tools/llvm-objdump/ELF/AArch64/zeroes.test
Normal file
@@ -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
|
||||
47
llvm/test/tools/llvm-objdump/ELF/ARM/zeroes.test
Normal file
47
llvm/test/tools/llvm-objdump/ELF/ARM/zeroes.test
Normal file
@@ -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
|
||||
@@ -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))) {
|
||||
|
||||
Reference in New Issue
Block a user