diff options
author | Tim Newsome <tim@sifive.com> | 2023-07-06 14:41:56 -0700 |
---|---|---|
committer | Tim Newsome <tim@sifive.com> | 2023-07-17 09:35:00 -0700 |
commit | 90691df14b8bf6607d15cbb6c3c23bf33449602c (patch) | |
tree | e5e8e893c55af117e484d9b8a34ebbaca2c603f2 | |
parent | 995fa259b95f5c1b77fe768a00a7d444162fb36f (diff) | |
download | riscv-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-x | debug/gdbserver.py | 27 |
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 |