Wait for OpenOCD to start fully before connecting.
authorTim Newsome <tim@sifive.com>
Fri, 14 Oct 2016 19:41:41 +0000 (12:41 -0700)
committerTim Newsome <tim@sifive.com>
Fri, 14 Oct 2016 19:41:41 +0000 (12:41 -0700)
Requires OpenOCD change 4eba841bfee4b6c347423ac28851ab7ee7e75532

debug/testlib.py

index 8b799e755c411e216cc829b8fda74cdd3e0b8f6f..0da09a1236dc67bb405f479bace13ab168135faa 100644 (file)
@@ -137,6 +137,21 @@ class Openocd(object):
         # TODO: Pick a random port
         self.port = 3333
 
         # TODO: Pick a random port
         self.port = 3333
 
+        # Wait for OpenOCD to have made it through riscv_examine(). When using
+        # OpenOCD to communicate with a simulator this may take a long time,
+        # and gdb will time out when trying to connect if we attempt too early.
+        start = time.time()
+        messaged = False
+        while True:
+            log = open(Openocd.logname).read()
+            if "Examined RISCV core" in log:
+                break
+            if not self.process.poll() is None:
+                raise Exception("OpenOCD exited before completing riscv_examine()")
+            if not messaged and time.time() - start > 1:
+                messaged = True
+                print "Waiting for OpenOCD to examine RISCV core..."
+
     def __del__(self):
         try:
             self.process.kill()
     def __del__(self):
         try:
             self.process.kill()