# Defaults to target-<index>
name = None
+ # When reset, the PC must be at one of the values listed here.
+ # This is a list because on some boards the reset vector depends on
+ # jumpers.
+ reset_vectors = []
+
def extensionSupported(self, letter):
# target.misa is set by testlib.ExamineTarget
if self.misa:
# 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
# before starting the test.
gdb_setup = []
+ # Supports mtime at 0x2004000
+ supports_clint_mtime = True
+
# Internal variables:
directory = None
temporary_files = []
self.openocd_config_path)
for i, hart in enumerate(self.harts):
hart.index = i
+ if not hasattr(hart, 'id'):
+ hart.id = i
if not hart.name:
hart.name = "%s-%d" % (self.name, i)
# Default link script to <name>.lds
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" % (
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 "
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