diff options
author | Tim Newsome <tim@sifive.com> | 2016-06-16 13:03:19 -0700 |
---|---|---|
committer | Tim Newsome <tim@sifive.com> | 2016-07-18 18:51:54 -0700 |
commit | 34341c9500c0a0a2520826b6eaf0095c3f9ce9fc (patch) | |
tree | 94a2d1dfd66bf5ff921f3b7f30dc6d6aada9d539 /debug | |
parent | d3db738f442df95dd0c074a3e90c62c22e0f9a58 (diff) | |
download | riscv-tests-34341c9500c0a0a2520826b6eaf0095c3f9ce9fc.zip riscv-tests-34341c9500c0a0a2520826b6eaf0095c3f9ce9fc.tar.gz riscv-tests-34341c9500c0a0a2520826b6eaf0095c3f9ce9fc.tar.bz2 |
Add explicit test for stepping over branches/jumps.
Diffstat (limited to 'debug')
-rwxr-xr-x | debug/gdbserver.py | 30 | ||||
-rw-r--r-- | debug/programs/step.S | 17 |
2 files changed, 46 insertions, 1 deletions
diff --git a/debug/gdbserver.py b/debug/gdbserver.py index a527ad0..f45baed 100755 --- a/debug/gdbserver.py +++ b/debug/gdbserver.py @@ -177,11 +177,21 @@ class DebugTest(DeleteServer): """Single step a bunch of times.""" self.gdb.command("p i=0"); last_pc = None + advances = 0 + jumps = 0 for _ in range(100): self.gdb.stepi() - pc = self.gdb.command("p $pc") + pc = self.gdb.p("$pc") self.assertNotEqual(last_pc, pc) + if (last_pc and pc > last_pc and pc - last_pc <= 4): + advances += 1 + else: + jumps += 1 last_pc = pc + # Some basic sanity that we're not running between breakpoints or + # something. + self.assertGreater(jumps, 10) + self.assertGreater(advances, 50) def test_exit(self): self.exit() @@ -268,6 +278,24 @@ class DebugTest(DeleteServer): self.gdb.p("i=0"); self.exit() +class StepTest(DeleteServer): + def setUp(self): + self.binary = target.compile("programs/step.S") + self.server = target.server() + self.gdb = testlib.Gdb() + self.gdb.command("file %s" % self.binary) + self.gdb.command("target extended-remote localhost:%d" % self.server.port) + self.gdb.load() + self.gdb.b("main") + self.gdb.c() + + def test_step(self): + main = self.gdb.p("$pc") + for expected in (4, 0xc, 0x10, 0x18, 0x14, 0x14): + self.gdb.stepi() + pc = self.gdb.p("$pc") + self.assertEqual(pc - main, expected) + class RegsTest(DeleteServer): def setUp(self): self.binary = target.compile("programs/regs.S") diff --git a/debug/programs/step.S b/debug/programs/step.S new file mode 100644 index 0000000..49f82d6 --- /dev/null +++ b/debug/programs/step.S @@ -0,0 +1,17 @@ +// Test stepping over a variety of instructions. + + .global main + +main: + li t0, 5 // 0 + beq zero, zero, one // 0x4 + nop // 0x8 +one: + beq zero, t0, one // 0xc + jal two // 0x10 + +three: + j three // 0x14 + +two: + ret // 0x18 |