import testlib
from testlib import assertEqual, assertNotEqual, assertIn, assertNotIn
from testlib import assertGreater, assertRegexpMatches, assertLess
-from testlib import GdbTest, GdbSingleHartTest, TestFailed, assertTrue
+from testlib import GdbTest, GdbSingleHartTest, TestFailed
+#from testlib import assertTrue
MSTATUS_UIE = 0x00000001
MSTATUS_SIE = 0x00000002
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", )
if privilege in self.supported:
assertEqual(actual, privilege)
-class PrivChange(PrivTest):
- def test(self):
- """Test that the core's privilege level actually changes."""
-
- if 0 not in self.supported:
- return 'not_applicable'
-
- self.gdb.b("main")
- self.gdb.c()
-
- # Machine mode
- self.gdb.p("$priv=3")
- main_address = self.gdb.p("$pc")
- self.gdb.stepi()
- assertEqual("%x" % self.gdb.p("$pc"), "%x" % (main_address+4))
-
- # User mode
- self.gdb.p("$priv=0")
- self.gdb.stepi()
- # Should have taken an exception, so be nowhere near main.
- pc = self.gdb.p("$pc")
- assertTrue(pc < main_address or pc > main_address + 0x100)
+# XXX temporarily disabling this test
+#class PrivChange(PrivTest):
+# def test(self):
+# """Test that the core's privilege level actually changes."""
+#
+# if 0 not in self.supported:
+# return 'not_applicable'
+#
+# self.gdb.b("main")
+# self.gdb.c()
+#
+# # Machine mode
+# self.gdb.p("$priv=3")
+# main_address = self.gdb.p("$pc")
+# self.gdb.stepi()
+# assertEqual("%x" % self.gdb.p("$pc"), "%x" % (main_address+4))
+#
+# # User mode
+# self.gdb.p("$priv=0")
+# self.gdb.stepi()
+# # Should have taken an exception, so be nowhere near main.
+# pc = self.gdb.p("$pc")
+# assertTrue(pc < main_address or pc > main_address + 0x100)
parsed = None
def main():