class DebugBreakpoint(DebugTest):
def test(self):
+
self.gdb.b("rot13")
+
# The breakpoint should be hit exactly 2 times.
for _ in range(2):
output = self.gdb.c()
time.sleep(1)
self.gdb.p("buf", fmt="")
-class StepTest(GdbTest):
+class StepTest(GdbSingleHartTest):
compile_args = ("programs/step.S", )
def setup(self):
pc = self.gdb.p("$pc")
assertEqual("%x" % (pc - main_address), "%x" % expected)
-class TriggerTest(GdbTest):
+class TriggerTest(GdbSingleHartTest):
compile_args = ("programs/trigger.S", )
def setup(self):
self.gdb.load()
assertIn("clear_triggers", output)
self.check_triggers((1<<6) | (1<<0), 0xfeedac00)
-class RegsTest(GdbTest):
+class RegsTest(GdbSingleHartTest):
compile_args = ("programs/regs.S", )
def setup(self):
self.gdb.load()
self.gdb.command("file %s" % self.binary)
def test(self):
- self.gdb.load()
- self.gdb.command("b _exit")
- self.gdb.c(timeout=60)
+ # Some hart will compete the CRC calculation first!
+ # Let them race in RTOS mode.
+ # In non-RTOS mode, only one hart will continue.
+ # This loop will fail because the others won't know
+ # about '_start'. But if that is the case, they
+ # won't run on the `continue` either, so we don't really care.
+ try:
+ self.gdb.load()
+ for hart in self.target.harts:
+ self.gdb.select_hart(hart)
+ self.gdb.p("$pc=_start")
+ except ValueError: #invalid literal for int() with base 0: 'No symbol table is loaded. Use the "file" command.'
+ pass
+ finally:
+
+ self.gdb.select_hart(self.hart)
+ self.gdb.c()
assertEqual(self.gdb.p("status"), self.crc)
os.unlink(self.download_c.name)
-#class MprvTest(GdbTest):
+#class MprvTest(GdbSingleHartTest):
# compile_args = ("programs/mprv.S", )
# def setup(self):
# self.gdb.load()
# output = self.gdb.command("p/x *(int*)(((char*)&data)-0x80000000)")
# assertIn("0xbead", output)
-class PrivTest(GdbTest):
+class PrivTest(GdbSingleHartTest):
compile_args = ("programs/priv.S", )
def setup(self):
# pylint: disable=attribute-defined-outside-init
# PMP registers are optional
pass
+ # Ensure Virtual Memory is disabled if applicable (SATP register is not
+ # reset)
+ try:
+ self.gdb.p("$satp=0")
+ except testlib.CouldNotFetch:
+ # SATP only exists if you have S mode.
+ pass
+
# Leave the PC at _start, where the first 4 instructions should be
# legal in any mode.
for privilege in range(4):