Add debug test, which checks that openocd correctly switch active thread on any hart...
authorDmitry Ryzhov <dmitry.ryzhov@cloudbear.ru>
Wed, 22 Aug 2018 15:09:33 +0000 (18:09 +0300)
committerDmitry Ryzhov <dmitry.ryzhov@cloudbear.ru>
Wed, 22 Aug 2018 15:09:33 +0000 (18:09 +0300)
debug/gdbserver.py

index 4eb6038668c430bcc0715b23be62ff325db76eda..528eae19a35f2e71ccaf455234397a476027f3d7 100755 (executable)
@@ -633,6 +633,34 @@ class MulticoreRunAllHaltOne(GdbTest):
         time.sleep(1)
         self.gdb.p("buf", fmt="")
 
+class MulticoreRtosSwitchActiveHartTest(GdbTest):
+    compile_args = ("programs/multicore.c", "-DMULTICORE")
+
+    def early_applicable(self):
+        return len(self.target.harts) > 1
+
+    def setup(self):
+        self.gdb.select_hart(self.target.harts[0])
+        self.gdb.load()
+        for hart in self.target.harts:
+            self.gdb.select_hart(hart)
+            self.gdb.p("$pc=_start")
+
+    def test(self):
+        if self.gdb.one_hart_per_gdb():
+            return 'not_applicable'
+
+        # Set breakpoint near '_start' label to increase the chances of a situation
+        # when all harts hit breakpoint immediately and simultaneously.
+        self.gdb.b("set_trap_handler")
+
+        # Check that all harts hit breakpoint one by one.
+        for _ in range(len(self.target.harts)):
+            output = self.gdb.c()
+            assertIn("hit Breakpoint", output)
+            assertIn("set_trap_handler", output)
+            assertNotIn("received signal SIGTRAP", output)
+
 class StepTest(GdbSingleHartTest):
     compile_args = ("programs/step.S", )