aboutsummaryrefslogtreecommitdiff
path: root/test/Scripts/elf-dump
diff options
context:
space:
mode:
authorHemant Kulkarni <khemant@codeaurora.org>2012-11-16 20:51:32 +0000
committerHemant Kulkarni <khemant@codeaurora.org>2012-11-16 20:51:32 +0000
commit2217577fa72288246f71c91bf7ee297a61545112 (patch)
treeed27e1687e477e8f7ea9cd0058df27dfd9936bd3 /test/Scripts/elf-dump
parent08ac4691c61c4fab449ecf34913fa8ac9fde3517 (diff)
Added program header emission
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168195 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Scripts/elf-dump')
-rwxr-xr-xtest/Scripts/elf-dump48
1 files changed, 45 insertions, 3 deletions
diff --git a/test/Scripts/elf-dump b/test/Scripts/elf-dump
index 69cdacde45..61342d8f98 100755
--- a/test/Scripts/elf-dump
+++ b/test/Scripts/elf-dump
@@ -52,6 +52,31 @@ class StringTable:
end = self.string_table.index('\x00', index)
return self.string_table[index:end]
+class ProgramHeader:
+ def __init__(self, f):
+ self.p_type = f.read32()
+ if f.is64Bit:
+ self.p_flags = f.read32()
+ self.p_offset = f.readWord()
+ self.p_vaddr = f.readWord()
+ self.p_paddr = f.readWord()
+ self.p_filesz = f.readWord()
+ self.p_memsz = f.readWord()
+ if not f.is64Bit:
+ self.p_flags = f.read32()
+ self.p_align = f.readWord()
+
+ def dump(self):
+ print " (('p_type', %s)" % common_dump.HexDump(self.p_type)
+ print " ('p_flags', %s)" % common_dump.HexDump(self.p_flags)
+ print " ('p_offset', %s)" % common_dump.HexDump(self.p_offset)
+ print " ('p_vaddr', %s)" % common_dump.HexDump(self.p_vaddr)
+ print " ('p_paddr', %s)" % common_dump.HexDump(self.p_paddr)
+ print " ('p_filesz', %s)" % common_dump.HexDump(self.p_filesz)
+ print " ('p_memsz', %s)" % common_dump.HexDump(self.p_memsz)
+ print " ('p_align', %s)" % common_dump.HexDump(self.p_align)
+ print " ),"
+
class Section:
def __init__(self, f):
self.sh_name = f.read32()
@@ -189,19 +214,23 @@ def dumpELF(path, opts):
print "('e_machine', %s)" % common_dump.HexDump(e_machine)
print "('e_version', %s)" % common_dump.HexDump(f.read32())
print "('e_entry', %s)" % common_dump.HexDump(f.readWord())
- print "('e_phoff', %s)" % common_dump.HexDump(f.readWord())
+ e_phoff = f.readWord()
+ print "('e_phoff', %s)" % common_dump.HexDump(e_phoff)
e_shoff = f.readWord()
print "('e_shoff', %s)" % common_dump.HexDump(e_shoff)
print "('e_flags', %s)" % common_dump.HexDump(f.read32())
print "('e_ehsize', %s)" % common_dump.HexDump(f.read16())
- print "('e_phentsize', %s)" % common_dump.HexDump(f.read16())
- print "('e_phnum', %s)" % common_dump.HexDump(f.read16())
+ e_phentsize = f.read16()
+ print "('e_phentsize', %s)" % common_dump.HexDump(e_phentsize)
+ e_phnum = f.read16()
+ print "('e_phnum', %s)" % common_dump.HexDump(e_phnum)
e_shentsize = f.read16()
print "('e_shentsize', %s)" % common_dump.HexDump(e_shentsize)
e_shnum = f.read16()
print "('e_shnum', %s)" % common_dump.HexDump(e_shnum)
e_shstrndx = f.read16()
print "('e_shstrndx', %s)" % common_dump.HexDump(e_shstrndx)
+
# Read all section headers
sections = []
@@ -228,6 +257,19 @@ def dumpELF(path, opts):
sections[index].dump(shstrtab, f, strtab, opts.dumpSectionData)
print "])"
+ # Read all program headers
+ headers = []
+ for index in range(e_phnum[0]):
+ f.seek(e_phoff[0] + index * e_phentsize[0])
+ h = ProgramHeader(f)
+ headers.append(h)
+
+ print "('_ProgramHeaders', ["
+ for index in range(e_phnum[0]):
+ print " # Program Header %s" % index
+ headers[index].dump()
+ print "])"
+
if __name__ == "__main__":
from optparse import OptionParser, OptionGroup
parser = OptionParser("usage: %prog [options] {files}")