X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=debug%2Ftargets.py;h=2cdbb33454270663b701f549c004624b8f4f326e;hb=8e0f6a0b1a33d35f2248628af7333ede093341d0;hp=624eb7106d9aa220387c128961dd163dc428b7b5;hpb=49fc83aa23045abee5d396ef5a9d96b80c03178d;p=riscv-tests.git diff --git a/debug/targets.py b/debug/targets.py index 624eb71..2cdbb33 100644 --- a/debug/targets.py +++ b/debug/targets.py @@ -60,7 +60,7 @@ class Target(object): # Timeout waiting for the server to start up. This is different than the # GDB timeout, which is how long GDB waits for commands to execute. - # The server_timeout is how long this script waits for the Server to be + # The server_timeout is how long this script waits for the server to be # ready for GDB connections. server_timeout_sec = 60 @@ -113,7 +113,8 @@ class Target(object): def server(self): """Start the debug server that gdb connects to, eg. OpenOCD.""" return testlib.Openocd(server_cmd=self.server_cmd, - config=self.openocd_config_path) + config=self.openocd_config_path, + timeout=self.server_timeout_sec) def compile(self, hart, *sources): binary_name = "%s_%s-%d" % ( @@ -152,10 +153,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 " @@ -172,12 +173,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