[llvm-objdump] Fix spurious "The end of the file was unexpectedly encountered" if...
authorSid Manning <sidneym@quicinc.com>
Tue, 5 Nov 2019 19:13:18 +0000 (11:13 -0800)
committerFangrui Song <maskray@google.com>
Tue, 5 Nov 2019 19:14:12 +0000 (11:14 -0800)
commit6cd47f9dd7dd664ff855fb0d1ed26bf5e4bb77fc
tree14e23da581acc68fcb6095d0c73c9290339e1b4d
parentf1b4c4bfd0b55c3c0abbc73e1159117f8533aca3
[llvm-objdump] Fix spurious "The end of the file was unexpectedly encountered" if a SHT_NOBITS sh_offset is larger than the file size

llvm-objdump -D this file:

  int a[100000];
  int main() { return 0; }

Will produce an error: "The end of the file was unexpectedly encountered".

This happens because of a check in Binary.h checkOffset.  (Addr + Size > M.getBufferEnd()).

The sh_offset and sh_size fields can be ignored for SHT_NOBITS sections.
Fix the error by changing ELFObjectFile<ELFT>::getSectionContents to use
the file base for SHT_NOBITS sections.

Reviewed By: grimar, MaskRay

Differential Revision: https://reviews.llvm.org/D69192
llvm/include/llvm/Object/ELFObjectFile.h
llvm/test/tools/llvm-objdump/X86/elf-disassemble-bss.test [new file with mode: 0644]