X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=debug%2Ftestlib.py;h=c186a175a5cc9d50a8c26d7c49618fa474dd6e2f;hb=8c633e9e80d0b3e3764ebc3651e9cc09ab9413c9;hp=b3f8f66a822f8529973fa5a46b89f4beba2da52c;hpb=553f2a265fe62b514cb97fdbd80ea1743de6e3cf;p=riscv-tests.git diff --git a/debug/testlib.py b/debug/testlib.py index b3f8f66..c186a17 100644 --- a/debug/testlib.py +++ b/debug/testlib.py @@ -1,16 +1,17 @@ import os.path -import pexpect import shlex import subprocess import tempfile -import testlib import unittest +import time + +import pexpect # Note that gdb comes with its own testsuite. I was unable to figure out how to # run that testsuite against the spike simulator. def find_file(path): - for directory in (os.getcwd(), os.path.dirname(testlib.__file__)): + for directory in (os.getcwd(), os.path.dirname(__file__)): fullpath = os.path.join(directory, path) if os.path.exists(fullpath): return fullpath @@ -76,8 +77,46 @@ 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): + 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, otherProcess=None): + + # keep handles to other processes -- don't let them be + # garbage collected yet. + + self.otherProcess = otherProcess if cmd: cmd = shlex.split(cmd) else: