aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2023-07-06 14:41:56 -0700
committerTim Newsome <tim@sifive.com>2023-07-17 09:35:00 -0700
commit90691df14b8bf6607d15cbb6c3c23bf33449602c (patch)
treee5e8e893c55af117e484d9b8a34ebbaca2c603f2
parent995fa259b95f5c1b77fe768a00a7d444162fb36f (diff)
downloadriscv-tests-90691df14b8bf6607d15cbb6c3c23bf33449602c.zip
riscv-tests-90691df14b8bf6607d15cbb6c3c23bf33449602c.tar.gz
riscv-tests-90691df14b8bf6607d15cbb6c3c23bf33449602c.tar.bz2
debug: Create UnavailableCycleTest
Use new spike mechanism to test OpenOCD behavior when a hart becomes unavailable, and then available again.
-rwxr-xr-xdebug/gdbserver.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/debug/gdbserver.py b/debug/gdbserver.py
index ad85e34..f8997cc 100755
--- a/debug/gdbserver.py
+++ b/debug/gdbserver.py
@@ -1917,6 +1917,33 @@ class UnavailableRunTest(ProgramTest):
except CouldNotReadRegisters:
pass
+class UnavailableCycleTest(ProgramTest):
+ """Test that harts can be debugged after becoming temporarily
+ unavailable."""
+ def early_applicable(self):
+ return self.target.support_unavailable_control
+
+ def test(self):
+ self.gdb.b("main")
+ output = self.gdb.c()
+ assertIn("Breakpoint", output)
+ assertIn("main", output)
+
+ self.gdb.p("$pc=loop_forever")
+ self.gdb.c(wait=False)
+ self.server.wait_until_running([self.hart])
+ self.server.command(
+ f"riscv dmi_write 0x1f 0x{(~(1<<self.hart.id))&0x3:x}")
+ self.gdb.expect(r"\S+ became unavailable.")
+
+ # Now send a DMI command through OpenOCD to make the hart available
+ # again.
+
+ self.server.command("riscv dmi_write 0x1f 0x3")
+ self.gdb.expect(r"\S+ became available")
+ self.gdb.interrupt()
+ self.gdb.p("$pc")
+
class FreeRtosTest(GdbTest):
def early_applicable(self):
return self.target.freertos_binary