Browse Source

elf_mem_map: switch to a named tuple for extensibility

Yuri D'Elia 3 years ago
parent
commit
40b737e33d
1 changed files with 15 additions and 11 deletions
  1. 15 11
      tools/elf_mem_map

+ 15 - 11
tools/elf_mem_map

@@ -2,6 +2,7 @@
 import argparse
 import elftools.elf.elffile
 import elftools.dwarf.descriptions
+from collections import namedtuple
 from struct import unpack
 
 SRAM_OFFSET = 0x800000
@@ -9,6 +10,9 @@ EEPROM_OFFSET = 0x810000
 FILL_BYTE = b'\0'
 
 
+Entry = namedtuple('Entry', ['name', 'loc', 'size'])
+
+
 def get_elf_globals(path):
     fd = open(path, "rb")
     if fd is None:
@@ -60,7 +64,7 @@ def get_elf_globals(path):
                 continue
             size = byte_size.value
 
-            grefs.append([name, loc, size])
+            grefs.append(Entry(name, loc, size))
 
     return grefs
 
@@ -106,14 +110,14 @@ def decode_dump(path):
 
 def annotate_refs(grefs, addr, data, width=45, gaps=True):
     last_end = None
-    for name, loc, size in grefs:
-        if loc < addr:
+    for entry in grefs:
+        if entry.loc < addr:
             continue
-        if loc + size > addr + len(data):
+        if entry.loc + entry.size > addr + len(data):
             continue
 
-        pos = loc-addr
-        end_pos = pos + size
+        pos = entry.loc-addr
+        end_pos = pos + entry.size
         buf = data[pos:end_pos]
 
         buf_repr = ''
@@ -131,15 +135,15 @@ def annotate_refs(grefs, addr, data, width=45, gaps=True):
             print('{:04x} {} {:4} R:{}'.format(addr+last_end, "*UNKNOWN*".ljust(width),
                                                gap_size, gap_buf.hex()))
 
-        print('{:04x} {} {:4}{} R:{}'.format(loc, name.ljust(width), size,
-                                             buf_repr, buf.hex()))
+        print('{:04x} {} {:4}{} R:{}'.format(entry.loc, entry.name.ljust(width),
+                                             entry.size, buf_repr, buf.hex()))
         last_end = end_pos
 
 
 def print_map(grefs):
     print('OFFSET\tSIZE\tNAME')
-    for name, loc, size in grefs:
-        print('{:x}\t{}\t{}'.format(loc, size, name))
+    for entry in grefs:
+        print('{:x}\t{}\t{}'.format(entry.loc, entry.size, entry.name))
 
 
 def main():
@@ -156,7 +160,7 @@ def main():
     args = ap.parse_args()
 
     grefs = get_elf_globals(args.elf)
-    grefs = list(sorted(grefs, key=lambda x: x[1]))
+    grefs = list(sorted(grefs, key=lambda x: x.loc))
     if args.dump is None:
         print_map(grefs)
     else: