aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2016-03-17 12:51:58 -0700
committerTim Newsome <tim@sifive.com>2016-05-23 12:12:10 -0700
commitc57bdaa03373688f76703d20d6df5e0dc4a21eb5 (patch)
treed35bffe7ef4d6dd88c68be002ab82769841aca26 /tests
parentbce01a9ed60917902be3858373b3535e3c5ccca5 (diff)
downloadspike-c57bdaa03373688f76703d20d6df5e0dc4a21eb5.zip
spike-c57bdaa03373688f76703d20d6df5e0dc4a21eb5.tar.gz
spike-c57bdaa03373688f76703d20d6df5e0dc4a21eb5.tar.bz2
Do a better job checking CSR functionality.
Diffstat (limited to 'tests')
-rwxr-xr-xtests/gdbserver.py21
-rw-r--r--tests/regs.s3
-rw-r--r--tests/testlib.py2
3 files changed, 21 insertions, 5 deletions
diff --git a/tests/gdbserver.py b/tests/gdbserver.py
index 16af626..b5363e6 100755
--- a/tests/gdbserver.py
+++ b/tests/gdbserver.py
@@ -53,7 +53,9 @@ class DebugTest(unittest.TestCase):
self.assertIn(reg, output)
# mcpuid is one of the few registers that should have the high bit set
# (for rv64).
- self.assertRegexpMatches(output, ".*mcpuid *0x80")
+ # Leave this commented out until gdb and spike agree on the encoding of
+ # mcpuid (which is going to be renamed to misa in any case).
+ #self.assertRegexpMatches(output, ".*mcpuid *0x80")
# The time register should always be changing.
last_time = None
@@ -85,15 +87,18 @@ class RegsTest(unittest.TestCase):
self.gdb.command("p $pc=write_regs")
for i, r in enumerate(regs):
- self.gdb.command("p $%s=%d" % (r, i*0xdeadbeef+17))
+ self.gdb.command("p $%s=%d" % (r, (0xdeadbeef<<i)+17))
self.gdb.command("p $a0=data")
self.gdb.command("b all_done")
output = self.gdb.command("c")
self.assertIn("Breakpoint 1", output)
+ # Just to get this data in the log.
+ self.gdb.command("x/30gx data")
+ self.gdb.command("info registers")
for n in range(len(regs)):
self.assertEqual(self.gdb.x("data+%d" % (8*n), 'g'),
- n*0xdeadbeef+17)
+ (0xdeadbeef<<n)+17)
def test_write_csrs(self):
# As much a test of gdb as of the simulator.
@@ -104,5 +109,15 @@ class RegsTest(unittest.TestCase):
self.gdb.stepi()
self.assertEqual(self.gdb.p("$mscratch"), 123)
+ self.gdb.command("p $fflags=9")
+ self.gdb.command("p $pc=write_regs")
+ self.gdb.command("p $a0=data")
+ self.gdb.command("b all_done")
+ self.gdb.command("c")
+
+ self.assertEqual(9, self.gdb.p("$fflags"))
+ self.assertEqual(9, self.gdb.p("$x1"))
+ self.assertEqual(9, self.gdb.p("$csr1"))
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/regs.s b/tests/regs.s
index b0d641d..e6456e1 100644
--- a/tests/regs.s
+++ b/tests/regs.s
@@ -3,7 +3,6 @@ main:
j main
write_regs:
- la a0, data
sd x1, 0(a0)
sd x2, 8(a0)
sd x3, 16(a0)
@@ -35,6 +34,8 @@ write_regs:
sd x30, 224(a0)
sd x31, 232(a0)
+ csrr x1, 1 # fflags
+
all_done:
j all_done
diff --git a/tests/testlib.py b/tests/testlib.py
index d41c150..2590f46 100644
--- a/tests/testlib.py
+++ b/tests/testlib.py
@@ -54,7 +54,7 @@ class Gdb(object):
def x(self, address, size='w'):
output = self.command("x/%s %s" % (size, address))
- value = int(output.split(':')[1].strip())
+ value = int(output.split(':')[1].strip(), 0)
return value
def p(self, obj):