Skip to content

[llvm-objdump] Print ... even if a data mapping symbol is active #109553

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
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lld/test/ELF/aarch64-undefined-weak.s
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/MC/ARM/ltorg-range.s
Original file line number Diff line number Diff line change
@@ -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
Expand Down
66 changes: 66 additions & 0 deletions llvm/test/tools/llvm-objdump/ELF/AArch64/zeroes.test
Original file line number Diff line number Diff line change
@@ -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 changes: 47 additions & 0 deletions llvm/test/tools/llvm-objdump/ELF/ARM/zeroes.test
Original file line number Diff line number Diff line change
@@ -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
35 changes: 18 additions & 17 deletions llvm/tools/llvm-objdump/llvm-objdump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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))) {
Expand Down
Loading