diff --git a/test/tools/llvm-objdump/Inputs/large-bss.obj.coff-i386 b/test/tools/llvm-objdump/Inputs/large-bss.obj.coff-i386 new file mode 100644 index 00000000000..79311d34688 Binary files /dev/null and b/test/tools/llvm-objdump/Inputs/large-bss.obj.coff-i386 differ diff --git a/test/tools/llvm-objdump/coff-large-bss.test b/test/tools/llvm-objdump/coff-large-bss.test new file mode 100644 index 00000000000..2d7643eb61a --- /dev/null +++ b/test/tools/llvm-objdump/coff-large-bss.test @@ -0,0 +1,6 @@ +RUN: llvm-objdump -s %p/Inputs/large-bss.obj.coff-i386 | FileCheck %s + +; CHECK: Contents of section .text: +: CHECK-NEXT: Contents of section .data: +: CHECK-NEXT: Contents of section .bss: +: CHECK-NEXT: diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 309bf2369a8..3cd48e7f0d1 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -628,8 +628,6 @@ static void PrintSectionContents(const ObjectFile *Obj) { bool BSS; if (error(Section.getName(Name))) continue; - if (error(Section.getContents(Contents))) - continue; if (error(Section.getAddress(BaseAddr))) continue; if (error(Section.isBSS(BSS))) @@ -637,12 +635,18 @@ static void PrintSectionContents(const ObjectFile *Obj) { outs() << "Contents of section " << Name << ":\n"; if (BSS) { + uint64_t Size; + if (error(Section.getSize(Size))) + continue; outs() << format("\n", BaseAddr, - BaseAddr + Contents.size()); + ", %04" PRIx64 ")>\n", + BaseAddr, BaseAddr + Size); continue; } + if (error(Section.getContents(Contents))) + continue; + // Dump out the content as hex and printable ascii characters. for (std::size_t addr = 0, end = Contents.size(); addr < end; addr += 16) { outs() << format(" %04" PRIx64 " ", BaseAddr + addr);