diff --git a/lld/test/ELF/aarch64-undefined-weak.s b/lld/test/ELF/aarch64-undefined-weak.s index f4628453ec3fe..015f9c9a043e5 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 5c27d4cd0df26..88b9bb3cb5be8 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 0000000000000..a56d056f8a225 --- /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 0000000000000..8601343bd146e --- /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 +# CHECK-NEXT: ... +# CHECK-NEXT: 18: e320f000 +# CHECK-NEXT: ... +# CHECK-NEXT: 28: e320f000 +# CHECK-NEXT: ... +# CHECK-NEXT: 40: e320f000 + +# 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 b69d14b4e7609..8073c898b8a14 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))) {