Skip to content

Commit 0f3a832

Browse files
committed
[debug] Support wide range of platforms in HwbpManual
1 parent fa2f65c commit 0f3a832

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

debug/gdbserver.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ def MCONTROL_TYPE(xlen):
649649
def MCONTROL_DMODE(xlen):
650650
return 1<<((xlen)-5)
651651
def MCONTROL_MASKMAX(xlen):
652-
return 0x3<<((xlen)-11)
652+
return 0x3f<<((xlen)-11)
653653

654654
MCONTROL_SELECT = 1<<19
655655
MCONTROL_TIMING = 1<<18
@@ -666,6 +666,7 @@ def MCONTROL_MASKMAX(xlen):
666666

667667
MCONTROL_TYPE_NONE = 0
668668
MCONTROL_TYPE_MATCH = 2
669+
MCONTROL_TYPE_MATCH6 = 6
669670

670671
MCONTROL_ACTION_DEBUG_EXCEPTION = 0
671672
MCONTROL_ACTION_DEBUG_MODE = 1
@@ -713,11 +714,23 @@ def set_manual_trigger(self, tdata1, tdata2):
713714
self.gdb.p("$tdata1=0")
714715
# Need to write a valid value to tdata2 before writing tdata1
715716
self.gdb.p(f"$tdata2=0x{tdata2:x}")
716-
self.gdb.p(f"$tdata1=0x{tdata1:x}")
717717

718+
tdata1_t2 = set_field(tdata1, MCONTROL_TYPE(self.hart.xlen),
719+
MCONTROL_TYPE_MATCH)
720+
self.gdb.p(f"$tdata1=0x{tdata1_t2:x}")
718721
tdata2_rb = self.gdb.p("$tdata2")
719722
tdata1_rb = self.gdb.p("$tdata1")
720-
if tdata1_rb == tdata1 and tdata2_rb == tdata2:
723+
maskmax_rb = tdata1_rb & MCONTROL_MASKMAX(self.hart.xlen)
724+
tdata1_t2 = tdata1_t2 | maskmax_rb
725+
if tdata1_rb == tdata1_t2 and tdata2_rb == tdata2:
726+
return tselect
727+
728+
tdata1_t6 = set_field(tdata1, MCONTROL_TYPE(self.hart.xlen),
729+
MCONTROL_TYPE_MATCH6)
730+
self.gdb.p(f"$tdata1=0x{tdata1_t6:x}")
731+
tdata2_rb = self.gdb.p("$tdata2")
732+
tdata1_rb = self.gdb.p("$tdata1")
733+
if tdata1_rb == tdata1_t6 and tdata2_rb == tdata2:
721734
return tselect
722735

723736
type_rb = tdata1_rb & MCONTROL_TYPE(self.hart.xlen)
@@ -747,8 +760,6 @@ def test(self):
747760

748761
#self.gdb.hbreak("rot13")
749762
tdata1 = MCONTROL_DMODE(self.hart.xlen)
750-
tdata1 = set_field(tdata1, MCONTROL_TYPE(self.hart.xlen),
751-
MCONTROL_TYPE_MATCH)
752763
tdata1 = set_field(tdata1, MCONTROL_ACTION, MCONTROL_ACTION_DEBUG_MODE)
753764
tdata1 = set_field(tdata1, MCONTROL_MATCH, MCONTROL_MATCH_EQUAL)
754765
tdata1 |= MCONTROL_M | MCONTROL_S | MCONTROL_U | MCONTROL_EXECUTE

0 commit comments

Comments
 (0)