xref: /optee_os/scripts/tee_bin_parser.py (revision 3196a2d15c867f3d9331ab9cf1155523c30c58b6)
1bbaeed4dSRouven Czerwinski#!/usr/bin/env python3
21bb92983SJerome Forissier# SPDX-License-Identifier: BSD-2-Clause
309871a7aSJoakim Bech#
409871a7aSJoakim Bech# Copyright (c) 2016, Linaro Limited
509871a7aSJoakim Bechimport struct
6*3196a2d1SJens Wiklanderimport argparse
7*3196a2d1SJens Wiklander
8*3196a2d1SJens Wiklander
9*3196a2d1SJens Wiklanderdef get_args():
10*3196a2d1SJens Wiklander    parser = argparse.ArgumentParser()
11*3196a2d1SJens Wiklander
12*3196a2d1SJens Wiklander    parser.add_argument('--input', required=False,  dest='inf',
13*3196a2d1SJens Wiklander                        default='../out/arm/core/tee.bin',
14*3196a2d1SJens Wiklander                        help='The input tee.bin')
15*3196a2d1SJens Wiklander
16*3196a2d1SJens Wiklander    return parser.parse_args()
1709871a7aSJoakim Bech
18e06fa025SJerome Forissier
1909871a7aSJoakim Bechdef main():
20*3196a2d1SJens Wiklander    args = get_args()
21*3196a2d1SJens Wiklander
22*3196a2d1SJens Wiklander    with open(args.inf, "rb") as f:
2309871a7aSJoakim Bech        data = f.read(4)
248108ed32SJens Wiklander        magic = struct.unpack('<I', data)[0]
25bbaeed4dSRouven Czerwinski        print("Magic: \t\t0x{:08x}".format(magic))
2609871a7aSJoakim Bech
2709871a7aSJoakim Bech        data = f.read(1)
288108ed32SJens Wiklander        version = struct.unpack('<B', data)[0]
29bbaeed4dSRouven Czerwinski        print("Version: \t0x{:02x}".format(version))
3009871a7aSJoakim Bech
3109871a7aSJoakim Bech        data = f.read(1)
328108ed32SJens Wiklander        arch_id = struct.unpack('<B', data)[0]
33bbaeed4dSRouven Czerwinski        print("ArchID: \t0x{:02x}".format(arch_id))
3409871a7aSJoakim Bech
3509871a7aSJoakim Bech        data = f.read(2)
368108ed32SJens Wiklander        flags = struct.unpack('<H', data)[0]
37bbaeed4dSRouven Czerwinski        print("Arch Flags: \t0x{:04x}".format(arch_id))
3809871a7aSJoakim Bech
3909871a7aSJoakim Bech        data = f.read(4)
408108ed32SJens Wiklander        init_size = struct.unpack('<I', data)[0]
41bbaeed4dSRouven Czerwinski        print("Init size: \t0x{:04x}".format(init_size))
4209871a7aSJoakim Bech
4309871a7aSJoakim Bech        data = f.read(4)
448108ed32SJens Wiklander        laddr_h = struct.unpack('<I', data)[0]
45bbaeed4dSRouven Czerwinski        print("Load addr high:\t0x{:04x}".format(laddr_h))
4609871a7aSJoakim Bech
4709871a7aSJoakim Bech        data = f.read(4)
488108ed32SJens Wiklander        laddr_l = struct.unpack('<I', data)[0]
49bbaeed4dSRouven Czerwinski        print("Load addr low: \t0x{:04x}".format(laddr_l))
5009871a7aSJoakim Bech
5109871a7aSJoakim Bech        data = f.read(4)
528108ed32SJens Wiklander        mem_usage = struct.unpack('<I', data)[0]
53bbaeed4dSRouven Czerwinski        print("Mem usage: \t0x{:04x}".format(mem_usage))
5409871a7aSJoakim Bech
5509871a7aSJoakim Bech        data = f.read(4)
568108ed32SJens Wiklander        pgd_size = struct.unpack('<I', data)[0]
57bbaeed4dSRouven Czerwinski        print("Pages size: \t0x{:04x}".format(pgd_size))
5809871a7aSJoakim Bech
59e06fa025SJerome Forissier
6009871a7aSJoakim Bechif __name__ == "__main__":
6109871a7aSJoakim Bech    main()
62