mirror of https://github.com/wolfSSL/wolfBoot.git
44 lines
1.6 KiB
Python
Executable File
44 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import re
|
|
import argparse
|
|
|
|
pattern = r'^([\w\.]+) +(0x[0-9a-fA-F]+) +(0x[0-9a-fA-F]+)'
|
|
|
|
def parse_map_file(map_file_path):
|
|
components = []
|
|
mmap = False
|
|
flash_start = 0
|
|
with open(map_file_path, 'r') as map_file:
|
|
current_component = None
|
|
for line in map_file:
|
|
if line.startswith('FLASH'):
|
|
m = re.match(r'FLASH +(0x[0-9a-fA-F]+)', line)
|
|
flash_start = int(m[1], 16)
|
|
if line == 'Linker script and memory map\n' or mmap:
|
|
mmap = True
|
|
else:
|
|
continue
|
|
# Check for start of a new component
|
|
m = re.match(pattern, line)
|
|
if m:
|
|
c = {'name': m[1], 'address': int(m[2], 16), 'size': int(m[3], 16)}
|
|
components.append(c)
|
|
return components, flash_start
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("map_file_path", type=str,
|
|
help="Path to the map file",
|
|
nargs='?',
|
|
default='stage1/loader_stage1.map')
|
|
args = parser.parse_args()
|
|
map_file_path = args.map_file_path
|
|
comps, flash = parse_map_file(map_file_path)
|
|
comps = filter(lambda x: x['address'] >= flash, comps)
|
|
comps = sorted(comps, key=lambda x: x['address'])
|
|
print(f'Name:{"":<20}Address:{"":<20}Size:{"":<20}')
|
|
for c in comps:
|
|
print (f"{c['name']:<20} {hex(c['address']):<20} {hex(c['size']):<20}")
|
|
total_sum = sum(map(lambda x: x['size'], comps))
|
|
print(f"total sum: {hex(total_sum)} ({total_sum//1024} KB)")
|