mirror of
https://github.com/lowRISC/ibex.git
synced 2025-04-23 13:27:10 -04:00
85 lines
2.3 KiB
Python
Executable file
85 lines
2.3 KiB
Python
Executable file
#!/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(f"mww 0x{address:x} 0x13")
|
|
|
|
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(f"step 0x{self.target.ram:x}")
|
|
|
|
assertEqual(self.cli.reg("x18"), 0x11782)
|
|
|
|
class StepTest(OpenOcdTest):
|
|
def test(self):
|
|
self.write_nops(4)
|
|
|
|
self.cli.command("step 0x{self.target.ram:x}")
|
|
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(f"bp 0x{self.target.ram + 12:x} 4")
|
|
self.cli.command(f"bp 0x{self.target.ram + 24:x} 4")
|
|
|
|
self.cli.command(f"resume 0x{self.target.ram:x}")
|
|
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(f"resume 0x{self.target.ram:x}")
|
|
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())
|