Merge pull request #34 from richardxia/use-port-randomization
authorTim Newsome <tim@sifive.com>
Wed, 19 Oct 2016 17:52:59 +0000 (10:52 -0700)
committerGitHub <noreply@github.com>
Wed, 19 Oct 2016 17:52:59 +0000 (10:52 -0700)
Use port randomization for VCS and OpenOCD

debug/targets/freedom-e300-sim/openocd.cfg
debug/targets/freedom-u500-sim/openocd.cfg
debug/testlib.py

index e8edda4e6c660392c0deb3913c5fdb30d12b0f5c..0b808858a410a53f876d02fec4a5fc42c52e42e2 100644 (file)
@@ -1,6 +1,7 @@
 adapter_khz     10000
 
 source [find interface/jtag_vpi.cfg]
+jtag_vpi_set_port $::env(JTAG_VPI_PORT)
 
 set _CHIPNAME riscv
 jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913
index e8edda4e6c660392c0deb3913c5fdb30d12b0f5c..0b808858a410a53f876d02fec4a5fc42c52e42e2 100644 (file)
@@ -1,6 +1,7 @@
 adapter_khz     10000
 
 source [find interface/jtag_vpi.cfg]
+jtag_vpi_set_port $::env(JTAG_VPI_PORT)
 
 set _CHIPNAME riscv
 jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913
index caf21401b1267bcf35202773606a34ad6ff50428..76989806b8ff57278c341c0776a3bb754dd4384e 100644 (file)
@@ -104,8 +104,11 @@ class VcsSim(object):
             line = listenfile.readline()
             if not line:
                 time.sleep(1)
-            if "Listening on port 5555" in line:
+            match = re.match(r"^Listening on port (\d+)$", line)
+            if match:
                 done = True
+                self.port = int(match.group(1))
+                print "Using port %d for JTAG VPI" % self.port
 
     def __del__(self):
         try:
@@ -126,13 +129,22 @@ class Openocd(object):
             cmd += ["-f", find_file(config)]
         if debug:
             cmd.append("-d")
+
+        # Assign port
+        self.port = unused_port()
+        print "Using port %d for gdb server" % self.port
+        # This command needs to come before any config scripts on the command
+        # line, since they are executed in order.
+        cmd[1:1] = ["--command", "gdb_port %d" % self.port]
+
+        env = os.environ.copy()
+        env['JTAG_VPI_PORT'] = str(otherProcess.port)
+
         logfile = open(Openocd.logname, "w")
         logfile.write("+ %s\n" % " ".join(cmd))
         logfile.flush()
         self.process = subprocess.Popen(cmd, stdin=subprocess.PIPE,
-                stdout=logfile, stderr=logfile)
-        # TODO: Pick a random port
-        self.port = 3333
+                stdout=logfile, stderr=logfile, env=env)
 
         # Wait for OpenOCD to have made it through riscv_examine(). When using
         # OpenOCD to communicate with a simulator this may take a long time,