@@ -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):
16721676class 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 ):
1689+ # Restore to machine mode
1690+ self .gdb .p ("$priv=3" )
16831691
16841692class PrivChange (PrivTest ):
16851693 """Test that the core's privilege level actually changes when the debugger
0 commit comments