aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2018-08-23 16:52:39 -0700
committerGitHub <noreply@github.com>2018-08-23 16:52:39 -0700
commitec9250bb49897c3f2483b6aafb6158fa413a12e7 (patch)
tree393f65ebb2b42d77d1025d6508c010f68f3638e0
parent995207c1196d970173e1513535e8341542111102 (diff)
parentd1d2d953b5016b4659ee6b57eea66b8ba9b23dc3 (diff)
downloadriscv-tests-ec9250bb49897c3f2483b6aafb6158fa413a12e7.zip
riscv-tests-ec9250bb49897c3f2483b6aafb6158fa413a12e7.tar.gz
riscv-tests-ec9250bb49897c3f2483b6aafb6158fa413a12e7.tar.bz2
Merge pull request #153 from dmitryryzhov/rtos-switch-active-thread
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 e59c355..887770a 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", )