Skip to content

Commit 2c9449e

Browse files
committed
[debug] Add hypervisor support for PrivRw
Change-Id: I635a8f86b407f104ea74f00f4aefa1ce8170cb2d
1 parent e637451 commit 2c9449e

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

debug/gdbserver.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,14 +1649,19 @@ def setup(self):
16491649
# pylint: disable=attribute-defined-outside-init
16501650
self.gdb.load()
16511651

1652-
misa = self.hart.misa
1652+
# It may be affected by reset halt
1653+
misa = self.gdb.p(f"$misa=0x{self.hart.misa:x}")
16531654
self.supported = set()
16541655
if misa & (1<<20):
16551656
self.supported.add(0)
16561657
if misa & (1<<18):
16571658
self.supported.add(1)
16581659
if misa & (1<<7):
1659-
self.supported.add(2)
1660+
self.supported_vmodes = self.supported
1661+
for privilege in self.supported_vmodes:
1662+
self.supported.add(f"{(1 << 2) + privilege}")
1663+
else:
1664+
self.supported_vmodes = None
16601665
self.supported.add(3)
16611666

16621667
self.disable_pmp()
@@ -1672,14 +1677,18 @@ def setup(self):
16721677
class PrivRw(PrivTest):
16731678
"""Test reading/writing priv."""
16741679
def test(self):
1675-
self.write_nop_program(4)
1676-
for privilege in range(4):
1680+
privilege_limit = max(self.supported) + 1
1681+
self.write_nop_program(privilege_limit)
1682+
for privilege in range(privilege_limit):
16771683
self.gdb.p(f"$priv={privilege}")
16781684
self.gdb.stepi()
16791685
actual = self.gdb.p("$priv")
16801686
assertIn(actual, self.supported)
16811687
if privilege in self.supported:
16821688
assertEqual(actual, privilege)
1689+
if self.supported_vmodes:
1690+
# Restore to machine mode
1691+
self.gdb.p("$priv=3")
16831692

16841693
class PrivChange(PrivTest):
16851694
"""Test that the core's privilege level actually changes when the debugger

0 commit comments

Comments
 (0)