aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2017-11-30 11:50:18 -0800
committerTim Newsome <tim@sifive.com>2017-11-30 11:50:18 -0800
commite9433dddac3ae61451a5747fa70c6ed6b5f49611 (patch)
tree5465025f8e4f71bbd2ee0c672fc33ea3acb4d066
parent32bf8cb2e7f76736896dc17fcb7996db24ec2320 (diff)
downloadriscv-tests-e9433dddac3ae61451a5747fa70c6ed6b5f49611.zip
riscv-tests-e9433dddac3ae61451a5747fa70c6ed6b5f49611.tar.gz
riscv-tests-e9433dddac3ae61451a5747fa70c6ed6b5f49611.tar.bz2
Clean up VcsSim init()
Use a unique log file, so you can run multiple instances at once. Add time out to waiting for the simulator to be ready.
-rw-r--r--debug/testlib.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/debug/testlib.py b/debug/testlib.py
index 5fc384a..21eeb3d 100644
--- a/debug/testlib.py
+++ b/debug/testlib.py
@@ -142,9 +142,10 @@ class Spike(object):
return self.process.wait(*args, **kwargs)
class VcsSim(object):
- logname = "simv.log"
+ logfile = tempfile.NamedTemporaryFile(prefix='simv', suffix='.log')
+ logname = logfile.name
- def __init__(self, sim_cmd=None, debug=False):
+ def __init__(self, sim_cmd=None, debug=False, timeout=300):
if sim_cmd:
cmd = shlex.split(sim_cmd)
else:
@@ -153,14 +154,19 @@ class VcsSim(object):
if debug:
cmd[0] = cmd[0] + "-debug"
cmd += ["+vcdplusfile=output/gdbserver.vpd"]
+
logfile = open(self.logname, "w")
+ if print_log_names:
+ real_stdout.write("Temporary VCS log: %s\n" % self.logname)
logfile.write("+ %s\n" % " ".join(cmd))
logfile.flush()
+
listenfile = open(self.logname, "r")
listenfile.seek(0, 2)
self.process = subprocess.Popen(cmd, stdin=subprocess.PIPE,
stdout=logfile, stderr=logfile)
done = False
+ start = time.time()
while not done:
# Fail if VCS exits early
exit_code = self.process.poll()
@@ -177,6 +183,10 @@ class VcsSim(object):
self.port = int(match.group(1))
os.environ['JTAG_VPI_PORT'] = str(self.port)
+ if (time.time() - start) > timeout:
+ raise Exception("Timed out waiting for VCS to listen for JTAG "
+ "vpi")
+
def __del__(self):
try:
self.process.kill()