Pass newly updated -march, -mabi options to gcc
[riscv-tests.git] / debug / openocd.py
index 4a71035e4f3977ea49794450d373db3af26eac4f..0ab8810162ecaf2c8be2f76eee42d9c6ea6c44f3 100755 (executable)
@@ -7,7 +7,7 @@ import sys
 
 import targets
 import testlib
-from testlib import assertRegexpMatches
+from testlib import assertIn, assertEqual
 
 class OpenOcdTest(testlib.BaseTest):
     def __init__(self, target):
@@ -20,13 +20,50 @@ class OpenOcdTest(testlib.BaseTest):
     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.cli.command("halt")
-        output = self.cli.command("reg")
-        assertRegexpMatches(output, r"x18 \(/%d\): 0x[0-9A-F]+" %
-                self.target.xlen)
+        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(