bump env
[riscv-tests.git] / debug / targets.py
index 06688d8239133bfb38bfd0df453d0643cff8b6f6..63994db87cd252b98839c23ade1597a198b839ae 100644 (file)
@@ -75,6 +75,10 @@ class Target(object):
     # Supports mtime at 0x2004000
     supports_clint_mtime = True
 
+    # Implements custom debug registers like spike does. It seems unlikely any
+    # hardware will every do that.
+    implements_custom_test = False
+
     # Internal variables:
     directory = None
     temporary_files = []
@@ -153,10 +157,10 @@ def add_target_options(parser):
             help="The command to use to start the debug server (e.g. OpenOCD)")
 
     xlen_group = parser.add_mutually_exclusive_group()
-    xlen_group.add_argument("--32", action="store_const", const=32, dest="xlen",
-            help="Force the target to be 32-bit.")
-    xlen_group.add_argument("--64", action="store_const", const=64, dest="xlen",
-            help="Force the target to be 64-bit.")
+    xlen_group.add_argument("--32", action="store_const", const=32,
+            dest="xlen", default=0, help="Force the target to be 32-bit.")
+    xlen_group.add_argument("--64", action="store_const", const=64,
+            dest="xlen", default=0, help="Force the target to be 64-bit.")
 
     parser.add_argument("--isolate", action="store_true",
             help="Try to run in such a way that multiple instances can run at "
@@ -173,12 +177,20 @@ def target(parsed):
     found = []
     for name in dir(module):
         definition = getattr(module, name)
-        if type(definition) == type and issubclass(definition, Target):
+        if isinstance(definition, type) and issubclass(definition, Target):
             found.append(definition)
     assert len(found) == 1, "%s does not define exactly one subclass of " \
             "targets.Target" % parsed.target
 
     t = found[0](parsed.target, parsed)
     assert t.harts, "%s doesn't have any harts defined!" % t.name
+    if parsed.xlen > 0:
+        for h in t.harts:
+            if h.xlen == 0:
+                h.xlen = parsed.xlen
+            elif h.xlen != parsed.xlen:
+                raise Exception("The target hart specified an XLEN of %d, but "\
+                        "the command line specified an XLEN of %d. They must "\
+                        "match." % (h.xlen, parsed.xlen))
 
     return t