@@ -613,11 +613,10 @@ def early_applicable(self):
613
613
return self .hart .instruction_hardware_breakpoint_count > 0
614
614
615
615
def test (self ):
616
- if not self .hart .honors_tdata1_hmode :
617
- # Run to main before setting the breakpoint, because startup code
618
- # will otherwise clear the trigger that we set.
619
- self .gdb .b ("main" )
620
- self .gdb .c ()
616
+ # Run to main before setting the breakpoint, because startup code
617
+ # will otherwise clear the trigger that we set.
618
+ self .gdb .b ("main" )
619
+ self .gdb .c ()
621
620
622
621
self .gdb .command ("delete" )
623
622
self .gdb .hbreak ("rot13" )
@@ -631,7 +630,7 @@ def test(self):
631
630
self .exit ()
632
631
633
632
def MCONTROL_TYPE (xlen ):
634
- return 0xf << ((xlen )- 4 )
633
+ return 0x2 << ((xlen )- 4 )
635
634
def MCONTROL_DMODE (xlen ):
636
635
return 1 << ((xlen )- 5 )
637
636
def MCONTROL_MASKMAX (xlen ):
@@ -677,15 +676,18 @@ def early_applicable(self):
677
676
self .hart .instruction_hardware_breakpoint_count >= 1
678
677
679
678
def test (self ):
680
- if not self .hart .honors_tdata1_hmode :
681
- # Run to main before setting the breakpoint, because startup code
682
- # will otherwise clear the trigger that we set.
683
- self .gdb .b ("main" )
684
- self .gdb .c ()
679
+ # Run to main before setting the breakpoint, because startup code
680
+ # will otherwise clear the trigger that we set.
681
+ self .gdb .b ("main" )
682
+ self .gdb .c ()
685
683
686
684
self .gdb .command ("delete" )
687
685
#self.gdb.hbreak("rot13")
688
- tdata1 = MCONTROL_DMODE (self .hart .xlen )
686
+ xlen = self .hart .xlen
687
+ tdata1_type_exclude_mask = 0xFFFFFFF if xlen == 32 \
688
+ else 0xFFFFFFFFFFFFFFF
689
+ tdata1 = MCONTROL_TYPE (xlen )
690
+ tdata1 |= MCONTROL_DMODE (xlen )
689
691
tdata1 = set_field (tdata1 , MCONTROL_ACTION , MCONTROL_ACTION_DEBUG_MODE )
690
692
tdata1 = set_field (tdata1 , MCONTROL_MATCH , MCONTROL_MATCH_EQUAL )
691
693
tdata1 |= MCONTROL_M | MCONTROL_S | MCONTROL_U | MCONTROL_EXECUTE
@@ -697,8 +699,11 @@ def test(self):
697
699
if value != tselect :
698
700
raise TestNotApplicable
699
701
self .gdb .p (f"$tdata1=0x{ tdata1 :x} " )
700
- value = self .gdb .p ("$tselect" )
701
- if value == tdata1 :
702
+ value = self .gdb .p ("$tdata1" )
703
+ if value == tdata1 or \
704
+ (value >> (xlen - 4 ) == 0x6 and \
705
+ value & tdata1_type_exclude_mask == \
706
+ tdata1 & tdata1_type_exclude_mask ):
702
707
break
703
708
self .gdb .p ("$tdata1=0" )
704
709
tselect += 1
@@ -710,6 +715,7 @@ def test(self):
710
715
self .gdb .p ("$pc" )
711
716
assertRegex (output , r"[bB]reakpoint" )
712
717
assertIn ("rot13 " , output )
718
+ self .gdb .stepi ()
713
719
self .gdb .p ("$tdata2=&crc32a" )
714
720
self .gdb .c ()
715
721
before = self .gdb .p ("$pc" )
@@ -1396,8 +1402,7 @@ def test(self):
1396
1402
1397
1403
class TriggerDmode (TriggerTest ):
1398
1404
def early_applicable (self ):
1399
- return self .hart .honors_tdata1_hmode and \
1400
- self .hart .instruction_hardware_breakpoint_count > 0
1405
+ return self .hart .instruction_hardware_breakpoint_count > 0
1401
1406
1402
1407
def check_triggers (self , tdata1_lsbs , tdata2 ):
1403
1408
dmode = 1 << (self .hart .xlen - 5 )
0 commit comments