Skip to content

Commit dffe978

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

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

debug/gdbserver.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,15 +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()
1655+
self.supported_vmodes = set()
16541656
if misa & (1<<20):
16551657
self.supported.add(0)
16561658
if misa & (1<<18):
16571659
self.supported.add(1)
16581660
if misa & (1<<7):
1659-
self.supported.add(2)
1661+
self.supported_vmodes = self.supported
16601662
self.supported.add(3)
1663+
for privilege in self.supported_vmodes:
1664+
self.supported.add(f"{(1 << 2) + privilege}")
16611665

16621666
self.disable_pmp()
16631667

@@ -1672,14 +1676,18 @@ def setup(self):
16721676
class PrivRw(PrivTest):
16731677
"""Test reading/writing priv."""
16741678
def test(self):
1675-
self.write_nop_program(4)
1676-
for privilege in range(4):
1679+
privilege_limit = max(self.supported) + 1
1680+
self.write_nop_program(privilege_limit)
1681+
for privilege in range(privilege_limit):
16771682
self.gdb.p(f"$priv={privilege}")
16781683
self.gdb.stepi()
16791684
actual = self.gdb.p("$priv")
16801685
assertIn(actual, self.supported)
16811686
if privilege in self.supported:
16821687
assertEqual(actual, privilege)
1688+
if len(self.supported_vmodes) > 0:
1689+
# Restore to machine mode
1690+
self.gdb.p("$priv=3")
16831691

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

0 commit comments

Comments
 (0)