diff options
author | Tim Newsome <tim@sifive.com> | 2017-11-30 12:24:32 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-30 12:24:32 -0800 |
commit | fda427b8110777add52890641c49155f363d39ae (patch) | |
tree | 5465025f8e4f71bbd2ee0c672fc33ea3acb4d066 | |
parent | 32bf8cb2e7f76736896dc17fcb7996db24ec2320 (diff) | |
parent | e9433dddac3ae61451a5747fa70c6ed6b5f49611 (diff) | |
download | riscv-tests-fda427b8110777add52890641c49155f363d39ae.zip riscv-tests-fda427b8110777add52890641c49155f363d39ae.tar.gz riscv-tests-fda427b8110777add52890641c49155f363d39ae.tar.bz2 |
Merge pull request #109 from riscv/vcssim
Clean up VcsSim init()
-rw-r--r-- | debug/testlib.py | 14 |
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() |