Skip to content

Commit d84e44b

Browse files
timsifiveadlr
authored andcommitted
debug: Create UnavailableCycleTest
Use new spike mechanism to test OpenOCD behavior when a hart becomes unavailable, and then available again.
1 parent 845148d commit d84e44b

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

debug/gdbserver.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1917,6 +1917,33 @@ def test(self):
19171917
except CouldNotReadRegisters:
19181918
pass
19191919

1920+
class UnavailableCycleTest(ProgramTest):
1921+
"""Test that harts can be debugged after becoming temporarily
1922+
unavailable."""
1923+
def early_applicable(self):
1924+
return self.target.support_unavailable_control
1925+
1926+
def test(self):
1927+
self.gdb.b("main")
1928+
output = self.gdb.c()
1929+
assertIn("Breakpoint", output)
1930+
assertIn("main", output)
1931+
1932+
self.gdb.p("$pc=loop_forever")
1933+
self.gdb.c(wait=False)
1934+
self.server.wait_until_running([self.hart])
1935+
self.server.command(
1936+
f"riscv dmi_write 0x1f 0x{(~(1<<self.hart.id))&0x3:x}")
1937+
self.gdb.expect(r"\S+ became unavailable.")
1938+
1939+
# Now send a DMI command through OpenOCD to make the hart available
1940+
# again.
1941+
1942+
self.server.command("riscv dmi_write 0x1f 0x3")
1943+
self.gdb.expect(r"\S+ became available")
1944+
self.gdb.interrupt()
1945+
self.gdb.p("$pc")
1946+
19201947
class FreeRtosTest(GdbTest):
19211948
def early_applicable(self):
19221949
return self.target.freertos_binary

0 commit comments

Comments
 (0)