Make ExamineTarget multi-core aware.
authorTim Newsome <tim@sifive.com>
Fri, 29 Sep 2017 22:41:30 +0000 (15:41 -0700)
committerTim Newsome <tim@sifive.com>
Fri, 29 Sep 2017 22:41:30 +0000 (15:41 -0700)
Now on multi-core targets it only runs once, wasting less time.

debug/testlib.py

index 996c188efb8aff2a0c41e063cad437322b5361d9..94694a00aef53e0933fa8a187062e4c4c1bc601a 100644 (file)
@@ -447,14 +447,16 @@ def run_all_tests(module, target, parsed):
     gdb_cmd = parsed.gdb
 
     todo = []
+    examine_added = False
     for hart in target.harts:
         if parsed.misaval:
             hart.misa = int(parsed.misaval, 16)
             print "Using $misa from command line: 0x%x" % hart.misa
         elif hart.misa:
             print "Using $misa from hart definition: 0x%x" % hart.misa
-        else:
-            todo.append(("ExamineTarget", ExamineTarget, hart))
+        elif not examine_added:
+            todo.append(("ExamineTarget", ExamineTarget, None))
+            examine_added = True
 
     for name in dir(module):
         definition = getattr(module, name)
@@ -699,23 +701,26 @@ class GdbSingleHartTest(GdbTest):
 
 class ExamineTarget(GdbTest):
     def test(self):
-        self.hart.misa = self.gdb.p("$misa")
-
-        txt = "RV"
-        if (self.hart.misa >> 30) == 1:
-            txt += "32"
-        elif (self.hart.misa >> 62) == 2:
-            txt += "64"
-        elif (self.hart.misa >> 126) == 3:
-            txt += "128"
-        else:
-            raise TestFailed("Couldn't determine XLEN from $misa (0x%x)" %
-                    self.hart.misa)
+        for hart in self.target.harts:
+            self.gdb.select_hart(hart)
+
+            hart.misa = self.gdb.p("$misa")
+
+            txt = "RV"
+            if (hart.misa >> 30) == 1:
+                txt += "32"
+            elif (hart.misa >> 62) == 2:
+                txt += "64"
+            elif (hart.misa >> 126) == 3:
+                txt += "128"
+            else:
+                raise TestFailed("Couldn't determine XLEN from $misa (0x%x)" %
+                        self.hart.misa)
 
-        for i in range(26):
-            if self.hart.misa & (1<<i):
-                txt += chr(i + ord('A'))
-        print txt,
+            for i in range(26):
+                if hart.misa & (1<<i):
+                    txt += chr(i + ord('A'))
+            print txt,
 
 class TestFailed(Exception):
     def __init__(self, message):