Fix watchpoints handling (huge thanks to @Nanquitas)
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#include "svc/KernelSetState.h"
|
||||
#include "synchronization.h"
|
||||
#include "ipc.h"
|
||||
#include "debug.h"
|
||||
#include "memory.h"
|
||||
|
||||
#define MAX_DEBUG 3
|
||||
@@ -142,7 +143,41 @@ Result KernelSetStateHook(u32 type, u32 varg1, u32 varg2, u32 varg3)
|
||||
res = SetSyscallDebugEventMask(varg1, (bool)varg2, (const u32 *)varg3);
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x10003:
|
||||
{
|
||||
executeFunctionOnCores(enableMonitorModeDebugging, 0xF, 0);
|
||||
break;
|
||||
}
|
||||
case 0x10004:
|
||||
{
|
||||
KRecursiveLock__Lock(&dbgParamsLock);
|
||||
dbgParamWatchpointId = varg1;
|
||||
executeFunctionOnCores(disableWatchpoint, 0xF, 0);
|
||||
KRecursiveLock__Unlock(&dbgParamsLock);
|
||||
break;
|
||||
}
|
||||
case 0x10005:
|
||||
{
|
||||
KRecursiveLock__Lock(&dbgParamsLock);
|
||||
dbgParamWatchpointId = 0;
|
||||
dbgParamDVA = varg1;
|
||||
dbgParamWCR = varg2;
|
||||
dbgParamContextId = varg3;
|
||||
executeFunctionOnCores(setWatchpointWithContextId, 0xF, 0);
|
||||
KRecursiveLock__Unlock(&dbgParamsLock);
|
||||
break;
|
||||
}
|
||||
case 0x10006:
|
||||
{
|
||||
KRecursiveLock__Lock(&dbgParamsLock);
|
||||
dbgParamWatchpointId = 1;
|
||||
dbgParamDVA = varg1;
|
||||
dbgParamWCR = varg2;
|
||||
dbgParamContextId = varg3;
|
||||
executeFunctionOnCores(setWatchpointWithContextId, 0xF, 0);
|
||||
KRecursiveLock__Unlock(&dbgParamsLock);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
res = KernelSetState(type, varg1, varg2, varg3);
|
||||
|
||||
Reference in New Issue
Block a user