aboutsummaryrefslogtreecommitdiff
path: root/debug/testlib.py
diff options
context:
space:
mode:
authorMegan Wachs <megan@sifive.com>2016-08-04 14:21:37 -0700
committerMegan Wachs <megan@sifive.com>2016-08-08 11:48:02 -0700
commit1d9383f6a7b1a31406dd86adc0975775eb1442a1 (patch)
tree104b0244255b2894748bc3912f01b274d5d16e89 /debug/testlib.py
parent99ea2bfc87739eb62a8eb1012e6b38d123feede5 (diff)
downloadriscv-tests-1d9383f6a7b1a31406dd86adc0975775eb1442a1.zip
riscv-tests-1d9383f6a7b1a31406dd86adc0975775eb1442a1.tar.gz
riscv-tests-1d9383f6a7b1a31406dd86adc0975775eb1442a1.tar.bz2
Added FreedomE300 Simulator target
Diffstat (limited to 'debug/testlib.py')
-rw-r--r--debug/testlib.py42
1 files changed, 41 insertions, 1 deletions
diff --git a/debug/testlib.py b/debug/testlib.py
index b3f8f66..d6044f5 100644
--- a/debug/testlib.py
+++ b/debug/testlib.py
@@ -5,6 +5,7 @@ import subprocess
import tempfile
import testlib
import unittest
+import time
# Note that gdb comes with its own testsuite. I was unable to figure out how to
# run that testsuite against the spike simulator.
@@ -76,8 +77,47 @@ class Spike(object):
def wait(self, *args, **kwargs):
return self.process.wait(*args, **kwargs)
+class VcsSim(object):
+ def __init__(self, simv=None, debug=False):
+ if simv:
+ cmd = shlex.split(simv)
+ else:
+ cmd = ["simv"]
+ cmd += ["+jtag_vpi_enable"]
+ if debug:
+ cmd[0] = cmd[0] + "-debug"
+ cmd += ["+vcdplusfile=output/gdbserver.vpd"]
+ logfile = open("simv.log", "w")
+ logfile.write("+ %s\n" % " ".join(cmd))
+ logfile.flush()
+ listenfile = open("simv.log", "r")
+ listenfile.seek(0,2)
+ self.process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=logfile,
+ stderr=logfile)
+ done = False
+ while (not done):
+ line = listenfile.readline()
+ if (not line):
+ time.sleep(1)
+ if ("Listening on port 5555" in line):
+ done = True
+
+ def __del__(self):
+ print "DELETE called for VcsSim"
+ try:
+ self.process.kill()
+ self.process.wait()
+ except OSError:
+ pass
+
+
class Openocd(object):
- def __init__(self, cmd=None, config=None, debug=False):
+ def __init__(self, cmd=None, config=None, debug=False, keepAlive=None):
+
+ # keep handles to other processes -- don't let them be
+ # garbage collected yet.
+
+ self.keepAlive = keepAlive
if cmd:
cmd = shlex.split(cmd)
else: