Test ebreak without gdb.
authorTim Newsome <tim@sifive.com>
Wed, 23 Mar 2016 23:14:50 +0000 (16:14 -0700)
committerTim Newsome <tim@sifive.com>
Mon, 23 May 2016 19:12:10 +0000 (12:12 -0700)
Currently this test fails.

tests/ebreak.py [new file with mode: 0755]
tests/ebreak.s [new file with mode: 0644]
tests/testlib.py

diff --git a/tests/ebreak.py b/tests/ebreak.py
new file mode 100755 (executable)
index 0000000..6c3ffdb
--- /dev/null
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+
+import os
+import testlib
+import unittest
+import tempfile
+import time
+
+class EbreakTest(unittest.TestCase):
+    def setUp(self):
+        self.binary = testlib.compile("ebreak.s")
+
+    def test_ebreak(self):
+        """Make sure that we can run past ebreak without halting when a
+        debugger isn't attached."""
+        spike = testlib.spike(self.binary, with_gdb=False, timeout=10)
+        result = spike.wait()
+        self.assertEqual(result, 0)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/ebreak.s b/tests/ebreak.s
new file mode 100644 (file)
index 0000000..99f3e07
--- /dev/null
@@ -0,0 +1,5 @@
+        .global main
+main:
+        li      a0, 0
+        ebreak
+        ret
index 2db25491c433ed3dcdf5678e4009cd9330c6363c..4e05616390c83e47d43e7b22f461d77c0063e60b 100644 (file)
@@ -34,16 +34,26 @@ def unused_port():
     s.close()
     return port
 
-def spike(binary, halted=False):
+def spike(binary, halted=False, with_gdb=True, timeout=None):
     """Launch spike. Return tuple of its process and the port it's running on."""
-    cmd = [find_file("spike")]
+    cmd = []
+    if timeout:
+        cmd += ["timeout", str(timeout)]
+
+    cmd += [find_file("spike")]
     if halted:
         cmd.append('-H')
-    port = unused_port()
-    cmd += ['--gdb-port', str(port), 'pk', binary]
+    if with_gdb:
+        port = unused_port()
+        cmd += ['--gdb-port', str(port)]
+    cmd += ['pk', binary]
     logfile = open("spike.log", "w")
-    return subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=logfile,
-            stderr=logfile), port
+    process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=logfile,
+            stderr=logfile)
+    if with_gdb:
+        return process, port
+    else:
+        return process
 
 class Gdb(object):
     def __init__(self):