From: Tim Newsome Date: Wed, 16 Mar 2016 18:07:50 +0000 (-0700) Subject: Rename gdbserver-smoke.py to gdbserver.py. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bce01a9ed60917902be3858373b3535e3c5ccca5;p=riscv-isa-sim.git Rename gdbserver-smoke.py to gdbserver.py. It's not really a smoketest anymore. --- diff --git a/Makefile.in b/Makefile.in index 1e71839..5f0102a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -121,7 +121,7 @@ INSTALL_EXE := $(INSTALL) -m 555 STOW := @stow@ # Tests -bintests = tests/gdbserver-smoke.py +bintests = tests/gdbserver.py #------------------------------------------------------------------------- # Include subproject makefile fragments diff --git a/tests/gdbserver-smoke.py b/tests/gdbserver-smoke.py deleted file mode 100755 index 16af626..0000000 --- a/tests/gdbserver-smoke.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/python - -import os -import testlib -import unittest -import tempfile -import time - -class DebugTest(unittest.TestCase): - def setUp(self): - self.binary = testlib.compile("debug.c") - self.spike = testlib.spike(self.binary, halted=False) - self.gdb = testlib.Gdb() - self.gdb.command("file %s" % self.binary) - self.gdb.command("target extended-remote localhost:9824") - self.gdb.command("p i=0"); - - def tearDown(self): - self.spike.kill() - self.spike.wait() - - def test_turbostep(self): - """Single step a bunch of times.""" - last_pc = None - for _ in range(100): - self.gdb.command("stepi") - pc = self.gdb.command("p $pc") - self.assertNotEqual(last_pc, pc) - last_pc = pc - - def test_exit(self): - output = self.gdb.command("c") - self.assertIn("Continuing", output) - self.assertIn("Remote connection closed", output) - - def test_breakpoint(self): - self.gdb.command("b print_row") - # The breakpoint should be hit exactly 10 times. - for _ in range(10): - output = self.gdb.command("c") - self.assertIn("Continuing", output) - self.assertIn("Breakpoint 1", output) - output = self.gdb.command("c") - self.assertIn("Continuing", output) - self.assertIn("Remote connection closed", output) - - def test_registers(self): - # Try both forms to test gdb. - for cmd in ("info all-registers", "info registers all"): - output = self.gdb.command(cmd) - self.assertNotIn("Could not", output) - for reg in ('zero', 'ra', 'sp', 'gp', 'tp'): - 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") - - # The time register should always be changing. - last_time = None - for _ in range(5): - time = self.gdb.p("$time") - self.assertNotEqual(time, last_time) - last_time = time - self.gdb.command("stepi") - -class RegsTest(unittest.TestCase): - def setUp(self): - self.binary = testlib.compile("regs.s") - self.spike = testlib.spike(self.binary, halted=False) - self.gdb = testlib.Gdb() - self.gdb.command("file %s" % self.binary) - self.gdb.command("target extended-remote localhost:9824") - - def tearDown(self): - self.spike.kill() - self.spike.wait() - - def test_write_gprs(self): - # Note a0 is missing from this list since it's used to hold the - # address. - regs = ("ra", "sp", "gp", "tp", "t0", "t1", "t2", "fp", "s1", - "a1", "a2", "a3", "a4", "a5", "a6", "a7", "s2", "s3", "s4", - "s5", "s6", "s7", "s8", "s9", "s10", "s11", "t3", "t4", "t5", - "t6") - - 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 $a0=data") - self.gdb.command("b all_done") - output = self.gdb.command("c") - self.assertIn("Breakpoint 1", output) - - for n in range(len(regs)): - self.assertEqual(self.gdb.x("data+%d" % (8*n), 'g'), - n*0xdeadbeef+17) - - def test_write_csrs(self): - # As much a test of gdb as of the simulator. - self.gdb.p("$mscratch=0") - self.gdb.stepi() - self.assertEqual(self.gdb.p("$mscratch"), 0) - self.gdb.p("$mscratch=123") - self.gdb.stepi() - self.assertEqual(self.gdb.p("$mscratch"), 123) - -if __name__ == '__main__': - unittest.main() diff --git a/tests/gdbserver.py b/tests/gdbserver.py new file mode 100755 index 0000000..16af626 --- /dev/null +++ b/tests/gdbserver.py @@ -0,0 +1,108 @@ +#!/usr/bin/python + +import os +import testlib +import unittest +import tempfile +import time + +class DebugTest(unittest.TestCase): + def setUp(self): + self.binary = testlib.compile("debug.c") + self.spike = testlib.spike(self.binary, halted=False) + self.gdb = testlib.Gdb() + self.gdb.command("file %s" % self.binary) + self.gdb.command("target extended-remote localhost:9824") + self.gdb.command("p i=0"); + + def tearDown(self): + self.spike.kill() + self.spike.wait() + + def test_turbostep(self): + """Single step a bunch of times.""" + last_pc = None + for _ in range(100): + self.gdb.command("stepi") + pc = self.gdb.command("p $pc") + self.assertNotEqual(last_pc, pc) + last_pc = pc + + def test_exit(self): + output = self.gdb.command("c") + self.assertIn("Continuing", output) + self.assertIn("Remote connection closed", output) + + def test_breakpoint(self): + self.gdb.command("b print_row") + # The breakpoint should be hit exactly 10 times. + for _ in range(10): + output = self.gdb.command("c") + self.assertIn("Continuing", output) + self.assertIn("Breakpoint 1", output) + output = self.gdb.command("c") + self.assertIn("Continuing", output) + self.assertIn("Remote connection closed", output) + + def test_registers(self): + # Try both forms to test gdb. + for cmd in ("info all-registers", "info registers all"): + output = self.gdb.command(cmd) + self.assertNotIn("Could not", output) + for reg in ('zero', 'ra', 'sp', 'gp', 'tp'): + 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") + + # The time register should always be changing. + last_time = None + for _ in range(5): + time = self.gdb.p("$time") + self.assertNotEqual(time, last_time) + last_time = time + self.gdb.command("stepi") + +class RegsTest(unittest.TestCase): + def setUp(self): + self.binary = testlib.compile("regs.s") + self.spike = testlib.spike(self.binary, halted=False) + self.gdb = testlib.Gdb() + self.gdb.command("file %s" % self.binary) + self.gdb.command("target extended-remote localhost:9824") + + def tearDown(self): + self.spike.kill() + self.spike.wait() + + def test_write_gprs(self): + # Note a0 is missing from this list since it's used to hold the + # address. + regs = ("ra", "sp", "gp", "tp", "t0", "t1", "t2", "fp", "s1", + "a1", "a2", "a3", "a4", "a5", "a6", "a7", "s2", "s3", "s4", + "s5", "s6", "s7", "s8", "s9", "s10", "s11", "t3", "t4", "t5", + "t6") + + 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 $a0=data") + self.gdb.command("b all_done") + output = self.gdb.command("c") + self.assertIn("Breakpoint 1", output) + + for n in range(len(regs)): + self.assertEqual(self.gdb.x("data+%d" % (8*n), 'g'), + n*0xdeadbeef+17) + + def test_write_csrs(self): + # As much a test of gdb as of the simulator. + self.gdb.p("$mscratch=0") + self.gdb.stepi() + self.assertEqual(self.gdb.p("$mscratch"), 0) + self.gdb.p("$mscratch=123") + self.gdb.stepi() + self.assertEqual(self.gdb.p("$mscratch"), 123) + +if __name__ == '__main__': + unittest.main()