blob: 6fc3140e2ec591ae0c06f79bd1af08cb8868d3f6 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
import argparse
import sys
from sim.elf import load_elf
from sim.sim import OTBNSim
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument('elf')
parser.add_argument('-v', '--verbose', action='store_true')
parser.add_argument(
'--dump-dmem',
metavar="FILE",
type=argparse.FileType('wb'),
help="after execution, write the data memory contents to this file")
parser.add_argument(
'--dump-regs',
metavar="FILE",
type=argparse.FileType('w'),
default=sys.stdout,
help=
"after execution, write the GPR and WDR contents to this file (default: STDOUT)"
)
args = parser.parse_args()
sim = OTBNSim()
load_elf(sim, args.elf)
sim.state.start(0)
sim.run(verbose=args.verbose)
if args.dump_dmem is not None:
args.dump_dmem.write(sim.dump_data())
if args.dump_regs is not None:
for idx, value in enumerate(sim.state.gprs.peek_unsigned_values()):
args.dump_regs.write(' x{:<2} = 0x{:08x}\n'.format(idx, value))
for idx, value in enumerate(sim.state.wdrs.peek_unsigned_values()):
args.dump_regs.write(' w{:<2} = 0x{:064x}\n'.format(idx, value))
return 0
if __name__ == "__main__":
sys.exit(main())