Fix the end of MulticoreTest.
authorTim Newsome <tim@sifive.com>
Mon, 31 Jul 2017 20:49:34 +0000 (13:49 -0700)
committerTim Newsome <tim@sifive.com>
Mon, 31 Jul 2017 20:49:34 +0000 (13:49 -0700)
Now it actually confirms that we're talking to two different cores which
have different values in their registers. Previously it could have been
fooled if eg. the thread command was a nop.

debug/gdbserver.py

index 80985fd8022dccdd83f8de6008168cf0d577a64d..dea9990ceca844866e345816c6c1783796099417 100755 (executable)
@@ -421,29 +421,27 @@ class MulticoreTest(GdbTest):
 
     def setup(self):
         self.gdb.load()
-        self.gdb.b("main")
-        self.gdb.b("main_end")
-        self.gdb.command("set non-stop on")
-        self.gdb.c()
 
     def test(self):
         threads = self.gdb.threads()
         if len(threads) < 2:
             return 'not_applicable'
-        # Run through the entire loop.
+
         for t in threads:
             self.gdb.thread(t)
             self.gdb.p("$pc=_start")
+
         # Run to main
-        for t in threads:
-            self.gdb.thread(t)
-            self.gdb.c()
+        self.gdb.b("main")
+        self.gdb.c()
         for t in self.gdb.threads():
             assertIn("main", t.frame)
-        # Run to end
-        for t in threads:
-            self.gdb.thread(t)
-            self.gdb.c()
+        self.gdb.command("delete breakpoints")
+
+        # Run through the entire loop.
+        self.gdb.b("main_end")
+        self.gdb.c()
+
         hart_ids = []
         for t in self.gdb.threads():
             assertIn("main_end", t.frame)
@@ -459,24 +457,18 @@ class MulticoreTest(GdbTest):
         # Confirmed that we read different register values for different harts.
         # Write a new value to x1, and run through the add sequence again.
 
-        # This part isn't working right, because gdb doesn't resume Thread 2
-        # when asked. I don't know the root cause for that, but up to this
-        # point the test is still useful.
-
-#        for t in threads:
-#            self.gdb.thread(t)
-#            self.gdb.p("$x1=0x%x" % (int(t.id) + 0x800))
-#            self.gdb.p("$pc=main_post_csrr")
-#        for t in threads:
-#            self.gdb.thread(t)
-#            self.gdb.c()
-#        for t in self.gdb.threads():
-#            assertIn("main_end", t.frame)
-#            # Check register values.
-#            self.gdb.thread(t)
-#            for n in range(1, 32):
-#                value = self.gdb.p("$x%d" % n)
-#                assertEqual(value, int(t.id) + 0x800 + n - 1)
+        for t in threads:
+            self.gdb.thread(t)
+            self.gdb.p("$x1=0x%x" % (int(t.id) * 0x800))
+            self.gdb.p("$pc=main_post_csrr")
+        self.gdb.c()
+        for t in self.gdb.threads():
+            assertIn("main_end", t.frame)
+            # Check register values.
+            self.gdb.thread(t)
+            for n in range(1, 32):
+                value = self.gdb.p("$x%d" % n)
+                assertEqual(value, int(t.id) * 0x800 + n - 1)
 
 class StepTest(GdbTest):
     compile_args = ("programs/step.S", )