Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
e0be02875This file is pinned to the selected release. Download the original to open it in your design tool.
#!/usr/bin/env python3
# This file is Copyright (c) 2020 Franck Jullien <franck.jullien@gmail.com>
# License: BSD
import subprocess
import argparse
def print_usage(bios,regions, triple):
rom_usage = 0
ram_usage = 0
readelf = triple + "-readelf"
result = subprocess.run([readelf, '-e', '-W', bios], stdout=subprocess.PIPE)
result = result.stdout.decode('utf-8')
result = result.split('\n')
with open(regions, "r") as regfile:
for line in regfile:
if line == 0:
break
if 'rom' in line:
rom_size = int(line.split(' ')[-1], 16)
if 'sram' in line:
ram_size = int(line.split(' ')[-1], 16)
for line in result:
if '.text' in line:
if 'PROGBITS' in line:
tokens = list(filter(None,line.split(' ')))
rom_usage += int(tokens[6], 16)
if '.rodata' in line:
if 'PROGBITS' in line:
tokens = list(filter(None,line.split(' ')))
rom_usage += int(tokens[6], 16)
if '.data' in line:
if 'PROGBITS' in line:
tokens = list(filter(None,line.split(' ')))
rom_usage += int(tokens[6], 16)
if '.commands' in line:
if 'PROGBITS' in line:
tokens = list(filter(None,line.split(' ')))
rom_usage += int(tokens[6], 16)
if '.bss' in line:
if 'NOBITS' in line:
tokens = list(filter(None,line.split(' ')))
ram_usage += int(tokens[6], 16)
print("\nROM usage: {:.2f}KiB \t({:.2f}%)".format(rom_usage / 1024.0, rom_usage / rom_size * 100.0))
print("RAM usage: {:.2f}KiB \t({:.2f}%)\n".format(ram_usage / 1024.0, ram_usage / ram_size * 100.0))
def main():
parser = argparse.ArgumentParser(description="Print bios memory usage")
parser.add_argument("input", help="input file")
parser.add_argument("regions", help="regions definitions")
parser.add_argument("triple", help="toolchain triple")
args = parser.parse_args()
print_usage(args.input, args.regions, args.triple)
if __name__ == "__main__":
main()