aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Ryzhov <dmitry.ryzhov@cloudbear.ru>2018-08-22 18:09:33 +0300
committerDmitry Ryzhov <dmitry.ryzhov@cloudbear.ru>2018-08-22 18:09:33 +0300
commitd1d2d953b5016b4659ee6b57eea66b8ba9b23dc3 (patch)
tree4f0f96a7d4c467d54b2757cfe4872a7acd8e098b
parent5b4eb413c2620d4f29af1a8954871a74be8dee25 (diff)
downloadriscv-tests-d1d2d953b5016b4659ee6b57eea66b8ba9b23dc3.zip
riscv-tests-d1d2d953b5016b4659ee6b57eea66b8ba9b23dc3.tar.gz
riscv-tests-d1d2d953b5016b4659ee6b57eea66b8ba9b23dc3.tar.bz2
Add debug test, which checks that openocd correctly switch active thread on any hart halt.
-rwxr-xr-xdebug/gdbserver.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/debug/gdbserver.py b/debug/gdbserver.py
index 4eb6038..528eae1 100755
--- a/debug/gdbserver.py
+++ b/debug/gdbserver.py
@@ -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", )