@@ -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):
16721677class 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
16841693class PrivChange (PrivTest ):
16851694 """Test that the core's privilege level actually changes when the debugger
0 commit comments