blob: 1b7c8fd6c139ec40b25d7437f6166759d2ee93a8 [file] [log] [blame]
#!/usr/bin/env python
"""Test that OpenOCD can talk to a RISC-V target."""
import argparse
import sys
import targets
import testlib
from testlib import assertIn, assertEqual
class OpenOcdTest(testlib.BaseTest):
def __init__(self, target):
testlib.BaseTest.__init__(self, target)
self.gdb = None
def early_applicable(self):
return self.target.openocd_config
def setup(self):
# pylint: disable=attribute-defined-outside-init
self.cli = testlib.OpenocdCli()
self.cli.command("halt")
def write_nops(self, count):
for address in range(self.target.ram, self.target.ram + 4 * count, 4):
# 0x13 is nop
self.cli.command("mww 0x%x 0x13" % address)
class RegTest(OpenOcdTest):
def test(self):
self.write_nops(4)
regs = self.cli.reg()
assertIn("x18", regs)
self.cli.command("reg x18 0x11782")
self.cli.command("step 0x%x" % self.target.ram)
assertEqual(self.cli.reg("x18"), 0x11782)
class StepTest(OpenOcdTest):
def test(self):
self.write_nops(4)
self.cli.command("step 0x%x" % self.target.ram)
for i in range(4):
pc = self.cli.reg("pc")
assertEqual(pc, self.target.ram + 4 * (i+1))
self.cli.command("step")
class ResumeTest(OpenOcdTest):
def test(self):
self.write_nops(16)
self.cli.command("bp 0x%x 4" % (self.target.ram + 12))
self.cli.command("bp 0x%x 4" % (self.target.ram + 24))
self.cli.command("resume 0x%x" % self.target.ram)
assertEqual(self.cli.reg("pc"), self.target.ram + 12)
self.cli.command("resume")
assertEqual(self.cli.reg("pc"), self.target.ram + 24)
self.cli.command("resume 0x%x" % self.target.ram)
assertEqual(self.cli.reg("pc"), self.target.ram + 12)
def main():
parser = argparse.ArgumentParser(
description="Test that OpenOCD can talk to a RISC-V target.")
targets.add_target_options(parser)
testlib.add_test_run_options(parser)
parsed = parser.parse_args()
target = parsed.target(parsed.server_cmd, parsed.sim_cmd, parsed.isolate)
if parsed.xlen:
target.xlen = parsed.xlen
module = sys.modules[__name__]
return testlib.run_all_tests(module, target, parsed)
if __name__ == '__main__':
sys.exit(main())