1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

llvm-objdump: Handle BSS sections larger than the object file

The size of the uninitialized sections, like BSS, can exceed the size of
the object file.

Do not attempt to grab the contents of such sections.

llvm-svn: 212953
This commit is contained in:
David Majnemer 2014-07-14 16:20:14 +00:00
parent 4ef7afc394
commit fa3efc30b3
3 changed files with 14 additions and 4 deletions

Binary file not shown.

View File

@ -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: <skipping contents of bss section at [0000, 010f)>

View File

@ -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("<skipping contents of bss section at [%04" PRIx64
", %04" PRIx64 ")>\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);