diff options
author | Tim Newsome <tim@sifive.com> | 2018-09-03 15:03:50 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-03 15:03:50 -0700 |
commit | 79064081503b53fdb44094e32ff54a3ab20a9bf2 (patch) | |
tree | f4baafc7eaac8a1b24514dd0c2b2de44c26b6b4d /debug/gdbserver.py | |
parent | 705c51ef7c478d537c6c7c391b0e3442810a7114 (diff) | |
parent | ce2b91bad31742fffb8377cf24f43f5a2b429a17 (diff) | |
download | riscv-tests-79064081503b53fdb44094e32ff54a3ab20a9bf2.zip riscv-tests-79064081503b53fdb44094e32ff54a3ab20a9bf2.tar.gz riscv-tests-79064081503b53fdb44094e32ff54a3ab20a9bf2.tar.bz2 |
Merge pull request #156 from riscv/PrivChange
Reset address translation/perms before PrivChange
Diffstat (limited to 'debug/gdbserver.py')
-rwxr-xr-x | debug/gdbserver.py | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/debug/gdbserver.py b/debug/gdbserver.py index 1d58f76..17e1734 100755 --- a/debug/gdbserver.py +++ b/debug/gdbserver.py @@ -13,7 +13,7 @@ import testlib from testlib import assertEqual, assertNotEqual, assertIn, assertNotIn from testlib import assertGreater, assertRegexpMatches, assertLess from testlib import GdbTest, GdbSingleHartTest, TestFailed -#from testlib import assertTrue +from testlib import assertTrue MSTATUS_UIE = 0x00000001 MSTATUS_SIE = 0x00000002 @@ -985,9 +985,6 @@ class PrivTest(GdbSingleHartTest): self.supported.add(2) self.supported.add(3) -class PrivRw(PrivTest): - def test(self): - """Test reading/writing priv.""" # Disable physical memory protection by allowing U mode access to all # memory. try: @@ -1006,6 +1003,9 @@ class PrivRw(PrivTest): # SATP only exists if you have S mode. pass +class PrivRw(PrivTest): + def test(self): + """Test reading/writing priv.""" # Leave the PC at _start, where the first 4 instructions should be # legal in any mode. for privilege in range(4): @@ -1016,29 +1016,28 @@ class PrivRw(PrivTest): if privilege in self.supported: assertEqual(actual, privilege) -# XXX temporarily disabling this test -#class PrivChange(PrivTest): -# def test(self): -# """Test that the core's privilege level actually changes.""" -# -# if 0 not in self.supported: -# return 'not_applicable' -# -# self.gdb.b("main") -# self.gdb.c() -# -# # Machine mode -# self.gdb.p("$priv=3") -# main_address = self.gdb.p("$pc") -# self.gdb.stepi() -# assertEqual("%x" % self.gdb.p("$pc"), "%x" % (main_address+4)) -# -# # User mode -# self.gdb.p("$priv=0") -# self.gdb.stepi() -# # Should have taken an exception, so be nowhere near main. -# pc = self.gdb.p("$pc") -# assertTrue(pc < main_address or pc > main_address + 0x100) +class PrivChange(PrivTest): + def test(self): + """Test that the core's privilege level actually changes.""" + + if 0 not in self.supported: + return 'not_applicable' + + self.gdb.b("main") + self.gdb.c() + + # Machine mode + self.gdb.p("$priv=3") + main_address = self.gdb.p("$pc") + self.gdb.stepi() + assertEqual("%x" % self.gdb.p("$pc"), "%x" % (main_address+4)) + + # User mode + self.gdb.p("$priv=0") + self.gdb.stepi() + # Should have taken an exception, so be nowhere near main. + pc = self.gdb.p("$pc") + assertTrue(pc < main_address or pc > main_address + 0x100) parsed = None def main(): |