@@ -1068,20 +1068,80 @@ bool EsrevenAdapter::StepOverReverse()
10681068 return status != InternalError;
10691069}
10701070
1071- bool EsrevenAdapter::AddHardwareWriteBreakpoint (uint64_t address)
1071+ bool EsrevenAdapter::AddHardwareBreakpoint (uint64_t address, DebugBreakpointType type, size_t size )
10721072{
10731073 if (m_isTargetRunning || !m_rspConnector)
10741074 return false ;
10751075
1076- return this ->m_rspConnector ->TransmitAndReceive (RspData (" Z2,{:x},{}" , address, 1 )).AsString () != " OK" ;
1076+ std::string command;
1077+ switch (type)
1078+ {
1079+ case HardwareExecuteBreakpoint:
1080+ // Z1 = hardware execution breakpoint
1081+ command = fmt::format (" Z1,{:x},{}" , address, size);
1082+ break ;
1083+ case HardwareReadBreakpoint:
1084+ // Z3 = hardware read watchpoint
1085+ command = fmt::format (" Z3,{:x},{}" , address, size);
1086+ break ;
1087+ case HardwareWriteBreakpoint:
1088+ // Z2 = hardware write watchpoint
1089+ command = fmt::format (" Z2,{:x},{}" , address, size);
1090+ break ;
1091+ case HardwareAccessBreakpoint:
1092+ // Z4 = hardware access watchpoint (read/write)
1093+ command = fmt::format (" Z4,{:x},{}" , address, size);
1094+ break ;
1095+ default :
1096+ return false ;
1097+ }
1098+
1099+ return m_rspConnector->TransmitAndReceive (RspData (command)).AsString () == " OK" ;
10771100}
10781101
1079- bool EsrevenAdapter::RemoveHardwareWriteBreakpoint (uint64_t address)
1102+
1103+ bool EsrevenAdapter::RemoveHardwareBreakpoint (uint64_t address, DebugBreakpointType type, size_t size)
10801104{
10811105 if (m_isTargetRunning || !m_rspConnector)
10821106 return false ;
10831107
1084- return this ->m_rspConnector ->TransmitAndReceive (RspData (" Z2,{:x},{}" , address, 1 )).AsString () != " OK" ;
1108+ std::string command;
1109+ switch (type)
1110+ {
1111+ case HardwareExecuteBreakpoint:
1112+ // z1 = remove hardware execution breakpoint
1113+ command = fmt::format (" z1,{:x},{}" , address, size);
1114+ break ;
1115+ case HardwareReadBreakpoint:
1116+ // z3 = remove hardware read watchpoint
1117+ command = fmt::format (" z3,{:x},{}" , address, size);
1118+ break ;
1119+ case HardwareWriteBreakpoint:
1120+ // z2 = remove hardware write watchpoint
1121+ command = fmt::format (" z2,{:x},{}" , address, size);
1122+ break ;
1123+ case HardwareAccessBreakpoint:
1124+ // z4 = remove hardware access watchpoint (read/write)
1125+ command = fmt::format (" z4,{:x},{}" , address, size);
1126+ break ;
1127+ default :
1128+ return false ;
1129+ }
1130+
1131+ return m_rspConnector->TransmitAndReceive (RspData (command)).AsString () == " OK" ;
1132+ }
1133+
1134+
1135+ bool EsrevenAdapter::AddHardwareWriteBreakpoint (uint64_t address)
1136+ {
1137+ // Delegate to new standardized method
1138+ return AddHardwareBreakpoint (address, HardwareWriteBreakpoint, 1 );
1139+ }
1140+
1141+ bool EsrevenAdapter::RemoveHardwareWriteBreakpoint (uint64_t address)
1142+ {
1143+ // Delegate to new standardized method
1144+ return RemoveHardwareBreakpoint (address, HardwareWriteBreakpoint, 1 );
10851145}
10861146
10871147bool EsrevenAdapter::StepReturnReverse ()
0 commit comments